Explorar o código

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

Murphy %!s(int64=2) %!d(string=hai) anos
pai
achega
c7f4f24d25

+ 23 - 13
MicroServices/Business/Business.Application/Quartz/ProductionScheduleAppService.cs

@@ -156,8 +156,8 @@ namespace Business.Quartz
         public async Task DoProductShcedule()
         {
             //1、获取需要排产的工单:Status为空且IsActive==1
-            //List<WorkOrdMaster> workOrds = _workOrdMaster.Select(p => string.IsNullOrEmpty(p.Status) && p.IsActive == 1).Result;
-            List<WorkOrdMaster> workOrds = _workOrdMaster.Select(p => p.WorkOrd == "Test0000001").Result;
+            List<WorkOrdMaster> workOrds = _workOrdMaster.Select(p => string.IsNullOrEmpty(p.Status) && p.IsActive).Result;
+            //List<WorkOrdMaster> workOrds = _workOrdMaster.Select(p => p.WorkOrd == "Test0000002").Result;//测试代码
             if (workOrds.Count == 0)
             {
                 return;
@@ -254,7 +254,7 @@ namespace Business.Quartz
                 LineSchedule(item, routingDtos.OrderBy(p => p.level).ToList(), periodSequenceDtls, scheduleMasters);
 
                 //更新工单表
-                item.Status = "w";
+                item.Status = "r";
             }
             _businessDbContext.UpdateRange(workOrds);
             //记录排产数据
@@ -588,19 +588,24 @@ namespace Business.Quartz
             //剩余提前期
             needMinute -= curMins;
             //获取前层级时间段
-            var prePoints = workPoints.Where(p => p.Level < curPoint.Level).ToList();
+            var prePoints = workPoints.Where(p => p.Level < curPoint.Level).OrderByDescending(p=>p.Level).ToList();
+            bool flag = true;//标志位
             foreach (var item in prePoints)
             {
                 if (item.WorkMinutes >= needMinute)//当前时间段的可用提前期满足
                 {
                     actStart = item.EndPoint.AddMinutes((double)-needMinute);
+                    flag = false;
                     break;
                 }
                 needMinute -= item.WorkMinutes;
             }
+            if (!flag)
+            {
+                return actStart;
+            }
             //今天可用提前期不够,往前工作日找
             DateTime perStartTime = startTime;
-            bool flag = true;//标志位
             while (flag)
             {
                 //获取前一个工作日
@@ -623,10 +628,11 @@ namespace Business.Quartz
                     }
                     flag = false;
                 }
-                //当天可用提前期不满足
-                needMinute -= sumWorkMins;
+                else {
+                    //当天可用提前期不满足
+                    needMinute -= sumWorkMins;
+                }
             }
-
             return actStart;
         }
 
@@ -652,7 +658,8 @@ namespace Business.Quartz
                 if (!holidays.Exists(p => p.Dated.GetValueOrDefault().Date == nextDate && p.Ufld1 == "调休"))//下一天是周末
                 {
                     //递归继续找下一个工作日
-                    GetNextWorkDay(nextWeekDay, nextDate, curCalendars);
+                    rtnData = GetNextWorkDay(nextWeekDay, nextDate, curCalendars);
+                    return rtnData;
                 }
                 rtnData = Convert.ToDateTime(nextDate.ToString("yyyy-MM-dd") + " " + strStart);
                 return rtnData;
@@ -661,7 +668,8 @@ namespace Business.Quartz
             if (holidays.Exists(p => p.Dated.GetValueOrDefault().Date == nextDate && p.Ufld1 == "休假"))//是节假日
             {
                 //递归继续找下一个工作日
-                GetNextWorkDay(nextWeekDay, nextDate, curCalendars);
+                rtnData = GetNextWorkDay(nextWeekDay, nextDate, curCalendars);
+                return rtnData;
             }
             rtnData = Convert.ToDateTime(nextDate.ToString("yyyy-MM-dd") + " " + strStart);
             return rtnData;
@@ -687,8 +695,9 @@ namespace Business.Quartz
             {
                 if (!holidays.Exists(p => p.Dated.GetValueOrDefault().Date == preDate && p.Ufld1 == "调休"))//前一天是非工作日
                 {
-                    //递归继续找下一个工作日
-                    GetPreWorkDay(preDate, curCalendars);
+                    //递归继续找上一个工作日
+                    rtnData = GetPreWorkDay(preDate, curCalendars);
+                    return rtnData;
                 }
                 rtnData = Convert.ToDateTime(preDate.ToString("yyyy-MM-dd") + " " + strStart);
                 return rtnData;
@@ -697,7 +706,8 @@ namespace Business.Quartz
             if (holidays.Exists(p => p.Dated.GetValueOrDefault().Date == preDate && p.Ufld1 == "休假"))//是节假日
             {
                 //递归继续找前一个工作日
-                GetPreWorkDay(preDate, curCalendars);
+                rtnData = GetPreWorkDay(preDate, curCalendars);
+                return rtnData;
             }
             rtnData = Convert.ToDateTime(preDate.ToString("yyyy-MM-dd") + " " + strStart);
             return rtnData;

+ 44 - 27
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -8,9 +8,11 @@ using Business.MongoModel.SRM;
 using Business.MongoModel.Tech;
 using Business.ResourceExamineManagement.Dto;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using Volo.Abp.Application.Services;
+using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
 
 namespace Business.ResourceExamineManagement
 {
@@ -32,6 +34,7 @@ namespace Business.ResourceExamineManagement
         public List<mo_mes_morder> mordersList = new List<mo_mes_morder>();
         public List<mo_mes_morder> mordersInsertList = new List<mo_mes_morder>();
         public List<mo_mes_moentry> moentriesList = new List<mo_mes_moentry>();
+        public List<mo_mes_moentry> moentriesInsertList = new List<mo_mes_moentry>();
         public List<mo_mes_mooccupy> mooccupyAllList = new List<mo_mes_mooccupy>();
         public List<mo_mes_mooccupy> mooccupyAllInsertList = new List<mo_mes_mooccupy>();
 
@@ -189,11 +192,12 @@ namespace Business.ResourceExamineManagement
                 //获取物料详情
                 var ic_item = icitemlist.Find(s => s.mysql_id == level1Dto.item_id);
                 _morderAppService.mo_Mes_Morders = mordersList;//工单
+                _morderAppService.mo_Mes_Moentry = moentriesList;//工单子表
                 _morderAppService.mo_Mes_Mooccupies = mooccupyAllList;//工单占用
                 List<mo_mes_mooccupy> mooccupylist = new List<mo_mes_mooccupy>();
                 if (param.checkflag)
                 {
-                    //顶级无需检查在制
+                    //工单检查无需检查在制
                     mooccupylist = _morderAppService.CheckMorder(level1Dto.bom_number, level1Dto.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid);
                 }
 
@@ -260,37 +264,49 @@ namespace Business.ResourceExamineManagement
                         }
                         else if (level1Dto.erp_cls == 3)
                         {
-                            //采购申请
-                            PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+                            //先找在途
+                            CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
+                            if (level1Dto.lack_qty > 0)
+                            {
+                                //采购申请
+                                PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+                            }
                         }
                         else if (level1Dto.erp_cls == 2)
                         {
-                            //先计算末级数据的齐套时间。
-                            if (childList.Count() > 0)
+                            //先找在途
+                            CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
+                            if (level1Dto.lack_qty > 0)
                             {
-                                MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
-                                level1Dto.kitting_time = childList.Max(s => s.kitting_time);
+                                //先计算末级数据的齐套时间。
+                                if (childList.Count() > 0)
+                                {
+                                    MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
+                                    level1Dto.kitting_time = childList.Max(s => s.kitting_time);
+                                }
+                                //1.先生成委外工单。
+                                var mesorder = CreateMesOOder(level1Dto, param.tenantId, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                                level1Dto.subcontracting_qty = level1Dto.lack_qty;
+                                level1Dto.subcontracting_list = new List<ooder>();
+                                ooder oo = new ooder();
+                                oo.Id = mesorder.id;
+                                oo.morder_production_number = mesorder.morder_production_number;
+                                oo.production_unit = mesorder.production_unit;
+                                oo.production_unit_code = mesorder.production_unit_code;
+                                oo.ooentry_prdname = mesorder.ooentry_prdname;
+                                oo.ooentry_stime = mesorder.ooentry_stime;
+                                oo.ooentry_etime = mesorder.ooentry_etime;
+                                oo.oorder_date = mesorder.oorder_date;
+                                oo.oorder_no = mesorder.oorder_no;
+                                level1Dto.subcontracting_list.Add(oo);
+                                level1Dto.kitting_time = mesorder.ooentry_etime;
+                                orderList.Add(mesorder);
+                                //2.生成采购申请
+                                //采购申请
+                                PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
                             }
-                            //1.先生成委外工单。
-                            var mesorder = CreateMesOOder(level1Dto, param.tenantId, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
-                            level1Dto.subcontracting_qty = level1Dto.lack_qty;
-                            level1Dto.subcontracting_list = new List<ooder>();
-                            ooder oo = new ooder();
-                            oo.Id = mesorder.id;
-                            oo.morder_production_number = mesorder.morder_production_number;
-                            oo.production_unit = mesorder.production_unit;
-                            oo.production_unit_code = mesorder.production_unit_code;
-                            oo.ooentry_prdname = mesorder.ooentry_prdname;
-                            oo.ooentry_stime = mesorder.ooentry_stime;
-                            oo.ooentry_etime = mesorder.ooentry_etime;
-                            oo.oorder_date = mesorder.oorder_date;
-                            oo.oorder_no = mesorder.oorder_no;
-                            level1Dto.subcontracting_list.Add(oo);
-                            level1Dto.kitting_time = mesorder.ooentry_etime;
-                            orderList.Add(mesorder);
-                            //2.生成采购申请
-                            //采购申请
-                            PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+
+                           
 
                         }
                     }
@@ -387,6 +403,7 @@ namespace Business.ResourceExamineManagement
                     mordersList.AddRange(mes_MorderDto.mes_Morders);
                     mordersInsertList.AddRange(mes_MorderDto.mes_Morders);
                     moentriesList.AddRange(mes_MorderDto.mes_Moentries);
+                    moentriesInsertList.AddRange(mes_MorderDto.mes_Moentries);
                 }
             }
         }

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

@@ -75,6 +75,10 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         public List<mo_mes_morder> mo_Mes_Morders = new List<mo_mes_morder>();
         /// <summary>
+        /// 工单子表
+        /// </summary>
+        public List<mo_mes_moentry> mo_Mes_Moentry = new List<mo_mes_moentry>();
+        /// <summary>
         /// 工单占用
         /// </summary>
         public List<mo_mes_mooccupy> mo_Mes_Mooccupies = new List<mo_mes_mooccupy>();
@@ -258,7 +262,10 @@ namespace Business.ResourceExamineManagement
 
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
-            var morderDataList = mo_Mes_Morders.Where(x => x.bom_number == bomNumber && x.morder_type == MorderEnum.JhMorder && x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate &&
+            var moentrys = mo_Mes_Moentry.Where(s => s.soentry_id == seorderentry.Id);
+            //找到当前订单行生成的主工单
+            var toMid = moentrys.Select(s => s.moentry_moid.GetValueOrDefault()).ToList();
+            var morderDataList = mo_Mes_Morders.Where(x => x.bom_number == bomNumber && (x.morder_type == MorderEnum.JhMorder || toMid.Contains(x.relation_moid.GetValueOrDefault())) && x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate &&
             (x.morder_production_number - x.inventory_number - mes_mooccupyList.Where(p => p.moo_moid.GetValueOrDefault() == x.mysql_id)?.Sum(m => m.moo_qty)) > Quantity)
              .OrderByDescending(x => x.planner_end_date).ToList();
 

+ 10 - 63
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -390,25 +390,6 @@ namespace Business.ResourceExamineManagement
         /// <exception cref="NotImplementedException"></exception>
         public async Task<string> ReceiveResult(ResourceCheckInputDto input)
         {
-            //TagMaster tagMaster=new TagMaster();
-            //tagMaster.Domain = "1000";
-            //tagMaster.Nbr = "20230505002"+DateTime.Now.Second.ToString();
-            //tagMaster.Type = "Q";
-            //tagMaster.Print = false;
-            //tagMaster.Void= false;
-            //tagMaster.Posted= false;
-            //tagMaster.BusinessID = 0;
-            //tagMaster.CreateUser = "admin";
-            //tagMaster.UpdateUser = "admin";
-            //tagMaster.CreateTime = DateTime.Now;
-            //tagMaster.UpdateTime= DateTime.Now;
-            //tagMaster.IsActive= true;
-            //tagMaster.IsConfirm= true;
-            //tagMaster.IsChanged= true;
-            //tagMaster.InvTitle = "线边库存核查";
-            //await _tagMasterRepository.Insert(tagMaster);
-            //var test= _tagMasterRepository.SelectDataBaseBySql("Select * from TagMaster Where Nbr='202305050029'", "TagMaster");
-            //return JsonConvert.SerializeObject(test);
             //资源检查入参全局变量赋值
             param.sorderId = input.sorderId;
             param.tenantId = input.tenantId;
@@ -421,26 +402,7 @@ namespace Business.ResourceExamineManagement
             //资源检查明细list
             List<ExamineResult> examines = new List<ExamineResult>();
             ExamineResult dtl;
-            /*if (input.sorderId == 123)
-            {
-                Random rd = new Random();
-
-                List<ic_item_stock> itemstocklist = new List<ic_item_stock>();
-                var iclist = _mysql_ic_item.GetListAsync(s => s.tenant_id == 101).Result;
-                iclist.ForEach(s => {
-                    ic_item_stock stock = new ic_item_stock();
-                    stock.GenerateNewId(help.NextId());
-                    stock.icitem_id = s.Id;
-                    stock.icitem_name = s.name;
-                    stock.sqty = rd.Next(0, 300);
-                    stock.tenant_id = s.tenant_id;
-                    stock.factory_id = s.factory_id;
-                    itemstocklist.Add(stock);
-                });
-                await _businessDbContext.ic_item_stock.BulkInsertAsync(itemstocklist, options => options.InsertKeepIdentity = true);
-                return "ok";
-            }*/
-
+            
             //生成当前计算bangid
             long bangid = help.NextId();
             //获取订单数据
@@ -461,19 +423,9 @@ namespace Business.ResourceExamineManagement
             await DbSnapShot(input.tenantId, input.factoryId, bangid);
 
             //通过订单行的产品代码获取物料BOM数据
-            //FilterDefinition<ic_bom> filter = Builders<ic_bom>.Filter.In(s => s.bom_number, sentrys.Select(m => m.bom_number).ToList());
-            //List<ic_bom> boms = _ic_bom.GetManyByIds(filter).Result.Where(p => p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).ToList();
             List<mo_ic_bom> boms = _ic_bom.Find(p => sentrys.Select(m => m.item_number).Contains(p.item_number) && p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).Result.ToList();
-            ////物料bom
-            //List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
-            ////物料bom明细
-            //List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
             //物料信息
             List<mo_ic_item> icitemlist = new List<mo_ic_item>();
-            //替代关系
-            //List<mo_ic_substitute> sublist = new List<mo_ic_substitute>();
-            //List<mo_ic_substitute_group> suballlist = new List<mo_ic_substitute_group>();
-            //List<mo_ic_substitute_group_detail> subdtllist = new List<mo_ic_substitute_group_detail>();
             //物料库存表
             List<mo_ic_item_stock> stocklist = new List<mo_ic_item_stock>();
             //物料占用记录
@@ -502,8 +454,6 @@ namespace Business.ResourceExamineManagement
                 dtl.bill_no = sorder.bill_no;
                 dtl.sentry_id = item.Id;
                 dtl.entry_seq = item.entry_seq;
-                //TODO:最早开始时间默认3天后(后期调整)
-                dtl.earliest_times = DateTime.Now.Date.AddDays(3);
                 dtl.need_qty = item.qty.GetValueOrDefault();
                 dtl.need_time = item.plan_date;
                 //获取当前物料bom数据
@@ -551,10 +501,10 @@ namespace Business.ResourceExamineManagement
                 await _mes_mooccupy.InsertMany(_CalcBomViewAppService.mooccupyAllInsertList);
                 rtn.mooccupyAllList = _CalcBomViewAppService.mooccupyAllInsertList;
             }
-            if (_CalcBomViewAppService.moentriesList.Any())
+            if (_CalcBomViewAppService.moentriesInsertList.Any())
             {
-                await _mes_moentry.InsertMany(_CalcBomViewAppService.moentriesList);
-                var mesmoentrys = ObjectMapper.Map<List<mo_mes_moentry>, List<mes_moentry>>(_CalcBomViewAppService.moentriesList);
+                await _mes_moentry.InsertMany(_CalcBomViewAppService.moentriesInsertList);
+                var mesmoentrys = ObjectMapper.Map<List<mo_mes_moentry>, List<mes_moentry>>(_CalcBomViewAppService.moentriesInsertList);
                 _businessDbContext.BulkInsert(mesmoentrys);
             }
             if (_CalcBomViewAppService.orderList.Any())
@@ -784,7 +734,7 @@ namespace Business.ResourceExamineManagement
         {
             List<long> sentryids = soentry_id.Select(p => p.Id).ToList();
             //删除工单相关表数据
-            var mes_moentry = _mysql_mes_moentry.GetListAsync(x => sentryids.Contains(x.soentry_id.Value)).Result;
+            /*var mes_moentry = _mysql_mes_moentry.GetListAsync(x => sentryids.Contains(x.soentry_id.Value)).Result;
 
             var mes_morder = _mysql_mes_morder.GetListAsync(x => mes_moentry.Select(p => p.moentry_moid).ToList().Contains(x.Id)).Result;
             if (mes_moentry.Count > 0)
@@ -794,27 +744,22 @@ namespace Business.ResourceExamineManagement
             if (mes_morder.Count > 0)
             {
                 await _mysql_mes_morder.DeleteManyAsync(mes_morder);
-            }
+            }*/
             var mysql_mes_mooccupy = _mysql_mes_mooccupy.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.moo_id_billid.Value)).Result;
             if (mysql_mes_mooccupy.Count > 0)
             {
                 await _mysql_mes_mooccupy.DeleteManyAsync(mysql_mes_mooccupy);
             }
-            var mysql_mes_ooder = _mysql_mes_oorder.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
-            if (mysql_mes_ooder.Count > 0)
-            {
-                await _mysql_mes_oorder.DeleteManyAsync(mysql_mes_ooder);
-            }
             var srm_pr_main = _mysql_srm_pr_main.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
             if (srm_pr_main.Count > 0)
             {
                 await _mysql_srm_pr_main.DeleteManyAsync(srm_pr_main);
             }
-            var mes_oorders = _mysql_mes_oorder.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
+            /*var mes_oorders = _mysql_mes_oorder.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
             if (mes_oorders.Count > 0)
             {
                 await _mysql_mes_oorder.DeleteManyAsync(mes_oorders);
-            }
+            }*/
         }
 
         /// <summary>
@@ -2290,6 +2235,7 @@ namespace Business.ResourceExamineManagement
             //主工单
             List<mo_mes_morder> mo_Mes_Morders = _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).Result;
+            List<mo_mes_moentry> mo_Mes_Moentry = _mes_moentry.GetManyByCondition(x => mo_Mes_Morders.Select(p => p.id).Contains(x.moentry_moid.GetValueOrDefault())).Result;
             //工单占用表
             List<mo_mes_mooccupy> mes_mooccupyList = _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == param.tenantId
           && boms.Select(p => p.item_number).Contains(x.fitem_number) && x.bang_id == bangid).Result;
@@ -2320,6 +2266,7 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService.process = process;//工序
             _CalcBomViewAppService.tech_Proc_Workshops = tech_Proc_Workshops;//工艺工序关联工位
             _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
+            _CalcBomViewAppService.moentriesList = mo_Mes_Moentry;//工单子表
             _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
             _CalcBomViewAppService.seorder = sorder;//销售订单
             _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细

+ 1 - 1
MicroServices/Business/Bussiness.Model/Production/PeriodSequenceDet.cs

@@ -50,7 +50,7 @@ namespace Business.Model.Production
         /// 班次
         /// </summary>
         [Comment("班次")]
-        public int? Period { get; set; }
+        public Int16 Period { get; set; }
 
         /// <summary>
         /// 订单数量