Explorar el Código

更新周工单的建议开工时间

Murphy hace 2 años
padre
commit
9839eeeec1

+ 64 - 4
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -1525,10 +1525,25 @@ namespace Business.Replenishment
             _workOrdRouting.Delete(a => workOrderDelete.Contains(a.WorkOrd) && a.Domain == input.factory_id.ToString());
             _workOrdDetail.Delete(a => workOrderDelete.Contains(a.WorkOrd) && a.Domain == input.factory_id.ToString());
             var deletedOrderList=_mysql_mes_morder.GetListAsync(a=>workOrderDelete.Contains(a.morder_no) && a.factory_id == input.factory_id).Result;
+            var deletedIds = deletedOrderList.Select(a => a.Id).ToList();
             await _mysql_mes_morder.DeleteManyAsync(deletedOrderList);
             var deletedEntryList= _mysql_mes_moentry.GetListAsync(a => workOrderDelete.Contains(a.moentry_mono) && a.factory_id == input.factory_id).Result;
             await _mysql_mes_moentry.DeleteManyAsync(deletedEntryList);
             var examine_result = _mysql_examine_result.GetListAsync(a => workOrderDelete.Contains(a.morder_no) && a.factory_id == input.factory_id).Result;
+            List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => workOrderDelete.Contains(s.morder_mo));
+            _businessDbContext.BulkDelete(occupy);
+            //清理工单占用
+            List<mes_mooccupy> mooccupy = await _mysql_mes_mooccupy.GetListAsync(s => deletedIds.Contains(s.moo_id.GetValueOrDefault()));
+            if (mooccupy.Any())
+            {
+                _businessDbContext.BulkDelete(mooccupy);
+            }
+            //清理掉库存占用
+            var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => workOrderDelete.Contains(s.morder_mo)).Result;
+            if (itemstockoccupy.Any())
+            {
+                _businessDbContext.BulkDelete(itemstockoccupy);
+            }
             await _mysql_bom_child_examine.DeleteAsync(a => examine_result.Select(b => b.Id).ToList().Contains(a.examine_id.Value) && a.factory_id == input.factory_id);
             await _mysql_examine_result.DeleteManyAsync(examine_result);
             await _replenishmentWeekPlan.HardDeleteAsync(weekPlanDelete);
@@ -1549,6 +1564,23 @@ namespace Business.Replenishment
             List<ReplenishmentWeekPlan> weekPlan = new List<ReplenishmentWeekPlan>();
             long bang_id = help.NextId();
 
+            //获取BOM用于分解到原材料
+            var boms = _ic_bom.GetListAsync(a => planItemList.Contains(a.item_number) && a.factory_id == input.factory_id).Result;
+            var pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
+            List<mo_ic_bom> autoCreates = new List<mo_ic_bom>();
+            boms.ForEach(p =>
+            {
+                if (!pretreatments.Where(s => s.sourceid == p.mysql_id).Any())
+                {
+                    autoCreates.Add(p);
+                }
+            });
+            if (autoCreates.Any())
+            {
+                AutoCreateBomBill(input.company_id.ToString(), autoCreates);
+                pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
+            }
+
             List<string> weeks = new List<string>();
             for (int k = 0; k < replenishmentDto.SaleFcstMonth; k++)
             {
@@ -1624,6 +1656,8 @@ namespace Business.Replenishment
                 kTime = kTime.AddDays(1 - kTime.Day);//某月第一天
                 var monthWeekPlan = planList.Where(a => a.planmonth == kMonth).ToList();
                 var ropList = planList.Select(t => t.number).Distinct().ToList();
+                //中间件汇总,比如A成品10、11、12月都需要中间件C,B成品11、12月都需要中间件C,那么中间件C需要每个月汇总平均分到4周
+                Dictionary<string, decimal?> subProductItem = new Dictionary<string, decimal?>();
                 foreach (var itemSeq in ropList)
                 {
                     if(shipPlanList.Select(s=>s.SAPItemNumber).ToList().Contains(itemSeq))
@@ -1750,6 +1784,28 @@ namespace Business.Replenishment
                                 moentryList.Add(mes_Moentry);
                             }
                         }
+
+                        var planBOM = boms.Find(b => b.item_number == itemSeq);
+                        var pretreament = pretreatments.Where(c => c.sourceid == planBOM.mysql_id).ToList();
+                        var returnlist = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(pretreament);
+                        returnlist = returnlist.OrderBy(s => s.num_order).ToList();
+                        var level1Dto = returnlist[0];
+                        level1Dto.needCount = itemQty.GetValueOrDefault();
+                        CaclMaterialShortage(returnlist);
+                        foreach (var r in returnlist)
+                        {
+                            if(r.item_number!=itemSeq && r.erp_cls==1)
+                            {
+                                if (subProductItem.ContainsKey(r.item_number))
+                                {
+                                    subProductItem[r.item_number] += r.needCount;
+                                }
+                                else
+                                {
+                                    subProductItem.Add(r.item_number, r.needCount);
+                                }
+                            }
+                        }
                     }
                 }
             }
@@ -1763,13 +1819,16 @@ namespace Business.Replenishment
                 weekPlan[i].OrderNO = OrderNOList[i].NbrResult;
             }
             
-            await _mysql_mes_morder.InsertManyAsync(moList);
-            await _mysql_mes_moentry.InsertManyAsync(moentryList);
-
             await PlanOrderResourceCheck(moList, moentryList, bang_id, input);
 
-
             var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
+            moList.ForEach(mo =>
+            {
+                var moItem = examine_resultList.Find(b => b.morder_no == mo.morder_no);
+                mo.moentry_sys_stime = moItem.kitting_times;
+            });
+            await _mysql_mes_morder.InsertManyAsync(moList);
+            await _mysql_mes_moentry.InsertManyAsync(moentryList);
 
             //批量保存 后期考虑子工单
             List<WorkOrdMaster> workOrdSave = new List<WorkOrdMaster>();
@@ -2326,6 +2385,7 @@ namespace Business.Replenishment
             var productStructureMs = _productStructureMaster.Select(x => morders.Select(c => c.morder_no).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
             foreach (var item in morders)
             {
+                var moItem = exmResult.Find(b => b.morder_no ==item.morder_no);
                 //添加工单数据
                 workOrd = new WorkOrdMaster();
                 workOrd.Domain = item.factory_id.ToString();