|
|
@@ -0,0 +1,125 @@
|
|
|
+using Business.Business.Dto;
|
|
|
+using Bussiness.Model.MES.IC;
|
|
|
+using Bussiness.Model.Production;
|
|
|
+using Bussiness.Model.SRM;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using Volo.Abp.Application.Services;
|
|
|
+using Volo.Abp.Domain.Repositories;
|
|
|
+using Volo.Abp.Validation.Localization;
|
|
|
+
|
|
|
+namespace Business.Quartz
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// 生产排产服务
|
|
|
+ /// </summary>
|
|
|
+ public class ProductionScheduleAppService : ApplicationService
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// 物料
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<ItemMaster, long> _itemMaster;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<WorkOrdMaster, long> _workOrdMaster;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单物料明细
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<WorkOrdDetail, long> _workOrdDetail;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单工艺路线明细
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<WorkOrdRouting, long> _workOrdRouting;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 库存主数据
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<InvMaster, long> _invMaster;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 生产线明细
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<ProdLineDetail, long> _prodLineDetail;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 生产周期明细
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<PeriodSequenceDet, long> _periodSequenceDet;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 排产结果明细
|
|
|
+ /// </summary>
|
|
|
+ private IRepository<ScheduleResultOpMaster, long> _scheduleResultOpMaster;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 构造函数
|
|
|
+ /// </summary>
|
|
|
+ public ProductionScheduleAppService(
|
|
|
+ IRepository<ItemMaster, long> itemMaster,
|
|
|
+ IRepository<WorkOrdMaster, long> workOrdMaster,
|
|
|
+ IRepository<WorkOrdDetail, long> workOrdDetail,
|
|
|
+ IRepository<WorkOrdRouting, long> workOrdRouting,
|
|
|
+ IRepository<ProdLineDetail, long> prodLineDetail,
|
|
|
+ IRepository<PeriodSequenceDet, long> periodSequenceDet,
|
|
|
+ IRepository<ScheduleResultOpMaster, long> scheduleResultOpMaster,
|
|
|
+ IRepository<InvMaster, long> invMaster
|
|
|
+ )
|
|
|
+ {
|
|
|
+ _itemMaster= itemMaster;
|
|
|
+ _workOrdMaster= workOrdMaster;
|
|
|
+ _workOrdDetail= workOrdDetail;
|
|
|
+ _workOrdRouting= workOrdRouting;
|
|
|
+ _prodLineDetail = prodLineDetail;
|
|
|
+ _periodSequenceDet = periodSequenceDet;
|
|
|
+ _scheduleResultOpMaster= scheduleResultOpMaster;
|
|
|
+ _invMaster= invMaster;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 执行生产排产
|
|
|
+ /// </summary>
|
|
|
+ public async void DoExt()
|
|
|
+ {
|
|
|
+ await DoProductShcedule();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 生产排产
|
|
|
+ /// </summary>
|
|
|
+ public async Task DoProductShcedule()
|
|
|
+ {
|
|
|
+ //1、获取需要排产的工单:Status为空且IsActive==1
|
|
|
+ List<WorkOrdMaster> workOrds = _workOrdMaster.GetListAsync(p => string.IsNullOrEmpty(p.Status) && p.IsActive ==1).Result;
|
|
|
+ if (workOrds.Count == 0)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //2、获取数据
|
|
|
+ //获取工单工艺路径数据
|
|
|
+ List<WorkOrdRouting> workOrdRoutings = _workOrdRouting.GetListAsync(p => workOrds.Select(m=>m.WorkOrd).Contains(p.WorkOrd) && p.Domain == "1001" && p.Status != "C" && p.IsActive == 1).Result;
|
|
|
+ //获取物料对应的生产线信息:物料、工序对应的生产线
|
|
|
+ List<ProdLineDetail> prodLineDetails = _prodLineDetail.GetListAsync(p => workOrds.Select(m => m.ItemNum).Contains(p.Part) && p.Domain == "1001" && p.Status != "C" && p.IsActive == 1).Result;
|
|
|
+ //获取当前日期往后的排产记录数据
|
|
|
+ List<ScheduleResultOpMaster> schedules = _scheduleResultOpMaster.GetListAsync(p=>workOrds.Select(m=>m.ItemNum).Contains(p.ItemNum) && p.Domain == "1001").Result;
|
|
|
+
|
|
|
+ //3、排产
|
|
|
+ //排产结果(记录所有工序的排产情况)
|
|
|
+ List<ScheduleResultOpMaster> scheduleResults = new List<ScheduleResultOpMaster>();
|
|
|
+ //生产周期(记录最后一个工序的排产情况)
|
|
|
+ List<PeriodSequenceDet> periodsDet = new List<PeriodSequenceDet>();
|
|
|
+ foreach (var item in workOrds)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|