Explorar el Código

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

Murphy hace 2 años
padre
commit
3b32736544

+ 83 - 60
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -13,6 +13,8 @@ using Business.StructuredDB.Production;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
 using Business.StructuredDB.WMS;
+using Business.SystemJob;
+using Business.SystemJobManagement;
 using EFCore.BulkExtensions;
 using EFCore.BulkExtensions;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
 using MongoDB.Driver;
 using MongoDB.Driver;
@@ -254,6 +256,7 @@ namespace Business.Replenishment
         private readonly BusinessDbContext _businessDbContext;
         private readonly BusinessDbContext _businessDbContext;
         private readonly ICurrentTenant _currentTenant;
         private readonly ICurrentTenant _currentTenant;
         private readonly IUnitOfWorkManager _unitOfWorkManager;
         private readonly IUnitOfWorkManager _unitOfWorkManager;
+        private readonly SystemJobAppService _systemJobAppService;
         #endregion
         #endregion
 
 
         #region 构造函数
         #region 构造函数
@@ -355,7 +358,8 @@ namespace Business.Replenishment
             ISqlRepository<PurOrdMaster> PurOrdMaster,
             ISqlRepository<PurOrdMaster> PurOrdMaster,
             ISqlRepository<DeliveryExceptionMaster> DeliveryExceptionMaster,
             ISqlRepository<DeliveryExceptionMaster> DeliveryExceptionMaster,
             ISqlRepository<scm_shdzb> scm_shdzb,
             ISqlRepository<scm_shdzb> scm_shdzb,
-            IUnitOfWorkManager unitOfWorkManager)
+            IUnitOfWorkManager unitOfWorkManager,
+            SystemJobAppService systemJobAppService)
         {
         {
             _replenishmentROPWeekPlan = replenishmentROPWeekPlan;
             _replenishmentROPWeekPlan = replenishmentROPWeekPlan;
             _ASNBOLShipperDetail = ASNBOLShipperDetail;
             _ASNBOLShipperDetail = ASNBOLShipperDetail;
@@ -454,6 +458,7 @@ namespace Business.Replenishment
             _PurOrdMaster = PurOrdMaster;
             _PurOrdMaster = PurOrdMaster;
             _DeliveryExceptionMaster = DeliveryExceptionMaster;
             _DeliveryExceptionMaster = DeliveryExceptionMaster;
             _scm_shdzb = scm_shdzb;
             _scm_shdzb = scm_shdzb;
+            _systemJobAppService = systemJobAppService;
         }
         }
         #endregion
         #endregion
 
 
@@ -4842,7 +4847,7 @@ namespace Business.Replenishment
             }
             }
             var pretreatList = pretreatments.Select(x => x.item_number).Distinct().ToList();
             var pretreatList = pretreatments.Select(x => x.item_number).Distinct().ToList();
             itemNums.AddRange(pretreatList);
             itemNums.AddRange(pretreatList);
-            AsyncItemStockFromWMS(itemNums, analogCalcVersion);
+            await AsyncItemStockFromWMS(itemNums, analogCalcVersion);
 
 
             //数据库快照-同步mysql库数据到mongoDB中
             //数据库快照-同步mysql库数据到mongoDB中
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments, analogCalcVersion);
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments, analogCalcVersion);
@@ -4880,9 +4885,24 @@ namespace Business.Replenishment
                 dtl.need_qty = item.need_number.GetValueOrDefault();
                 dtl.need_qty = item.need_number.GetValueOrDefault();
 
 
                 //获取当前物料bom数据
                 //获取当前物料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())
                 if (!itemPrelist.Any())
                 {
                 {
                     continue;
                     continue;
@@ -4905,7 +4925,7 @@ namespace Business.Replenishment
                 _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.moentry_sys_stime, sklist, sentry, icitemlist);
                 _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.moentry_sys_stime, sklist, sentry, icitemlist);
 
 
                 //TODO:最晚开始时间
                 //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();
                 dtl.kitting_times = getBomList.Where(p => p.is_use && p.kitting_time != null).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
                 //替代关系展开list
                 //替代关系展开list
@@ -6030,66 +6050,67 @@ namespace Business.Replenishment
         /// </summary>
         /// </summary>
         public void AutoCreateBomBill(string companyid, List<mo_ic_bom> ic_Boms = null)
         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());
             }
             }
         }
         }
 
 
@@ -6580,8 +6601,10 @@ namespace Business.Replenishment
             return result;
             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();
             //var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
             List<string> itemChildList = new List<string>();
             List<string> itemChildList = new List<string>();

+ 11 - 4
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -14,6 +14,7 @@ using Business.StructuredDB.MES.IC;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
 using Business.StructuredDB.WMS;
+using Business.SystemJobManagement;
 using EFCore.BulkExtensions;
 using EFCore.BulkExtensions;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
 using MongoDB.Driver;
 using MongoDB.Driver;
@@ -390,6 +391,8 @@ namespace Business.ResourceExamineManagement
         public List<HolidayMaster> holidays = new List<HolidayMaster>();
         public List<HolidayMaster> holidays = new List<HolidayMaster>();
         public IDataFilter dataFilter { get; set; }
         public IDataFilter dataFilter { get; set; }
         private readonly IUnitOfWorkManager _unitOfWorkManager;
         private readonly IUnitOfWorkManager _unitOfWorkManager;
+
+        private readonly SystemJobAppService _systemJobAppService;
         #endregion
         #endregion
 
 
         #region 构造函数
         #region 构造函数
@@ -502,7 +505,8 @@ namespace Business.ResourceExamineManagement
             HolidayHelper holidayHelper,
             HolidayHelper holidayHelper,
             ReplenishmentAppService replenishmentAppService,
             ReplenishmentAppService replenishmentAppService,
             IRepository<ReplenishmentWeekPlan, long> replenishmentWeekPlan,
             IRepository<ReplenishmentWeekPlan, long> replenishmentWeekPlan,
-            ISqlRepository<InvMaster> invMaster
+            ISqlRepository<InvMaster> invMaster,
+            SystemJobAppService systemJobAppService
             )
             )
         {
         {
             _mes_technique = mes_technique;
             _mes_technique = mes_technique;
@@ -600,6 +604,7 @@ namespace Business.ResourceExamineManagement
             _replenishmentAppService = replenishmentAppService;
             _replenishmentAppService = replenishmentAppService;
             _replenishmentWeekPlan = replenishmentWeekPlan;
             _replenishmentWeekPlan = replenishmentWeekPlan;
             _invMaster = invMaster;
             _invMaster = invMaster;
+            _systemJobAppService = systemJobAppService;
         }
         }
         #endregion
         #endregion
 
 
@@ -722,7 +727,7 @@ namespace Business.ResourceExamineManagement
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
                 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中
             //数据库快照-同步mysql库数据到mongoDB中
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments);
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments);
@@ -3681,7 +3686,7 @@ namespace Business.ResourceExamineManagement
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
                 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> { "试制工单", "返工工单" };
             List<string> tsWork = new List<string> { "试制工单", "返工工单" };
@@ -4453,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();
             var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
             List<string> itemChildList = new List<string>();
             List<string> itemChildList = new List<string>();