Forráskód Böngészése

工单下达调整。

tangdi 2 éve
szülő
commit
509e4aefc2

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

@@ -36,7 +36,7 @@ namespace Business.ResourceExamineManagement
         Task<string> ReceiveResult(string ids, int type,string companyid);
 
         /// <summary>
-        /// 按日期范围工单检查
+        /// 自动下达
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -50,7 +50,7 @@ namespace Business.ResourceExamineManagement
         Task<string> SubstituteResourceCheck(int day, string workOrd);
 
         /// <summary>
-        /// 计划工单齐套检查
+        /// 计划工单资源检查
         /// </summary>
         /// <param name="workOrds"></param>
         /// <returns></returns>
@@ -99,7 +99,7 @@ namespace Business.ResourceExamineManagement
         Task<string> PrApprove(string ids);
 
         /// <summary>
-        /// 按工单检查
+        /// 手动按工单下达
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>

+ 1 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -259,6 +259,7 @@ namespace Business.ResourceExamineManagement
                         //根据成品属性来判断是自制还是委外还是外购,需要考虑这种场景
                         if (level1Dto.erp_cls == 1 && param.checkflag)
                         {
+                            //param.checkflag=true 销售订单产生工单
                             level1Dto.make_qty = level1Dto.lack_qty;
                             //生成主工单
                             GenerateMorderDto generateMorderDto = new GenerateMorderDto()

+ 132 - 86
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -17,7 +17,9 @@ using MongoDB.Driver;
 using MongoDB.Driver.Linq;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using NUglify.JavaScript;
 using SixLabors.ImageSharp;
+using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream;
 using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.wavelet.synthesis;
 using System;
 using System.Collections.Generic;
@@ -28,6 +30,7 @@ using System.Threading.Tasks;
 using Volo.Abp.Application.Services;
 using Volo.Abp.DependencyInjection;
 using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Json.SystemTextJson;
 using Volo.Abp.MultiTenancy;
 using Volo.Abp.ObjectMapping;
 using Volo.Abp.Uow;
@@ -2275,7 +2278,7 @@ namespace Business.ResourceExamineManagement
 
 
         /// <summary>
-        /// 计划工单齐套检查
+        /// 计划工单资源检查
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -2406,21 +2409,50 @@ namespace Business.ResourceExamineManagement
             }
         }
 
+        /// <summary>
+        /// 范围内工单齐套检查
+        /// </summary>
+        /// <param name="domain"></param>
+        /// <param name="userAccount"></param>
+        /// <returns></returns>
+        public async Task<string> OrderCompleteInspection(string domain, string userAccount)
+        {
+            var workords = _workOrdMaster.Select(s => s.Domain == domain && (s.Status == "r" || string.IsNullOrEmpty(s.Status) == true)).ToList();
+            List<mes_morder> morders = _mysql_mes_morder.GetListAsync(x => x.factory_id.ToString() == domain && workords.Select(s => s.WorkOrd).Contains(x.morder_no) && (x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
+            if (morders.Any())
+            {
+                var rst = await OrderResourceCheck(morders, domain, userAccount);
+                if (rst == "ok")
+                {
+                    try
+                    {
+                        await _mysql_mes_morder.UpdateManyAsync(morders);
+                    }
+                    catch (Exception e)
+                    {
+                        new NLogHelper("ResourceExamineAppService").WriteLog("OrderCompleteInspection", "工单齐套检查失败:" + e.Message, _currentTenant.Id.ToString());
+                    }
+                }
+                else {
+                    return rst;
+                }
+            }
+            return "ok";
+        }
+
+
 
         /// <summary>
-        /// 按工单齐套检查
+        /// 原材料在库检查
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<string> OrderResourceCheck(List<mes_morder> mo_Mes_Morders,string domain, string userAccount, bool WordOrdXd=false)
+        public async Task<string> OrderResourceCheck(List<mes_morder> mo_Mes_Morders,string domain, string userAccount)
         {
             List<mes_morder> checkMo = new List<mes_morder>();
             //只做库存是否齐套检查
             if (mo_Mes_Morders.Any())
             {
-                List<mes_morder> updateList = new List<mes_morder>();
-                List<mes_morder> xdupdateList = new List<mes_morder>();
-
                 //检查工单是否已经下了领料单
                 var nbrList = _nbrMaster.Select(a => a.Domain == domain && a.Type == "SM" && mo_Mes_Morders.Select(c => c.morder_no).Contains(a.WorkOrd));
                 foreach (var mo in mo_Mes_Morders)
@@ -2450,30 +2482,17 @@ namespace Business.ResourceExamineManagement
                             //工单状态为  “备料中”
                             mo.MaterialSituation = MorderEnum.Preparation;
                         }
-                        updateList.Add(mo);
                         //完成时间已经过去,则不做处理
                     }
                     else {
                         checkMo.Add(mo);
                     }
                 }
-
-                string workords = "";
-
                 if (checkMo.Any())
                 {
                     var rtn = await OrderKittingCheck(checkMo);
                     if (rtn != null && rtn.examines != null)
                     {
-                        var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == domain).ToList();
-                        decimal lookDay = 0;
-                        if (sysSet.Any())
-                        {
-                            //锁定期
-                            lookDay = sysSet[0].UDeci1;
-                        }
-                        lookDay = lookDay == 0 ? 7 : lookDay;
-                        DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);
                         //循环处理工单
                         foreach (var cmo in checkMo)
                         {
@@ -2486,7 +2505,7 @@ namespace Business.ResourceExamineManagement
                                     //如果有缺料
                                     if (bce.is_use && bce.stock_state == 0)
                                     {
-                                        //如果当前数据没有子级,则代表原材料
+                                        //如果当前数据没有子级,则代表原材料齐套
                                         if (exm.BomChildExamineList.Where(s => s.parent_id == bce.fid).Count() == 0)
                                         {
                                             flag = false;
@@ -2502,67 +2521,15 @@ namespace Business.ResourceExamineManagement
                             if (flag)
                             {
                                 //锁定期内生产备料单,并且更新为备料中,锁定期外的则更新成仓库齐套。
-                                if (cmo.moentry_sys_stime.GetValueOrDefault().Date <= lookTime)
-                                {
-                                    //生成领料单
-                                    workords += "," + cmo.morder_no;
-                                    cmo.MaterialSituation = MorderEnum.Preparation;
-                                    cmo.morder_state = MorderEnum.Xd_state;
-                                    updateList.Add(cmo);
-                                }
-                                else {
-                                    cmo.MaterialSituation = MorderEnum.CarehouseComplete;
-                                    if (WordOrdXd)
-                                    {
-                                        workords += "," + cmo.morder_no;
-                                        cmo.MaterialSituation = MorderEnum.Preparation;
-                                        cmo.morder_state = MorderEnum.Xd_state;
-                                        xdupdateList.Add(cmo);
-                                    }
-                                    else {
-                                        updateList.Add(cmo);
-                                    }
-                                }
+                                cmo.MaterialSituation = MorderEnum.CarehouseComplete;
                             }
                             else
                             {
                                 //工单状态为  “仓库不齐套”
                                 cmo.MaterialSituation = MorderEnum.NoCarehouseComplete;
-                                if (WordOrdXd)
-                                {
-                                    workords += "," + cmo.morder_no;
-                                    cmo.morder_state = MorderEnum.Xd_state;
-                                    cmo.MaterialSituation = MorderEnum.Part;
-                                    xdupdateList.Add(cmo);
-                                }
-                                else
-                                {
-                                    updateList.Add(cmo);
-                                }
                             }
                         }
                     }
-                    /*OrderResourceViewDto result = DataPackage(rtn);
-                    result.DayBulletinBoardList = result.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
-                    //保存检查结果
-                    SaveExamineResult(result.KittingCheckResultList, result.DayBulletinBoardList, 1);*/
-                }
-                _businessDbContext.BulkUpdate(updateList);
-                if (workords.Length > 0)
-                {
-                    workords = workords.Substring(1, workords.Length - 1);
-                    //如果生成领料单,需清理掉当前工单的占用,然后根据领料单的数据,来生成工单的占用
-                    var rst = await CreatePickBill(workords, domain, userAccount);
-                    if (rst != "ok")
-                    {
-                        return rst;
-                    }
-                    _businessDbContext.BulkUpdate(xdupdateList);
-                    var insertList = GetCopyOP(workords, domain);
-                    if (insertList.Any())
-                    {
-                        _periodSequenceDet.Insert(insertList);
-                    }
                 }
                 return "ok";
             }
@@ -2652,7 +2619,7 @@ namespace Business.ResourceExamineManagement
         }
 
         /// <summary>
-        /// 范围内工单齐套检查并下达
+        /// 自动下达
         /// </summary>
         /// <param name="startime"></param>
         /// <param name="endtime"></param>
@@ -2670,12 +2637,58 @@ namespace Business.ResourceExamineManagement
             {
                 DateTime.TryParse(startime, out etime);
             }
-
-            var periodSd = _periodSequenceDet.Select(s => s.Domain == domain && (s.Status == "" || s.Status == "r") && stime <= s.PlanDate && s.PlanDate <= etime).ToList();
+            //根据排产日计划来获取
+            var periodSd = _periodSequenceDet.Select(s => s.Domain == domain && string.IsNullOrEmpty(s.Status) == true && stime <= s.PlanDate && s.PlanDate <= etime).ToList();
             if (periodSd.Any())
             {
-                List<mes_morder> mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && periodSd.Select(s => s.WorkOrds).Contains(x.morder_no) && (x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
-                return await OrderResourceCheck(mo_Mes_Morders, domain, userAccount);
+                List<mes_morder> morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && periodSd.Select(s => s.WorkOrds).Contains(x.morder_no) && (x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
+                if (!morders.Any())
+                {
+                    return "没有需要下达的工单";
+                }
+                var rst = await OrderResourceCheck(morders, domain, userAccount);
+                if (rst == "ok")
+                {
+                    var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == domain).ToList();
+                    decimal lookDay = 0;
+                    if (sysSet.Any())
+                    {
+                        //锁定期
+                        lookDay = sysSet[0].UDeci1;
+                    }
+                    lookDay = lookDay == 0 ? 7 : lookDay;
+                    DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);
+
+                    string workords = "";
+                    foreach (var mo in morders)
+                    {
+                        if (mo.MaterialSituation == MorderEnum.CarehouseComplete && mo.morder_state == MorderEnum.Initial_state && mo.moentry_sys_stime.GetValueOrDefault().Date <= lookTime)
+                        {
+                            workords += "," + mo.morder_no;
+                            mo.morder_state = MorderEnum.Xd_state;
+                        }
+                    }
+                    await _mysql_mes_morder.UpdateManyAsync(morders);
+                    if (workords.Length > 0)
+                    {
+                        workords = workords.Substring(1, workords.Length - 1);
+                        //如果生成领料单,需清理掉当前工单的占用,然后根据领料单的数据,来生成工单的占用
+                        var pickRst = await CreatePickBill(workords, domain, userAccount);
+                        if (pickRst != "ok")
+                        {
+                            return pickRst;
+                        }
+                        var insertList = GetCopyOP(workords, domain);
+                        if (insertList.Any())
+                        {
+                            _periodSequenceDet.Insert(insertList);
+                        }
+                    }
+                    return "ok";
+                }
+                else {
+                    return rst;
+                }
             }
             else { 
                 return "没有需要下达的工单";
@@ -2683,7 +2696,7 @@ namespace Business.ResourceExamineManagement
         }
 
         /// <summary>
-        /// 工单齐套检查并下达
+        /// 手动按工单下达
         /// </summary>
         /// <param name="startime"></param>
         /// <param name="endtime"></param>
@@ -2693,14 +2706,45 @@ namespace Business.ResourceExamineManagement
         {
             if (!string.IsNullOrEmpty(workord))
             {
-                List<mes_morder> mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && x.morder_no == workord && !x.IsDeleted).Result;
-                if (mo_Mes_Morders.Any())
+                List<mes_morder> morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && x.morder_no == workord && !x.IsDeleted).Result;
+                if (morders.Any())
                 {
-                    if (!string.IsNullOrEmpty(mo_Mes_Morders[0].morder_state) && mo_Mes_Morders[0].morder_state != MorderEnum.Initial_state)
+                    if (!string.IsNullOrEmpty(morders[0].morder_state) && morders[0].morder_state != MorderEnum.Initial_state)
                     {
-                        return "工单信息为"+ mo_Mes_Morders[0].morder_state + ",不允许下达。";
+                        return "工单信息为"+ morders[0].morder_state + ",不允许下达。";
+                    }
+                    var rst = await OrderResourceCheck(morders, domain, userAccount);
+                    if (rst == "ok")
+                    {
+                        try
+                        {
+                            morders[0].morder_state = MorderEnum.Xd_state;
+                            morders[0].MaterialSituation = morders[0].MaterialSituation == MorderEnum.NoCarehouseComplete ? MorderEnum.Part : morders[0].MaterialSituation;
+
+                            //如果生成领料单,需清理掉当前工单的占用,然后根据领料单的数据,来生成工单的占用
+                            var pickRst = await CreatePickBill(morders[0].morder_no, domain, userAccount);
+                            if (pickRst != "ok")
+                            {
+                                return pickRst;
+                            }
+                            await _mysql_mes_morder.UpdateManyAsync(morders);
+                            //复制子工序
+                            var insertList = GetCopyOP(morders[0].morder_no, domain);
+                            if (insertList.Any())
+                            {
+                                _periodSequenceDet.Insert(insertList);
+                            }
+                            return "ok";
+                        }
+                        catch (Exception e)
+                        {
+                            return "下达失败,请联系管理员。";
+                        }
+                    }
+                    else
+                    {
+                        return rst;
                     }
-                    return await OrderResourceCheck(mo_Mes_Morders, domain, userAccount, true);
                 }
                 else {
                     return "工单信息不存在,请重新检查。";
@@ -2779,7 +2823,8 @@ namespace Business.ResourceExamineManagement
         /// <returns></returns>
         public async Task<string> SubstituteResourceCheck(int day, string workOrd)
         {
-            List<mes_morder> mo_Mes_Morders = new List<mes_morder>();
+            //先屏蔽此功能,暂未使用
+            /*List<mes_morder> mo_Mes_Morders = new List<mes_morder>();
             if (day == 0)
             {
                 List<string> workOrds = workOrd.Split(",").ToList();
@@ -2804,7 +2849,8 @@ namespace Business.ResourceExamineManagement
             }
             else {
                 return JsonConvert.SerializeObject("没有需要检查的工单");
-            }
+            }*/
+            return "ok";
         }
 
         /// <summary>

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

@@ -69,7 +69,7 @@ namespace Business.Controllers
         }
 
         /// <summary>
-        /// 齐套检查下达
+        /// 自动下达
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -93,7 +93,7 @@ namespace Business.Controllers
         }
 
         /// <summary>
-        /// 计划工单齐套检查
+        /// 计划工单资源检查
         /// </summary>
         /// <param name="workOrd"></param>
         /// <returns></returns>
@@ -175,6 +175,13 @@ namespace Business.Controllers
             return _ResourceExamineAppService.PrApprove(ids);
         }
 
+        /// <summary>
+        /// 手动按工单下达
+        /// </summary>
+        /// <param name="workord"></param>
+        /// <param name="domain"></param>
+        /// <param name="userAccount"></param>
+        /// <returns></returns>
         [HttpGet]
         [Route("ProduceWorkOrdKittingCheck")]
         public Task<string> ProduceWorkOrdKittingCheck(string workord, string domain, string userAccount)