Pengxy vor 1 Woche
Ursprung
Commit
89cc7aac9f

+ 8 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs

@@ -192,6 +192,14 @@ namespace Business.ResourceExamineManagement
         /// <returns></returns>
         Task<string> WorkOrdKittingCheckByNo(string workord, string qty, string instockdate, string priority, string domain, string userAccount);
 
+        /// <summary>
+        /// 简单调整工单数据
+        /// </summary>
+        /// <param name="domain"></param>
+        /// <returns></returns>
+        Task<string> WorkOrdUpdateByNo(string workord, string qty, string instockdate, string priority, string domain, string userAccount, string LotSerial = null);
+
+
         /// <summary>
         /// 调整过去采购申请时间
         /// </summary>

+ 275 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -7667,6 +7667,281 @@ namespace Business.ResourceExamineManagement
             }
         }
 
+        public async Task<string> WorkOrdUpdateByNo(string workord, string qty, string instockdate, string priority, string domain, string userAccount, string LotSerial = null)
+        {
+            if (string.IsNullOrEmpty(qty))
+                return "数量不正确,请检查";
+            if (string.IsNullOrEmpty(instockdate))
+                return "工单开工日期不正确,请检查";
+            if (string.IsNullOrEmpty(priority))
+                return "优先级不正确,请检查";
+            if (string.IsNullOrEmpty(workord))
+                return "工单号为空,请检查";
+            try
+            {
+                //先执行工单数量、优先级、开工日期、完工日期的修改
+                decimal newpriority = Convert.ToDecimal(priority);
+                DateTime newinstockdate = Convert.ToDateTime(instockdate);
+                decimal newqty = Convert.ToDecimal(qty);
+                WorkOrdMaster work = null;
+                var workords = _workOrdMaster.Select(x => x.WorkOrd == workord && x.tenant_id.ToString() == domain).ToList();
+                if (workords.Any())
+                {
+                    work = workords[0];
+                }
+                if (work == null)
+                    return "未查找到对应工单,请刷新界面重试。";
+
+                TimeSpan difference = newinstockdate.Subtract(work.OrdDate.GetValueOrDefault());
+                int daysDifference = difference.Days;
+                work.OrdDate = newinstockdate;
+                work.QtyOrded = newqty;
+                work.Priority = newpriority;
+                if (!string.IsNullOrEmpty(LotSerial))
+                {
+                    work.LotSerial = LotSerial;
+                }
+                work.DueDate = work.DueDate.GetValueOrDefault().AddDays(daysDifference);
+                var molist = _mysql_mes_morder.GetListAsync(x => x.morder_no == work.WorkOrd && x.tenant_id.ToString() == domain).Result;
+                var moentryList = _mysql_mes_moentry.GetListAsync(x => x.moentry_mono == work.WorkOrd && x.tenant_id.ToString() == domain).Result;
+                var workRoutings = _workOrdRouting.Select(a => a.WorkOrd == work.WorkOrd && a.tenant_id.ToString() == domain);
+                var workDetails = _workOrdDetail.Select(a => a.WorkOrd == work.WorkOrd && a.tenant_id.ToString() == domain);
+                var weekplans = _replenishmentWeekPlan.GetListAsync(w => w.ProductionOrder == work.WorkOrd && w.tenant_id.ToString() == domain).Result;
+                if (molist.Any())
+                {
+                    molist.ForEach(x =>
+                    {
+                        x.morder_production_number = newqty;
+                        x.need_number = newqty;
+                        x.moentry_sys_stime = work.OrdDate;
+                        x.moentry_sys_etime = work.DueDate;
+                        x.update_time = DateTime.Now;
+                        x.update_by_name = userAccount;
+                    });
+                    //_businessDbContext.BulkUpdate(molist);
+                    moentryList.ForEach(x =>
+                    {
+                        x.morder_production_number = newqty;
+                        x.need_number = newqty;
+                        x.update_time = DateTime.Now;
+                        x.update_by_name = userAccount;
+                    });
+                }
+                if (!molist.Any())
+                    return "未查找到对应工单,请刷新界面重试。";
+                if (weekplans.Any())
+                {
+                    weekplans.ForEach(x =>
+                    {
+                        x.Qty = newqty;
+                        x.InStockDate = work.DueDate;
+                        x.PlanStartDate = work.OrdDate;
+                        if (!string.IsNullOrEmpty(LotSerial))
+                        {
+                            x.ProductionBatch = work.LotSerial;
+                        }
+                        x.update_time = DateTime.Now;
+                        x.update_by_name = userAccount;
+                    });
+                }
+                //再执行工单的MRP,更新工单物料明细
+                //_workOrdMaster.Update(work);
+                if (workRoutings.Any())
+                {
+                    workRoutings.ForEach(a =>
+                    {
+                        a.QtyOrded = newqty;
+                        a.UpdateTime = DateTime.Now;
+                        a.UpdateUser = userAccount;
+                    });
+                    //_workOrdRouting.Update(workRoutings);
+                }
+
+                //获取BOM用于分解到原材料
+                var boms = _mysql_ic_bom.GetListAsync(a => work.ItemNum == a.item_number && a.tenant_id.ToString() == domain).Result;
+                var pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.Id).ToList().Contains(s.sourceid)).Result;
+                if (boms == null || !boms.Any())
+                {
+                    return "未查询到bom";
+                }
+                var pretreament = pretreatments.Where(c => c.sourceid == boms[0].Id).ToList();
+                var returnlist = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(pretreament);
+                returnlist = returnlist.OrderBy(s => s.num_order).ToList();
+                returnlist[0].needCount = newqty;
+                CaclMaterialShortageNew(returnlist);
+                returnlist = returnlist.Where(x => x.erp_cls != 4 && x.level != 1).ToList();
+                List<WorkOrdDetail> workOrdDetails = new List<WorkOrdDetail>();
+                if (returnlist.Any())
+                {
+                    for (int i = 0; i < workDetails.Count; i++)
+                    {
+                        var curitem = returnlist.Where(x => x.item_number == workDetails[i].ItemNum).ToList();
+                        if (curitem.Any())
+                        {
+                            workDetails[i].QtyRequired = curitem.Sum(x => x.needCount);
+                            workDetails[i].UpdateTime = DateTime.Now;
+                            workDetails[i].UpdateUser = userAccount;
+                        }
+                    }
+
+                    //补充物料明细信息
+                    //WorkOrdDetail woDetail = null;
+                    //var calereturnList = returnlist.OrderBy(c => c.item_number).Select(x => x.item_number).Distinct().ToList();
+                    ////获取物料主数据
+                    //List<ItemMaster> itemMasters = _itemMaster.Select(p => p.Domain == param.factoryId.ToString()).ToList();
+
+                    //short num = 1;
+                    //foreach (var caleNumber in calereturnList)
+                    //{
+                    //    var caleList = returnlist.Where(x => x.item_number == caleNumber).ToList();
+                    //    var curitem = workDetails.Where(x => x.ItemNum == caleNumber).ToList();
+                    //    if (curitem.Any())
+                    //    {
+                    //        curitem[0].Line = num;
+                    //        curitem[0].QtyRequired = caleList.Sum(x => x.needCount);
+                    //        curitem[0].UpdateTime = DateTime.Now;
+                    //        curitem[0].UpdateUser = userAccount;
+                    //        num++;
+                    //    }
+                    //    else
+                    //    {
+                    //        var itemMst = itemMasters.Find(x => x.ItemNum == caleNumber);
+                    //        //添加工单的物料信息
+                    //        woDetail = new WorkOrdDetail();
+                    //        woDetail.Domain = work.Domain;
+                    //        woDetail.WorkOrd = work.WorkOrd;
+                    //        var oplist = caleList.Where(x => x.Op > 0).ToList();
+                    //        woDetail.Op = 0;
+                    //        if (oplist.Any())
+                    //        {
+                    //            woDetail.Op = oplist.Min(f => f.Op);
+                    //        }
+                    //        woDetail.ItemNum = caleNumber;
+                    //        woDetail.QtyPosted = 0m;
+                    //        woDetail.QtyReturned = 0m;
+                    //        woDetail.Status = "";
+                    //        woDetail.IsActive = true;
+                    //        woDetail.CreateTime = DateTime.Now;
+                    //        woDetail.Line = num;
+                    //        woDetail.QtyRequired = caleList.Sum(c => c.needCount);
+                    //        woDetail.Location = itemMst == null ? "" : itemMst.Location;
+                    //        woDetail.UM = itemMst == null ? "" : itemMst.UM;
+                    //        if (work.QtyOrded != 0)
+                    //        {
+                    //            woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / work.QtyOrded, 10);
+                    //        }
+                    //        workOrdDetails.Add(woDetail);
+                    //        num++;
+                    //    }
+                    //}
+                }
+                var nbrList = _nbrMaster.Select(x => x.tenant_id.ToString() == domain && x.WorkOrd == workord && x.Type == "SM").ToList();
+                var nbrDtlList = _nbrDetail.Select(x => nbrList.Select(c => c.RecID).Contains(x.NbrRecID) && x.IsActive).ToList();
+                if (nbrList.Any())
+                {
+                    nbrList.ForEach(x =>
+                    {
+                        x.Status = "";
+                    });
+
+                    if (nbrDtlList.Any())
+                    {
+                        nbrDtlList.ForEach(x =>
+                        {
+                            var itemnum = workDetails.Find(w => w.ItemNum == x.ItemNum);
+                            //仅修改大于已发数的领料明细
+                            x.Status = itemnum == null ? x.Status : (itemnum.QtyRequired > x.QtyRec ? "" : x.Status);
+                            x.QtyOrd = itemnum == null ? x.QtyOrd : (itemnum.QtyRequired > x.QtyRec ? itemnum.QtyRequired : x.QtyOrd);
+                            x.CurrQtyOpened = itemnum == null ? x.QtyOrd : (itemnum.QtyRequired > x.QtyRec ? itemnum.QtyRequired : x.QtyOrd);
+                        });
+                    }
+                }
+                using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
+                {
+                    try
+                    {
+                        //批量保存 后期考虑子工单
+                        if (molist.Any())
+                        {
+                            _businessDbContext.UpdateRange(molist);
+                            if (workords.Any())
+                            {
+                                _workOrdMaster.Update(work);
+                            }
+                            if (workRoutings.Any())
+                            {
+                                _workOrdRouting.Update(workRoutings);
+                            }
+                            if (workDetails.Any())
+                            {
+                                _workOrdDetail.Update(workDetails);
+                            }
+                            if (workOrdDetails.Any())
+                            {
+                                _workOrdDetail.Insert(workOrdDetails);
+                            }
+                            if (moentryList.Any())
+                            {
+                                _businessDbContext.UpdateRange(moentryList);
+                            }
+                            if (nbrList.Any())
+                            {
+                                _businessDbContext.UpdateRange(nbrList);
+                            }
+                            if (nbrDtlList.Any())
+                            {
+                                _businessDbContext.UpdateRange(nbrDtlList);
+                            }
+                        }
+                        if (weekplans.Any())
+                        {
+                            _businessDbContext.UpdateRange(weekplans);
+                        }
+                        await _businessDbContext.SaveChangesAsync();
+                        await unitOfWork.CompleteAsync();
+                    }
+                    catch (Exception e)
+                    {
+                        unitOfWork.Dispose();
+                        new NLogHelper("ResourceExamineAppService").WriteLog("WorkOrdUpdateByNo", "修改计划工单失败:" + e.Message, _currentTenant.Id.ToString());
+                        return e.Message;
+                    }
+                    ;
+                }
+                return "ok";
+            }
+            catch (Exception e)
+            {
+                new NLogHelper("ResourceExamineAppService").WriteLog("WorkOrdUpdateByNo", "修改计划工单失败:" + e.Message, _currentTenant.Id.ToString());
+                return e.Message;
+            }
+        }
+
+        /// <summary>
+        /// 平铺计算物料情况
+        /// </summary>
+        /// <param name="returnlist"></param>
+        /// <param name="item"></param>
+        /// <param name="count"></param>
+        public void CaclMaterialShortageNew(List<BomChildExamineDto> returnlist)
+        {
+            foreach (var item in returnlist)
+            {
+                if (item.level == 1)
+                {
+                    continue;
+                }
+                //循环平铺整个资源检查的物料库存情况、缺料情况,子集缺料需要用父级缺料*子集使用数量-
+                var parent = returnlist.Find(s => s.fid == item.parent_id);
+                if (parent.erp_cls == 1 && parent.level != 1)
+                {
+                    continue;
+                }
+                //当前物料总共需要数量
+                item.needCount = Math.Ceiling(parent.needCount * item.qty * (1 + (item.scrap.GetValueOrDefault() / 100)) + item.wastage.GetValueOrDefault());
+                item.needCountNoloss = parent.needCount * item.qty;
+            }
+        }
 
 
         /// <summary>

+ 12 - 0
MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdDetail.cs

@@ -122,5 +122,17 @@ namespace Business.Domain
         /// </summary>
         [Comment("库位")]
         public string Location { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        [Comment("更新时间")]
+        public DateTime? UpdateTime { get; set; }
+
+        /// <summary>
+        ///更新用户
+        /// </summary>
+        [Comment("更新用户")]
+        public string UpdateUser { get; set; }
     }
 }

+ 12 - 0
MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdRouting.cs

@@ -272,5 +272,17 @@ namespace Business.Domain
         /// </summary>
         [Comment("人工时间")]
         public decimal Labor { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        [Comment("更新时间")]
+        public DateTime? UpdateTime { get; set; }
+
+        /// <summary>
+        ///更新用户
+        /// </summary>
+        [Comment("更新用户")]
+        public string UpdateUser { get; set; }
     }
 }

+ 14 - 0
MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs

@@ -336,6 +336,20 @@ namespace Business.Controllers
             return _ResourceExamineAppService.WorkOrdKittingCheckByNo(workord, qty, instockdate, priority, domain, userAccount);
         }
 
+        /// <summary>
+        /// 简单调整工单
+        /// </summary>
+        /// <param name="workord"></param>
+        /// <param name="domain"></param>
+        /// <param name="userAccount"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("WorkOrdUpdateByNo")]
+        public Task<string> WorkOrdUpdateByNo(string workord, string qty, string instockdate, string priority, string domain, string userAccount, string LotSerial = null)
+        {
+            return _ResourceExamineAppService.WorkOrdUpdateByNo(workord, qty, instockdate, priority, domain, userAccount, LotSerial);
+        }
+
         /// <summary>
         /// 调整过去采购申请时间
         /// </summary>

+ 18 - 0
MicroServices/Business/QuartzSettings/logs/logs.txt

@@ -5625,3 +5625,21 @@
 {"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2026-05-12T17:29:22.8060055+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"TestTimeOut","GroupName":"systemquartzjob","BeginDate":"2026-05-12T17:29:22.8077746+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"BOM预处理自动任务","GroupName":"BOM预处理自动任务","BeginDate":"2026-05-12T17:29:22.8094634+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2026-05-13T14:22:55.063459+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2026-05-13T14:22:55.1036123+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2026-05-13T14:22:55.1069089+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2026-05-13T14:22:55.1088308+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"TestTimeOut","GroupName":"systemquartzjob","BeginDate":"2026-05-13T14:22:55.1130607+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"BOM预处理自动任务","GroupName":"BOM预处理自动任务","BeginDate":"2026-05-13T14:22:55.1144928+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:07:43.8300563+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:07:43.8764619+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:07:43.8802667+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:07:43.8822745+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"TestTimeOut","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:07:43.8880829+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"BOM预处理自动任务","GroupName":"BOM预处理自动任务","BeginDate":"2026-05-13T15:07:43.8906918+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:09:15.0294051+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:09:15.0662703+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:09:15.0698356+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:09:15.0720527+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"TestTimeOut","GroupName":"systemquartzjob","BeginDate":"2026-05-13T15:09:15.0771647+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"BOM预处理自动任务","GroupName":"BOM预处理自动任务","BeginDate":"2026-05-13T15:09:15.0797773+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}