Переглянути джерело

虚拟件工序逻辑实现。

tangdi 2 роки тому
батько
коміт
7d2c32a36c

+ 30 - 7
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -7,6 +7,7 @@ using Business.EntityFrameworkCore.SqlRepositories;
 using Business.ReplenishmentManagement;
 using Business.ResourceExamineManagement;
 using Business.ResourceExamineManagement.Dto;
+using Business.StructuredDB.MES.IC;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
@@ -105,6 +106,10 @@ namespace Business.Replenishment
         private readonly IExtSqlRepository<DMS_IN_LOCDETAIL> _DMS_IN_LOCDETAIL;
         private readonly IExtSqlRepository<DMS_IN_SHIPPINGDETAIL> _DMS_IN_SHIPPINGDETAIL;
         private readonly IRepository<ReplenishmentTurnOverSet> _ReplenishmentTurnOverSet;
+        /// <summary>
+        /// 成品虚拟件工序关系表
+        /// </summary>
+        private readonly ISqlRepository<ProductStructureOp> _productStructureOp;
 
         /// <summary>
         /// 年度销售预测
@@ -272,7 +277,7 @@ namespace Business.Replenishment
             IRepository<crm_seorderentry, long> mysql_crm_seorderentry,
             IRepository<mo_mes_oorder, long> mes_oorder,
             IRepository<ProductionMasterPlan, long> productionMasterPlan,
-
+            ISqlRepository<ProductStructureOp> productStructureOp,
             IRepository<YearDemandManagement, long> yearDemandManagement,
             IRepository<ReplenishmentAnnualProduction, long> replenishmentAnnualProduction,
             IRepository<YearDemandManagementHistory, long> yearDemandManagementHistory,
@@ -363,7 +368,7 @@ namespace Business.Replenishment
             _mysql_examine_result = mysql_examine_result;
             _mysql_bom_child_examine= mysql_bom_child_examine;
             _replenishmentServiceLevel = replenishmentServiceLevel;
-
+            _productStructureOp = productStructureOp;
             _PlatformInventory = PlatformInventory;
             _workOrdRouting = workOrdRouting;
             _ASNBOLShipperDetail = ASNBOLShipperDetail;
@@ -3154,8 +3159,9 @@ namespace Business.Replenishment
             WorkOrdMaster workOrd;
             //工单工艺路线表
             WorkOrdRouting woRouting;
-            //工单物料表
-            var productStructureMs = _productStructureMaster.Select(x => morders.Select(c => c.morder_no).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
+            List<string> orderCode = morders.Select(c => c.product_code).ToList();
+            //成品虚拟件对应关系
+            var productOpList = _productStructureOp.Select(x => orderCode.Contains(x.ProductItem) && x.Domain == param.factoryId.ToString());
             foreach (var item in morders)
             {
                 var moItem = exmResult.Find(b => b.morder_no ==item.morder_no);
@@ -3213,7 +3219,8 @@ namespace Business.Replenishment
                         continue;
                     }
                     List<b_bom_child_examine> returnList = new List<b_bom_child_examine>();
-                    GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs);
+                    var productOps = productOpList.Where(x => x.ProductItem == item.product_code).ToList();
+                    GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs, productOps);
                     if (returnList.Any())
                     {
                         WorkOrdDetail woDetail = null;
@@ -3274,13 +3281,29 @@ namespace Business.Replenishment
         /// <param name="dtl"></param>
         /// <param name="returnList"></param>
         /// <param name="childs"></param>
-        public void GetWorkDetalis(List<b_bom_child_examine> dtl, List<b_bom_child_examine> returnList, List<b_bom_child_examine> childs)
+        public void GetWorkDetalis(List<b_bom_child_examine> dtl, List<b_bom_child_examine> returnList, List<b_bom_child_examine> childs, List<ProductStructureOp> productOps)
         {
             returnList.AddRange(dtl.Where(x => x.erp_cls != 4).ToList());
             var rst = childs.Where(s => dtl.Where(x => x.erp_cls == 4).Select(c => c.fid).Contains(s.parent_id.GetValueOrDefault())).ToList();
             if (rst.Any())
             {
-                GetWorkDetalis(rst, returnList, childs);
+                if (productOps.Any())
+                {
+                    //rst  虚拟件的子物料
+                    foreach (var item in rst)
+                    {
+                        var parent = childs.Find(x => x.fid == item.parent_id);
+                        if (parent != null)
+                        {
+                            var proOp = productOps.Find(x => x.ParentItem == parent.item_number && x.ComponentItem == item.item_number);
+                            if (proOp != null)
+                            {
+                                item.Op = proOp.Op;
+                            }
+                        }
+                    }
+                }
+                GetWorkDetalis(rst, returnList, childs, productOps);
             }
             return;
         }

+ 54 - 8
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -9,6 +9,7 @@ using Business.PriorityManagement;
 using Business.Replenishment;
 using Business.ReplenishmentManagement;
 using Business.ResourceExamineManagement.Dto;
+using Business.StructuredDB.MES.IC;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
@@ -278,6 +279,11 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private ISqlRepository<WorkOrdMaster> _workOrdMaster;
 
+        /// <summary>
+        /// 成品虚拟件工序关系表
+        /// </summary>
+        private readonly ISqlRepository<ProductStructureOp> _productStructureOp;
+
         /// <summary>
         /// 工单物料明细
         /// </summary>
@@ -457,6 +463,7 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<ProductStructureMaster> productStructureMaster,
             ISqlRepository<WorkOrdRouting> workOrdRouting,
             ISqlRepository<WorkOrdMaster> workOrdMaster,
+            ISqlRepository<ProductStructureOp> productStructureOp,
             ISqlRepository<WorkOrdDetail> workOrdDetail,
             ISqlRepository<NbrMaster> nbrMaster,
             ISqlRepository<NbrDetail> nbrDetail,
@@ -556,6 +563,7 @@ namespace Business.ResourceExamineManagement
             _productStructureMaster = productStructureMaster;
             _workOrdRouting = workOrdRouting;
             _workOrdMaster = workOrdMaster;
+            _productStructureOp = productStructureOp;
             _workOrdDetail = workOrdDetail;
             _lineMaster = lineMaster;
             _itemMaster = itemMaster;
@@ -3331,6 +3339,8 @@ namespace Business.ResourceExamineManagement
             }
             rtn.examines = examines;
             List<WorkOrdDetail> workOrdDetails = new List<WorkOrdDetail>();
+            //成品虚拟件对应关系
+            var productOpList = _productStructureOp.Select(x => workOrds.Select(c => c.ItemNum).Contains(x.ProductItem) && x.Domain == param.factoryId.ToString());
             foreach (var workord in workOrds)
             {
                 var exm = examines.Find(s => s.morder_no == workord.WorkOrd);
@@ -3344,7 +3354,8 @@ namespace Business.ResourceExamineManagement
                         continue;
                     }
                     List<BomChildExamineDto> returnList = new List<BomChildExamineDto>();
-                    GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs);
+                    var productOps = productOpList.Where(x => x.ProductItem == workord.ItemNum).ToList();
+                    GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs, productOps);
                     if (returnList.Any())
                     {
                         WorkOrdDetail woDetail = null;
@@ -4190,8 +4201,10 @@ namespace Business.ResourceExamineManagement
             WorkOrdMaster workOrd;
             //工单工艺路线表
             WorkOrdRouting woRouting;
-            //工单物料表
-            var productStructureMs = _productStructureMaster.Select(x => morders.Select(c => c.morder_no).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
+            List<string> orderCode = morders.Select(c => c.product_code).ToList();
+            //成品虚拟件对应关系
+            var productOpList = _productStructureOp.Select(x => orderCode.Contains(x.ProductItem) && x.Domain == param.factoryId.ToString());
+
             foreach (var item in morders)
             {
                 //添加工单数据
@@ -4249,7 +4262,8 @@ namespace Business.ResourceExamineManagement
                         continue;
                     }
                     List<b_bom_child_examine> returnList = new List<b_bom_child_examine>();
-                    GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs);
+                    var productOps = productOpList.Where(x => x.ProductItem == item.product_code).ToList();
+                    GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs, productOps);
                     if (returnList.Any())
                     {
                         WorkOrdDetail woDetail = null;
@@ -4308,13 +4322,29 @@ namespace Business.ResourceExamineManagement
         /// <param name="dtl"></param>
         /// <param name="returnList"></param>
         /// <param name="childs"></param>
-        public void GetWorkDetalis(List<BomChildExamineDto> dtl, List<BomChildExamineDto> returnList, List<BomChildExamineDto> childs)
+        public void GetWorkDetalis(List<BomChildExamineDto> dtl, List<BomChildExamineDto> returnList, List<BomChildExamineDto> childs, List<ProductStructureOp> productOps)
         {
             returnList.AddRange(dtl.Where(x => x.erp_cls != 4).ToList());
             var rst = childs.Where(s => dtl.Where(x => x.erp_cls == 4).Select(c => c.fid).Contains(s.parent_id.GetValueOrDefault())).ToList();
             if (rst.Any())
             {
-                GetWorkDetalis(rst, returnList, childs);
+                if (productOps.Any())
+                {
+                    //rst  虚拟件的子物料
+                    foreach (var item in rst)
+                    {
+                        var parent = childs.Find(x => x.fid == item.parent_id);
+                        if (parent != null)
+                        {
+                            var proOp = productOps.Find(x => x.ParentItem == parent.item_number && x.ComponentItem == item.item_number);
+                            if (proOp != null)
+                            {
+                                item.Op = proOp.Op;
+                            }
+                        }
+                    }
+                }
+                GetWorkDetalis(rst, returnList, childs, productOps);
             }
             return;
         }
@@ -4325,13 +4355,29 @@ namespace Business.ResourceExamineManagement
         /// <param name="dtl"></param>
         /// <param name="returnList"></param>
         /// <param name="childs"></param>
-        public void GetWorkDetalis(List<b_bom_child_examine> dtl, List<b_bom_child_examine> returnList, List<b_bom_child_examine> childs)
+        public void GetWorkDetalis(List<b_bom_child_examine> dtl, List<b_bom_child_examine> returnList, List<b_bom_child_examine> childs, List<ProductStructureOp> productOps)
         {
             returnList.AddRange(dtl.Where(x => x.erp_cls != 4).ToList());
             var rst = childs.Where(s => dtl.Where(x => x.erp_cls == 4).Select(c => c.fid).Contains(s.parent_id.GetValueOrDefault())).ToList();
             if (rst.Any())
             {
-                GetWorkDetalis(rst, returnList, childs);
+                if (productOps.Any())
+                {
+                    //rst  虚拟件的子物料
+                    foreach (var item in rst)
+                    {
+                        var parent = childs.Find(x => x.fid == item.parent_id);
+                        if (parent != null)
+                        {
+                            var proOp = productOps.Find(x => x.ParentItem == parent.item_number && x.ComponentItem == item.item_number);
+                            if (proOp != null)
+                            {
+                                item.Op = proOp.Op;
+                            }
+                        }
+                    }
+                }
+                GetWorkDetalis(rst, returnList, childs, productOps);
             }
             return;
         }

+ 60 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ProductStructureOp.cs

@@ -0,0 +1,60 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Business.StructuredDB.MES.IC
+{
+    /// <summary>
+    /// 虚拟件对应成品工序关联表
+    /// </summary>
+    public class ProductStructureOp
+    {
+        /// <summary>
+        /// 主键
+        /// </summary>
+        [Comment("主键")]
+        [Key]
+        public int RecID { get; set; }
+
+        /// <summary>
+        /// 域名
+        /// </summary>
+        [Comment("域名")]
+        public string Domain { get; set; }
+
+        /// <summary>
+        /// 父零件
+        /// </summary>
+        [Comment("父零件")]
+        public string ParentItem { get; set; }
+
+        /// <summary>
+        /// 子零件
+        /// </summary>
+        [Comment("子零件")]
+        public string ComponentItem { get; set; }
+
+        /// <summary>
+        /// 成品编码
+        /// </summary>
+        [Comment("父零件")]
+        public string ProductItem { get; set; }
+
+        /// <summary>
+        /// 工序
+        /// </summary>
+        [Comment("工序")]
+        public int Op { get; set; }
+
+        /// <summary>
+        /// 是否有效:1-有效;0-无效
+        /// </summary>
+        [Comment("是否有效")]
+        public bool IsActive { get; set; }
+
+    }
+}

+ 6 - 0
MicroServices/Business/Business.EntityFrameworkCore/EntityFrameworkCore/DOP/BusinessDbContext.cs

@@ -1,6 +1,7 @@
 using Business.Domain;
 using Business.ResourceExamineManagement.Dto;
 using Business.StructuredDB.MES;
+using Business.StructuredDB.MES.IC;
 using Business.StructuredDB.Production;
 using Business.StructuredDB.Replenishment;
 using Business.StructuredDB.SaleFcst;
@@ -150,6 +151,11 @@ namespace Business.EntityFrameworkCore
         /// </summary>
         public DbSet<WorkOrdRouting> WorkOrdRouting { get; set; }
 
+        /// <summary>
+        /// 成品虚拟件关系对应表
+        /// </summary>
+        public DbSet<ProductStructureOp> ProductStructureOp { get; set; }
+
         /// <summary>
         /// 工作日历表
         /// </summary>