ソースを参照

下达领料增加状态处理和事务。

tangdi 2 年 前
コミット
e76b504fcb

+ 45 - 18
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -2531,12 +2531,8 @@ namespace Business.ResourceExamineManagement
             AutoCreateBomBill();
         }
 
-        public async Task AutoCreatePickBill(List<string> workOrds)
+        public async Task AutoCreatePickBill(List<string> workOrds, List<PeriodSequenceDet> dbPeriodSequences, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList)
         {
-            //获取生产周期数据
-            List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds) && p.Domain == "1001" && p.IsActive);
-            List<NbrMaster> nbrMasterList = new List<NbrMaster>();//需要生成领料单列表
-            List<NbrDetail> nbrDetailList = new List<NbrDetail>();//需要生成领料单明细列表
             if (dbPeriodSequences.Any())
             {
                 //按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
@@ -2661,15 +2657,6 @@ namespace Business.ResourceExamineManagement
                     });
                     _locationDetail.Update(locStock);
                 }
-                _nbrMaster.Insert(nbrMasterList);
-                //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
-                List<string> nbrs = nbrMasterList.Select(a => a.Nbr).ToList();
-                var nbrList = _nbrMaster.Select(a => a.Domain == "1001" && a.Type == "SM" && nbrs.Contains(a.Nbr));
-                nbrDetailList.ForEach(c =>
-                {
-                    c.NbrRecID = nbrList.Where(a => a.Nbr == c.Nbr).First().RecID;
-                });
-                _nbrDetail.Insert(nbrDetailList);
             }
         }
 
@@ -2844,7 +2831,9 @@ namespace Business.ResourceExamineManagement
                 return "没有需要下达的工单。";
             }
             //获取已排产的工单
-            List<string> dbWorkOrds = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds)).Select(p => p.WorkOrds).Distinct().ToList();
+            List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds) && p.Domain == "1001" && p.IsActive);
+            List<string> dbWorkOrds = dbPeriodSequences.Select(p => p.WorkOrds).Distinct().ToList();
+
             //查出已排产的工单
             workOrdMasters = workOrdMasters.Where(p => dbWorkOrds.Contains(p.WorkOrd)).ToList();
             //查出已产生领料单、过滤掉,取出未领料的工单
@@ -2855,9 +2844,46 @@ namespace Business.ResourceExamineManagement
             {
                 return "当前选择的工单已领料或未排产。";
             }
-            await AutoCreatePickBill(workOrdMasters.Select(p => p.WorkOrd).ToList());
-            workOrdMasters.ForEach(p => { p.Status = "r"; });
-             _workOrdMaster.Update(workOrdMasters);
+            List<NbrMaster> nbrMasterList = new List<NbrMaster>();//需要生成领料单列表
+            List<NbrDetail> nbrDetailList = new List<NbrDetail>();//需要生成领料单明细列表
+
+            var ords = workOrdMasters.Select(p => p.WorkOrd).ToList();
+
+            dbPeriodSequences = dbPeriodSequences.Where(p => ords.Contains(p.WorkOrds)).ToList();
+            await AutoCreatePickBill(ords, dbPeriodSequences, nbrMasterList, nbrDetailList);
+            if (nbrMasterList.Any())
+            {
+                dbPeriodSequences.ForEach(p => { p.Status = "r"; });
+                workOrdMasters.ForEach(p => { p.Status = "r"; });
+                //获取工单工艺路径数据
+                List<WorkOrdRouting> workOrdRoutings = _workOrdRouting.Select(p => ords.Contains(p.WorkOrd) && p.MilestoneOp && p.Domain == "1001" && p.Status != "C" && p.IsActive);
+                workOrdRoutings.ForEach(p => { p.Status = "r"; });
+                using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
+                {
+                    try
+                    {
+                        _nbrMaster.Insert(nbrMasterList);
+                        //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
+                        List<string> nbrs = nbrMasterList.Select(a => a.Nbr).ToList();
+                        var DBnbrList = _nbrMaster.Select(a => a.Domain == "1001" && a.Type == "SM" && nbrs.Contains(a.Nbr));
+                        nbrDetailList.ForEach(c =>
+                        {
+                            c.NbrRecID = DBnbrList.Where(a => a.Nbr == c.Nbr).First().RecID;
+                        });
+                        _nbrDetail.Insert(nbrDetailList);
+                        _workOrdMaster.Update(workOrdMasters);
+                        _periodSequenceDet.Update(dbPeriodSequences);
+                        _workOrdRouting.Update(workOrdRoutings);
+                        await unitOfWork.CompleteAsync();
+                    }
+                    catch (Exception e)
+                    {
+                        unitOfWork.Dispose();
+                        new NLogHelper("ResourceExamineAppService").WriteLog("CreatePickBill", "生成领料单相关数据更新失败:" + e.Message, _currentTenant.Id.ToString());
+                        return e.Message;
+                    }
+                }
+            }
             return "";
         }
 
@@ -2893,6 +2919,7 @@ namespace Business.ResourceExamineManagement
                 workOrd.IsActive = true;
                 workOrd.IsConfirm = true;
                 workOrd.CreateTime = DateTime.Now;
+                workOrd.Batch = item.morder_no;
                 workOrds.Add(workOrd);
 
                 //添加工单工艺路线数据

+ 6 - 0
MicroServices/Business/Bussiness.Model/Production/PeriodSequenceDet.cs

@@ -75,5 +75,11 @@ namespace Business.Model.Production
         /// </summary>
         [Comment("是否有效")]
         public Boolean IsActive { get; set; }
+
+        /// <summary>
+        /// 状态
+        /// </summary>
+        [Comment("状态")]
+        public string? Status { get; set; }
     }
 }

+ 6 - 0
MicroServices/Business/Bussiness.Model/Production/WorkOrdMaster.cs

@@ -105,5 +105,11 @@ namespace Business.Model.Production
         /// </summary>
         [Comment("创建时间")]
         public DateTime? CreateTime { get; set; }
+
+        /// <summary>
+        /// ERP工单号
+        /// </summary>
+        [Comment("ERP工单号")]
+        public string? Batch { get; set; }
     }
 }