Explorar o código

在库检和下达功能调整。

tangdi %!s(int64=2) %!d(string=hai) anos
pai
achega
afadfb1f9e

+ 105 - 76
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -3089,7 +3089,32 @@ namespace Business.ResourceExamineManagement
                     {
                     {
                         return "工单信息为"+ morders[0].morder_state + ",不允许下达。";
                         return "工单信息为"+ morders[0].morder_state + ",不允许下达。";
                     }
                     }
-                    var rst = await OrderResourceCheck(morders, domain, userAccount);
+                    try
+                    {
+                        //如果生成领料单,需清理掉当前工单的占用,然后根据领料单的数据,来生成工单的占用
+                        var pickRst = await CreatePickBill(morders[0].morder_no, domain, userAccount);
+                        if (pickRst != "ok")
+                        {
+                            new NLogHelper("ResourceExamineAppService").WriteLog("CreatePickBill", "生成领料单相关数据更新失败:" + pickRst, _currentTenant.Id.ToString());
+                            return pickRst;
+                        }
+                        morders[0].morder_state = MorderEnum.Xd_state;
+                        morders[0].MaterialSituation = morders[0].MaterialSituation == MorderEnum.NoCarehouseComplete ? MorderEnum.Part : morders[0].MaterialSituation;
+                        //await _mysql_mes_morder.UpdateManyAsync(morders);
+                        await _businessDbContext.BulkUpdateAsync(morders);
+                        //复制子工序
+                        var insertList = GetCopyOP(morders[0].morder_no, domain);
+                        if (insertList.Any())
+                        {
+                            _periodSequenceDet.Insert(insertList);
+                        }
+                        return "ok";
+                    }
+                    catch (Exception e)
+                    {
+                        return "下达失败,请联系管理员。";
+                    }
+                    /*var rst = await OrderResourceCheck(morders, domain, userAccount);
                     if (rst == "ok")
                     if (rst == "ok")
                     {
                     {
                         try
                         try
@@ -3121,7 +3146,7 @@ namespace Business.ResourceExamineManagement
                     else
                     else
                     {
                     {
                         return rst;
                         return rst;
-                    }
+                    }*/
                 }
                 }
                 else {
                 else {
                     return "工单信息不存在,请重新检查。";
                     return "工单信息不存在,请重新检查。";
@@ -3406,7 +3431,7 @@ namespace Business.ResourceExamineManagement
             var workOrds = _replenishmentAppService.CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
             var workOrds = _replenishmentAppService.CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
             //var recid = workOrds.Select(c => c.RecID).ToList();
             //var recid = workOrds.Select(c => c.RecID).ToList();
             //清理工单物料明细
             //清理工单物料明细
-            //var delWorkOrddetails = _workOrdDetail.Select(x => workOrds.Select(c => c.RecID).Contains((int)x.WorkOrdMasterRecID) && x.Domain == param.factoryId.ToString());
+            var delWorkOrddetails = _workOrdDetail.Select(x => workOrds.Select(c => c.RecID).Contains((int)x.WorkOrdMasterRecID) && x.Domain == param.factoryId.ToString());
             //var productStructureMs = _productStructureMaster.Select(x => workOrds.Select(c => c.WorkOrd).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
             //var productStructureMs = _productStructureMaster.Select(x => workOrds.Select(c => c.WorkOrd).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
             List<mes_morder> priorityMorderList = new List<mes_morder>();
             List<mes_morder> priorityMorderList = new List<mes_morder>();
             foreach (var work in workOrds)
             foreach (var work in workOrds)
@@ -3505,7 +3530,81 @@ namespace Business.ResourceExamineManagement
                 examines.Add(dtl);
                 examines.Add(dtl);
             }
             }
             rtn.examines = examines;
             rtn.examines = examines;
-            
+            List<WorkOrdDetail> mainWorkOrdDetails = new List<WorkOrdDetail>();
+            if (moentryList == null)
+            {
+                //暂时屏蔽重新生成工单物料明细
+                
+                //成品虚拟件对应关系
+                var productOpList = _productStructureOp.Select(x => priorityMorderList.Select(c => c.product_code).Contains(x.ProductItem) && x.Domain == param.factoryId.ToString());
+                foreach (var workord in priorityMorderList)
+                {
+                    long fid = GetParentMo(priorityMorderList, workord);
+                    var exm = examines.Find(s => s.morder_id == fid);
+                    if (exm != null)
+                    {
+                        var childs = exm.BomChildExamineList.Where(s => s.is_use == true).ToList();
+
+                        var child = childs.Find(s => s.item_number == workord.product_code);
+                        if (child == null)
+                        {
+                            continue;
+                        }
+                        List<BomChildExamineDto> returnList = new List<BomChildExamineDto>();
+                        var productOps = productOpList.Where(x => x.ProductItem == workord.product_code).ToList();
+                        GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs, productOps);
+                        if (returnList.Any())
+                        {
+                            WorkOrdDetail woDetail = null;
+                            var calereturnList = returnList.OrderBy(c => c.item_number).Select(x => x.item_number).Distinct().ToList();
+                            var work = workOrds.Find(x => x.WorkOrd == workord.morder_no);
+                            if (work == null)
+                            {
+                                continue;
+                            }
+                            short num = 1;
+                            foreach (var caleNumber in calereturnList)
+                            {
+                                var caleList = returnList.Where(x => x.item_number == caleNumber).ToList();
+
+                                //添加工单的物料信息
+                                woDetail = new WorkOrdDetail();
+                                woDetail.Domain = workord.factory_id.ToString();
+                                woDetail.WorkOrd = workord.morder_no;
+                                var oplist = caleList.Where(x => x.Op > 0).ToList();
+                                woDetail.Op = 0;
+                                if (oplist.Any())
+                                {
+                                    woDetail.Op = oplist.Min(f => f.Op);
+                                }
+                                woDetail.ItemNum = caleNumber;
+                                woDetail.QtyPosted = 0m;
+                                woDetail.QtyReturned = 0m;
+                                woDetail.Status = "";
+                                woDetail.IsActive = true;
+                                woDetail.CreateTime = DateTime.Now;
+                                woDetail.Line = num;
+                                woDetail.QtyRequired = caleList.Sum(c => c.needCount);
+                                woDetail.WorkOrdMasterRecID = work.RecID;
+                                if (workord.need_number != 0)
+                                {
+                                    woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workord.need_number.GetValueOrDefault(), 10);
+                                }
+                                mainWorkOrdDetails.Add(woDetail);
+                                num++;
+                            }
+                        }
+                    }
+                }
+                if (delWorkOrddetails.Any())
+                {
+                    _businessDbContext.BulkDelete(delWorkOrddetails);
+                }
+                if (mainWorkOrdDetails.Any())
+                {
+                    _businessDbContext.BulkInsert(mainWorkOrdDetails);
+                }
+            }
 
 
             if (planCheck)
             if (planCheck)
             {
             {
@@ -3583,70 +3682,7 @@ namespace Business.ResourceExamineManagement
                     }
                     }
                 }*/
                 }*/
 
 
-                //暂时屏蔽重新生成工单物料明细
-                /*List<WorkOrdDetail> mainWorkOrdDetails = new List<WorkOrdDetail>();
-                //成品虚拟件对应关系
-                var productOpList = _productStructureOp.Select(x => priorityMorderList.Select(c => c.product_code).Contains(x.ProductItem) && x.Domain == param.factoryId.ToString());
-                foreach (var workord in priorityMorderList)
-                {
-                    long fid = GetParentMo(priorityMorderList, workord);
-                    var exm = examines.Find(s => s.morder_id == fid);
-                    //var exm = examines.Find(s => s.morder_no == workord.morder_no);
-                    if (exm != null)
-                    {
-                        var childs = exm.BomChildExamineList.Where(s => s.is_use == true).ToList();
-
-                        var child = childs.Find(s => s.item_number == workord.product_code);
-                        if (child == null)
-                        {
-                            continue;
-                        }
-                        List<BomChildExamineDto> returnList = new List<BomChildExamineDto>();
-                        var productOps = productOpList.Where(x => x.ProductItem == workord.product_code).ToList();
-                        GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs, productOps);
-                        if (returnList.Any())
-                        {
-                            WorkOrdDetail woDetail = null;
-                            var calereturnList = returnList.OrderBy(c => c.item_number).Select(x => x.item_number).Distinct().ToList();
-                            var work = workOrds.Find(x => x.WorkOrd == workord.morder_no);
-                            if (work == null)
-                            {
-                                continue;
-                            }
-                            short num = 1;
-                            foreach (var caleNumber in calereturnList)
-                            {
-                                var caleList = returnList.Where(x => x.item_number == caleNumber).ToList();
-
-                                //添加工单的物料信息
-                                woDetail = new WorkOrdDetail();
-                                woDetail.Domain = workord.factory_id.ToString();
-                                woDetail.WorkOrd = workord.morder_no;
-                                var oplist = caleList.Where(x => x.Op > 0).ToList();
-                                woDetail.Op = 0;
-                                if (oplist.Any())
-                                {
-                                    woDetail.Op = oplist.Min(f => f.Op);
-                                }
-                                woDetail.ItemNum = caleNumber;
-                                woDetail.QtyPosted = 0m;
-                                woDetail.QtyReturned = 0m;
-                                woDetail.Status = "";
-                                woDetail.IsActive = true;
-                                woDetail.CreateTime = DateTime.Now;
-                                woDetail.Line = num;
-                                woDetail.QtyRequired = caleList.Sum(c => c.needCount);
-                                woDetail.WorkOrdMasterRecID = work.RecID;
-                                if (workord.need_number != 0)
-                                {
-                                    woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workord.need_number.GetValueOrDefault(), 10);
-                                }
-                                mainWorkOrdDetails.Add(woDetail);
-                                num++;
-                            }
-                        }
-                    }
-                }*/
+                
                 //获取工单数据
                 //获取工单数据
                 /*var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c => c.morder_no).Contains(p.WorkOrd) && p.Domain == param.factoryId.ToString());
                 /*var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c => c.morder_no).Contains(p.WorkOrd) && p.Domain == param.factoryId.ToString());
                 workOrdMasters.ForEach(s => {
                 workOrdMasters.ForEach(s => {
@@ -3684,14 +3720,7 @@ namespace Business.ResourceExamineManagement
                             srmpooccupyInsert.ForEach(x => { x.GenerateNewId(help.NextId()); });
                             srmpooccupyInsert.ForEach(x => { x.GenerateNewId(help.NextId()); });
                             _businessDbContext.BulkInsert(srmpooccupyInsert);
                             _businessDbContext.BulkInsert(srmpooccupyInsert);
                         }
                         }
-                        /*if (delWorkOrddetails.Any())
-                        {
-                            _businessDbContext.BulkDelete(delWorkOrddetails);
-                        }
-                        if (mainWorkOrdDetails.Any())
-                        {
-                            _businessDbContext.BulkInsert(mainWorkOrdDetails);
-                        }*/
+                        
                         await unitOfWork.CompleteAsync();
                         await unitOfWork.CompleteAsync();
                     }
                     }
                     catch (Exception e)
                     catch (Exception e)