Просмотр исходного кода

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

Murphy 3 лет назад
Родитель
Сommit
02d8ba1256

+ 58 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs

@@ -1,11 +1,13 @@
 using Business.Core.Enum;
 using Business.Core.Utilities;
+using Business.EntityFrameworkCore.SqlRepositories;
 using Business.Model.Production;
 using Business.Model.Sale;
 using Business.MongoModel.MES.IC;
 using Business.MongoModel.Production;
 using Business.MongoModel.Tech;
 using Business.ResourceExamineManagement.Dto;
+using Newtonsoft.Json.Linq;
 using System;
 using System.Collections.Generic;
 using System.Globalization;
@@ -97,6 +99,8 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         public List<mo_mes_mooccupy> mo_Mes_Mooccupies = new List<mo_mes_mooccupy>();
 
+
+        private readonly ISqlRepository<rf_serialnumber> _rf_serialnumber;
         #endregion
         #region 构造函数
         /// <summary>
@@ -110,7 +114,8 @@ namespace Business.ResourceExamineManagement
             //IMongoDB<mo_mes_mooccupy> mo_mes_mooccupy,
             //IRepository<crm_seorder, long> mysql_crm_seorder,
             //IRepository<crm_seorderentry, long> mysql_crm_seorderentry,
-            ProductExamineAppService productExamineAppService
+            ProductExamineAppService productExamineAppService,
+            ISqlRepository<rf_serialnumber> rf_serialnumber
             )
         {
 
@@ -120,6 +125,7 @@ namespace Business.ResourceExamineManagement
             //_mysql_crm_seorder = mysql_crm_seorder;
             //_mysql_crm_seorderentry = mysql_crm_seorderentry;
             _productExamineAppService = productExamineAppService;
+            _rf_serialnumber = rf_serialnumber;
         }
         #endregion
 
@@ -148,7 +154,7 @@ namespace Business.ResourceExamineManagement
             //mes_Morder.morder_icitem_type
             mes_Morder.work_order_type = generateMorderDto.work_order_type;
             mes_Morder.morder_state = generateMorderDto.morder_state;
-            mes_Morder.morder_no = string.Format("VMO{0}", DateTime.Now.ToString("yyyyMMddhhmmss"));//测试编码
+            mes_Morder.morder_no = GetMaxSerialNumber(418022612537413);//WWPO
             mes_Morder.fms_number = generateMorderDto.ic_Item.fms_number;
             mes_Morder.bom_number = generateMorderDto.BomNumber;
             mes_Morder.fmodel = generateMorderDto.ic_Item.model;
@@ -497,5 +503,55 @@ namespace Business.ResourceExamineManagement
             mes_Mooccupy.factory_id = param.factoryId;
             return mes_Mooccupy;
         }
+
+        /// <summary>
+        /// 得到一个流水号的最大流水号
+        /// </summary>
+        /// <param name="id">流水号id</param>
+        /// <param name="formData">json数据,可以用json中的某个字段值作为通配符字替换流水号格式。</param>
+        /// <returns></returns>
+        public string GetMaxSerialNumber(long id, JObject? formData = null)
+        {
+            var modelList = _rf_serialnumber.Select(s => s.Id == id);
+            if (modelList == null && modelList.Count < 1)
+            {
+                return string.Empty;
+            }
+            var model = modelList[0];
+            int max = model.CurrentNumber + 1;
+            var date = DateTime.Now;
+            var lastDate = model.LastTime;
+            switch (model.NumberType)
+            {
+                case 1: //年流水
+                    if (date.Year > lastDate.Year)
+                    {
+                        max = 1;
+                    }
+                    break;
+                case 2: //月流水
+                    if (date.Year > lastDate.Year || date.Month > lastDate.Month)
+                    {
+                        max = 1;
+                    }
+                    break;
+                case 3: //日流水
+                    if (date.Year > lastDate.Year || date.Month > lastDate.Month || date.Day > lastDate.Day)
+                    {
+                        max = 1;
+                    }
+                    break;
+            }
+            string number = max.ToString().PadLeft(model.NumberSize, '0');
+            string serialNumber = string.IsNullOrWhiteSpace(model.Format) ? number
+                : model.Format.ContainsIgnoreCase("{number}")
+                ? model.Format.ReplaceIgnoreCase("{number}", number)
+                : model.Format + number;
+            //更新当前编号和最后时间
+            model.LastTime = date;
+            model.CurrentNumber = max;
+            _rf_serialnumber.Update(model);
+            return Wildcard.Replace(serialNumber, formData);
+        }
     }
 }

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

@@ -255,17 +255,17 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// 工单工序表
         /// </summary>
-        private readonly ISqlRepository<WorkOrdRouting> _workOrdRouting;
+        private ISqlRepository<WorkOrdRouting> _workOrdRouting;
 
         /// <summary>
         /// 工单主表
         /// </summary>
-        private readonly ISqlRepository<WorkOrdMaster> _workOrdMaster;
+        private ISqlRepository<WorkOrdMaster> _workOrdMaster;
 
         /// <summary>
         /// 工单物料明细
         /// </summary>
-        private readonly ISqlRepository<WorkOrdDetail> _workOrdDetail;
+        private ISqlRepository<WorkOrdDetail> _workOrdDetail;
 
         private readonly ISqlRepository<rf_serialnumber> _rf_serialnumber;
         private readonly ISqlRepository<LocationDetail> _locationDetail;
@@ -2413,8 +2413,9 @@ namespace Business.ResourceExamineManagement
         {
             //获取工艺路线数据:product_code=物料编码
             List<RoutingOpDetail> allRoutings = _routingOpDetail.Select(p => morders.Select(m => m.product_code).Contains(p.RoutingCode));
-            //获取标准BOM数据
-            List<ProductStructureMaster> productStructures = GetProductStructure(morders.Select(p => p.product_code).Distinct().ToList());
+            ////获取标准BOM数据
+            //List<ProductStructureMaster> allProductStructures = GetProductStructure(morders.Select(p => p.product_code).Distinct().ToList());
+
             //工单主表
             List<WorkOrdMaster> workOrds = new List<WorkOrdMaster>();
             WorkOrdMaster workOrd;
@@ -2441,7 +2442,7 @@ namespace Business.ResourceExamineManagement
                 workOrd.IsActive = true;
                 workOrd.IsConfirm = true;
                 workOrds.Add(workOrd);
-
+                
                 //添加工单工艺路线数据
                 var curRoutings = allRoutings.Where(p => p.RoutingCode == item.product_code).ToList();
                 foreach (var dtl in curRoutings)
@@ -2462,8 +2463,10 @@ namespace Business.ResourceExamineManagement
                     workOrdRoutings.Add(woRouting);
                 }
 
-                //添加工单物料数据
-                var curStructures = productStructures.Where(p => p.ParentItem == item.product_code).ToList();
+                ////添加工单物料数据
+                //var curStructures = allProductStructures.Where(p => p.ParentItem == item.product_code).ToList();
+
+                List<ProductStructureMaster> curStructures = GetProductStructure(new List<string> { item.product_code });
                 foreach (var structure in curStructures)
                 {
                     //添加工单的物料信息
@@ -2480,7 +2483,6 @@ namespace Business.ResourceExamineManagement
                     workOrdDetails.Add(woDetail);
                 }
             }
-
             _workOrdMaster.Insert(workOrds);
             _workOrdRouting.Insert(workOrdRoutings);
             _workOrdDetail.Insert(workOrdDetails);

+ 1 - 1
MicroServices/Business/Business.Test/MorderTest.cs

@@ -23,7 +23,7 @@ namespace Business.Test
             //ProductExamine.techs = productExamineTest.CreateTechnique();
             //ProductExamine.process = productExamineTest.CreateProcess();
             //ProductExamine.tech_Processes = productExamineTest.CreateTechProcess();
-            var morder = new MorderAppService(ProductExamine);
+            //var morder = new MorderAppService(ProductExamine);
 
             //Act
             //ProdExamineParamDto prodExamine = new ProdExamineParamDto()