Browse Source

解决冲突

Murphy 2 years ago
parent
commit
39a780de04
17 changed files with 528 additions and 75 deletions
  1. 26 0
      MicroServices/Business/Business.Application.Contracts/DOP/ISyncDOPAppService.cs
  2. 35 0
      MicroServices/Business/Business.Application.Contracts/Dto/PlatformInventoryDto.cs
  3. 10 0
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/BomChildExamineDto.cs
  4. 1 1
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs
  5. 133 0
      MicroServices/Business/Business.Application/DOP/SyncDOPAppService.cs
  6. 38 11
      MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs
  7. 17 2
      MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs
  8. 85 57
      MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs
  9. 7 0
      MicroServices/Business/Business.Domain/MongoDB/SRM/mo_srm_pr_main.cs
  10. 12 0
      MicroServices/Business/Business.Domain/StructuredDB/Bang/b_bom_child_examine.cs
  11. 6 0
      MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdMaster.cs
  12. 7 0
      MicroServices/Business/Business.Domain/StructuredDB/SRM/srm_pr_main.cs
  13. 2 2
      MicroServices/Business/Business.Domain/StructuredDB/SRM/srm_purchase.cs
  14. 53 0
      MicroServices/Business/Business.HttpApi/Controllers/DOP/DOPController.cs
  15. 2 2
      MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs
  16. 49 0
      MicroServices/Business/Bussiness.Model/WMS/PlatformInventory.cs
  17. 45 0
      MicroServices/Business/Bussiness.Model/WMS/PlatformSpecificationComparison.cs

+ 26 - 0
MicroServices/Business/Business.Application.Contracts/DOP/ISyncDOPAppService.cs

@@ -0,0 +1,26 @@
+using Business.Dto;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+
+namespace Business.DOP
+{
+    public interface ISyncDOPAppService : IApplicationService
+    {
+        /// <summary>
+        /// 海王成品库存监控
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        Task<string> SyncPlatformFinishedProductMonitoringHW(List<PlatformInventoryDto> platformInventoryDtoList);
+        /// <summary>
+        /// 海王成品库存监控
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        Task<string> SyncPlatformFinishedProductMonitoringGK(List<PlatformInventoryDto> platformInventoryDtoList);
+    }
+}

+ 35 - 0
MicroServices/Business/Business.Application.Contracts/Dto/PlatformInventoryDto.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Business.Dto
+{
+    /// <summary>
+    /// 平台库存DTO
+    /// </summary>
+    public class PlatformInventoryDto
+    {
+        /// <summary>
+        /// 仓库
+        /// </summary>
+        public string? Location { get; set; }
+        /// <summary>
+        /// 规格
+        /// </summary>
+        public string? SpecificationModel { get; set;}
+        /// <summary>
+        /// 批号
+        /// </summary>
+        public string? BatchNumber { get; set; }
+        /// <summary>
+        /// 库存数量
+        /// </summary>
+        public decimal? InventoryQuantity { get; set; }
+        /// <summary>
+        /// 有效期
+        /// </summary>
+        public decimal? PeriodOfValidity { get; set; }
+    }
+}

+ 10 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/BomChildExamineDto.cs

@@ -196,6 +196,16 @@ namespace Business.ResourceExamineManagement.Dto
         /// </summary>
         public DateTime? satisfy_time { get; set; }
 
+        /// <summary>
+        /// 自制时长(天)
+        /// </summary>
+        public int? make_time { get; set; }
+
+        /// <summary>
+        /// 采购前置(需加上自制)
+        /// </summary>
+        public int? pre_time { get; set; }
+
         /// <summary>
         /// 是否BOM
         /// </summary>

+ 1 - 1
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs

@@ -53,7 +53,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="workOrds"></param>
         /// <returns></returns>
-        Task<string> PlanOrderResourceCheck(string workOrd);
+        Task<string> PlanOrderResourceCheck();
 
         /// <summary>
         /// ×ÊÔ´¼ì²é½á¹ûÆÀÉó

+ 133 - 0
MicroServices/Business/Business.Application/DOP/SyncDOPAppService.cs

@@ -0,0 +1,133 @@
+using Abp.Application.Services;
+using Abp.Dependency;
+using Business.Core.Utilities;
+using Business.Dto;
+using Business.Model.WMS;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.Uow;
+using IUnitOfWorkManager = Volo.Abp.Uow.IUnitOfWorkManager;
+
+namespace Business.DOP
+{
+    //DOP
+    public class SyncDOPAppService : ApplicationService, ISyncDOPAppService, ITransientDependency
+    {
+        #region 服务
+        /// <summary>
+        /// 平台规格型号对照表
+        /// </summary>
+        private readonly Volo.Abp.Domain.Repositories.IRepository<PlatformSpecificationComparison, long> _PlatformSpecificationComparison;
+        /// <summary>
+        /// 平台库存表
+        /// </summary>
+        private readonly Volo.Abp.Domain.Repositories.IRepository<PlatformInventory, long> _PlatformInventory;
+        /// <summary>
+        ///  雪花算法
+        /// </summary>
+        SnowFlake snowFlake = new SnowFlake();
+        /// <summary>
+        /// 事务
+        /// </summary>
+        private readonly IUnitOfWorkManager _unitOfWorkManager;
+        #endregion
+        #region 构造函数
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public SyncDOPAppService(
+            Volo.Abp.Domain.Repositories.IRepository<PlatformSpecificationComparison, long> PlatformSpecificationComparison,
+            Volo.Abp.Domain.Repositories.IRepository<PlatformInventory, long> PlatformInventory,
+             IUnitOfWorkManager unitOfWorkManager,
+        ICurrentTenant currentTenant
+            )
+        {
+            _PlatformSpecificationComparison = PlatformSpecificationComparison;
+            _PlatformInventory = PlatformInventory;
+            _unitOfWorkManager = unitOfWorkManager;
+        }
+        #endregion
+        /// <summary>
+        /// 海王平台成品监控
+        /// </summary>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<string> SyncPlatformFinishedProductMonitoringHW(List<PlatformInventoryDto> platformInventoryDtoList)
+        {
+            var ret = SavePlatformFinishedProductMonitoringAsync(platformInventoryDtoList, 1);
+            return await ret;
+        }
+        /// <summary>
+        /// 国科平台成品监控
+        /// </summary>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<string> SyncPlatformFinishedProductMonitoringGK(List<PlatformInventoryDto> platformInventoryDtoList)
+        {
+            var ret = SavePlatformFinishedProductMonitoringAsync(platformInventoryDtoList, 2);
+            return await ret;
+        }
+        /// <summary>
+        /// 保存库存信息
+        /// </summary>
+        /// <param name="platformInventoryDtoList"></param>
+        /// <param name="type">1海王,2国科</param>
+        public async Task<string> SavePlatformFinishedProductMonitoringAsync(List<PlatformInventoryDto> platformInventoryDtoList, int type)
+        {
+            if (platformInventoryDtoList.Count == 0)
+            {
+                return JsonConvert.SerializeObject("成品库存为空!");
+            }
+            List<PlatformInventory> platformInventoryInsert = new List<PlatformInventory>();
+            List<PlatformInventory> platformInventoryDel;
+            if (type == 1)
+            {
+                platformInventoryDel = _PlatformInventory.GetListAsync(x => x.Code == "HW0001").Result;
+            }
+            else
+            {
+                platformInventoryDel = _PlatformInventory.GetListAsync(x => x.Code == "HW0002").Result;
+            }
+            foreach (var item in platformInventoryDtoList)
+            {
+                PlatformInventory platformInventory = new PlatformInventory();
+                platformInventory.GenerateNewId(snowFlake.NextId());
+                platformInventory.Location = item.Location;
+                platformInventory.SpecificationModel = item.SpecificationModel;
+                platformInventory.BatchNumber = item.BatchNumber;
+                platformInventory.InventoryQuantity = item.InventoryQuantity;
+                platformInventory.PeriodOfValidity = item.PeriodOfValidity;
+                if (type == 1)
+                {
+                    platformInventory.Code = "HW0001";
+                }
+                else
+                {
+                    platformInventory.Code = "HW0002";
+                }
+                platformInventoryInsert.Add(platformInventory);
+            }
+            using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
+            {
+                try
+                {
+                    //先删后插
+                    await _PlatformInventory.DeleteManyAsync(platformInventoryDel);
+                    await _PlatformInventory.InsertManyAsync(platformInventoryInsert);
+
+                    await unitOfWork.CompleteAsync();
+                }
+                catch (Exception e)
+                {
+                    new NLogHelper("SyncDOPAppService").WriteLog("PlatformFinishedProductMonitoringAsyncMerge", "接口异常:" + e.Message);
+                    unitOfWork.Dispose();
+                    return JsonConvert.SerializeObject(e.Message);
+                }
+            }
+            return JsonConvert.SerializeObject("ok");
+        }
+    }
+}

+ 38 - 11
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -281,7 +281,7 @@ namespace Business.ResourceExamineManagement
                             if (level1Dto.lack_qty > 0)
                             {
                                 //采购申请
-                                PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+                                PackageSRMPR(level1Dto, bangid, sentrys);
                             }
                         }
                         else if (level1Dto.erp_cls == 2)
@@ -315,7 +315,7 @@ namespace Business.ResourceExamineManagement
                                 orderList.Add(mesorder);
                                 //2.生成采购申请
                                 //采购申请
-                                PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+                                PackageSRMPR(level1Dto, bangid, sentrys);
                             }
 
                            
@@ -329,6 +329,7 @@ namespace Business.ResourceExamineManagement
                     else {
                         MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
                     }
+                    CalcLevelMakeTime(returnlist);
                 }
             }
             else
@@ -342,6 +343,23 @@ namespace Business.ResourceExamineManagement
             }
         }
 
+        //计算每层物料倒排时,需要根据半成品的工作时长倒排。
+        public void CalcLevelMakeTime(List<BomChildExamineDto> returnlist)
+        {
+            for (int level = 3; level <= returnlist.Max(s => s.level); level++)
+            {
+                var list = returnlist.Where(s => s.level == level).ToList();
+                list.ForEach(s => {
+                    var parent = returnlist.Find(p => p.fid == s.parent_id);
+                    if (parent != null)
+                    {
+                        s.pre_time = parent.make_time.GetValueOrDefault() + parent.pre_time.GetValueOrDefault();
+                    }
+                });
+            }
+        }
+
+
         /// <summary>
         /// 生成主工单
         /// </summary>
@@ -642,9 +660,13 @@ namespace Business.ResourceExamineManagement
                         if (cilList.Count() > 0)
                         {
                             CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
+                            
                             item.kitting_time = cilList.Max(s => s.kitting_time);
                         }
                         item.make_qty = item.lack_qty;
+                        //默认中间件需要1天的制造周期
+                        item.make_time = 1;
+                        item.kitting_time = item.kitting_time.Value.AddDays(1);
                         /*//走自制
                         ProdExamineParamDto prodExamine = new ProdExamineParamDto()
                         {
@@ -677,7 +699,7 @@ namespace Business.ResourceExamineManagement
                     if (item.lack_qty > 0 && (param.checkflag || (!param.checkflag && param.checkPlan)))
                     {
                         //采购申请
-                        PackageSRMPR(item, bangid, plan_date, sentrys);
+                        PackageSRMPR(item, bangid, sentrys);
                     }
                 }
                 else if (item.erp_cls == 2)
@@ -711,7 +733,7 @@ namespace Business.ResourceExamineManagement
                         orderList.Add(mesorder);
                         //2.生成采购申请
                         //采购申请
-                        PackageSRMPR(item, bangid, plan_date, sentrys);
+                        PackageSRMPR(item, bangid, sentrys);
                     }
                 }
                 else
@@ -1049,6 +1071,10 @@ namespace Business.ResourceExamineManagement
                                 sct.kitting_time = cilList.Max(s => s.kitting_time);
                             }
                             sct.make_qty = sct.lack_qty;
+                            //默认中间件需要1天的制造周期
+                            sct.make_time = 1;
+                            sct.kitting_time = sct.kitting_time.Value.AddDays(1);
+
                             /*//走自制
                             ProdExamineParamDto prodExamine = new ProdExamineParamDto()
                             {
@@ -1076,7 +1102,7 @@ namespace Business.ResourceExamineManagement
                             if (sct.lack_qty > 0 && (param.checkflag || (!param.checkflag && param.checkPlan)))
                             {
                                 //采购申请
-                                PackageSRMPR(sct, bangid, plan_date, sentrys);
+                                PackageSRMPR(sct, bangid, sentrys);
                             }
                         }
                         else if (sct.erp_cls == 2)
@@ -1109,7 +1135,7 @@ namespace Business.ResourceExamineManagement
                                 sct.kitting_time = mesorder.ooentry_etime;
                                 orderList.Add(mesorder);
                                 //采购申请
-                                PackageSRMPR(sct, bangid, plan_date, sentrys);
+                                PackageSRMPR(sct, bangid, sentrys);
                             }
                         }
                         else
@@ -1152,7 +1178,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="returnlist"></param>
         /// <param name="factoryid"></param>
         /// <param name="orderType">2委外采购申请单,3采购申请单</param>
-        private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, List<mo_ic_item> planList, DateTime deliveryDate, crm_seorderentry sentrys)
+        private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, List<mo_ic_item> planList, crm_seorderentry sentrys)
         {
             SRMPRDto sRMPR = new SRMPRDto();
             var supplier = supplierList.Where(x => x.icitem_id == returnlist.item_id).ToList();//默认取第一个供应商
@@ -1160,7 +1186,7 @@ namespace Business.ResourceExamineManagement
             sRMPR.srm_Pr_Main = new List<mo_srm_pr_main>();
             if (!supplier.Any() || plan == null)
             {
-                sRMPR.lastStartTmie = DateTime.Now.AddDays(7);//减去提前期
+                sRMPR.lastStartTmie = DateTime.Now.AddDays(7);//默认采购提前期
                 return sRMPR;
                 //throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
             }
@@ -1188,6 +1214,7 @@ namespace Business.ResourceExamineManagement
                 srm_Pr.pr_sqty = returnlist.lack_qty;//建议数量
                 srm_Pr.icitem_id = returnlist.item_id;//物料id
                 srm_Pr.icitem_name = returnlist.item_name;//物料名称
+                srm_Pr.num = returnlist.num;
                 srm_Pr.pr_order_type = 1;//单据类型
                 srm_Pr.pr_ssend_date = DateTime.Now;//系统建议下单日期
                 srm_Pr.pr_sarrive_date = DateTime.Now.AddDays((double)plan.order_leadtime).AddDays((double)plan.transportation_leadtime);//系统建议到达日期(建议到货日期)
@@ -1226,7 +1253,7 @@ namespace Business.ResourceExamineManagement
             }
             sRMPR.item_no = returnlist.num;
             sRMPR.orderentry_id = returnlist.sentry_id;
-            sRMPR.lastStartTmie = DateTime.Now.AddDays((double)sRMPR.srm_Pr_Main.MinBy(x=>x.totalLeadTime).totalLeadTime);//减去提前期
+            sRMPR.lastStartTmie = DateTime.Now.AddDays((double)(sRMPR.srm_Pr_Main.MinBy(x=>x.totalLeadTime).totalLeadTime.GetValueOrDefault()+plan.clean_leadtime.GetValueOrDefault()));//加上提前期和备料期,得到齐套时间
             return sRMPR;
         }
         // 生成订单编号 字母+年月日+8位随机数+时间戳
@@ -1337,10 +1364,10 @@ namespace Business.ResourceExamineManagement
             }
         }
 
-        public void PackageSRMPR(BomChildExamineDto item,long bangid,DateTime? plan_date, crm_seorderentry sentrys)
+        public void PackageSRMPR(BomChildExamineDto item,long bangid, crm_seorderentry sentrys)
         {
             //采购申请
-            var SRMPRDto = CreateSRMPR(item, param.tenantId, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, ic_item_List, plan_date.Value, sentrys);
+            var SRMPRDto = CreateSRMPR(item, param.tenantId, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, ic_item_List, sentrys);
             item.purchase_list = new List<purchase>();
             if (SRMPRDto.srm_Pr_Main != null)
             {

+ 17 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -159,7 +159,15 @@ namespace Business.ResourceExamineManagement
                 return;
             }
             //获取排产工单的最早计划开工日期
-            DateTime earlist = workOrds.Min(p => p.OrdDate.GetValueOrDefault()).Date;
+            DateTime earlist;
+            if (workOrds.Min(p => p.OrdDate) == null)
+            {
+                earlist = DateTime.Now.Date.AddDays(7);
+            }
+            else {
+                earlist = workOrds.Min(p => p.OrdDate.GetValueOrDefault()).Date;
+            }
+
             //2、获取数据
             //获取工单工艺路径数据
             List<WorkOrdRouting> workOrdRoutings = _workOrdRouting.Select(p => workOrds.Select(m => m.WorkOrd).Contains(p.WorkOrd) && p.Domain == "1001" && p.Status != "C" && p.IsActive);
@@ -233,6 +241,13 @@ namespace Business.ResourceExamineManagement
                 //产线排产
                 LineSchedule(item, routingDtos.OrderBy(p => p.level).ToList(), periodSequenceDtls, scheduleMasters);
 
+                List<ScheduleResultOpMaster> scheduleList = scheduleMasters.Where(s => s.WorkOrd == item.WorkOrd).ToList();
+                if (scheduleList.Any())
+                {
+                    item.OrdDate = scheduleList.Min(s => s.WorkStartTime.Date);
+                    item.DueDate = scheduleList.Max(s => s.WorkEndTime.Date);
+                }
+
                 /*//更新工单表
                 item.Status = "r";*/
             }
@@ -241,7 +256,7 @@ namespace Business.ResourceExamineManagement
                 try
                 {
                     //记录排产数据
-                    /*_workOrdMaster.Update(workOrds);*/
+                    _workOrdMaster.Update(workOrds);
                     _periodSequenceDet.Insert(periodSequenceDtls);
                     _scheduleResultOpMaster.Insert(scheduleMasters);
                     scope.Complete();

+ 85 - 57
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -200,6 +200,11 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private readonly ISqlRepository<PeriodSequenceDet> _periodSequenceDet;
 
+        /// <summary>
+        /// 排产结果明细
+        /// </summary>
+        private ISqlRepository<ScheduleResultOpMaster> _scheduleResultOpMaster;
+
         /// <summary>
         /// 工作日历
         /// </summary>
@@ -414,6 +419,7 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<LocationDetail> locationDetail,
             ISqlRepository<ItemPackMaster> itemPackMaster,
             ISqlRepository<GeneralizedCodeMaster> generalizedCodeMaster,
+            ISqlRepository<ScheduleResultOpMaster> scheduleResultOpMaster,
             IUnitOfWorkManager unitOfWorkManager
             )
         {
@@ -496,6 +502,7 @@ namespace Business.ResourceExamineManagement
             _itemPackMaster = itemPackMaster;
             _generalizedCodeMaster = generalizedCodeMaster;
             _unitOfWorkManager = unitOfWorkManager;
+            _scheduleResultOpMaster = scheduleResultOpMaster;
         }
         #endregion
 
@@ -969,6 +976,7 @@ namespace Business.ResourceExamineManagement
             srm_Pr.pr_rqty = prlist.Sum(s => s.pr_rqty);//需求数量
             srm_Pr.pr_aqty = prlist.Sum(s => s.pr_aqty);//申请数量
             srm_Pr.pr_sqty = prlist.Sum(s => s.pr_sqty);//建议数量
+            srm_Pr.pr_ssend_date= prlist.Min(s => s.pr_ssend_date);//系统建议下单日期
             srm_Pr.pr_sarrive_date = prlist.Min(s => s.pr_sarrive_date);//系统建议到达日期(建议到货日期)
             srm_Pr.pr_psend_date = prlist.Min(s => s.pr_psend_date);//计划下单日期
             srm_Pr.pr_parrive_date = prlist.Min(s => s.pr_parrive_date);//计划到达日期
@@ -1017,8 +1025,8 @@ namespace Business.ResourceExamineManagement
             //List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.state == 1 || s.state == 2).Result;
             //直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
             DateTime toTime = new DateTime(2023, 7, 6);
-            DateTime starttime = toTime.AddDays(1);
-            DateTime endtime = toTime.AddDays(8);
+            DateTime starttime = toTime.Date.AddDays(8);
+            DateTime endtime = toTime.Date.AddDays(14);
             List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.pr_rarrive_date >= starttime && s.pr_rarrive_date <= endtime && (s.state == 1 || s.state == 3)).Result;
             //List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.icitem_id == 1949).Result;
             //List<srm_purchase> purchaselist = _mysql_srm_purchase.GetListAsync(s => prlist.Select(c => c.icitem_id).Contains(s.icitem_id) && prlist.Select(c => c.pr_purchaseid).Contains(s.supplier_id)).Result;
@@ -2139,21 +2147,33 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<string> PlanOrderResourceCheck(string workOrd)
+        public async Task<string> PlanOrderResourceCheck()
         {
-            List<string> workOrds = workOrd.Split(",").ToList();
+            /*List<string> workOrds = workOrd.Split(",").ToList();
             if (workOrds.Count == 0)
             {
                 return "";
-            }
-            List<mes_morder> mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => workOrds.Contains(x.morder_no)).Result;
-            if (mo_Mes_Morders.Any())
+            }*/
+            List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.morder_type == "计划工单").Result;
+            //先排除锁定期内的工单 //优先级排序
+            DateTime lookTime = DateTime.Now.Date.AddDays((double)8);
+            Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime).OrderBy(s => s.moentry_sys_stime).ToList();
+
+            if (Mes_Morders.Any())
             {
+                List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
+                //清理PR的占用。
+                List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
+                _businessDbContext.BulkDelete(occupy);
+
+                //清理锁定期外的排程数据
+                _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
+                _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
                 //只走计划工单
-                await OrderKittingCheck(mo_Mes_Morders, true);
+                await OrderKittingCheck(Mes_Morders, true);
             }
             else {
-                JsonConvert.SerializeObject("未查找到对应的计划工单,请联系管理员。");
+                return JsonConvert.SerializeObject("未查找到对应的计划工单,请联系管理员。");
             }
             return JsonConvert.SerializeObject("ok");
         }
@@ -2177,7 +2197,7 @@ namespace Business.ResourceExamineManagement
             }
             else
             {
-                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.start_time > DateTime.Now.Date.AddDays(1) && x.start_time < DateTime.Now.Date.AddDays(day) && x.morder_state != MorderEnum.Accomplish_state && !x.IsDeleted).Result;
+                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.start_time > DateTime.Now.Date.AddDays(1) && x.start_time < DateTime.Now.Date.AddDays(day) && x.morder_state == MorderEnum.Xd_state && !x.IsDeleted).Result;
             }
             //只做库存是否齐套检查
             if (mo_Mes_Morders.Any())
@@ -2493,7 +2513,7 @@ namespace Business.ResourceExamineManagement
 
                 //计算
                 _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.start_time, sklist, sentry, item.urgent, icitemlist);
-
+                
                 //TODO:最晚开始时间
                 var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
                 //物料齐套时间
@@ -2524,63 +2544,71 @@ namespace Business.ResourceExamineManagement
                     if (list.Any())
                         rtn.srm_pr_list = _CalcBomViewAppService.SRMPRDtoList;
                 }
-                var itemsupplierList = _srm_supplier.GetListAsync(a => prmainlist.Select(i => i.pr_purchaseid).Contains(a.mysql_id) && a.tenant_id == input.tenantId && a.factory_id == input.factoryId).Result;
-                if (prmainlist.Any())
+
+
+                //获取工单数据
+                var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c=>c.morder_no).Contains(p.WorkOrd));
+                workOrdMasters.ForEach(s => {
+                    s.OrdDate = DateTime.Now.Date.AddDays(7);//锁定期
+                    s.DueDate = DateTime.Now.Date.AddDays(7);
+                });
+                //优先级排序
+                workOrdMasters = workOrdMasters.OrderBy(s => s.OrdDate).ToList();
+                //排产
+                await _productionScheduleAppService.DoProductShcedule(workOrdMasters);
+                
+                foreach (var wod in workOrdMasters)
                 {
-                    var pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
-                    PoActionListDto poaction = new PoActionListDto();
-                    //TODO:工单齐套检查需要调整
-                    //AutoCreatePOFromPR(prmainlist, bangid, icitemlist, itemsupplierList, poaction);
-                    using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
+                    var morder = mo_Mes_Morders.Find(s => s.morder_no == wod.WorkOrd);
+                    morder.moentry_sys_stime = wod.OrdDate;
+                    morder.moentry_sys_etime = wod.DueDate;
+
+                    var exa = rtn.examines.Find(s => s.morder_no == wod.WorkOrd);
+                    //根据排产后得日期,反推PR。
+                    var wkordPrList = prmainlist.Where(s => s.pr_mono == wod.WorkOrd).ToList();
+
+                    //反算所有的PR,根据时间减去提前期
+                    wkordPrList.ForEach(pr =>
                     {
-                        try
+                        var ts = pr.pr_parrive_date - pr.pr_psend_date;
+                        var icitem = icitemlist.Find(s => s.mysql_id == pr.icitem_id);
+                        if (icitem != null)
                         {
-                            await _srm_pr_main.InsertManyAsync(prmainlist);
-                            _businessDbContext.BulkInsert(pr_mainlist);
-                            if (poaction.mopoMain.Any())
-                            {
-                                await _srm_po_main.InsertManyAsync(poaction.mopoMain);
-                            }
-                            if (poaction.mopolist.Any())
+                            var bce = exa.BomChildExamineList.Find(s => s.item_id == pr.icitem_id && s.num == pr.num);
+                            pr.pr_sarrive_date = morder.moentry_sys_stime.Value.AddDays((double)(0 - bce.pre_time.GetValueOrDefault() - 1 - icitem.clean_leadtime.GetValueOrDefault()));//到货还需要向前推 物料的预处理时间。到货日期必须提前一天到
+                            pr.pr_ssend_date = pr.pr_sarrive_date.GetValueOrDefault().AddDays(0 - ts.Value.Days);
+                            if (pr.pr_ssend_date > DateTime.Now)
                             {
-                                await _srm_po_list.InsertManyAsync(poaction.mopolist);
-                            }
-                            if (poaction.poMain.Any())
-                            {
-                                _businessDbContext.BulkInsert(poaction.poMain);
-                            }
-                            if (poaction.polist.Any())
-                            {
-                                _businessDbContext.BulkInsert(poaction.polist);
-                            }
-                            if (poaction.mopoOccupiesList.Any())
-                            {
-                                var poOccupies = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(poaction.mopoOccupiesList);
-                                _businessDbContext.BulkInsert(poOccupies);
+                                pr.pr_ssend_date = DateTime.Now;
                             }
+                        }
+                    });
+                }
 
-                            if (poaction.poMasterList.Any())
-                            {
-                                _purOrdMaster.Insert(poaction.poMasterList);
-                                //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
-                                List<string> nbrs = poaction.poMasterList.Select(a => a.PurOrd).ToList();
-                                var nbrList = _purOrdMaster.Select(a => a.Domain == "1001" && nbrs.Contains(a.PurOrd));
-                                poaction.poDetailList.ForEach(c =>
-                                {
-                                    c.PurOrdRecID = nbrList.Where(a => a.PurOrd == c.PurOrd).First().RecID;
-                                });
-                                _purOrdDetail.Insert(poaction.poDetailList);
-                            }
-                            await unitOfWork.CompleteAsync();
+                using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
+                {
+                    try
+                    {
+                        _businessDbContext.BulkUpdate(mo_Mes_Morders);
+                        if (prmainlist.Any())
+                        {
+                            var pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
+                            _businessDbContext.BulkInsert(pr_mainlist);
                         }
-                        catch (Exception e)
+                        if (_CalcBomViewAppService.srm_Po_OccupiesInsert.Any())
                         {
-                            unitOfWork.Dispose();
-                            new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查数据更新失败:" + e.Message, _currentTenant.Id.ToString());
+                            _CalcBomViewAppService.srm_Po_OccupiesInsert.ForEach(s => { s.tenant_id = param.tenantId; s.factory_id = param.factoryId; });
+                            await _srm_po_occupy.InsertMany(_CalcBomViewAppService.srm_Po_OccupiesInsert);
                         }
+                        await unitOfWork.CompleteAsync();
+                    }
+                    catch (Exception e)
+                    {
+                        unitOfWork.Dispose();
+                        new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查数据更新失败:" + e.Message, _currentTenant.Id.ToString());
                     }
                 }
-
+                
                 //检查结果写入数据库
                 var b_Examine_Results = ObjectMapper.Map<List<ExamineResult>, List<b_examine_result>>(rtn.examines);
                 List<b_examine_result> examineList = new List<b_examine_result>();

+ 7 - 0
MicroServices/Business/Business.Domain/MongoDB/SRM/mo_srm_pr_main.cs

@@ -239,5 +239,12 @@ namespace Business.Domain
         [BsonIgnore]
         [NotMapped]
         public decimal? totalLeadTime { get; set; }
+
+        /// <summary>
+        /// 项次号
+        /// </summary>
+        [StringLength(50)]
+        [Comment("项次号")]
+        public string? num { get; set; }
     }
 }

+ 12 - 0
MicroServices/Business/Business.Domain/StructuredDB/Bang/b_bom_child_examine.cs

@@ -216,6 +216,18 @@ namespace Business.Domain
         [Comment("齐套时间")]
         public DateTime? kitting_time { get; set; }
 
+        /// <summary>
+        /// 自制时长(天)
+        /// </summary>
+        [Comment("自制时长(天)")]
+        public int? make_time { get; set; }
+
+        /// <summary>
+        /// 采购前置(需加上自制)
+        /// </summary>
+        [Comment("采购前置时间")]
+        public int? pre_time { get; set; }
+
         /// <summary>
         /// 满足时间
         /// </summary>

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdMaster.cs

@@ -33,6 +33,12 @@ namespace Business.Domain
         [Comment("计划开始日期")]
         public DateTime? OrdDate { get; set; }
 
+        /// <summary>
+        /// 计划结束日期
+        /// </summary>
+        [Comment("计划结束日期")]
+        public DateTime? DueDate { get; set; }
+
         /// <summary>
         /// 下达日期
         /// </summary>

+ 7 - 0
MicroServices/Business/Business.Domain/StructuredDB/SRM/srm_pr_main.cs

@@ -231,5 +231,12 @@ namespace Business.Domain
         /// </summary>
         [Comment("订单行id")]
         public long? sentry_id { get; set; }
+
+        /// <summary>
+        /// 项次号
+        /// </summary>
+        [StringLength(50)]
+        [Comment("项次号")]
+        public string? num { get; set; }
     }
 }

+ 2 - 2
MicroServices/Business/Business.Domain/StructuredDB/SRM/srm_purchase.cs

@@ -146,7 +146,7 @@ namespace Business.Domain
         [Comment("批量增量")]
         public decimal? batch_append_qty { get; set; }
 
-        /// <summary>
+        /*/// <summary>
         /// 是否周期送货
         /// </summary>
         [Comment("是否周期送货")]
@@ -157,7 +157,7 @@ namespace Business.Domain
         /// </summary>
         [StringLength(80)]
         [Comment("每周几送货")]
-        public string is_days { get; set; }
+        public string is_days { get; set; }*/
 
         /// <summary>
         /// 计算ID

+ 53 - 0
MicroServices/Business/Business.HttpApi/Controllers/DOP/DOPController.cs

@@ -0,0 +1,53 @@
+using Business.DOP;
+using Business.Dto;
+using Business.ResourceExamineManagement;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.AspNetCore.Mvc;
+
+namespace Business.Controllers.DOP
+{
+
+    /// <summary>
+    /// DOP同步接口
+    /// </summary>
+    [RemoteService]
+    [Area("Business")]
+    [Route("api/business/DOP")]
+    public class DOPController : AbpController
+    {
+        private readonly ISyncDOPAppService _DopAppService;
+
+        public DOPController(ISyncDOPAppService DopAppService)
+        {
+            _DopAppService = DopAppService;
+        }
+        /// <summary>
+        /// 平台成品库存监控
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("SyncPlatformFinishedProductMonitoringHW")]
+        public async Task<string> SyncPlatformFinishedProductMonitoringHW(List<PlatformInventoryDto> platformInventoryDtoList)
+        {
+            return await _DopAppService.SyncPlatformFinishedProductMonitoringHW(platformInventoryDtoList);
+        }
+        /// <summary>
+        /// 平台成品库存监控
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("SyncPlatformFinishedProductMonitoringGK")]
+        public async Task<string> SyncPlatformFinishedProductMonitoringGK(List<PlatformInventoryDto> platformInventoryDtoList)
+        {
+            return await _DopAppService.SyncPlatformFinishedProductMonitoringGK(platformInventoryDtoList);
+        }
+    }
+}

+ 2 - 2
MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs

@@ -97,9 +97,9 @@ namespace Business.Controllers
         /// <returns></returns>
         [HttpPost]
         [Route("PlanOrderResourceCheck")]
-        public Task<string> PlanOrderResourceCheck(string workOrd)
+        public Task<string> PlanOrderResourceCheck()
         {
-            return _ResourceExamineAppService.PlanOrderResourceCheck(workOrd);
+            return _ResourceExamineAppService.PlanOrderResourceCheck();
         }
         /// <summary>
         /// BOM清单批量预处理

+ 49 - 0
MicroServices/Business/Bussiness.Model/WMS/PlatformInventory.cs

@@ -0,0 +1,49 @@
+using Business.Core.Attributes;
+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.Model.WMS
+{
+    /// <summary>
+    /// 平台规格库存对照
+    /// </summary>
+    [Comment("平台规格库存对照")]
+    public class PlatformInventory : BaseEntity
+    {
+        /// <summary>
+        /// 仓库
+        /// </summary>
+        [Comment("仓库")]
+        public string? Location { get; set; }
+        /// <summary>
+        /// 规格或货品编码
+        /// </summary>
+        [Comment("规格或货品编码")]
+        public string? SpecificationModel { get; set; }
+        /// <summary>
+        /// 批号
+        /// </summary>
+        [Comment("批号")]
+        public string? BatchNumber { get; set; }
+        /// <summary>
+        /// 数量
+        /// </summary>
+        [Comment("数量")]
+        public decimal? InventoryQuantity { get; set; }
+        /// <summary>
+        /// 有效期
+        /// </summary>
+        [Comment("有效期")]
+        public decimal? PeriodOfValidity { get; set; }
+        /// <summary>
+        /// 编码
+        /// </summary>
+        [Comment("编码")]
+        public string? Code { get; set; }
+    }
+}

+ 45 - 0
MicroServices/Business/Bussiness.Model/WMS/PlatformSpecificationComparison.cs

@@ -0,0 +1,45 @@
+using Business.Core.Attributes;
+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.Model.WMS
+{
+    /// <summary>
+    /// 平台规格库存对照
+    /// </summary>
+    [Comment("平台规格库存对照")]
+    public class PlatformSpecificationComparison : BaseEntity
+    {
+        /// <summary>
+        /// 主键
+        /// </summary>
+        /// <param name="Id"></param>
+        public PlatformSpecificationComparison(long Id) : base(Id)
+        {
+        }
+        /// <summary>
+        /// 标准规格型号
+        /// </summary>
+        [Comment("标准规格型号")]
+        public string? StandardSpecifications { get; set; }
+        /// <summary>
+        /// 海王规格型号
+        /// </summary>
+        [Comment("海王规格型号")]
+        public string? HWSpecificationModel { get; set; }
+        /// <summary>
+        /// 国科规格型号
+        /// </summary>
+        [Comment("国科规格型号")]
+        public string? GKSpecificationModel { get; set; }
+        /// <summary>
+        /// 库存型号
+        /// </summary>
+        public string? Type { get; set; }
+    }
+}