Pārlūkot izejas kodu

调整备料单导致占用计算问题。

tangdi 2 gadi atpakaļ
vecāks
revīzija
b1ca0c310e

+ 42 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -23,6 +23,7 @@ using Volo.Abp.Domain.Repositories;
 using Volo.Abp.MultiTenancy;
 using Volo.Abp.ObjectMapping;
 using Volo.Abp.Uow;
+using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
 
 namespace Business.ResourceExamineManagement
 {
@@ -2354,7 +2355,7 @@ namespace Business.ResourceExamineManagement
             }
             else
             {
-                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => companyid == x.company_id.ToString() && x.moentry_sys_stime > DateTime.Now.Date.AddDays(1) && x.moentry_sys_stime < DateTime.Now.Date.AddDays(day) && x.morder_state == MorderEnum.Initial_state && !x.IsDeleted).Result;
+                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => companyid == x.company_id.ToString() && x.moentry_sys_stime > DateTime.Now.Date.AddDays(1) && x.moentry_sys_stime <= DateTime.Now.Date.AddDays(day) && x.morder_state == MorderEnum.Initial_state && !x.IsDeleted).Result;
             }
 
             List<mes_morder> checkMo = new List<mes_morder>();
@@ -2401,7 +2402,7 @@ namespace Business.ResourceExamineManagement
 
                 if (checkMo.Any())
                 {
-                    var rtn = await OrderKittingCheck(mo_Mes_Morders);
+                    var rtn = await OrderKittingCheck(checkMo);
                     if (rtn != null && rtn.examines != null)
                     {
                         var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == companyid).ToList();
@@ -2468,6 +2469,7 @@ namespace Business.ResourceExamineManagement
                 if (workords.Length > 0)
                 {
                     workords = workords.Substring(1, workords.Length - 1);
+                    //如果生成领料单,需清理掉当前工单的占用,然后根据领料单的数据,来生成工单的占用
                     await CreatePickBill(workords, mo_Mes_Morders[0].factory_id.GetValueOrDefault().ToString());
                 }
                 return "ok";
@@ -3438,6 +3440,34 @@ namespace Business.ResourceExamineManagement
             {
                 dbPeriodSequences.ForEach(p => { p.Status = "r"; });
                 workOrdMasters.ForEach(p => { p.Status = "r"; });
+
+                //清理掉库存占用  这里考虑的是资源检查的占用没有完全占用备料单数据,而其他数据再进行齐套检查时,无法考虑到备料单的占用。
+                var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => workOrdMasters.Select(x => x.WorkOrd).Contains(s.morder_mo) && s.factory_id.ToString() == domain).Result;
+                var icitem = _mysql_ic_item.GetListAsync(s => s.factory_id.ToString() == domain && nbrDetailList.Select(c => c.ItemNum).Contains(s.number)).Result;
+                //根据领料单生成一次工单的数据占用
+                List<ic_item_stockoccupy> insertOccuyy = new List<ic_item_stockoccupy>();
+                nbrMasterList.ForEach(s =>
+                {
+                    var nbrdtls = nbrDetailList.Where(a => a.Nbr == s.Nbr).ToList();
+                    nbrdtls.ForEach(x =>
+                    {
+                        ic_item_stockoccupy itemStockoccupyDto = new ic_item_stockoccupy();
+                        itemStockoccupyDto.morder_mo = s.WorkOrd;
+                        itemStockoccupyDto.occupy_time = DateTime.Now;
+                        var nbrItem = icitem.Find(c => c.number == x.ItemNum);
+                        if(nbrItem!= null) {
+                            itemStockoccupyDto.icitem_id = nbrItem.Id;
+                            itemStockoccupyDto.icitem_number = nbrItem.number;
+                            itemStockoccupyDto.tenant_id = nbrItem.tenant_id;
+                            itemStockoccupyDto.factory_id = nbrItem.factory_id;
+                            itemStockoccupyDto.org_id = nbrItem.org_id;
+                            itemStockoccupyDto.company_id = nbrItem.company_id;
+                            itemStockoccupyDto.quantity = x.CurrQtyOpened.GetValueOrDefault();
+                            insertOccuyy.Add(itemStockoccupyDto);
+                        }
+                    });
+                });
+
                 //获取工单工艺路径数据
                 List<WorkOrdRouting> workOrdRoutings = _workOrdRouting.Select(p => ords.Contains(p.WorkOrd) && p.MilestoneOp && p.Domain == workOrdMasters[0].Domain && p.Status != "C" && p.IsActive);
                 workOrdRoutings.ForEach(p => { p.Status = "r"; });
@@ -3451,6 +3481,16 @@ namespace Business.ResourceExamineManagement
                             string sql = string.Format("exec pr_WMS_BPM_AddMobileTask @TaskID='{0}',@PlanDate='{1}',@ExecuterTypeID=2,@CreateUser='{2}'",a.Nbr,a.Date.Value.ToString("yyyy-MM-dd"),a.CreateUser);
                             _businessDbContext.Database.ExecuteSqlRaw(sql);
                         });
+
+                        if (itemstockoccupy.Any())
+                        {
+                            _businessDbContext.BulkDelete(itemstockoccupy);
+                        }
+                        if (insertOccuyy.Any())
+                        { 
+                            _businessDbContext.BulkInsert(insertOccuyy);
+                        }
+
                         //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
                         List<string> nbrs = nbrMasterList.Select(a => a.Nbr).ToList();
                         var DBnbrList = _nbrMaster.Select(a => a.Domain == workOrdMasters[0].Domain && a.Type == "SM" && nbrs.Contains(a.Nbr));