Explorar o código

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

heteng %!s(int64=2) %!d(string=hai) anos
pai
achega
a058876434

+ 2 - 0
MicroServices/Business/Business.Application/BusinessApplicationAutoMapperProfile.cs

@@ -34,6 +34,8 @@ namespace Business
                .ForMember(d => d.mysql_id, map => map.MapFrom(o => o.Id));
             CreateMap<ic_item_stockoccupy, mo_ic_item_stockoccupy>()
                .ForMember(d => d.mysql_id, map => map.MapFrom(o => o.Id));
+            CreateMap<mo_ic_item_stockoccupy, ic_item_stockoccupy>()
+               .ForMember(d => d.Id, map => map.MapFrom(o => o.mysql_id));
             CreateMap<ic_substitute, mo_ic_substitute>()
                .ForMember(d => d.mysql_id, map => map.MapFrom(o => o.Id));
             CreateMap<ic_substitute_group, mo_ic_substitute_group>()

+ 34 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -157,10 +157,13 @@ namespace Business.ResourceExamineManagement
             mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
             itemStockoccupyDto.bang_id = bangid;
             itemStockoccupyDto.icitem_id = level1Dto.item_id;
+            itemStockoccupyDto.icitem_number = level1Dto.item_number;
             itemStockoccupyDto.item_no = level1Dto.num;
+            itemStockoccupyDto.occupy_time = DateTime.Now;
             if (sentrys != null)
             {
                 itemStockoccupyDto.orderentry_id = sentrys.Id;
+                itemStockoccupyDto.order_id = sentrys.seorder_id;
             }
             if (mes_morder != null)
             {
@@ -591,8 +594,20 @@ namespace Business.ResourceExamineManagement
                         mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
                         itemStockoccupyDto.bang_id = bangid;
                         itemStockoccupyDto.icitem_id = item.item_id;
+                        itemStockoccupyDto.icitem_number = item.item_number;
                         itemStockoccupyDto.item_no = item.num;
+                        itemStockoccupyDto.occupy_time = DateTime.Now;
                         item.kitting_time = DateTime.Now;
+                        if (sentrys != null)
+                        {
+                            itemStockoccupyDto.orderentry_id = sentrys.Id;
+                            itemStockoccupyDto.order_id = sentrys.seorder_id;
+                        }
+                        if (mes_morder != null)
+                        {
+                            itemStockoccupyDto.morder_id = mes_morder.Id;
+                            itemStockoccupyDto.morder_mo = mes_morder.morder_no;
+                        }
                         item.is_use = true;
                         StartProcessing(item, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, childidList);
                     }
@@ -879,7 +894,19 @@ namespace Business.ResourceExamineManagement
                 mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
                 itemStockoccupyDto.bang_id = bangid;
                 itemStockoccupyDto.icitem_id = slt.item_id;
+                itemStockoccupyDto.icitem_number = slt.item_number;
                 itemStockoccupyDto.item_no = slt.num;
+                itemStockoccupyDto.occupy_time = DateTime.Now;
+                if (sentrys != null)
+                {
+                    itemStockoccupyDto.orderentry_id = sentrys.Id;
+                    itemStockoccupyDto.order_id = sentrys.seorder_id;
+                }
+                if (mes_morder != null)
+                {
+                    itemStockoccupyDto.morder_id = mes_morder.Id;
+                    itemStockoccupyDto.morder_mo = mes_morder.morder_no;
+                }
                 slt.is_use = true;
                 StartProcessing(slt, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, childidList);
             }
@@ -975,14 +1002,17 @@ namespace Business.ResourceExamineManagement
                         if (sentrys != null)
                         {
                             itemStockoccupyDto.orderentry_id = sentrys.Id;
+                            itemStockoccupyDto.order_id = sentrys.seorder_id;
                         }
                         if (mes_morder != null)
                         {
                             itemStockoccupyDto.morder_id = mes_morder.Id;
                             itemStockoccupyDto.morder_mo = mes_morder.morder_no;
                         }
+                        itemStockoccupyDto.occupy_time = DateTime.Now;
                         itemStockoccupyDto.bang_id = bangid;
                         itemStockoccupyDto.icitem_id = zy.item_id;
+                        itemStockoccupyDto.icitem_number = zy.item_number;
                         /*decimal moo_qty = use_p_num * zy.qty - zy.sqty;
                         if (moo_qty > 0)
                         {
@@ -1039,14 +1069,17 @@ namespace Business.ResourceExamineManagement
                     if (sentrys != null)
                     {
                         itemStockoccupyDto.orderentry_id = sentrys.Id;
+                        itemStockoccupyDto.order_id = sentrys.seorder_id;
                     }
                     if (mes_morder != null)
                     {
                         itemStockoccupyDto.morder_id = mes_morder.Id;
                         itemStockoccupyDto.morder_mo = mes_morder.morder_no;
                     }
+                    itemStockoccupyDto.occupy_time = DateTime.Now;
                     itemStockoccupyDto.bang_id = bangid;
                     itemStockoccupyDto.icitem_id = sct.item_id;
+                    itemStockoccupyDto.icitem_number = sct.item_number;
                     itemStockoccupyDto.item_no = sct.num;
                     decimal lack_num = sqty - lack_Count;//库存还够缺的部分
                     if (lack_num >= 0)
@@ -1244,6 +1277,7 @@ namespace Business.ResourceExamineManagement
                 srm_Pr.pr_type = orderType;//申请类型
                 srm_Pr.currencytype = x.currency_type == null ? 1 : x.currency_type.Value;//币种
                 srm_Pr.secInv_ratio = plan.secinv_ratio;//安全库存触发采购比例
+                srm_Pr.tenant_id = companyId.GetValueOrDefault();
                 srm_Pr.company_id = companyId;
                 srm_Pr.factory_id = factoryid;
                 srm_Pr.bang_id = bangId;

+ 1 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs

@@ -184,6 +184,7 @@ namespace Business.ResourceExamineManagement
             }
 
             mes_Morder.moentry_startup_status = 0;
+            mes_Morder.tenant_id = param.company_id.GetValueOrDefault();
             mes_Morder.factory_id = param.factoryId;
             mes_Morder.company_id = param.company_id;
             mes_Morder.org_id = param.org_id;

+ 170 - 88
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -21,6 +21,7 @@ using Volo.Abp.Application.Services;
 using Volo.Abp.DependencyInjection;
 using Volo.Abp.Domain.Repositories;
 using Volo.Abp.MultiTenancy;
+using Volo.Abp.ObjectMapping;
 using Volo.Abp.Uow;
 
 namespace Business.ResourceExamineManagement
@@ -617,7 +618,7 @@ namespace Business.ResourceExamineManagement
 
             //记录订单行的物料齐套时间
             List<KittingTimeDto> kittingTimes = new List<KittingTimeDto>();
-            DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments);
+            DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
             foreach (var sorder in sorders)
             {
                 param.sorderId = sorder.Id;
@@ -745,7 +746,7 @@ namespace Business.ResourceExamineManagement
                     }
                     if (_CalcBomViewAppService.mooccupyAllInsertList.Any())
                     {
-                        _CalcBomViewAppService.mooccupyAllInsertList.ForEach(s => { s.company_id = param.company_id; s.factory_id = param.factoryId; });
+                        _CalcBomViewAppService.mooccupyAllInsertList.ForEach(s => { s.tenant_id = param.company_id.GetValueOrDefault(); s.company_id = param.company_id; s.factory_id = param.factoryId; });
                         await _mes_mooccupy.InsertManyAsync(_CalcBomViewAppService.mooccupyAllInsertList);
                         /*var moOccupy = ObjectMapper.Map<List<mo_mes_mooccupy>, List<mes_mooccupy>>(_CalcBomViewAppService.mooccupyAllInsertList);
                         _businessDbContext.BulkInsert(moOccupy);*/
@@ -753,14 +754,14 @@ namespace Business.ResourceExamineManagement
                     }
                     if (_CalcBomViewAppService.moentriesInsertList.Any())
                     {
-                        _CalcBomViewAppService.moentriesInsertList.ForEach(s => { s.company_id = param.company_id; s.factory_id = param.factoryId; });
+                        _CalcBomViewAppService.moentriesInsertList.ForEach(s => { s.tenant_id = param.company_id.GetValueOrDefault(); s.company_id = param.company_id; s.factory_id = param.factoryId; });
                         await _mes_moentry.InsertManyAsync(_CalcBomViewAppService.moentriesInsertList);
                         /*var mesmoentrys = ObjectMapper.Map<List<mo_mes_moentry>, List<mes_moentry>>(_CalcBomViewAppService.moentriesInsertList);
                         _businessDbContext.BulkInsert(mesmoentrys);*/
                     }
                     if (_CalcBomViewAppService.orderList.Any())
                     {
-                        _CalcBomViewAppService.orderList.ForEach(s => { s.company_id = param.company_id; s.factory_id = param.factoryId; });
+                        _CalcBomViewAppService.orderList.ForEach(s => { s.tenant_id = param.company_id.GetValueOrDefault(); s.company_id = param.company_id; s.factory_id = param.factoryId; });
                         await _mes_oorder.InsertManyAsync(_CalcBomViewAppService.orderList);
                         /*var ooders = ObjectMapper.Map<List<mo_mes_oorder>, List<mes_oorder>>(_CalcBomViewAppService.orderList);
                         _businessDbContext.BulkInsert(ooders);*/
@@ -768,12 +769,12 @@ namespace Business.ResourceExamineManagement
                     }
                     if (_CalcBomViewAppService.newStockOccList.Any())
                     {
-                        _CalcBomViewAppService.newStockOccList.ForEach(s => {s.GenerateNewId(help.NextId()); s.company_id = param.company_id; s.factory_id = param.factoryId; });
+                        _CalcBomViewAppService.newStockOccList.ForEach(s => { s.GenerateNewId(help.NextId()); s.tenant_id = param.company_id.GetValueOrDefault(); s.company_id = param.company_id; s.factory_id = param.factoryId; });
                         await _ic_item_stockoccupy.InsertManyAsync(_CalcBomViewAppService.newStockOccList);
                     }
                     if (_CalcBomViewAppService.srm_Po_OccupiesInsert.Any())
                     {
-                        _CalcBomViewAppService.srm_Po_OccupiesInsert.ForEach(s => { s.company_id = param.company_id; s.factory_id = param.factoryId; });
+                        _CalcBomViewAppService.srm_Po_OccupiesInsert.ForEach(s => { s.tenant_id = param.company_id.GetValueOrDefault(); s.company_id = param.company_id; s.factory_id = param.factoryId; });
                         await _srm_po_occupy.InsertManyAsync(_CalcBomViewAppService.srm_Po_OccupiesInsert);
                         /*var poOccupies = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(_CalcBomViewAppService.srm_Po_OccupiesInsert);
                         _businessDbContext.BulkInsert(poOccupies);*/
@@ -829,6 +830,7 @@ namespace Business.ResourceExamineManagement
                 }
                 b_ex.create_time = DateTime.Now;
                 b_ex.company_id = param.company_id;
+                b_ex.tenant_id = param.company_id;
                 b_ex.factory_id = param.factoryId;
                 examineList.Add(b_ex);
                 ex.BomChildExamineList.ForEach(s =>
@@ -837,6 +839,7 @@ namespace Business.ResourceExamineManagement
                     bc_ex.GenerateNewId(help.NextId());
                     bc_ex.examine_id = b_ex.Id;
                     bc_ex.company_id = param.company_id;
+                    bc_ex.tenant_id = param.company_id;
                     bc_ex.factory_id = param.factoryId;
                     bc_ex.create_time = DateTime.Now;
                     bomExamineList.Add(bc_ex);
@@ -846,7 +849,7 @@ namespace Business.ResourceExamineManagement
                         var olist = ObjectMapper.Map<List<mo_occupy>, List<b_mo_occupy>>(s.mo_occupy_list);
                         olist.ForEach(o =>
                         {
-                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
+                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id; o.tenant_id = param.company_id;
                             o.factory_id = param.factoryId;
                         });
                         mooccupyList.AddRange(olist);
@@ -856,7 +859,7 @@ namespace Business.ResourceExamineManagement
                         var mlist = ObjectMapper.Map<List<moorder>, List<b_mo_order>>(s.make_list);
                         mlist.ForEach(o =>
                         {
-                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
+                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id; o.tenant_id = param.company_id;
                             o.factory_id = param.factoryId;
                         });
                         moorderList.AddRange(mlist);
@@ -866,7 +869,7 @@ namespace Business.ResourceExamineManagement
                         var slist = ObjectMapper.Map<List<ooder>, List<b_ooder>>(s.subcontracting_list);
                         slist.ForEach(o =>
                         {
-                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
+                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id; o.tenant_id = param.company_id;
                             o.factory_id = param.factoryId;
                         });
                         ooderList.AddRange(slist);
@@ -876,7 +879,7 @@ namespace Business.ResourceExamineManagement
                         var plist = ObjectMapper.Map<List<purchase>, List<b_purchase>>(s.purchase_list);
                         plist.ForEach(o =>
                         {
-                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
+                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id; o.tenant_id = param.company_id;
                             o.factory_id = param.factoryId;
                         });
                         purchaseList.AddRange(plist);
@@ -886,7 +889,7 @@ namespace Business.ResourceExamineManagement
                         var purlist = ObjectMapper.Map<List<purchase_occupy>, List<b_purchase_occupy>>(s.purchase_occupy_list);
                         purlist.ForEach(o =>
                         {
-                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
+                            o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id; o.tenant_id = param.company_id;
                             o.factory_id = param.factoryId;
                         });
                         purchaseoccupyList.AddRange(purlist);
@@ -1449,7 +1452,7 @@ namespace Business.ResourceExamineManagement
             }
 
             //获取订单行数据  progress == "2"已做检查但是未评审的订单行
-            sentrys = sentrys.Where(s => s.progress == "2").ToList();
+            //sentrys = sentrys.Where(s => s.progress == "2").ToList();
             if (!sentrys.Any())
             {
                 new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "订单行数据不存在", _currentTenant.Id.ToString());
@@ -1505,6 +1508,16 @@ namespace Business.ResourceExamineManagement
             WriteMorder = WriteMorder.Where(x => !dborders.Select(c => c.Id).Contains(x.mysql_id)).ToList();
             #endregion
 
+            List<mo_ic_item_stockoccupy> item_stockoccupy1 = await _ic_item_stockoccupy.GetListAsync(s => seIds.Contains(s.orderentry_id.Value) && bangidList.Contains(s.bang_id));
+            if (item_stockoccupy1.Any())
+            {
+                item_stockoccupy1.ForEach(s => { s.mysql_id = help.NextId(); });
+                var sklist = ObjectMapper.Map<List<mo_ic_item_stockoccupy>, List<ic_item_stockoccupy>>(item_stockoccupy1);
+                sklist.ForEach(s => { s.create_time = DateTime.Now; });
+                _businessDbContext.BulkInsert(sklist);
+                return "ok";
+            }
+
             //批量保存 后期考虑子工单
             List<mes_morder> moderlist = new List<mes_morder>();
             List<WorkOrdMaster> workOrds = new List<WorkOrdMaster>();
@@ -1526,6 +1539,8 @@ namespace Business.ResourceExamineManagement
             //PO占用记录
             List<mo_srm_po_occupy> po_occupy = await _srm_po_occupy.GetListAsync(s => seIds.Contains(s.eid.Value) && bangidList.Contains(s.bang_id.Value));
             List<mo_srm_pr_main> prmainlist = await _srm_pr_main.GetListAsync(s => seIds.Contains(s.sentry_id.Value) && bangidList.Contains(s.bang_id.Value));
+            List<mo_ic_item_stockoccupy> item_stockoccupy = await _ic_item_stockoccupy.GetListAsync(s => seIds.Contains(s.orderentry_id.Value) && bangidList.Contains(s.bang_id));
+
 
             using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
             {
@@ -1566,12 +1581,13 @@ namespace Business.ResourceExamineManagement
                         var ooders = ObjectMapper.Map<List<mo_mes_oorder>, List<mes_oorder>>(oorderList);
                         _businessDbContext.BulkInsert(ooders);
                     }
-                    //沟通方老师与何腾,库存与库存占用,使用方老师得locationDetail和workorddetital 做需求数量和已发数量来实现库存占用和已扣减库存?
-                    /*if (sklist.Any())
+
+                    if (item_stockoccupy.Any())
                     {
-                        sklist.ForEach(s => { s.id = help.NextId(); s.tenant_id = param.tenantId; s.factory_id = param.factoryId; });
-                        await _ic_item_stockoccupy.InsertMany(sklist);
-                    }*/
+                        var sklist = ObjectMapper.Map<List<mo_ic_item_stockoccupy>, List<ic_item_stockoccupy>>(item_stockoccupy);
+                        sklist.ForEach(s => { s.create_time = DateTime.Now; });
+                        _businessDbContext.BulkInsert(sklist);
+                    }
                     if (po_occupy.Any())
                     {
                         po_occupy.ForEach(s => { s.create_time = DateTime.Now; });
@@ -1712,7 +1728,7 @@ namespace Business.ResourceExamineManagement
             //同步物料库存数据  根据预处理,来只找出部分数据同步。
             List<long> itemIds = pretreatments.Select(s => s.item_id.GetValueOrDefault()).ToList();
             //var icitemStokc = _mysql_ic_item_stock.GetListAsync(p => p.tenant_id == tenantId && p.factory_id == factoryId).Result;
-            var icitemStokc = _mysql_ic_item_stock.GetListAsync(p => itemIds.Contains(p.icitem_id)).Result;
+            var icitemStokc = _mysql_ic_item_stock.GetListAsync(p => p.company_id == companyId && itemIds.Contains(p.icitem_id)).Result;
             if (icitemStokc.Count > 0)
             {
                 List<string> numbers = pretreatments.Select(s => s.item_number).ToList();
@@ -1730,31 +1746,75 @@ namespace Business.ResourceExamineManagement
                 //插入数据
                 await _ic_item_stock.InsertManyAsync(moIcitemStokc);
             }
-            //在制工单占用记录表
-            var mes_mooccupy = _mysql_mes_mooccupy.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
-            if (mes_mooccupy.Count > 0)
-            {
-                var moMes_mooccupy = ObjectMapper.Map<List<mes_mooccupy>, List<mo_mes_mooccupy>>(mes_mooccupy);
-                moMes_mooccupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
-                await _mes_mooccupy.InsertManyAsync(moMes_mooccupy);
-            }
-            //工单主表
-            var mes_morder = _mysql_mes_morder.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
-            if (mes_morder.Count > 0)
-            {
-                var moMes_morder = ObjectMapper.Map<List<mes_morder>, List<mo_mes_morder>>(mes_morder);
-                moMes_morder.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
-                await _mes_morder.InsertManyAsync(moMes_morder);
-            }
-            //工单子表
-            var mes_moentry = _mysql_mes_moentry.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
-            if (mes_moentry.Count > 0)
+
+            var workordmsters = _workOrdMaster.Select(s => s.Domain == factoryId.ToString() && s.Status.ToLower() != "c");
+            if (workordmsters.Any())
             {
-                var moMes_moentry = ObjectMapper.Map<List<mes_moentry>, List<mo_mes_moentry>>(mes_moentry);
-                moMes_moentry.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
-                await _mes_moentry.InsertManyAsync(moMes_moentry);
-            }
+                //根据工单表找到工单明细,然后根据DOP工单占用记录,对比工单明细发货数量,来做冲销。
+                var workdetails = _workOrdDetail.Select(s => workordmsters.Select(c => c.WorkOrd).Contains(s.WorkOrd));
+
+                //物料库存占用记录表
+                var item_occupy = _mysql_ic_item_stockoccupy.GetListAsync(p => p.company_id == companyId && itemIds.Contains(p.icitem_id)&& workordmsters.Select(c => c.WorkOrd).Contains(p.morder_mo)).Result;
+                if (item_occupy.Any())
+                {
+                    item_occupy.ForEach(s =>
+                    {
+                        //TODO:对发布数量和占用数量进行对冲,因为目前没有处理不同层级下使用相同物料的占用的问题。dop占用有项次号,而wms的发布数量明细没有项次号
+                        var wdtl = workdetails.Where(x => x.WorkOrd == s.morder_mo && x.ItemNum == s.icitem_number).ToList();
+                        if (wdtl.Any())
+                        {
+                            foreach (var dtl in wdtl)
+                            {
+                                if (s.quantity - dtl.QtyPosted > 0)
+                                {
+                                    s.quantity -= dtl.QtyPosted;
+                                    dtl.QtyPosted = 0;
+                                }
+                                else
+                                {
+                                    dtl.QtyPosted -= s.quantity;
+                                    s.quantity = 0;
+                                }
+                            }
+                        }
+                    });
+                    item_occupy = item_occupy.Where(s => s.quantity > 0).ToList();
+                    if (item_occupy.Count > 0)
+                    {
+                        var mo_item_occupy = ObjectMapper.Map<List<ic_item_stockoccupy>, List<mo_ic_item_stockoccupy>>(item_occupy);
+                        mo_item_occupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                        await _ic_item_stockoccupy.InsertManyAsync(mo_item_occupy);
+                    }
+                }
+
+                //工单主表
+                var mes_morder = _mysql_mes_morder.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && workordmsters.Select(c => c.WorkOrd).Contains(x.morder_no)).Result;
+                if (mes_morder.Count > 0)
+                {
+                    mes_morder.ForEach(item => { item.bang_id = bangid; });
+                    var moMes_morder = ObjectMapper.Map<List<mes_morder>, List<mo_mes_morder>>(mes_morder);
+                    moMes_morder.ForEach(item => { item.GenerateNewId(help.NextId()); });
+                    await _mes_morder.InsertManyAsync(moMes_morder);
+                }
+                //工单子表
+                var mes_moentry = _mysql_mes_moentry.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
+                if (mes_moentry.Count > 0)
+                {
+                    mes_moentry.ForEach(item => { item.bang_id = bangid; });
+                    var moMes_moentry = ObjectMapper.Map<List<mes_moentry>, List<mo_mes_moentry>>(mes_moentry);
+                    moMes_moentry.ForEach(item => { item.GenerateNewId(help.NextId()); });
+                    await _mes_moentry.InsertManyAsync(moMes_moentry);
+                }
 
+                //在制工单占用记录表
+                var mes_mooccupy = _mysql_mes_mooccupy.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && mes_morder.Select(c => c.morder_no).Contains(x.moo_mo)).Result;
+                if (mes_mooccupy.Count > 0)
+                {
+                    var moMes_mooccupy = ObjectMapper.Map<List<mes_mooccupy>, List<mo_mes_mooccupy>>(mes_mooccupy);
+                    moMes_mooccupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                    await _mes_mooccupy.InsertManyAsync(moMes_mooccupy);
+                }
+            }
             //TODO:要不要根据某些条件只同步有效的数据
             //采购订单
             var srm_po_main = _mysql_srm_po_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
@@ -1794,7 +1854,7 @@ namespace Business.ResourceExamineManagement
             await _ic_item_stock.DeleteAsync(p => p.bang_id == bangid);
 
             //清除工单占用记录表
-            await _mes_mooccupy.DeleteAsync(p => p.bang_id == bangid);
+            //await _mes_mooccupy.DeleteAsync(p => p.bang_id == bangid);
 
             //清除工单主表
             //await _mes_morder.Delete(p => p.bang_id == bangid);
@@ -1809,7 +1869,7 @@ namespace Business.ResourceExamineManagement
             await _srm_po_list.DeleteAsync(p => p.bang_id == bangid);
 
             //清除采购订单占用详情
-            await _srm_po_occupy.DeleteAsync(p => p.bang_id == bangid);
+            //await _srm_po_occupy.DeleteAsync(p => p.bang_id == bangid);
         }
 
         /// <summary>
@@ -2193,16 +2253,18 @@ namespace Business.ResourceExamineManagement
                 foreach (var pr in prlist)
                 {
                     //找到没有关闭的PR,如果关联上的PR都是已关闭,则说明已经转了PO。
+                    //TODO:解决Database operation expected to affect 1 row(s) but actually affected 0 row(s). 如果业务逻辑有问题自行修改
                     var getPr = RerunPr(pr, alllist);
                     if (getPr != null)
                     {
-                        getPr.pr_aqty = getPr.pr_aqty - pr.pr_aqty;
-                        if (getPr.pr_aqty <= 0)
+                        if (getPr.pr_aqty - pr.pr_aqty <= 0)
                         {
                             //删除这个pr,没有小于0则是更新
                             dellist.Add(getPr);
                         }
-                        else {
+                        else 
+                        {
+                            getPr.pr_aqty = getPr.pr_aqty - pr.pr_aqty;
                             updatelist.Add(getPr);
                         }
                     }
@@ -2217,7 +2279,12 @@ namespace Business.ResourceExamineManagement
                 {
                     _businessDbContext.BulkDelete(dellist);
                 }
-
+                //清理掉库存占用
+                var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => monolist.Contains(s.morder_mo)).Result;
+                if (itemstockoccupy.Any())
+                {
+                    _businessDbContext.BulkDelete(itemstockoccupy);
+                }
                 //清理锁定期外的排程数据.
                 var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
                 if (periodList.Any())
@@ -2655,7 +2722,7 @@ namespace Business.ResourceExamineManagement
             List<mo_ic_item_stock> stocklist = new List<mo_ic_item_stock>();
             //物料占用记录
             List<mo_ic_item_stockoccupy> sklist = new List<mo_ic_item_stockoccupy>();
-
+            
             //sorder=null  是因为齐套检查不需要生成工单、采购、委外等信息,所以不需要关联的工单信息传递进去。
             var pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
             List<mo_ic_bom> autoCreates = new List<mo_ic_bom>();
@@ -2675,7 +2742,12 @@ namespace Business.ResourceExamineManagement
             //数据库快照-同步mysql库数据到mongoDB中
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments);
 
-            DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments);
+            DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
+            if (!planCheck)
+            {
+                //如果是齐套检查,则不考虑其他数据的占用,只看原材料库存
+                sklist = new List<mo_ic_item_stockoccupy>();
+            }
             _morderAppService.param = param;
             _purchaseOrderAppService.param = param;
             _CalcBomViewAppService.param = param;
@@ -2782,7 +2854,7 @@ namespace Business.ResourceExamineManagement
                     var wkordPrList = prmainlist.Where(s => s.pr_mono == wod.WorkOrd).ToList();
 
                     //反算所有的PR,根据时间减去提前期   //按最大预处理时间倒排
-                    var moIcitems = icitemlist.Where(s => wkordPrList.Select(c => c.icitem_id).Contains(s.Id)).ToList();
+                    var moIcitems = icitemlist.Where(s => wkordPrList.Select(c => c.icitem_id).Contains(s.mysql_id)).ToList();
                     var maxTime = moIcitems.Max(s => s.clean_leadtime.GetValueOrDefault());
                     wkordPrList.ForEach(pr =>
                     {
@@ -2797,7 +2869,6 @@ namespace Business.ResourceExamineManagement
                         }
                     });
                 }
-
                 using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
                 {
                     try
@@ -2808,6 +2879,12 @@ namespace Business.ResourceExamineManagement
                             var pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
                             _businessDbContext.BulkInsert(pr_mainlist);
                         }
+                        if (_CalcBomViewAppService.newStockOccList.Any())
+                        {
+                            var stockoccupylist = ObjectMapper.Map<List<mo_ic_item_stockoccupy>, List<ic_item_stockoccupy>>(_CalcBomViewAppService.newStockOccList);
+                            stockoccupylist.ForEach(s => { s.create_time = DateTime.Now; s.tenant_id = param.company_id.GetValueOrDefault(); s.company_id = param.company_id; s.factory_id = param.factoryId; });
+                            _businessDbContext.BulkInsert(stockoccupylist);
+                        }
                         if (_CalcBomViewAppService.srm_Po_OccupiesInsert.Any())
                         {
                             _CalcBomViewAppService.srm_Po_OccupiesInsert.ForEach(s => { s.company_id = param.company_id; s.factory_id = param.factoryId; });
@@ -2845,7 +2922,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="stocklist"></param>
         /// <param name="sklist"></param>
         /// <exception cref="NotImplementedException"></exception>
-        public void DataInitialization(List<mo_ic_bom> boms, long bangid, List<mo_ic_item> icitemlist, List<mo_ic_item_stock> stocklist, List<b_bom_pretreatment> pretreatments)
+        public void DataInitialization(List<mo_ic_bom> boms, long bangid, List<mo_ic_item> icitemlist, List<mo_ic_item_stock> stocklist, List<b_bom_pretreatment> pretreatments, List<mo_ic_item_stockoccupy> sklist)
         {
             List<long> itemIds = pretreatments.Select(p => p.item_id.GetValueOrDefault()).ToList();
             icitemlist.AddRange(_ic_item.GetListAsync(p => itemIds.Contains(p.mysql_id) && !p.IsDeleted).Result);
@@ -2884,6 +2961,8 @@ namespace Business.ResourceExamineManagement
             
             //物料库存
             stocklist.AddRange(_ic_item_stock.GetListAsync(p => p.factory_id == param.factoryId && p.bang_id == bangid && itemIds.Contains(p.icitem_id)).Result);
+            //物料库存占用表
+            sklist.AddRange(_ic_item_stockoccupy.GetListAsync(x => x.bang_id == bangid && !x.IsDeleted).Result);
 
             //物料提前期
             leadTimeList = GetLeadTime(icitemlist, param.company_id, param.factoryId);//提前期列表
@@ -3032,9 +3111,10 @@ namespace Business.ResourceExamineManagement
                 foreach (var workord in workOrdMasters)
                 {
                     Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
+                    decimal QtyOrdSum = workord.QtyOrded;
                     List<string> lines = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Select(a => a.Line).Distinct().ToList();
                     List<LineMaster> lineMasters = AllLineMasters.Where(p => lines.Contains(p.Line) && p.Domain == workord.Domain && p.IsActive).ToList();
-                    List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum);
+                    List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum, QtyOrdSum, workord.Domain);
                     var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
                     List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
                     var dopIcitems = _ic_item.GetListAsync(s => itemLocList.Select(c => c.ItemNum).Contains(s.number)).Result;
@@ -3046,8 +3126,7 @@ namespace Business.ResourceExamineManagement
                     }
                     List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
                     var Nbr = GetMaxSerialNumber(417416915624005);
-                    //根据某一产线汇总即该工单的总数
-                    decimal QtyOrdSum = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd && a.Line == lines[0]).Sum(a => a.OrdQty.GetValueOrDefault());
+                    
                     string LocationTo= lineMasters.FirstOrDefault()?.Location;
                     DateTime eff = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1);
                     DateTime start = eff.AddDays((double)(0 - cleanTime - 1));
@@ -3057,7 +3136,7 @@ namespace Business.ResourceExamineManagement
                     }
                     nbrMasterList.Add(new NbrMaster
                     {
-                        Domain = "1001",
+                        Domain = workOrdMasters[0].Domain,
                         Type = "SM",
                         Nbr = Nbr,
                         Remark = "下达自动领料",
@@ -3070,12 +3149,12 @@ namespace Business.ResourceExamineManagement
                         QtyOrd = QtyOrdSum,
                         IsActive = true,
                         IsChanged = true,
-                        Name = "1001",
+                        Name = workOrdMasters[0].Domain,
                         Department = "101",
                         CreateTime = DateTime.Now,
                         UpdateTime = DateTime.Now,
-                        CreateUser = "1001",
-                        UpdateUser = "1001"
+                        CreateUser = workOrdMasters[0].Domain,
+                        UpdateUser = workOrdMasters[0].Domain
                     });
                     int i = 1;
                     itemList?.ForEach(a =>
@@ -3092,7 +3171,7 @@ namespace Business.ResourceExamineManagement
                         {
                             nbrDetailList.Add(new NbrDetail
                             {
-                                Domain = "1001",
+                                Domain = workOrdMasters[0].Domain,
                                 Type = "SM",
                                 Nbr = Nbr,
                                 ItemNum = a.ComponentItem,
@@ -3101,25 +3180,26 @@ namespace Business.ResourceExamineManagement
                                 LocationFrom = LocationFrom,
                                 LocationTo = LocationTo,//现在这几条线是同一线边仓,暂时不考虑多个线边仓
                                 WorkOrd = workord.WorkOrd,
-                                QtyOrd = QtyOrdSum * a.Qty,
-                                CurrQtyOpened = QtyOrdSum * a.Qty,
+                                QtyOrd = a.Qty,
+                                CurrQtyOpened = a.Qty,
                                 Line = i,
                                 IsActive = true,
                                 CreateTime = DateTime.Now,
                                 UpdateTime = DateTime.Now,
-                                CreateUser = "1001",
-                                UpdateUser = "1001",
+                                CreateUser = workOrdMasters[0].Domain,
+                                UpdateUser = workOrdMasters[0].Domain,
                                 UM = a.UM
                             });
                             i++;
                         }
                         else
                         {
-                            nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).QtyOrd = itemComponent.QtyOrd + QtyOrdSum * a.Qty;
-                            nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).CurrQtyOpened = itemComponent.CurrQtyOpened + QtyOrdSum * a.Qty;
+                            nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).QtyOrd = itemComponent.QtyOrd + a.Qty;
+                            nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).CurrQtyOpened = itemComponent.CurrQtyOpened + a.Qty;
                         }
                     });
-                    nbrDetailList.ForEach(a =>
+                    //先屏蔽备料单扣除库存的DEMO演示。
+                    /*nbrDetailList.ForEach(a =>
                     {
                         if (a.Nbr == Nbr)
                         {
@@ -3150,7 +3230,7 @@ namespace Business.ResourceExamineManagement
                     //TODO:
                     //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
                     //在有上料和追溯的系统,可以在扫码上料或报工时(从线边仓)扣减。或者在实际发料出库时扣减。
-                    var locStock = _locationDetail.Select(a => itemKeys.Contains(a.ItemNum) && a.IsActive && a.Domain == "1001");
+                    var locStock = _locationDetail.Select(a => itemKeys.Contains(a.ItemNum) && a.IsActive && a.Domain == workOrdMasters[0].Domain);
                     locStock?.ForEach(a =>
                     {
                         nbrDetailList.ForEach(b =>
@@ -3161,7 +3241,7 @@ namespace Business.ResourceExamineManagement
                             }
                         });
                     });
-                    _locationDetail.Update(locStock);
+                    _locationDetail.Update(locStock);*/
                 }
             }
         }
@@ -3337,13 +3417,13 @@ namespace Business.ResourceExamineManagement
                 return "没有需要下达的工单。";
             }
             //获取已排产的工单
-            List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds) && p.Domain == "1001" && p.IsActive);
+            List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds) && p.Domain == workOrdMasters[0].Domain && p.IsActive);
             List<string> dbWorkOrds = dbPeriodSequences.Select(p => p.WorkOrds).Distinct().ToList();
 
             //查出已排产的工单
             workOrdMasters = workOrdMasters.Where(p => dbWorkOrds.Contains(p.WorkOrd)).ToList();
             //查出已产生领料单、过滤掉,取出未领料的工单
-            var nbrList = _nbrMaster.Select(a => a.Domain == "1001" && a.Type == "SM" && dbWorkOrds.Contains(a.WorkOrd));
+            var nbrList = _nbrMaster.Select(a => a.Domain == workOrdMasters[0].Domain && a.Type == "SM" && dbWorkOrds.Contains(a.WorkOrd));
             var noNbrlist = nbrList.Select(p => p.WorkOrd).ToList();
             workOrdMasters = workOrdMasters.Where(p => !noNbrlist.Contains(p.WorkOrd)).ToList();
             if (workOrdMasters.Count == 0)
@@ -3362,7 +3442,7 @@ namespace Business.ResourceExamineManagement
                 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);
+                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"; });
                 using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
                 {
@@ -3376,7 +3456,7 @@ namespace Business.ResourceExamineManagement
                         });
                         //快开平台用自增列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));
+                        var DBnbrList = _nbrMaster.Select(a => a.Domain == workOrdMasters[0].Domain && a.Type == "SM" && nbrs.Contains(a.Nbr));
                         nbrDetailList.ForEach(c =>
                         {
                             c.NbrRecID = DBnbrList.Where(a => a.Nbr == c.Nbr).First().RecID;
@@ -3418,7 +3498,7 @@ namespace Business.ResourceExamineManagement
             {
                 //添加工单数据
                 workOrd = new WorkOrdMaster();
-                workOrd.Domain = "1001";
+                workOrd.Domain = item.factory_id.ToString();
                 workOrd.OrdDate = item.moentry_sys_stime;
                 workOrd.ReleaseDate = Convert.ToDateTime(item.moentry_sys_stime.GetValueOrDefault().ToString("u"));
                 workOrd.WorkOrd = item.morder_no;
@@ -3440,7 +3520,7 @@ namespace Business.ResourceExamineManagement
                 foreach (var dtl in curRoutings)
                 {
                     woRouting = new WorkOrdRouting();
-                    woRouting.Domain = "1001";
+                    woRouting.Domain = item.factory_id.ToString();
                     woRouting.Descr = dtl.Descr;
                     woRouting.MilestoneOp = dtl.MilestoneOp;
                     woRouting.WorkOrd = item.morder_no;
@@ -3457,16 +3537,16 @@ namespace Business.ResourceExamineManagement
                     workOrdRoutings.Add(woRouting);
                 }
 
-                List<ProductStructureMaster> curStructures = GetProductStructure(item.product_code);
+                List<ProductStructureMaster> curStructures = GetProductStructure(item.product_code, workOrd.QtyOrded, item.factory_id.ToString());
                 foreach (var structure in curStructures)
                 {
                     //添加工单的物料信息
                     woDetail = new WorkOrdDetail();
-                    woDetail.Domain = "1001";
+                    woDetail.Domain = item.factory_id.ToString();
                     woDetail.WorkOrd = item.morder_no;
                     woDetail.Op = structure.Op;
                     woDetail.ItemNum = structure.ComponentItem;
-                    woDetail.QtyRequired = item.need_number.GetValueOrDefault() * structure.Qty;
+                    woDetail.QtyRequired = structure.Qty;
                     woDetail.QtyPosted = 0m;
                     woDetail.QtyReturned = 0m;
                     woDetail.FrozenBOMQty = structure.Qty;
@@ -3483,11 +3563,12 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="itenNum">产品物料编码</param>
         /// <returns></returns>
-        public List<ProductStructureMaster> GetProductStructure(string itenNum)
+        public List<ProductStructureMaster> GetProductStructure(string itenNum,decimal QtyOrdSum, string domain)
         {
             List<ProductStructureMaster> rtnStructures = new List<ProductStructureMaster>();
             //根据itemNum获取bom数据
-            var productStructures = _productStructureMaster.Select(p => itenNum == p.ParentItem && p.Domain == "1001" && p.IsActive);
+            var productStructures = _productStructureMaster.Select(p => itenNum == p.ParentItem && p.Domain == domain && p.IsActive);
+            productStructures.ForEach(s => { s.Qty = s.Qty * QtyOrdSum; });
             //添加非虚拟件
             rtnStructures.AddRange(productStructures.Where(p => p.StructureType.ToUpper() != "X").ToList());
 
@@ -3498,7 +3579,7 @@ namespace Business.ResourceExamineManagement
                 return rtnStructures;
             }
             //递归获取所有虚拟件对应的子物料
-            RecursionProductStructure(itenNum, curPhantoms, rtnStructures);
+            RecursionProductStructure(curPhantoms, rtnStructures);
 
             return rtnStructures;
         }
@@ -3509,17 +3590,18 @@ namespace Business.ResourceExamineManagement
         /// <param name="parentItem">产品的物料编码</param>
         /// <param name="structures">当前产品的虚拟件</param>
         /// <param name="rtnStructures"></param>
-        public void RecursionProductStructure(string parentItem, List<ProductStructureMaster> structures, List<ProductStructureMaster> rtnStructures)
+        public void RecursionProductStructure(List<ProductStructureMaster> structures, List<ProductStructureMaster> rtnStructures)
         {
             //获取虚拟件的子物料
             List<ProductStructureMaster> chdStructures = _productStructureMaster.Select(p => structures.Select(m => m.ComponentItem).Contains(p.ParentItem) && p.Domain == "1001" && p.IsActive);
+            chdStructures.ForEach(s =>
+            {
+                var parent = structures.Find(x => x.ComponentItem == s.ParentItem);
+                s.Qty = parent.Qty * s.Qty;
+            });
+
             //非虚拟件
             var notPhantoms = chdStructures.Where(p => p.StructureType.ToUpper() != "X").ToList();
-            //存在非虚拟件
-            foreach (var item in notPhantoms)
-            {
-                item.ParentItem = parentItem;
-            }
             rtnStructures.AddRange(notPhantoms);
 
             //虚拟件
@@ -3527,7 +3609,7 @@ namespace Business.ResourceExamineManagement
             if (phantoms.Count > 0)
             {
                 //递归
-                RecursionProductStructure(parentItem, phantoms, rtnStructures);
+                RecursionProductStructure(phantoms, rtnStructures);
             }
         }
 

+ 10 - 0
MicroServices/Business/Business.Domain/MongoDB/MES/IC/mo_ic_item_stockoccupy.cs

@@ -1,5 +1,6 @@
 using Business.Core.Attributes;
 using Microsoft.EntityFrameworkCore;
+using System;
 using System.ComponentModel.DataAnnotations;
 
 namespace Business.Domain
@@ -39,6 +40,7 @@ namespace Business.Domain
         /// 工单编号
         /// </summary>
         [Comment("工单编号")]
+        [StringLength(80)]
         public string morder_mo { get; set; }
 
         /// <summary>
@@ -65,12 +67,20 @@ namespace Business.Domain
         /// 占用数量
         /// </summary>
         [Comment("占用数量")]
+        [Precision(23, 10)]
         public decimal quantity { get; set; }
 
+        /// <summary>
+        /// 占用时间
+        /// </summary>
+        [Comment("占用时间")]
+        public DateTime? occupy_time { get; set; }
+
         /// <summary>
         /// 项次号
         /// </summary>
         [Comment("项次号")]
+        [StringLength(20)]
         public string item_no { get; set; }
     }
 }

+ 12 - 2
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ic_item_stockoccupy.cs

@@ -1,5 +1,6 @@
 using Business.Core.Attributes;
 using Microsoft.EntityFrameworkCore;
+using System;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 
@@ -24,13 +25,13 @@ namespace Business.Domain
         /// 订单id
         /// </summary>
         [Comment("订单id")]
-        public long order_id { get; set; }
+        public long? order_id { get; set; }
 
         /// <summary>
         /// 订单行id
         /// </summary>
         [Comment("订单行id")]
-        public long orderentry_id { get; set; }
+        public long? orderentry_id { get; set; }
 
         /// <summary>
         /// 工单ID
@@ -42,6 +43,7 @@ namespace Business.Domain
         /// 工单编号
         /// </summary>
         [Comment("工单编号")]
+        [StringLength(80)]
         public string morder_mo { get; set; }
 
         /// <summary>
@@ -69,12 +71,20 @@ namespace Business.Domain
         /// 占用数量
         /// </summary>
         [Comment("占用数量")]
+        [Precision(23, 10)]
         public decimal quantity { get; set; }
 
+        /// <summary>
+        /// 占用时间
+        /// </summary>
+        [Comment("占用时间")]
+        public DateTime? occupy_time { get; set; }
+
         /// <summary>
         /// 项次号
         /// </summary>
         [Comment("项次号")]
+        [StringLength(20)]
         public string item_no { get; set; }
     }
 }

+ 10 - 0
MicroServices/Business/Business.EntityFrameworkCore/EntityFrameworkCore/BusinessDbContextModelCreatingExtensions.cs

@@ -45,6 +45,16 @@ namespace Business.EntityFrameworkCore
                 b.Property(x => x.Id).ValueGeneratedNever();//迁移sqlserver默认是自增,需要配置一下
             });
 
+            builder.Entity<ic_item_stockoccupy>(b =>
+            {
+                b.ToTable("ic_item_stockoccupy");
+                b.HasIndex(b => new { b.icitem_id, b.tenant_id, b.company_id, b.factory_id });
+                //不映射到数据库中
+                b.Ignore(x => x.bang_id);
+                b.ConfigureByConvention();
+                b.Property(x => x.Id).ValueGeneratedNever();//迁移sqlserver默认是自增,需要配置一下
+            });
+
             builder.Entity<ic_substitute>(b =>
             {
                 b.ToTable("ic_substitute");