Forráskód Böngészése

周计划导入临时接口

Murphy 2 éve
szülő
commit
405c022a05

+ 7 - 0
MicroServices/Business/Business.Application.Contracts/ReplenishmentManagement/IReplenishmentAppService.cs

@@ -52,6 +52,13 @@ namespace Business.ReplenishmentManagement
         /// <returns></returns>
         Task<string> CalcWeekPlan(InputDto input);
 
+        /// <summary>
+        /// 根据月计划生产周计划
+        /// </summary>
+        /// <param name="companyId">工厂id</param>
+        /// <returns></returns>
+        Task<string> CalcTestWeekPlan(InputDto input);
+
         /// <summary>
         /// 根据月计划生产周计划
         /// </summary>

+ 155 - 0
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -3186,6 +3186,161 @@ namespace Business.Replenishment
             return "OK";
         }
 
+        /// <summary>
+        /// 根据月度计划生成周计划
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<string> CalcTestWeekPlan(InputDto input)
+        {
+            routingOps = _routingOpDetail.Select(p => p.Domain == input.factory_id.ToString()).ToList();
+            long bang_id = help.NextId();
+            var weekplans=_replenishmentWeekPlan.GetListAsync(a=>a.IsReplenishmentModel=="N" && string.IsNullOrEmpty(a.ProductionStatus)).Result;
+            var itemIds = weekplans.Select(a => a.ItemNumber).Distinct().ToList();
+            var items = _itemMaster.Select(a => itemIds.Contains(a.ItemNum));
+;            List<mes_morder> moList = new List<mes_morder>();
+            List<mes_moentry> moentryList = new List<mes_moentry>();
+            var morder_noList = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "M5", weekplans.Count, "", 1);
+            
+            foreach (var item in weekplans)
+            {
+                mes_morder mes_Morder = new mes_morder();
+                mes_Morder.GenerateNewId(help.NextId());
+                mes_Morder.morder_type = MorderEnum.JhMorder;
+                mes_Morder.work_order_type = MorderEnum.CgMorder;
+                mes_Morder.morder_state = "";
+                mes_Morder.morder_no = Guid.NewGuid().ToString();
+                mes_Morder.fms_number = "";
+                mes_Morder.bom_number =item.ItemNumber;
+                mes_Morder.fmodel = item.Model;
+                mes_Morder.moentry_startup_status = 0;
+                mes_Morder.tenant_id = input.tenant_id;
+                mes_Morder.factory_id = input.factory_id;
+                mes_Morder.company_id = input.company_id;
+                mes_Morder.org_id = input.org_id;
+                mes_Morder.product_code = item.ItemNumber;
+                mes_Morder.product_name = item.ItemNumber;
+                mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
+                mes_Morder.moentry_prd = null;
+                mes_Morder.moentry_prdname = null;
+                mes_Morder.moentry_wrkc = null;
+                mes_Morder.moentry_wrkcname = null;
+                mes_Morder.picking_qty = 0;
+                mes_Morder.unit = items.Find(a=>a.ItemNum==item.ItemNumber).UM;
+                mes_Morder.morder_production_number = item.Qty;
+                mes_Morder.need_number = item.Qty;
+                //成品半成品取周一为入库时间开始往前推
+                mes_Morder.moentry_sys_stime =item.PlanStartDate;
+                mes_Morder.moentry_sys_etime =item.InStockDate;
+                mes_Morder.remaining_number = 0;
+                mes_Morder.create_time = DateTime.Now;
+                mes_Morder.bang_id = bang_id;
+                //生成工单子表数据
+                mes_moentry mes_Moentry = new mes_moentry();
+                mes_Moentry.GenerateNewId(help.NextId());
+                mes_Moentry.moentry_moid = mes_Morder.Id;
+                mes_Moentry.moentry_mono = mes_Morder.morder_no;
+                mes_Moentry.unit = items.Find(a => a.ItemNum == item.ItemNumber).UM;
+                mes_Moentry.morder_production_number = item.Qty;
+                mes_Moentry.need_number = item.Qty;
+                mes_Moentry.remaining_number = 0;
+                mes_Moentry.tenant_id = input.tenant_id;
+                mes_Moentry.factory_id = input.factory_id;
+                mes_Moentry.company_id = input.company_id;
+                mes_Moentry.org_id = input.org_id;
+                mes_Moentry.create_time = DateTime.Now;
+                mes_Moentry.bang_id = bang_id;
+                moList.Add(mes_Morder);
+                moentryList.Add(mes_Moentry);
+            }
+            for (int i = 0; i < moList.Count; i++)
+            {
+                moList[i].morder_no = morder_noList[i].NbrResult;
+                moentryList[i].moentry_mono = morder_noList[i].NbrResult;
+                weekplans[i].ProductionOrder = morder_noList[i].NbrResult;
+            }
+            await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "", input);
+
+            var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
+            await _businessDbContext.BulkInsertAsync(moList);
+            await _businessDbContext.BulkInsertAsync(moentryList);
+
+            //批量保存 后期考虑子工单
+            List<WorkOrdMaster> workOrdSave = new List<WorkOrdMaster>();
+            List<WorkOrdRouting> workOrdRoutingSave = new List<WorkOrdRouting>();
+            List<WorkOrdDetail> workOrdDetails = new List<WorkOrdDetail>();
+            if (moList.Any())
+            {
+                moList.ForEach(s => { s.create_time = DateTime.Now; });
+                List<b_bom_child_examine> childExamineList = _mysql_bom_child_examine.GetListAsync(c => examine_resultList.Select(x => x.Id).Contains(c.examine_id.GetValueOrDefault())).Result;
+                //同步工单
+                CreateWorkOrdDates(moList, routingOps, workOrdSave, workOrdRoutingSave, workOrdDetails, examine_resultList, childExamineList);
+            }
+
+            if (workOrdSave.Any())
+            {
+                workOrdSave = CalcPriority(workOrdSave, input.factory_id.ToString());
+                _businessDbContext.BulkInsert(workOrdSave);
+            }
+            var DBworkOrdList = _workOrdMaster.Select(a => workOrdSave.Count > 0 && a.Domain == workOrdSave[0].Domain && workOrdSave.Select(c => c.WorkOrd).Contains(a.WorkOrd));
+            if (workOrdRoutingSave.Any())
+            {
+                workOrdRoutingSave.ForEach(c =>
+                {
+                    c.WorkOrdMasterRecID = DBworkOrdList.Where(a => a.WorkOrd == c.WorkOrd).First().RecID;
+                });
+                _businessDbContext.BulkInsert(workOrdRoutingSave);
+            }
+            if (workOrdDetails.Any())
+            {
+                workOrdDetails.ForEach(c =>
+                {
+                    c.WorkOrdMasterRecID = DBworkOrdList.Where(a => a.WorkOrd == c.WorkOrd).First().RecID;
+                });
+                _businessDbContext.BulkInsert(workOrdDetails);
+            }
+
+            weekplans.ForEach(a =>
+            {
+                if (a.IsReplenishmentModel == "N")
+                {
+                    var moItem = examine_resultList.Find(b => b.morder_no == a.ProductionOrder);
+                    List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == a.ItemNumber).ToList();
+                    //组装标准工时
+                    var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
+                    //热封标准工时
+                    var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
+                    //包装标准工时
+                    var Packaging = routingOp.Where(x => x.Descr == "包装" && x.MilestoneOp).FirstOrDefault();
+                    if (moItem != null && moItem.kitting_times < a.PlanStartDate)
+                    {
+                        a.ItemStatus = "齐套";
+                        a.PlanKittingDate = moItem.kitting_times;
+                        a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
+                        a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
+                        a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
+                        a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
+                    }
+                    else
+                    {
+                        a.ItemStatus = "欠料";
+                        a.PlanKittingDate = moItem.kitting_times;
+                        a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
+                        a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
+                        a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
+                        a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
+                    }
+                    var workOrd = workOrdSave.Find(b => b.WorkOrd == a.ProductionOrder);
+                    if (workOrd != null)
+                    {
+                        a.Priority = workOrd.Priority;
+                    }
+                }
+            });
+            await _businessDbContext.BulkUpdateAsync(weekplans);
+            return "OK";
+        }
+
         private DateTime GetNextMonday()
         {
             var preSunday = DateTime.Now.AddDays(0 - (int)DateTime.Now.DayOfWeek);//上周日

+ 11 - 2
MicroServices/Business/Business.HttpApi/Controllers/ReplenishmentController.cs

@@ -82,8 +82,17 @@ namespace Business.Controllers
         }
 
 
-
-
+        /// <summary>
+        /// 生产周计划测试
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("calctestweekplan")]
+        public Task<string> CalcTestWeekPlan(InputDto input)
+        {
+            return _ReplenishmentAppService.CalcTestWeekPlan(input);
+        }
 
         /// <summary>
         /// 计算工单优先级