|
|
@@ -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>
|