Browse Source

Merge branch 'master' of http://123.60.180.165:4647/ZZYDOP/DOPCore

# Conflicts:
#	MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs
#	MicroServices/Business/Business.Application/ResourceExamineManagement/ProductExamineAppService.cs
#	MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs
tangdi 3 năm trước cách đây
mục cha
commit
cab48b8d4f

+ 3 - 0
.gitignore

@@ -884,3 +884,6 @@ MicroServices/Business/Business.Test/obj/Debug/net6.0/refint/Business.Test.dll
 MicroServices/Business/Business.Tests/obj/Business.Host.csproj.nuget.dgspec.json
 MicroServices/Business/Business.Tests/obj/Business.Host.csproj.nuget.g.props
 MicroServices/Business/Business.Tests/obj/Business.Host.csproj.nuget.g.targets
+MicroServices/Business/Bussiness.MongoModel/obj/Business.Core.csproj.nuget.dgspec.json
+MicroServices/Business/Bussiness.MongoModel/obj/Business.Core.csproj.nuget.g.props
+MicroServices/Business/Bussiness.MongoModel/obj/Business.Core.csproj.nuget.g.targets

+ 4 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/GenerateMorderDto.cs

@@ -16,6 +16,10 @@ namespace Business.ResourceExamineManagement.Dto
         /// </summary>
         public crm_seorderentry seorderentry { get; set; }
         /// <summary>
+        /// 销售订单
+        /// </summary>
+        public crm_seorder seorder { get; set; }
+        /// <summary>
         /// 物料详情
         /// </summary>
         public mo_ic_item ic_Item { get; set; }

+ 32 - 20
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -1,4 +1,5 @@
-using Business.Core.MongoDBHelper;
+using Business.Core.Enum;
+using Business.Core.MongoDBHelper;
 using Business.ResourceExamineManagement.Dto;
 using Bussiness.Model.MES.IC;
 using Bussiness.Model.Production;
@@ -36,11 +37,13 @@ namespace Business.ResourceExamineManagement
         public List<mo_mes_morder> mordersList = new List<mo_mes_morder>();
         public List<mo_mes_moentry> moentriesList = new List<mo_mes_moentry>();
         public List<mo_mes_mooccupy> mooccupyAllList = new List<mo_mes_mooccupy>();
-        public List<mo_srm_po_list> srm_po_list = new List<mo_srm_po_list>();
+        //public List<mo_srm_po_list> srm_po_list = new List<mo_srm_po_list>();
 
         public List<mo_srm_po_list> srm_Po_Lists = new List<mo_srm_po_list>();
         public List<mo_srm_po_occupy> srm_Po_Occupies = new List<mo_srm_po_occupy>();
 
+        public crm_seorder seorder = new crm_seorder();
+
         /// <summary>
         /// 工艺路径
         /// </summary>
@@ -85,20 +88,10 @@ namespace Business.ResourceExamineManagement
             PurchaseOrderAppService purchaseOrderAppService)
         {
             _morderAppService = morderAppService;
-            _morderAppService.process = process;
-            _morderAppService.techs = techs;
-            _morderAppService.tech_Processes = tech_Processes;
-            _morderAppService.tech_Proc_Workshops = tech_Proc_Workshops;
-
             _productExamineAppService = productExamineAppService;
-            _productExamineAppService.process = process;
-            _productExamineAppService.techs = techs;
-            _productExamineAppService.tech_Processes = tech_Processes;
-            _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
             _purchaseOrderAppService = purchaseOrderAppService;
         }
 
-
         /// <summary>
         /// 计算物料库存量
         /// </summary>
@@ -210,18 +203,23 @@ namespace Business.ResourceExamineManagement
                     GenerateMorderDto generateMorderDto = new GenerateMorderDto()
                     {
                         seorderentry = sentrys,
+                        seorder = seorder,
                         ic_Item = ic_item,
                         BomNumber = level1Dto.bom_number,
                         version = level1Dto.version,
                         number = level1Dto.item_number,
                         Quantity = level1Dto.lack_qty,
-                        morder_type = "销售工单",
-                        work_order_type = "常规工单",
-                        morder_state = "初始",
+                        morder_type = MorderEnum.XsMorder,
+                        work_order_type = MorderEnum.CgMorder,
+                        morder_state = MorderEnum.Initial_state,
                         bang_id = bangid,
 
                     };
                     //生成主工单
+                    _morderAppService.process = process;
+                    _morderAppService.techs = techs;
+                    _morderAppService.tech_Processes = tech_Processes;
+                    _morderAppService.tech_Proc_Workshops = tech_Proc_Workshops;
                     mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
                 }
             }
@@ -255,6 +253,10 @@ namespace Business.ResourceExamineManagement
                             version = level1Dto.version,
                             packages = (int)mes_Morders.morder_production_number.Value
                         };
+                        _productExamineAppService.process = process;
+                        _productExamineAppService.techs = techs;
+                        _productExamineAppService.tech_Processes = tech_Processes;
+                        _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
 
                         var plan = planList.Find(x => x.icitem_id == level1Dto.item_id);
                         var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
@@ -487,6 +489,11 @@ namespace Business.ResourceExamineManagement
                             version = item.version,
                             packages = (int)item.lack_qty
                         };
+                        _productExamineAppService.process = process;
+                        _productExamineAppService.techs = techs;
+                        _productExamineAppService.tech_Processes = tech_Processes;
+                        _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
+
                         item.make_qty = item.lack_qty;
                         //todo:增加生成子工单后,这里需要加上生成的子工单的明细。
                         item.make_list = new List<moorder>();
@@ -852,6 +859,11 @@ namespace Business.ResourceExamineManagement
                                 version = sct.version,
                                 packages = (int)sct.lack_qty
                             };
+                            _productExamineAppService.process = process;
+                            _productExamineAppService.techs = techs;
+                            _productExamineAppService.tech_Processes = tech_Processes;
+                            _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
+
                             var minute = _productExamineAppService.ProductiveExamine(prodExamine);
                             //系统建议完工日期为 开工日期+产能检查时间=完工日期
                             var Day = minute / (60 * 10); //返回的分钟除以十个小时得出工作天数;
@@ -1062,9 +1074,9 @@ namespace Business.ResourceExamineManagement
             oOrder.inventory_number = 0;//入库数量
             oOrder.notice_qty = 0;//已开通知单数量
             oOrder.moentry_on = 1;//启动状态
-            //oOrder.start_time = DateTime.Now;//开始时间
-            //oOrder.pause_time = DateTime.Now;//最近暂停时间
-            //oOrder.restart_time = DateTime.Now;//最近重启时间
+                                  //oOrder.start_time = DateTime.Now;//开始时间
+                                  //oOrder.pause_time = DateTime.Now;//最近暂停时间
+                                  //oOrder.restart_time = DateTime.Now;//最近重启时间
             oOrder.project_name = returnlist.item_name;//项目名称
             oOrder.sent_status = 1;//发料状态 1-待发料  2-已发料
             oOrder.production_unit = returnlist.unit;//加工单位
@@ -1080,7 +1092,7 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// 计算在途
         /// </summary>
-        public void CalcInTransit(crm_seorderentry sentrys,BomChildExamineDto item,long bangid,DateTime plan_date)
+        public void CalcInTransit(crm_seorderentry sentrys, BomChildExamineDto item, long bangid, DateTime plan_date)
         {
             var occupylist = _purchaseOrderAppService.CheckPurchaseOrder(sentrys, item.item_id, item.lack_qty, plan_date, planList, bangid);
             if (occupylist.Any())
@@ -1096,7 +1108,7 @@ namespace Business.ResourceExamineManagement
                     ocp.etime = s.etime;
                     ocp.qty = s.qty;
                     ocp.type = s.type;
-                    var polist = srm_po_list.Find(f => f.id == s.polist_id);
+                    var polist = srm_Po_Lists.Find(f => f.id == s.polist_id);
                     if (polist != null)
                     {
                         ocp.po_billno = polist.po_billno;

+ 37 - 39
MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs

@@ -26,27 +26,27 @@ namespace Business.ResourceExamineManagement
     public class MorderAppService : ApplicationService
     {
         #region 服务
-        /// <summary>
-        /// 生产工单主表
-        /// </summary>
-        private readonly IMongoDB<mo_mes_morder> _mo_mes_morder;
-        /// <summary>
-        /// 生产工单子表
-        /// </summary>
-        private readonly IMongoDB<mo_mes_moentry> _mo_mes_moentry;
-
-        /// <summary>
-        /// 在制工单占用记录表
-        /// </summary>
-        private readonly IMongoDB<mo_mes_mooccupy> _mo_mes_mooccupy;
-        /// <summary>
-        /// 销售订单
-        /// </summary>
-        private readonly IRepository<crm_seorder, long> _mysql_crm_seorder;
-        /// <summary>
-        /// 销售订单明细
-        /// </summary>
-        private readonly IRepository<crm_seorderentry, long> _mysql_crm_seorderentry;
+        ///// <summary>
+        ///// 生产工单主表
+        ///// </summary>
+        //private readonly IMongoDB<mo_mes_morder> _mo_mes_morder;
+        ///// <summary>
+        ///// 生产工单子表
+        ///// </summary>
+        //private readonly IMongoDB<mo_mes_moentry> _mo_mes_moentry;
+
+        ///// <summary>
+        ///// 在制工单占用记录表
+        ///// </summary>
+        //private readonly IMongoDB<mo_mes_mooccupy> _mo_mes_mooccupy;
+        ///// <summary>
+        ///// 销售订单
+        ///// </summary>
+        //private readonly IRepository<crm_seorder, long> _mysql_crm_seorder;
+        ///// <summary>
+        ///// 销售订单明细
+        ///// </summary>
+        //private readonly IRepository<crm_seorderentry, long> _mysql_crm_seorderentry;
         /// <summary>
         /// 产能检查
         /// </summary>
@@ -92,26 +92,21 @@ namespace Business.ResourceExamineManagement
         /// <param name="icitem"></param>
         /// <param name="icbom"></param>
         public MorderAppService(
-            IMongoDB<mo_mes_morder> mo_mes_morder,
-            IMongoDB<mo_mes_moentry> mo_mes_moentry,
-            IMongoDB<mo_mes_mooccupy> mo_mes_mooccupy,
-            IRepository<crm_seorder, long> mysql_crm_seorder,
-            IRepository<crm_seorderentry, long> mysql_crm_seorderentry,
+            //IMongoDB<mo_mes_morder> mo_mes_morder,
+            //IMongoDB<mo_mes_moentry> mo_mes_moentry,
+            //IMongoDB<mo_mes_mooccupy> mo_mes_mooccupy,
+            //IRepository<crm_seorder, long> mysql_crm_seorder,
+            //IRepository<crm_seorderentry, long> mysql_crm_seorderentry,
             ProductExamineAppService productExamineAppService
             )
         {
 
-            _mo_mes_morder = mo_mes_morder;
-            _mo_mes_moentry = mo_mes_moentry;
-            _mo_mes_mooccupy = mo_mes_mooccupy;
-            _mysql_crm_seorder = mysql_crm_seorder;
-            _mysql_crm_seorderentry = mysql_crm_seorderentry;
+            //_mo_mes_morder = mo_mes_morder;
+            //_mo_mes_moentry = mo_mes_moentry;
+            //_mo_mes_mooccupy = mo_mes_mooccupy;
+            //_mysql_crm_seorder = mysql_crm_seorder;
+            //_mysql_crm_seorderentry = mysql_crm_seorderentry;
             _productExamineAppService = productExamineAppService;
-            _productExamineAppService.process = process;
-            _productExamineAppService.techs = techs;
-            _productExamineAppService.tech_Processes = tech_Processes;
-            _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
-
         }
         #endregion
 
@@ -130,8 +125,6 @@ namespace Business.ResourceExamineManagement
 
             //2.每一个销售订单行对应一个工单。
             //TODO:考虑性能问题 循环调用,后期改造传递数组,批量处理数据后,批量保存。
-            //获取销售订单信息
-            var seorder = _mysql_crm_seorder.FindAsync(x => x.Id == generateMorderDto.seorderentry.seorder_id).Result;
 
             mo_mes_morder mes_Morder = new mo_mes_morder();
             mes_Morder.mysql_id = snowFlake.NextId();
@@ -158,6 +151,11 @@ namespace Business.ResourceExamineManagement
                         version = generateMorderDto.version,
                         packages = (int)generateMorderDto.Quantity.GetValueOrDefault()
                     };
+                    _productExamineAppService.process = process;
+                    _productExamineAppService.techs = techs;
+                    _productExamineAppService.tech_Processes = tech_Processes;
+                    _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
+
                     var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
                     //系统建议完工日期为 开工日期+产能检查时间=完工日期
                     var Day = ProductiveDate / (60 * 10); //返回的分钟除以十个小时得出工作天数;
@@ -171,7 +169,7 @@ namespace Business.ResourceExamineManagement
             mes_Morder.factory_id = generateMorderDto.seorderentry.factory_id;
             mes_Morder.product_code = generateMorderDto.number;
             mes_Morder.product_name = generateMorderDto.ic_Item.name;
-            mes_Morder.project_name = seorder.project_name;
+            mes_Morder.project_name = generateMorderDto.seorder.project_name;
             mes_Morder.planner_num = generateMorderDto.seorderentry.planner_no;
             mes_Morder.planner_name = generateMorderDto.seorderentry.planner_name;
             mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);

+ 4 - 4
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductExamineAppService.cs

@@ -80,7 +80,7 @@ namespace Business.ResourceExamineManagement
                 throw new NotImplementedException("工序数据不存在,请调整!");
             }
             //1.4、获取工位数据
-            List<mo_mes_tech_proc_workshop> curWorkShops = tech_Proc_Workshops.Where(p=> curTechProcess.Select(m=>m.mysql_id).Contains(p.tech_proc_id.GetValueOrDefault())).ToList(); ;
+            List<mo_mes_tech_proc_workshop> curWorkShops = tech_Proc_Workshops.Where(p=> curTechProcess.Select(m=>m.mysql_id).Contains(p.tech_proc_id)).ToList(); ;
 
             //2、获取工艺路径下的第一层级工序:目前只考虑第一层级
             List<mo_mes_tech_process> fistLevels = curTechProcess.Where(p => p.parentprocid == curTech.mysql_id).ToList();
@@ -109,7 +109,7 @@ namespace Business.ResourceExamineManagement
             //获取下一步工序id
             List<long> nextProcIds = processes.Where(p=>p.nextprocid != null).Select(p => p.nextprocid.GetValueOrDefault()).ToList();
             //获取起点工序
-            var startProcs = processes.Where(p => !nextProcIds.Contains(p.proc_id.GetValueOrDefault())).ToList();
+            var startProcs = processes.Where(p => !nextProcIds.Contains(p.proc_id)).ToList();
             //递归处理工序返回值
             List<mo_mes_tech_process> rtnList;
             for (int i = 0; i < startProcs.Count; i++)
@@ -192,7 +192,7 @@ namespace Business.ResourceExamineManagement
             StartTimeDto dto = new StartTimeDto();
             //添加耗时记录
             dto.tech_id = proc.tech_id;
-            dto.proc_id = proc.proc_id.GetValueOrDefault();
+            dto.proc_id = proc.proc_id;
             dto.nextproc_id = proc.nextprocid;
             if (proc.wctype == 1)//人工型:数量/uph(一小时生产数量)*60(小时转换为分钟)/wsinuse(工位数)
             {
@@ -240,7 +240,7 @@ namespace Business.ResourceExamineManagement
                 dto = new StartTimeDto();
                 //添加耗时记录
                 dto.tech_id = chd.tech_id;
-                dto.proc_id = chd.proc_id.GetValueOrDefault();
+                dto.proc_id = chd.proc_id;
                 dto.nextproc_id = chd.nextprocid;
 
                 //计算当前工序生产耗时

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

@@ -330,7 +330,6 @@ namespace Business.ResourceExamineManagement
             param.tenantId = input.tenantId;
             param.factoryId = input.factoryId;
 
-
             //资源检查结果
             PschedDto rtn = new PschedDto();
             rtn.sorderid = input.sorderId;
@@ -396,12 +395,12 @@ namespace Business.ResourceExamineManagement
             }
 
             //1.3、获取当前工艺路径下的工序数据
-            List<long> procIds = tech_Processes.Select(m => m.proc_id.GetValueOrDefault()).ToList();
+            List<long> procIds = tech_Processes.Select(m => m.proc_id).ToList();
             List<mo_mes_process> process = await _mes_process.GetManyByCondition(p => procIds.Contains(p.mysql_id) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
 
             //1.3、获取工艺工序关联工位信息
             List<long> techProcIds = tech_Processes.Select(m => m.mysql_id).ToList();
-            List<mo_mes_tech_proc_workshop> tech_Proc_Workshops = await _mes_tech_proc_workshop.GetManyByCondition(p => techProcIds.Contains(p.tech_proc_id.Value) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
+            List<mo_mes_tech_proc_workshop> tech_Proc_Workshops = await _mes_tech_proc_workshop.GetManyByCondition(p => techProcIds.Contains(p.tech_proc_id) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
             //主工单
             List<mo_mes_morder> mo_Mes_Morders = await _mes_morder.GetManyByCondition(x => boms.Select(p => p.bom_number).Contains(x.bom_number) && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
           && x.morder_icitem_type != MorderEnum.XgwyMorder) && !x.IsDeleted && x.tenant_id == param.tenantId && x.bang_id == bangid);
@@ -431,7 +430,7 @@ namespace Business.ResourceExamineManagement
             supplierList = GetSupplier(itemIds, input.tenantId, input.factoryId);//供应商列表
             planList = GetICPlan(itemIds, input.tenantId, input.factoryId);//plan列表
 
-            var srm_po_list = _srm_po_list.GetManyByCondition(x => itemIds.Contains(x.icitem_id.GetValueOrDefault()) && x.state == 1 && x.rstate == 1).Result;
+            //var srm_po_list = _srm_po_list.GetManyByCondition(x => itemIds.Contains(x.icitem_id.GetValueOrDefault()) && x.state == 1 && x.rstate == 1).Result;
 
             _CalcBomViewAppService.param = param;
             _CalcBomViewAppService.planList = planList;
@@ -445,10 +444,12 @@ namespace Business.ResourceExamineManagement
 
             _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
             _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
-            _CalcBomViewAppService.srm_po_list = srm_po_list;
+                                                                      // _CalcBomViewAppService.srm_po_list = srm_po_list;//采购明细
+
+            _CalcBomViewAppService.seorder = sorder;//销售订单
 
-            _purchaseOrderAppService.mo_Srm_Po_Lists = poDetailList;
-            _purchaseOrderAppService.srm_Po_Occupies = poOccupys;
+            _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
+            _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
 
             foreach (var item in sentrys)
             {

+ 41 - 0
MicroServices/Business/Business.Test/MorderTest.cs

@@ -0,0 +1,41 @@
+using Business.ResourceExamineManagement.Dto;
+using Business.ResourceExamineManagement;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace Business.Test
+{
+    /// <summary>
+    /// 工单单元测试类
+    /// </summary>
+    public class MorderTest
+    {
+        [Fact]
+        public void Morder()
+        {
+            //Arrange
+            var ProductExamine = new ProductExamineAppService();
+            ProductExamineTest productExamineTest = new ProductExamineTest();
+            ProductExamine.techs = productExamineTest.CreateTechnique();
+            ProductExamine.process = productExamineTest.CreateProcess();
+            ProductExamine.tech_Processes = productExamineTest.CreateTechProcess();
+            var morder = new MorderAppService(ProductExamine);
+
+            //Act
+            ProdExamineParamDto prodExamine = new ProdExamineParamDto()
+            {
+                bom_number = "R650K",
+                version = "3.0",
+                packages = 1000
+            };
+            //var result = sut.ProductiveExamine(prodExamine);
+            //Assert
+            //Xunit.Assert.Equal(14030, result);
+        }
+
+    }
+}

+ 2 - 2
MicroServices/Business/Bussiness.MongoModel/Tech/mo_mes_tech_proc_workshop.cs

@@ -25,14 +25,14 @@ namespace Bussiness.MongoModel.Tech
         /// </summary>
         [Required]
         [Comment("工艺工序id")]
-        public long? tech_proc_id { get; set; }
+        public long tech_proc_id { get; set; }
 
         /// <summary>
         /// 工位id
         /// </summary>
         [Required]
         [Comment("工位id")]
-        public long? workshop_id { get; set; }
+        public long workshop_id { get; set; }
 
         /// <summary>
         /// 序列号

+ 1 - 1
MicroServices/Business/Bussiness.MongoModel/Tech/mo_mes_tech_process.cs

@@ -32,7 +32,7 @@ namespace Bussiness.MongoModel.Tech
         /// </summary>
         [Required]
         [Comment("工序主键")]
-        public long? proc_id { get; set; }
+        public long proc_id { get; set; }
 
         /// <summary>
         /// 组合层级