瀏覽代碼

周计划取整

Murphy 2 年之前
父節點
當前提交
d456ef586e

+ 58 - 70
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -422,7 +422,7 @@ namespace Business.Replenishment
             //标准工艺路径表
             //标准工艺路径表
             var sapItemList = yearDemands.Select(m => m.SAPItemNumber).Distinct().ToList();
             var sapItemList = yearDemands.Select(m => m.SAPItemNumber).Distinct().ToList();
             List<RoutingOpDetail> routingOps = _routingOpDetail.Select(p => sapItemList.Contains(p.RoutingCode) && p.Domain == input.factory_id.ToString() && p.IsActive);
             List<RoutingOpDetail> routingOps = _routingOpDetail.Select(p => sapItemList.Contains(p.RoutingCode) && p.Domain == input.factory_id.ToString() && p.IsActive);
-            var routingOpList = routingOps.Where(x => x.Descr == "去溢料").ToList();
+            var routingOpList = routingOps.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).ToList();
             //生产线明细表
             //生产线明细表
             List<ProdLineDetail> prodLines = _prodLineDetail.Select(p => sapItemList.Contains(p.Part) && p.Domain == input.factory_id.ToString() && p.IsActive && routingOpList.Select(m => m.Op).Contains(p.Op)).OrderBy(x => x.Sequence).ToList();
             List<ProdLineDetail> prodLines = _prodLineDetail.Select(p => sapItemList.Contains(p.Part) && p.Domain == input.factory_id.ToString() && p.IsActive && routingOpList.Select(m => m.Op).Contains(p.Op)).OrderBy(x => x.Sequence).ToList();
             List<LocationDetail> locations = _locationDetail.Select(x => sapItemList.Contains(x.ItemNum) && x.Domain == input.factory_id.ToString() && x.IsActive).ToList();
             List<LocationDetail> locations = _locationDetail.Select(x => sapItemList.Contains(x.ItemNum) && x.Domain == input.factory_id.ToString() && x.IsActive).ToList();
@@ -471,11 +471,11 @@ namespace Business.Replenishment
             {
             {
                 var routingOp = routingOps.Where(x => x.RoutingCode == item.SAPItemNumber).ToList();
                 var routingOp = routingOps.Where(x => x.RoutingCode == item.SAPItemNumber).ToList();
                 //组装标准工时
                 //组装标准工时
-                var Assembly = routingOp.Where(x => x.Descr == "组装").FirstOrDefault();
+                var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
                 //热封标准工时
                 //热封标准工时
-                var HeatSealing = routingOp.Where(x => x.Descr == "热封").FirstOrDefault();
+                var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
                 //包装标准工时
                 //包装标准工时
-                var Packaging = routingOp.Where(x => x.Descr == "包装").FirstOrDefault();
+                var Packaging = routingOp.Where(x => x.Ufld1 == "包装" && x.MilestoneOp).FirstOrDefault();
                 var prodLine = prodLines.Where(x => x.Part == item.SAPItemNumber).OrderBy(x => x.Sequence).FirstOrDefault();
                 var prodLine = prodLines.Where(x => x.Part == item.SAPItemNumber).OrderBy(x => x.Sequence).FirstOrDefault();
                 //不同库位库存数量
                 //不同库位库存数量
                 var locationList = locations.Where(x => x.ItemNum == item.SAPItemNumber).ToList();
                 var locationList = locations.Where(x => x.ItemNum == item.SAPItemNumber).ToList();
@@ -1043,7 +1043,7 @@ namespace Business.Replenishment
                         mes_Morder.GenerateNewId(help.NextId());
                         mes_Morder.GenerateNewId(help.NextId());
                         mes_Morder.morder_type = MorderEnum.JhMorder;
                         mes_Morder.morder_type = MorderEnum.JhMorder;
                         //mes_Morder.morder_icitem_type
                         //mes_Morder.morder_icitem_type
-                        mes_Morder.work_order_type = MorderEnum.FhMorder;
+                        mes_Morder.work_order_type = MorderEnum.CgMorder;
                         mes_Morder.morder_state = MorderEnum.Initial_state;
                         mes_Morder.morder_state = MorderEnum.Initial_state;
                         mes_Morder.morder_no = list[j].NbrResult;
                         mes_Morder.morder_no = list[j].NbrResult;
                         mes_Morder.fms_number = ic_item.fms_number;
                         mes_Morder.fms_number = ic_item.fms_number;
@@ -1070,8 +1070,8 @@ namespace Business.Replenishment
                         mes_Morder.picking_qty = 0;
                         mes_Morder.picking_qty = 0;
                         //TODO:可删除主表字段
                         //TODO:可删除主表字段
                         mes_Morder.unit = ic_item.unit;
                         mes_Morder.unit = ic_item.unit;
-                        mes_Morder.morder_production_number = itemrop.eop/4;
-                        mes_Morder.need_number = itemrop.eop/4;
+                        mes_Morder.morder_production_number =Math.Ceiling(itemrop.eop.GetValueOrDefault()/4);
+                        mes_Morder.need_number = Math.Ceiling(itemrop.eop.GetValueOrDefault() / 4);
                         mes_Morder.remaining_number = 0;
                         mes_Morder.remaining_number = 0;
                         mes_Morder.create_time = DateTime.Now;
                         mes_Morder.create_time = DateTime.Now;
                         mes_Morder.bang_id = bang_id;
                         mes_Morder.bang_id = bang_id;
@@ -1081,8 +1081,8 @@ namespace Business.Replenishment
                         mes_Moentry.moentry_moid = mes_Morder.Id;
                         mes_Moentry.moentry_moid = mes_Morder.Id;
                         mes_Moentry.moentry_mono = mes_Morder.morder_no;
                         mes_Moentry.moentry_mono = mes_Morder.morder_no;
                         mes_Moentry.unit = ic_item.unit;
                         mes_Moentry.unit = ic_item.unit;
-                        mes_Moentry.morder_production_number = itemrop.eop/4;
-                        mes_Moentry.need_number = itemrop.eop/4;
+                        mes_Moentry.morder_production_number = Math.Ceiling(itemrop.eop.GetValueOrDefault() / 4);
+                        mes_Moentry.need_number = Math.Ceiling(itemrop.eop.GetValueOrDefault() / 4);
                         mes_Moentry.remaining_number = 0;
                         mes_Moentry.remaining_number = 0;
                         mes_Moentry.tenant_id = input.tenant_id;
                         mes_Moentry.tenant_id = input.tenant_id;
                         mes_Moentry.factory_id = input.factory_id;
                         mes_Moentry.factory_id = input.factory_id;
@@ -1182,13 +1182,13 @@ namespace Business.Replenishment
             weekPlan.ForEach(a =>
             weekPlan.ForEach(a =>
             {
             {
                 var moItem = examine_resultList.Find(b => b.morder_no == a.OrderNO);
                 var moItem = examine_resultList.Find(b => b.morder_no == a.OrderNO);
-                var routingOp = routingOps.Where(x => x.RoutingCode == a.ItemNumber).ToList();
+                List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == a.ItemNumber ).ToList();
                 //组装标准工时
                 //组装标准工时
-                var Assembly = routingOp.Where(x => x.Descr == "组装").FirstOrDefault();
+                var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
                 //热封标准工时
                 //热封标准工时
-                var HeatSealing = routingOp.Where(x => x.Descr == "热封").FirstOrDefault();
+                var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
                 //包装标准工时
                 //包装标准工时
-                var Packaging = routingOp.Where(x => x.Descr == "包装").FirstOrDefault();
+                var Packaging = routingOp.Where(x => x.Descr == "包装" && x.MilestoneOp).FirstOrDefault();
                 if (moItem!=null && moItem.kitting_times<a.PlanStartDate)
                 if (moItem!=null && moItem.kitting_times<a.PlanStartDate)
                 {
                 {
                     a.ItemStatus = "齐套";
                     a.ItemStatus = "齐套";
@@ -1286,7 +1286,7 @@ namespace Business.Replenishment
                     mes_Morder.GenerateNewId(help.NextId());
                     mes_Morder.GenerateNewId(help.NextId());
                     mes_Morder.morder_type = MorderEnum.JhMorder;
                     mes_Morder.morder_type = MorderEnum.JhMorder;
                     //mes_Morder.morder_icitem_type
                     //mes_Morder.morder_icitem_type
-                    mes_Morder.work_order_type = MorderEnum.FhMorder;
+                    mes_Morder.work_order_type = MorderEnum.CgMorder;
                     mes_Morder.morder_state = MorderEnum.Initial_state;
                     mes_Morder.morder_state = MorderEnum.Initial_state;
                     mes_Morder.morder_no = list[j].NbrResult;
                     mes_Morder.morder_no = list[j].NbrResult;
                     mes_Morder.fms_number =b.number;
                     mes_Morder.fms_number =b.number;
@@ -1562,7 +1562,7 @@ namespace Business.Replenishment
                     mes_Morder.GenerateNewId(help.NextId());
                     mes_Morder.GenerateNewId(help.NextId());
                     mes_Morder.morder_type = MorderEnum.JhMorder;
                     mes_Morder.morder_type = MorderEnum.JhMorder;
                     //mes_Morder.morder_icitem_type
                     //mes_Morder.morder_icitem_type
-                    mes_Morder.work_order_type = MorderEnum.FhMorder;
+                    mes_Morder.work_order_type = MorderEnum.CgMorder;
                     mes_Morder.morder_state = MorderEnum.Initial_state;
                     mes_Morder.morder_state = MorderEnum.Initial_state;
                     mes_Morder.morder_no = list[j].NbrResult;
                     mes_Morder.morder_no = list[j].NbrResult;
                     mes_Morder.fms_number = b.number;
                     mes_Morder.fms_number = b.number;
@@ -2165,58 +2165,46 @@ namespace Business.Replenishment
         /// <returns></returns>
         /// <returns></returns>
         public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid, InputDto input)
         public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid, InputDto input)
         {
         {
-            //先排除锁定期内的工单 //优先级排序
-            var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == input.factory_id.ToString()).ToList();
-            decimal lookDay = 0;
-            if (sysSet.Any())
-            {
-                //锁定期
-                lookDay = sysSet[0].UDeci1;
-            }
-            lookDay = lookDay == 0 ? 7 : lookDay;
-            DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);
-            Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime || s.moentry_sys_stime == null).OrderBy(s => s.moentry_sys_stime).ToList();
-
             if (Mes_Morders.Any())
             if (Mes_Morders.Any())
             {
             {
-                Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
+                //Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
                 List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
                 List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
                 //清理PR的占用。
                 //清理PR的占用。
                 //如果PR没有转PO,则PR没有合并,就删除,有合并,就减少合并后的PR的数量。
                 //如果PR没有转PO,则PR没有合并,就删除,有合并,就减少合并后的PR的数量。
-                var prlist = _mysql_srm_pr_main.GetListAsync(s => monolist.Contains(s.pr_mono)).Result;
-                List<srm_pr_main> alllist = new List<srm_pr_main>();
-                List<srm_pr_main> updatelist = new List<srm_pr_main>();
-                List<srm_pr_main> dellist = new List<srm_pr_main>();
-                RecursionGetDbPr2(prlist, alllist);
-                foreach (var pr in prlist)
-                {
-                    //找到没有关闭的PR,如果关联上的PR都是已关闭,则说明已经转了PO。
-                    //TODO:解决Database operation expected to affect 1 row(s) but actually affected 0 row(s). 如果业务逻辑有问题自行修改
-                    var getPr = RerunPr(pr, alllist);
-                    if (getPr != null)
-                    {
-                        if (getPr.pr_aqty - pr.pr_aqty <= 0)
-                        {
-                            //删除这个pr,没有小于0则是更新
-                            dellist.Add(getPr);
-                        }
-                        else
-                        {
-                            getPr.pr_aqty = getPr.pr_aqty - pr.pr_aqty;
-                            updatelist.Add(getPr);
-                        }
-                    }
-                }
+                //var prlist = _mysql_srm_pr_main.GetListAsync(s => monolist.Contains(s.pr_mono)).Result;
+                //List<srm_pr_main> alllist = new List<srm_pr_main>();
+                //List<srm_pr_main> updatelist = new List<srm_pr_main>();
+                //List<srm_pr_main> dellist = new List<srm_pr_main>();
+                //RecursionGetDbPr2(prlist, alllist);
+                //foreach (var pr in prlist)
+                //{
+                //    //找到没有关闭的PR,如果关联上的PR都是已关闭,则说明已经转了PO。
+                //    //TODO:解决Database operation expected to affect 1 row(s) but actually affected 0 row(s). 如果业务逻辑有问题自行修改
+                //    var getPr = RerunPr(pr, alllist);
+                //    if (getPr != null)
+                //    {
+                //        if (getPr.pr_aqty - pr.pr_aqty <= 0)
+                //        {
+                //            //删除这个pr,没有小于0则是更新
+                //            dellist.Add(getPr);
+                //        }
+                //        else
+                //        {
+                //            getPr.pr_aqty = getPr.pr_aqty - pr.pr_aqty;
+                //            updatelist.Add(getPr);
+                //        }
+                //    }
+                //}
                 List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
                 List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
                 _businessDbContext.BulkDelete(occupy);
                 _businessDbContext.BulkDelete(occupy);
-                if (updatelist.Any())
-                {
-                    _businessDbContext.BulkUpdate(updatelist);
-                }
-                if (dellist.Any())
-                {
-                    _businessDbContext.BulkDelete(dellist);
-                }
+                //if (updatelist.Any())
+                //{
+                //    _businessDbContext.BulkUpdate(updatelist);
+                //}
+                //if (dellist.Any())
+                //{
+                //    _businessDbContext.BulkDelete(dellist);
+                //}
                 //清理掉库存占用
                 //清理掉库存占用
                 var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => monolist.Contains(s.morder_mo)).Result;
                 var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => monolist.Contains(s.morder_mo)).Result;
                 if (itemstockoccupy.Any())
                 if (itemstockoccupy.Any())
@@ -2224,16 +2212,16 @@ namespace Business.Replenishment
                     _businessDbContext.BulkDelete(itemstockoccupy);
                     _businessDbContext.BulkDelete(itemstockoccupy);
                 }
                 }
                 //清理锁定期外的排程数据.
                 //清理锁定期外的排程数据.
-                var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
-                if (periodList.Any())
-                {
-                    _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
-                }
-                var schedulList = _scheduleResultOpMaster.Select(s => monolist.Contains(s.WorkOrd));
-                if (schedulList.Any())
-                {
-                    _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
-                }
+                //var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
+                //if (periodList.Any())
+                //{
+                //    _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
+                //}
+                //var schedulList = _scheduleResultOpMaster.Select(s => monolist.Contains(s.WorkOrd));
+                //if (schedulList.Any())
+                //{
+                //    _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
+                //}
                 //只走计划工单
                 //只走计划工单
                 var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid, true);
                 var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid, true);
             }
             }

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/Production/RoutingOpDetail.cs

@@ -38,6 +38,12 @@ namespace Business.Domain
         [Comment("描述")]
         [Comment("描述")]
         public string Descr { get; set; }
         public string Descr { get; set; }
 
 
+        /// <summary>
+        /// 用于判断是组装热风包装
+        /// </summary>
+        [Comment("用于判断是组装热风包装")]
+        public string? Ufld1 { get; set; }
+
         /// <summary>
         /// <summary>
         /// 关键工序
         /// 关键工序
         /// </summary>
         /// </summary>

+ 16 - 0
MicroServices/Business/QuartzSettings/logs/logs.txt

@@ -685,3 +685,19 @@
 {"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:26:15.5314659+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:26:15.5314659+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:26:15.5377025+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:26:15.5377025+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:26:15.5402249+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:26:15.5402249+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:35:24.9121686+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:35:24.9803167+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:35:24.9857159+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-20T15:35:24.9881915+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:06:18.6152241+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:06:18.6826902+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:06:18.6883286+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:06:18.6909212+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:45:02.4557585+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:45:02.5187595+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:45:02.5236101+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-20T17:45:02.5254+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-20T18:24:06.7183562+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-20T18:24:06.759992+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-20T18:24:06.7624698+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-20T18:24:06.7642615+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}