浏览代码

代码提交

zhengly 3 年之前
父节点
当前提交
71a94fda62

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

@@ -54,5 +54,9 @@ namespace Business.ResourceExamineManagement.Dto
         /// 工单建议开始时间
         /// </summary>
         public DateTime? moentry_sys_stime { get; set; } = null;
+        /// <summary>
+        /// 计算ID
+        /// </summary>
+        public long bang_id { get; set; }
     }
 }

+ 3 - 2
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/Mes_MorderDto.cs

@@ -1,4 +1,5 @@
 using Bussiness.Model.Production;
+using Bussiness.MongoModel.Production;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -12,11 +13,11 @@ namespace Business.ResourceExamineManagement.Dto
         /// <summary>
         /// 工单主表
         /// </summary>
-        public List<mes_morder> mes_Morders { get; set; }
+        public List<mo_mes_morder> mes_Morders { get; set; }
         /// <summary>
         /// 工单子表
         /// </summary>
-        public List<mes_moentry> mes_Moentries { get; set; }
+        public List<mo_mes_moentry> mes_Moentries { get; set; }
 
     }
 }

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

@@ -1,11 +1,14 @@
 using Business.Core.Enum;
 using Business.Core.MongoDBHelper;
+using Business.Core.Utilities;
 using Business.ResourceExamineManagement.Dto;
 using Bussiness.Model.MES.IC;
 using Bussiness.Model.Production;
 using Bussiness.Model.Sale;
 using Bussiness.Model.SRM;
 using Bussiness.Model.Tech;
+using Bussiness.MongoModel.MES.IC;
+using Bussiness.MongoModel.Production;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -23,16 +26,16 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// 生产工单主表
         /// </summary>
-        private readonly IMongoDB<mes_morder> _mes_morder;
+        private readonly IMongoDB<mo_mes_morder> _mo_mes_morder;
         /// <summary>
         /// 生产工单子表
         /// </summary>
-        private readonly IMongoDB<mes_moentry> _mes_moentry;
+        private readonly IMongoDB<mo_mes_moentry> _mo_mes_moentry;
 
         /// <summary>
         /// 在制工单占用记录表
         /// </summary>
-        private readonly IMongoDB<mes_mooccupy> _mes_mooccupy;
+        private readonly IMongoDB<mo_mes_mooccupy> _mo_mes_mooccupy;
         /// <summary>
         /// 销售订单
         /// </summary>
@@ -45,6 +48,10 @@ namespace Business.ResourceExamineManagement
         /// 产能检查
         /// </summary>
         private readonly ProductExamineAppService _productExamineAppService;
+        /// <summary>
+        ///  雪花算法
+        /// </summary>
+        SnowFlake snowFlake = new SnowFlake();
 
         #endregion
         #region 构造函数
@@ -54,18 +61,18 @@ namespace Business.ResourceExamineManagement
         /// <param name="icitem"></param>
         /// <param name="icbom"></param>
         public MorderAppService(
-            IMongoDB<mes_morder> mes_morder,
-            IMongoDB<mes_moentry> mes_moentry,
-            IMongoDB<mes_mooccupy> mes_mooccupy,
+            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
             )
         {
 
-            _mes_morder = mes_morder;
-            _mes_moentry = mes_moentry;
-            _mes_mooccupy = mes_mooccupy;
+            _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;
@@ -91,8 +98,9 @@ namespace Business.ResourceExamineManagement
             //获取销售订单信息
             var seorder = _mysql_crm_seorder.FindAsync(x => x.Id == generateMorderDto.seorderentry.seorder_id).Result;
 
-            mes_morder mes_Morder = new mes_morder();
-            mes_Morder.GenerateNewId();
+            mo_mes_morder mes_Morder = new mo_mes_morder();
+            mes_Morder.mysql_id = snowFlake.NextId();
+            mes_Morder.bang_id = generateMorderDto.bang_id;
             mes_Morder.morder_type = generateMorderDto.morder_type;
             mes_Morder.parent_id = generateMorderDto.ParentId;
             //mes_Morder.morder_icitem_type
@@ -147,9 +155,10 @@ namespace Business.ResourceExamineManagement
             mes_Morder.need_number = generateMorderDto.Quantity;
             mes_Morder.remaining_number = 0;
             //生成工单子表数据
-            mes_moentry mes_Moentry = new mes_moentry();
-            mes_Moentry.GenerateNewId();
-            mes_Moentry.moentry_moid = mes_Morder.Id;
+            mo_mes_moentry mes_Moentry = new mo_mes_moentry();
+            mes_Moentry.mysql_id = snowFlake.NextId();
+            mes_Moentry.bang_id = generateMorderDto.bang_id;
+            mes_Moentry.moentry_moid = mes_Morder.mysql_id;
             mes_Moentry.moentry_mono = mes_Morder.morder_no;
             mes_Moentry.soentry_id = generateMorderDto.seorderentry.Id;
             mes_Moentry.fbill_no = generateMorderDto.seorderentry.bill_no;
@@ -161,8 +170,8 @@ namespace Business.ResourceExamineManagement
             mes_Moentry.factory_id = generateMorderDto.seorderentry.factory_id;
 
             Mes_MorderDto mes_MorderDto = new Mes_MorderDto();
-            mes_MorderDto.mes_Morders = new List<mes_morder>();
-            mes_MorderDto.mes_Moentries = new List<mes_moentry>();
+            mes_MorderDto.mes_Morders = new List<mo_mes_morder>();
+            mes_MorderDto.mes_Moentries = new List<mo_mes_moentry>();
             mes_MorderDto.mes_Morders.Add(mes_Morder);
             mes_MorderDto.mes_Moentries.Add(mes_Moentry);
 
@@ -184,7 +193,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="DeliverDate">交付日期</param>
         /// <param name="seorderentry_id">销售订单子表ID</param>
         /// <returns></returns>
-        public async Task<List<mes_mooccupy>> CheckMorder(string bomNumber, decimal Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, ic_item ic_Item, bool flag = true)
+        public async Task<List<mo_mes_mooccupy>> CheckMorder(string bomNumber, decimal Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, mo_ic_item ic_Item, bool flag = true, long bang_id)
         {
             if (string.IsNullOrEmpty(bomNumber))
             {
@@ -196,21 +205,21 @@ namespace Business.ResourceExamineManagement
             //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
             //根据Bom编码查询出对应工单并且状态不为完成、关闭,非委外工单。
             //TODO:工单类型;
-            var morderList = await _mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
+            var morderList = await _mo_mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
             && x.morder_icitem_type != MorderEnum.XgwyMorder) && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id);
 
             //获取物料详情
             //var ic_item = _ic_item.GetManyByCondition(x => x.number == seorderentry.item_number && x.tenant_id == seorderentry.tenant_id).Result.FirstOrDefault();
 
             //工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
-            var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id
+            var mes_mooccupyList = await _mo_mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id
             && x.fitem_number == ic_Item.number);
 
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
             var morderDataList = morderList.Where(x => x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate &&
             (x.morder_production_number - x.inventory_number) > Quantity).OrderByDescending(x => x.planner_end_date).ToList();
-            List<mes_mooccupy> mes_Mooccupies = new List<mes_mooccupy>();
+            List<mo_mes_mooccupy> mes_Mooccupies = new List<mo_mes_mooccupy>();
             //当数量或日期不满足的时候,寻找最早日期的工单
             if (morderDataList.Count == 0)
             {
@@ -221,7 +230,7 @@ namespace Business.ResourceExamineManagement
             foreach (var item in morderDataList)
             {
                 //查询当前工单是否存在占用情况
-                var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == item.Id).ToList();
+                var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == item.mysql_id).ToList();
                 //已占用数据
                 var Sumqty = mooccupies.Count > 0 ? mooccupies.Sum(x => x.moo_qty) : 0.00m;
                 //判断此工单剩余可占用数量
@@ -281,7 +290,7 @@ namespace Business.ResourceExamineManagement
                         //工单可占用数量满足 需求数量时直接占用需求数量
                         QuantityNumber = Quantity;
                     }
-                    var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, QuantityNumber);
+                    var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, QuantityNumber, bang_id);
                     mes_Mooccupies.Add(mes_Mooccupy);
                     //当剩余需要数量大于0则继续寻找可占用工单,已满足需要数量停止循环查找
                     if (Quantity - Sum <= 0)
@@ -388,19 +397,20 @@ namespace Business.ResourceExamineManagement
         /// <param name="item">工单表</param>
         /// <param name="mes_mooccupy">占用工单表</param>
         /// <returns></returns>
-        public mes_mooccupy GetMooccupies(crm_seorderentry seorderentry, ic_item ic_item, mes_morder item, decimal? number)
+        public mo_mes_mooccupy GetMooccupies(crm_seorderentry seorderentry, mo_ic_item ic_item, mo_mes_morder item, decimal? number, long bang_id)
         {
             //生成mes_mooccupy工单占用表数据,代表多个工单被某个销售订单已占用。 
-            mes_mooccupy mes_Mooccupy = new mes_mooccupy();
-            mes_Mooccupy.GenerateNewId();
-            mes_Mooccupy.moo_id_type = "资源检查";
+            mo_mes_mooccupy mes_Mooccupy = new mo_mes_mooccupy();
+            mes_Mooccupy.mysql_id = snowFlake.NextId();
+            mes_Mooccupy.bang_id = bang_id;
+            mes_Mooccupy.moo_id_type = MorderEnum.Zyjc_Type;
             mes_Mooccupy.moo_id_billid = seorderentry.seorder_id;//销售订单ID
             mes_Mooccupy.fbill_no = seorderentry.bill_no;//销售订单号
             mes_Mooccupy.fentry_id = seorderentry.entry_seq.Value;//销售订单行
             mes_Mooccupy.fitem_name = ic_item.name;//物料名称
             mes_Mooccupy.fitem_number = ic_item.number;
             mes_Mooccupy.fmodel = ic_item.model;//规格型号
-            mes_Mooccupy.moo_moid = item.Id;
+            mes_Mooccupy.moo_moid = item.mysql_id;
             mes_Mooccupy.moo_mo = item.morder_no;
             //占用量=生产计划数量-入库数量-已被占用数量
             mes_Mooccupy.moo_qty = number;

+ 4 - 0
MicroServices/Business/Business.Core/Enum/MorderEnum.cs

@@ -68,5 +68,9 @@ namespace Business.Core.Enum
         /// 关闭
         /// </summary>
         public const string Close_state = "关闭";
+        /// <summary>
+        /// 资源检查
+        /// </summary>
+        public const string Zyjc_Type = "资源检查";
     }
 }