Parcourir la source

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

heteng il y a 2 ans
Parent
commit
2aa5d398cd

+ 9 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs

@@ -57,6 +57,15 @@ namespace Business.ResourceExamineManagement
         /// <returns></returns>
         Task<string> ProduceDayPlanKittingCheck(string startime, string endtime, string domain, string userAccount);
 
+        /// <summary>
+        /// 馱等等黃婓踱潰
+        /// </summary>
+        /// <param name="workord"></param>
+        /// <param name="domain"></param>
+        /// <param name="userAccount"></param>
+        /// <returns></returns>
+        Task<string> ProduceDayPlanKittingCheckByWorkOrd(string workord, string domain, string userAccount);
+
         /// <summary>
         /// 杸測蹋潰脤
         /// </summary>

+ 105 - 79
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -13,6 +13,8 @@ using Business.StructuredDB.Production;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
+using Business.SystemJob;
+using Business.SystemJobManagement;
 using EFCore.BulkExtensions;
 using Microsoft.EntityFrameworkCore;
 using MongoDB.Driver;
@@ -254,6 +256,7 @@ namespace Business.Replenishment
         private readonly BusinessDbContext _businessDbContext;
         private readonly ICurrentTenant _currentTenant;
         private readonly IUnitOfWorkManager _unitOfWorkManager;
+        private readonly SystemJobAppService _systemJobAppService;
         #endregion
 
         #region 构造函数
@@ -355,7 +358,8 @@ namespace Business.Replenishment
             ISqlRepository<PurOrdMaster> PurOrdMaster,
             ISqlRepository<DeliveryExceptionMaster> DeliveryExceptionMaster,
             ISqlRepository<scm_shdzb> scm_shdzb,
-            IUnitOfWorkManager unitOfWorkManager)
+            IUnitOfWorkManager unitOfWorkManager,
+            SystemJobAppService systemJobAppService)
         {
             _replenishmentROPWeekPlan = replenishmentROPWeekPlan;
             _ASNBOLShipperDetail = ASNBOLShipperDetail;
@@ -454,6 +458,7 @@ namespace Business.Replenishment
             _PurOrdMaster = PurOrdMaster;
             _DeliveryExceptionMaster = DeliveryExceptionMaster;
             _scm_shdzb = scm_shdzb;
+            _systemJobAppService = systemJobAppService;
         }
         #endregion
 
@@ -3262,7 +3267,7 @@ namespace Business.Replenishment
 ;            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();
@@ -3357,8 +3362,8 @@ namespace Business.Replenishment
                 _businessDbContext.BulkInsert(workOrdDetails);
             }
 
-            //2024/01/10:卫亮工单需求对齐采购需求,取所有未下达的工单做资源检查
-            var moListCheck=_mysql_mes_morder.GetListAsync(a=>(a.morder_state==MorderEnum.Initial_state|| string.IsNullOrEmpty(a.morder_state)) && a.factory_id == input.factory_id).Result;
+            //2024/01/10:卫亮工单需求对齐采购需求,取所有未下达的工单做资源检查(排除年度中间件工单)
+            var moListCheck=_mysql_mes_morder.GetListAsync(a=>(a.morder_state==MorderEnum.Initial_state|| string.IsNullOrEmpty(a.morder_state)) && a.factory_id == input.factory_id && string.IsNullOrEmpty(a.analogcalcversion)).Result;
             var moEntryListCheck = _mysql_mes_moentry.GetListAsync(a => moListCheck.Select(b=>b.morder_no).ToList().Contains(a.moentry_mono) && a.factory_id == input.factory_id).Result;
             
             await PlanOrderResourceCheck(moListCheck.OrderBy(a => a.moentry_sys_stime).ToList(), moEntryListCheck, bang_id, "",false,true);
@@ -3377,23 +3382,26 @@ namespace Business.Replenishment
                 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
+                if (moItem != null)
                 {
-                    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;
+                    if (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;
+                    }
                 }
             });
             await _businessDbContext.BulkUpdateAsync(weekplanList);
@@ -4839,7 +4847,7 @@ namespace Business.Replenishment
             }
             var pretreatList = pretreatments.Select(x => x.item_number).Distinct().ToList();
             itemNums.AddRange(pretreatList);
-            AsyncItemStockFromWMS(itemNums, analogCalcVersion);
+            await AsyncItemStockFromWMS(itemNums, analogCalcVersion);
 
             //数据库快照-同步mysql库数据到mongoDB中
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments, analogCalcVersion);
@@ -4877,9 +4885,24 @@ namespace Business.Replenishment
                 dtl.need_qty = item.need_number.GetValueOrDefault();
 
                 //获取当前物料bom数据
-                var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
+                //var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
 
-                var itemPrelist = pretreatments.Where(s => s.sourceid == childBom.mysql_id).ToList();
+                //获取当前物料bom数据
+                List<b_bom_pretreatment> itemPrelist = new List<b_bom_pretreatment>();
+                //通过工单ID读取,考虑特殊工单的预处理
+                itemPrelist = pretreatments.Where(s => s.sourceid == item.Id).ToList();
+                if (!itemPrelist.Any())
+                {
+                    var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
+                    if (childBom != null)
+                    {
+                        itemPrelist = pretreatments.Where(s => s.sourceid == childBom.mysql_id).ToList();
+                    }
+                    else
+                    {
+                        continue;
+                    }
+                }
                 if (!itemPrelist.Any())
                 {
                     continue;
@@ -4902,7 +4925,7 @@ namespace Business.Replenishment
                 _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.moentry_sys_stime, sklist, sentry, icitemlist);
 
                 //TODO:最晚开始时间
-                var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
+                //var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
                 //物料齐套时间
                 dtl.kitting_times = getBomList.Where(p => p.is_use && p.kitting_time != null).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
                 //替代关系展开list
@@ -6027,66 +6050,67 @@ namespace Business.Replenishment
         /// </summary>
         public void AutoCreateBomBill(string companyid, List<mo_ic_bom> ic_Boms = null)
         {
-            bool flag = false;
-            if (ic_Boms == null)
-            {
-                flag = true;
-                ic_Boms = _ic_bom.GetListAsync(p => p.company_id.ToString() == companyid && !p.IsDeleted).Result.ToList();
-            }
-            var pretreatment = _mysql_b_bom_pretreatment.GetListAsync(s => ic_Boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
-
-            param.company_id = long.Parse(companyid);
-
-            //物料bom
-            List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
-            List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
-            //物料信息
-            List<mo_ic_item> icitemlist = new List<mo_ic_item>();
-            //替代关系
-            List<mo_ic_substitute> sublist = new List<mo_ic_substitute>();
-            List<mo_ic_substitute_group> suballlist = new List<mo_ic_substitute_group>();
-            List<mo_ic_substitute_group_detail> subdtllist = new List<mo_ic_substitute_group_detail>();
-            IcItemPretreatment(flag, ic_Boms, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
-
-            List<b_bom_pretreatment> deleteList = new List<b_bom_pretreatment>();
-            List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
-            foreach (var bom in ic_Boms)
+            try
             {
-                /*var pret = pretreatment.Find(s => s.sourceid == bom.mysql_id && s.bom_id == bom.mysql_id);
-                if (pret != null)
+                bool flag = false;
+                if (ic_Boms == null)
                 {
-                    if (pret.version == bom.version)
+                    flag = true;
+                    ic_Boms = _ic_bom.GetListAsync(p => p.company_id.ToString() == companyid && !p.IsDeleted).Result.ToList();
+                }
+                var pretreatment = _mysql_b_bom_pretreatment.GetListAsync(s => ic_Boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
+
+                param.company_id = long.Parse(companyid);
+
+                //物料bom
+                List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
+                List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
+                //物料信息
+                List<mo_ic_item> icitemlist = new List<mo_ic_item>();
+                //替代关系
+                List<mo_ic_substitute> sublist = new List<mo_ic_substitute>();
+                List<mo_ic_substitute_group> suballlist = new List<mo_ic_substitute_group>();
+                List<mo_ic_substitute_group_detail> subdtllist = new List<mo_ic_substitute_group_detail>();
+                IcItemPretreatment(flag, ic_Boms, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
+
+                List<b_bom_pretreatment> deleteList = new List<b_bom_pretreatment>();
+                List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
+                foreach (var bom in ic_Boms)
+                {
+                    var pret = pretreatment.Where(s => s.sourceid == bom.mysql_id).ToList();
+                    if (pret.Any())
                     {
-                        //如果存在,且版本相同,则不需要处理
-                        continue;
+                        //版本不同则重新生成
+                        deleteList.AddRange(pret);
                     }
-                    //版本不同则重新生成
-                    deleteList.Add(pret);
-                }*/
-                deleteList.AddRange(pretreatment);
-                //bom层级组装
-                var getBomList = _pretreatmentAppService.BomPretreatment(bom.mysql_id, bomlist, bomchildlist, icitemlist);
-                //bom替代关系组装
-                _pretreatmentAppService.BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
-
-                //GenerateSort(getBomList);
-                var list = ObjectMapper.Map<List<BomChildExamineDto>, List<b_bom_pretreatment>>(getBomList);
-                list.ForEach(s =>
-                {
-                    s.sourceid = bom.mysql_id;
-                    s.company_id = bom.company_id;
-                    s.tenant_id = bom.tenant_id;
-                    s.factory_id = bom.factory_id;
-                });
-                addList.AddRange(list);
-            }
-            if (deleteList.Any())
-            {
-                _businessDbContext.BulkDelete(deleteList);
+                    //bom层级组装
+                    var getBomList = _pretreatmentAppService.BomPretreatment(bom.mysql_id, bomlist, bomchildlist, icitemlist);
+                    //bom替代关系组装
+                    _pretreatmentAppService.BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
+
+                    //GenerateSort(getBomList);
+                    var list = ObjectMapper.Map<List<BomChildExamineDto>, List<b_bom_pretreatment>>(getBomList);
+                    list.ForEach(s =>
+                    {
+                        s.sourceid = bom.mysql_id;
+                        s.company_id = bom.company_id;
+                        s.tenant_id = bom.tenant_id;
+                        s.factory_id = bom.factory_id;
+                    });
+                    addList.AddRange(list);
+                }
+                if (deleteList.Any())
+                {
+                    _businessDbContext.BulkDelete(deleteList);
+                }
+                if (addList.Any())
+                {
+                    _businessDbContext.BulkInsert(addList);
+                }
             }
-            if (addList.Any())
+            catch (Exception e)
             {
-                _businessDbContext.BulkInsert(addList);
+                new NLogHelper("ResourceExamineAppService").WriteLog("AutoCreateBomBill", "自动生成BOM预处理清单:" + e.Message, _currentTenant.Id.ToString());
             }
         }
 
@@ -6577,8 +6601,10 @@ namespace Business.Replenishment
             return result;
         }
 
-        public void AsyncItemStockFromWMS(List<string> itemList,string analogCalcVersion)
+        public async Task AsyncItemStockFromWMS(List<string> itemList,string analogCalcVersion)
         {
+            //释放库存占用记录
+            await _systemJobAppService.SyncItemStockOccupyClear();
             //产品编码
             //var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
             List<string> itemChildList = new List<string>();

+ 2 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -1077,7 +1077,7 @@ namespace Business.ResourceExamineManagement
                 {
                     foreach (var s in list)
                     {
-                        RecalculationStock(s, returnlist, sklist, bangid);
+                        RecalculationStock(s, returnlist, newStockOccList, bangid);
                     }
                     //可制计算:需要对list进行可制计算,按主料来算辅料
                     if (list.Where(s => s.stock_state != 1).Count() == 0)
@@ -1180,7 +1180,7 @@ namespace Business.ResourceExamineManagement
                 {
                     foreach (var s in list)
                     {
-                        RecalculationStock(s, returnlist, sklist, bangid);
+                        RecalculationStock(s, returnlist, newStockOccList, bangid);
                     }
                     decimal minMake = 99999999;
                     foreach (var hy in list)

+ 177 - 47
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -1,4 +1,5 @@
 using Amazon.Runtime.Internal;
+using Amazon.Runtime.Internal.Util;
 using Business.Core.Enum;
 using Business.Core.Utilities;
 using Business.Domain;
@@ -13,6 +14,7 @@ using Business.StructuredDB.MES.IC;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
+using Business.SystemJobManagement;
 using EFCore.BulkExtensions;
 using Microsoft.EntityFrameworkCore;
 using MongoDB.Driver;
@@ -389,6 +391,8 @@ namespace Business.ResourceExamineManagement
         public List<HolidayMaster> holidays = new List<HolidayMaster>();
         public IDataFilter dataFilter { get; set; }
         private readonly IUnitOfWorkManager _unitOfWorkManager;
+
+        private readonly SystemJobAppService _systemJobAppService;
         #endregion
 
         #region 构造函数
@@ -501,7 +505,8 @@ namespace Business.ResourceExamineManagement
             HolidayHelper holidayHelper,
             ReplenishmentAppService replenishmentAppService,
             IRepository<ReplenishmentWeekPlan, long> replenishmentWeekPlan,
-            ISqlRepository<InvMaster> invMaster
+            ISqlRepository<InvMaster> invMaster,
+            SystemJobAppService systemJobAppService
             )
         {
             _mes_technique = mes_technique;
@@ -599,6 +604,7 @@ namespace Business.ResourceExamineManagement
             _replenishmentAppService = replenishmentAppService;
             _replenishmentWeekPlan = replenishmentWeekPlan;
             _invMaster = invMaster;
+            _systemJobAppService = systemJobAppService;
         }
         #endregion
 
@@ -721,7 +727,7 @@ namespace Business.ResourceExamineManagement
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
             }
-            AsyncItemStockFromWMS(pretreatments);
+            await AsyncItemStockFromWMS(pretreatments);
 
             //数据库快照-同步mysql库数据到mongoDB中
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments);
@@ -3179,6 +3185,125 @@ namespace Business.ResourceExamineManagement
             }
         }
 
+        /// <summary>
+        /// 工单单独在库检
+        /// </summary>
+        /// <param name="workord"></param>
+        /// <param name="domain"></param>
+        /// <param name="userAccount"></param>
+        /// <returns></returns>
+        public async Task<string> ProduceDayPlanKittingCheckByWorkOrd(string workord, string domain, string userAccount)
+        {
+            if (string.IsNullOrEmpty(workord))
+            {
+                return "请输入DOP工单号";
+            }
+            if (string.IsNullOrEmpty(domain))
+            {
+                return "当前用户无工厂编码";
+            }
+            workord = workord.Trim();
+            var worklist = _workOrdMaster.Select(x => x.WorkOrd == workord && x.Domain == domain && x.IsActive).ToList();
+            WorkOrdMaster work = null;
+            if (worklist.Any())
+            {
+                work = worklist[0];
+            }
+            if (work == null)
+            {
+                return "当前工单不存在,请检查";
+            }
+            string stateText = "";
+            if (!string.IsNullOrEmpty(work.Status))
+            {
+                switch (work.Status.ToUpper())
+                {
+                    case "C":
+                        stateText = "关闭";
+                        break;
+                    case "W":
+                        stateText = "投产";
+                        break;
+                    case "R":
+                        stateText = "下达";
+                        break;
+                    case "S":
+                        stateText = "暂停";
+                        break;
+                    case "P":
+                        stateText = "";
+                        break;
+                    default:
+                        stateText = "未知";
+                        break;
+                }
+            }
+            if (stateText != "")
+            {
+                return "当前工单为【"+ stateText + "】,不允许进行在库检";
+            }
+            var periodSd = _periodSequenceDet.Select(s => s.Domain == domain && s.WorkOrds == workord && s.IsActive).ToList();
+            if (periodSd.Any())
+            {
+                List<mes_morder> morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && x.morder_no == workord && (string.IsNullOrEmpty(x.morder_state) || x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
+                if (!morders.Any())
+                {
+                    return "工单不存在,请检查";
+                }
+                var rst = await OrderResourceCheck(morders, domain, userAccount);
+                if (rst == "ok")
+                {
+                    //屏蔽日期过滤
+                    /*var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == domain).ToList();
+                    decimal lookDay = 0;
+                    if (sysSet.Any())
+                    {
+                        //锁定期
+                        lookDay = sysSet[0].UDeci1;
+                    }
+                    lookDay = lookDay == 0 ? 7 : lookDay;
+                    DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);*/
+
+                    string workords = "";
+                    foreach (var mo in morders)
+                    {
+                        //if (mo.MaterialSituation == MorderEnum.CarehouseComplete && mo.morder_state == MorderEnum.Initial_state && mo.moentry_sys_stime.GetValueOrDefault().Date <= lookTime)
+                        if (mo.MaterialSituation == MorderEnum.CarehouseComplete && mo.morder_state == MorderEnum.Initial_state)
+                        {
+                            workords += "," + mo.morder_no;
+                            //mo.morder_state = MorderEnum.Xd_state;
+                        }
+                    }
+                    await _businessDbContext.BulkUpdateAsync(morders);
+                    //按卫亮要求。屏蔽自动下达
+                    /*if (workords.Length > 0)
+                    {
+                        workords = workords.Substring(1, workords.Length - 1);
+                        //如果生成领料单,需清理掉当前工单的占用,然后根据领料单的数据,来生成工单的占用
+                        var pickRst = await CreatePickBill(workords, domain, userAccount);
+                        if (pickRst != "ok")
+                        {
+                            new NLogHelper("ResourceExamineAppService").WriteLog("CreatePickBill", "生成领料单相关数据更新失败:" + pickRst, _currentTenant.Id.ToString());
+                            return pickRst;
+                        }
+                        var insertList = GetCopyOP(workords, domain);
+                        if (insertList.Any())
+                        {
+                            _periodSequenceDet.Insert(insertList);
+                        }
+                    }*/
+                    return "ok";
+                }
+                else
+                {
+                    return rst;
+                }
+            }
+            else {
+                return "当前工单未生成日计划";
+            }
+        }
+
         /// <summary>
         /// 手动按工单下达
         /// </summary>
@@ -3561,7 +3686,7 @@ namespace Business.ResourceExamineManagement
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
             }
-            AsyncItemStockFromWMS(pretreatments);
+            await AsyncItemStockFromWMS(pretreatments);
 
             //增加特殊工单的预处理结果,因为特殊工单是自定义物料清单
             List<string> tsWork = new List<string> { "试制工单", "返工工单" };
@@ -4333,8 +4458,10 @@ namespace Business.ResourceExamineManagement
             }
         }
 
-        public void AsyncItemStockFromWMS(List<b_bom_pretreatment> bom_Pretreatments)
+        public async Task AsyncItemStockFromWMS(List<b_bom_pretreatment> bom_Pretreatments)
         {
+            //释放库存占用记录
+            await _systemJobAppService.SyncItemStockOccupyClear();
             //产品编码
             var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
             List<string> itemChildList = new List<string>();
@@ -6096,61 +6223,64 @@ namespace Business.ResourceExamineManagement
                         foreach (var item in pickbillItems)
                         {
                             var itemNum = itemList.Find(a => a.ItemNum == item);
-                            ic_demandschedule itemds = new ic_demandschedule();
-                            itemds.GenerateNewId(help.NextId());
-                            itemds.itemnum = item;
-                            itemds.fversion = itemNum.Rev;
-                            itemds.drawing = itemNum.Drawing;
-                            itemds.requestdate = itemBegin;
-                            itemds.arrivaldate = itemBegin.AddDays(-1).AddDays(-itemNum.InsLT).AddDays(-(int)Math.Ceiling(itemNum.MFGMTTR));
-                            itemds.shortqty = 0;
-                            itemds.mesqty = pickBills.Where(a => a.ItemNum == item).Sum(q => q.QtyOrd - q.QtyRec);
-                            //库存扣减量
-                            decimal stockDeduction = 0;
-                            if (weekStockQty.ContainsKey(item))
+                            if (itemNum != null)
                             {
-                                itemds.locqty = weekStockQty[item];
-                                if (itemds.mesqty >= itemds.locqty)
+                                ic_demandschedule itemds = new ic_demandschedule();
+                                itemds.GenerateNewId(help.NextId());
+                                itemds.itemnum = item;
+                                itemds.fversion = itemNum.Rev;
+                                itemds.drawing = itemNum.Drawing;
+                                itemds.requestdate = itemBegin;
+                                itemds.arrivaldate = itemBegin.AddDays(-1).AddDays(-itemNum.InsLT).AddDays(-(int)Math.Ceiling(itemNum.MFGMTTR));
+                                itemds.shortqty = 0;
+                                itemds.mesqty = pickBills.Where(a => a.ItemNum == item).Sum(q => q.QtyOrd - q.QtyRec);
+                                //库存扣减量
+                                decimal stockDeduction = 0;
+                                if (weekStockQty.ContainsKey(item))
                                 {
-                                    weekStockQty[item] = 0;
-                                    stockDeduction = itemds.locqty;
+                                    itemds.locqty = weekStockQty[item];
+                                    if (itemds.mesqty >= itemds.locqty)
+                                    {
+                                        weekStockQty[item] = 0;
+                                        stockDeduction = itemds.locqty;
+                                    }
+                                    else
+                                    {
+                                        weekStockQty[item] -= itemds.mesqty;
+                                        stockDeduction = itemds.mesqty;
+                                    }
                                 }
                                 else
                                 {
-                                    weekStockQty[item] -= itemds.mesqty;
-                                    stockDeduction = itemds.mesqty;
+                                    itemds.locqty = 0;
                                 }
-                            }
-                            else
-                            {
-                                itemds.locqty = 0;
-                            }
-                            if (weekdsQty.ContainsKey(item))
-                            {
-                                itemds.sechedqty = weekdsQty[item];
-                                //优先扣减库存,库存不够扣减交货单在途
-                                if (itemds.mesqty - stockDeduction - itemds.sechedqty >= 0)
+                                if (weekdsQty.ContainsKey(item))
                                 {
-                                    weekdsQty[item] = 0;
+                                    itemds.sechedqty = weekdsQty[item];
+                                    //优先扣减库存,库存不够扣减交货单在途
+                                    if (itemds.mesqty - stockDeduction - itemds.sechedqty >= 0)
+                                    {
+                                        weekdsQty[item] = 0;
+                                    }
+                                    else
+                                    {
+                                        weekdsQty[item] -= itemds.mesqty - stockDeduction;
+                                    }
                                 }
                                 else
                                 {
-                                    weekdsQty[item] -= itemds.mesqty - stockDeduction;
+                                    itemds.sechedqty = 0;
                                 }
+                                itemds.tosechedqty = itemds.mesqty - (itemds.locqty + itemds.sechedqty);
+                                itemds.status = "";
+                                itemds.remarks = "";
+                                itemds.tenant_id = examines.Count > 0 ? examines[0].tenant_id : 1000;
+                                itemds.company_id = examines.Count > 0 ? examines[0].company_id : 1000;
+                                itemds.factory_id = examines.Count > 0 ? examines[0].factory_id : 8010;
+                                itemds.create_time = DateTime.Now;
+                                itemds.update_time = DateTime.Now;
+                                ds.Add(itemds);
                             }
-                            else
-                            {
-                                itemds.sechedqty = 0;
-                            }
-                            itemds.tosechedqty = itemds.mesqty - (itemds.locqty + itemds.sechedqty);
-                            itemds.status = "";
-                            itemds.remarks = "";
-                            itemds.tenant_id = examines.Count > 0 ? examines[0].tenant_id : 1000;
-                            itemds.company_id = examines.Count > 0 ? examines[0].company_id : 1000;
-                            itemds.factory_id = examines.Count > 0 ? examines[0].factory_id : 8010;
-                            itemds.create_time = DateTime.Now;
-                            itemds.update_time = DateTime.Now;
-                            ds.Add(itemds);
                         }
                     }
                 }

+ 13 - 0
MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs

@@ -104,6 +104,19 @@ namespace Business.Controllers
             return _ResourceExamineAppService.ProduceDayPlanKittingCheck(startime, endtime, domain, userAccount);
         }
 
+        /// <summary>
+        /// 工单单独在库检
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("ProduceDayPlanKittingCheckByWorkOrd")]
+        public Task<string> ProduceDayPlanKittingCheckByWorkOrd(string workord, string domain, string userAccount)
+        {
+            return _ResourceExamineAppService.ProduceDayPlanKittingCheckByWorkOrd(workord, domain, userAccount);
+        }
+        
+
         /// <summary>
         /// 替代料检查
         /// </summary>