|
|
@@ -45,6 +45,9 @@ using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream;
|
|
|
using Volo.Abp.ObjectMapping;
|
|
|
using SixLabors.ImageSharp;
|
|
|
using static System.Formats.Asn1.AsnWriter;
|
|
|
+using System.Collections;
|
|
|
+using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
|
|
|
+using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.wavelet.synthesis;
|
|
|
|
|
|
namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
@@ -610,7 +613,7 @@ namespace Business.ResourceExamineManagement
|
|
|
param.sorderId = sorder.Id;
|
|
|
param.tenantId = input.tenantId;
|
|
|
param.factoryId = input.factoryId;
|
|
|
- param.checkflag = true;
|
|
|
+ //param.checkflag = true;
|
|
|
_morderAppService.param = param;
|
|
|
_purchaseOrderAppService.param = param;
|
|
|
_CalcBomViewAppService.param = param;
|
|
|
@@ -2054,18 +2057,63 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 工单齐套检查
|
|
|
+ /// 计划工单齐套检查
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> OrderResourceCheck(OrderCheckDto input)
|
|
|
+ public async Task<string> PlanOrderResourceCheck(string workOrd)
|
|
|
{
|
|
|
- var result = await OrderKittingCheck(input);
|
|
|
- OrderResourceViewDto rtn = DataPackage(result);
|
|
|
- rtn.DayBulletinBoardList = rtn.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
|
|
|
- //保存检查结果
|
|
|
- SaveExamineResult(rtn.KittingCheckResultList, rtn.DayBulletinBoardList, 1);
|
|
|
- return JsonConvert.SerializeObject(rtn);
|
|
|
+ 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())
|
|
|
+ {
|
|
|
+ //只走计划工单
|
|
|
+ await OrderKittingCheck(mo_Mes_Morders, true);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ JsonConvert.SerializeObject("未查找到对应的计划工单,请联系管理员。");
|
|
|
+ }
|
|
|
+ return JsonConvert.SerializeObject("ok");
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 按未来N天工单齐套检查
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="input"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> OrderResourceCheck(int day, string workOrd)
|
|
|
+ {
|
|
|
+ List<mes_morder> mo_Mes_Morders = new List<mes_morder>();
|
|
|
+ if (day == 0)
|
|
|
+ {
|
|
|
+ List<string> workOrds = workOrd.Split(",").ToList();
|
|
|
+ if (workOrds.Count() == 0)
|
|
|
+ {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => workOrds.Contains(x.morder_no)).Result;
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ //只做库存是否齐套检查
|
|
|
+ if (mo_Mes_Morders.Any())
|
|
|
+ {
|
|
|
+ var rtn = await OrderKittingCheck(mo_Mes_Morders);
|
|
|
+ OrderResourceViewDto result = DataPackage(rtn);
|
|
|
+ result.DayBulletinBoardList = result.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
|
|
|
+ //保存检查结果
|
|
|
+ SaveExamineResult(result.KittingCheckResultList, result.DayBulletinBoardList, 1);
|
|
|
+ return JsonConvert.SerializeObject("ok");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return JsonConvert.SerializeObject("没有需要检查的工单");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -2133,15 +2181,34 @@ namespace Business.ResourceExamineManagement
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> SubstituteResourceCheck(OrderCheckDto input)
|
|
|
+ public async Task<string> SubstituteResourceCheck(int day, string workOrd)
|
|
|
{
|
|
|
- var result = await OrderKittingCheck(input);
|
|
|
- OrderResourceViewDto rtn = DataPackage(result, true);
|
|
|
- rtn.DayBulletinBoardList = rtn.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
|
|
|
- //保存检查结果 替代关系不计算每日物料情况
|
|
|
- SaveExamineResult(rtn.KittingCheckResultList, new List<DayBulletinBoard>(), 2);
|
|
|
- //SaveExamineResult(rtn.KittingCheckResultList, rtn.DayBulletinBoardList, 2);
|
|
|
- return JsonConvert.SerializeObject(rtn);
|
|
|
+ List<mes_morder> mo_Mes_Morders = new List<mes_morder>();
|
|
|
+ if (day == 0)
|
|
|
+ {
|
|
|
+ List<string> workOrds = workOrd.Split(",").ToList();
|
|
|
+ if (workOrds.Count() == 0)
|
|
|
+ {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => workOrds.Contains(x.morder_no)).Result;
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ if (mo_Mes_Morders.Any())
|
|
|
+ {
|
|
|
+ var result = await OrderKittingCheck(mo_Mes_Morders);
|
|
|
+ OrderResourceViewDto rtn = DataPackage(result, true);
|
|
|
+ rtn.DayBulletinBoardList = rtn.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
|
|
|
+ //保存检查结果 替代关系不计算每日物料情况
|
|
|
+ SaveExamineResult(rtn.KittingCheckResultList, new List<DayBulletinBoard>(), 2);
|
|
|
+ return JsonConvert.SerializeObject(rtn);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return JsonConvert.SerializeObject("没有需要检查的工单");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -2231,18 +2298,23 @@ namespace Business.ResourceExamineManagement
|
|
|
/// 工单检查物料齐套
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
- public async Task<PschedDto> OrderKittingCheck(OrderCheckDto input)
|
|
|
+ public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, bool planCheck = false)
|
|
|
{
|
|
|
//资源检查结果
|
|
|
PschedDto rtn = new PschedDto();
|
|
|
//资源检查明细list
|
|
|
List<ExamineResult> examines = new List<ExamineResult>();
|
|
|
-
|
|
|
+ OrderCheckDto input = new OrderCheckDto();
|
|
|
+ if (mo_Mes_Morders.Any())
|
|
|
+ {
|
|
|
+ input.tenantId = mo_Mes_Morders[0].tenant_id;
|
|
|
+ input.factoryId = mo_Mes_Morders[0].factory_id.GetValueOrDefault();
|
|
|
+ }
|
|
|
//资源检查入参全局变量赋值
|
|
|
param.tenantId = input.tenantId;
|
|
|
param.factoryId = input.factoryId;
|
|
|
param.checkflag = false;
|
|
|
-
|
|
|
+ param.checkPlan = planCheck;
|
|
|
//生成当前计算bangid
|
|
|
long bangid = help.NextId();
|
|
|
|
|
|
@@ -2252,9 +2324,7 @@ namespace Business.ResourceExamineManagement
|
|
|
|
|
|
List<mo_mes_moentry> mo_Mes_Moentries = _mes_moentry.GetManyByCondition(x=> mo_Mes_Morders.Select(s => s.id).Contains(x.moentry_moid.Value)).Result;*/
|
|
|
|
|
|
- List<mes_morder> mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.start_time > DateTime
|
|
|
- .Now.Date.AddDays(1) && x.start_time < DateTime
|
|
|
- .Now.Date.AddDays(input.Day) && x.morder_state != MorderEnum.Accomplish_state && !x.IsDeleted && x.tenant_id == param.tenantId).Result;
|
|
|
+
|
|
|
|
|
|
List<mes_moentry> mo_Mes_Moentries = _mysql_mes_moentry.GetListAsync(x => mo_Mes_Morders.Select(s => s.Id).Contains(x.moentry_moid.Value)).Result;
|
|
|
|
|
|
@@ -2354,6 +2424,218 @@ namespace Business.ResourceExamineManagement
|
|
|
examines.Add(dtl);
|
|
|
}
|
|
|
rtn.examines = examines;
|
|
|
+ if (planCheck)
|
|
|
+ {
|
|
|
+ //如果有计划工单,则需要生成pr po oo
|
|
|
+ List<mo_srm_pr_main> prmainlist = new List<mo_srm_pr_main>();
|
|
|
+ if (_CalcBomViewAppService.SRMPRDtoList.Any())
|
|
|
+ {
|
|
|
+ List<List<mo_srm_pr_main>> prlist = _CalcBomViewAppService.SRMPRDtoList.Where(f => f.srm_Pr_Main != null).Select(s => s.srm_Pr_Main).ToList();
|
|
|
+ List<mo_srm_pr_main> list = new List<mo_srm_pr_main>();
|
|
|
+
|
|
|
+ foreach (var pr in prlist)
|
|
|
+ {
|
|
|
+ foreach (var item in pr)
|
|
|
+ {
|
|
|
+ list.Add(item);
|
|
|
+ prmainlist.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (list.Any())
|
|
|
+ rtn.srm_pr_list = _CalcBomViewAppService.SRMPRDtoList;
|
|
|
+ }
|
|
|
+ var itemsupplierList = _srm_supplier.Find(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 pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
|
|
|
+ PoActionListDto poaction = new PoActionListDto();
|
|
|
+
|
|
|
+ AutoCreatePOFromPR(prmainlist, bangid, icitemlist, itemsupplierList, poaction);
|
|
|
+ using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ await _srm_pr_main.InsertMany(prmainlist);
|
|
|
+ _businessDbContext.BulkInsert(pr_mainlist);
|
|
|
+ if (poaction.mopoMain.Any())
|
|
|
+ {
|
|
|
+ await _srm_po_main.InsertMany(poaction.mopoMain);
|
|
|
+ }
|
|
|
+ if (poaction.mopolist.Any())
|
|
|
+ {
|
|
|
+ await _srm_po_list.InsertMany(poaction.mopolist);
|
|
|
+ }
|
|
|
+ if (poaction.poMain.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(poaction.poMain);
|
|
|
+ }
|
|
|
+ if (poaction.polist.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(poaction.polist);
|
|
|
+ }
|
|
|
+ if (poaction.poOccupiesList.Any())
|
|
|
+ {
|
|
|
+ var poOccupies = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(poaction.poOccupiesList);
|
|
|
+ _businessDbContext.BulkInsert(poOccupies);
|
|
|
+ }
|
|
|
+
|
|
|
+ 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();
|
|
|
+ }
|
|
|
+ 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>();
|
|
|
+ List<b_bom_child_examine> bomExamineList = new List<b_bom_child_examine>();
|
|
|
+ List<b_mo_occupy> mooccupyList = new List<b_mo_occupy>();
|
|
|
+ List<b_mo_order> moorderList = new List<b_mo_order>();
|
|
|
+ List<b_ooder> ooderList = new List<b_ooder>();
|
|
|
+ List<b_purchase> purchaseList = new List<b_purchase>();
|
|
|
+ List<b_purchase_occupy> purchaseoccupyList = new List<b_purchase_occupy>();
|
|
|
+
|
|
|
+ foreach (var ex in rtn.examines)
|
|
|
+ {
|
|
|
+ var b_ex = ObjectMapper.Map<ExamineResult, b_examine_result>(ex);
|
|
|
+ b_ex.GenerateNewId(help.NextId());// = help.NextId();
|
|
|
+ if (_CalcBomViewAppService.mordersInsertList.Any())
|
|
|
+ {
|
|
|
+ var moentry = _CalcBomViewAppService.moentriesInsertList.Where(s => s.soentry_id == b_ex.sentry_id).FirstOrDefault();
|
|
|
+ if (moentry != null)
|
|
|
+ {
|
|
|
+ var sentryMo = _CalcBomViewAppService.mordersInsertList.Where(s => s.mysql_id == moentry.moentry_moid).FirstOrDefault();
|
|
|
+ if (sentryMo != null)
|
|
|
+ {
|
|
|
+ b_ex.morder_id = sentryMo.mysql_id;
|
|
|
+ b_ex.morder_no = sentryMo.morder_no;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ b_ex.create_time = DateTime.Now;
|
|
|
+ b_ex.tenant_id = param.tenantId;
|
|
|
+ b_ex.factory_id = param.factoryId;
|
|
|
+ examineList.Add(b_ex);
|
|
|
+ ex.BomChildExamineList.ForEach(s =>
|
|
|
+ {
|
|
|
+ var bc_ex = ObjectMapper.Map<BomChildExamineDto, b_bom_child_examine>(s);
|
|
|
+ bc_ex.GenerateNewId(help.NextId());
|
|
|
+ bc_ex.examine_id = b_ex.Id;
|
|
|
+ bc_ex.tenant_id = param.tenantId;
|
|
|
+ bc_ex.factory_id = param.factoryId;
|
|
|
+ bc_ex.create_time = DateTime.Now;
|
|
|
+ bomExamineList.Add(bc_ex);
|
|
|
+
|
|
|
+ if (s.mo_occupy_list != null)
|
|
|
+ {
|
|
|
+ var olist = ObjectMapper.Map<List<mo_occupy>, List<b_mo_occupy>>(s.mo_occupy_list);
|
|
|
+ olist.ForEach(o =>
|
|
|
+ {
|
|
|
+ o.bom_child_examine_id = bc_ex.Id; o.tenant_id = param.tenantId;
|
|
|
+ o.factory_id = param.factoryId;
|
|
|
+ });
|
|
|
+ mooccupyList.AddRange(olist);
|
|
|
+ }
|
|
|
+ if (s.make_list != null)
|
|
|
+ {
|
|
|
+ var mlist = ObjectMapper.Map<List<moorder>, List<b_mo_order>>(s.make_list);
|
|
|
+ mlist.ForEach(o =>
|
|
|
+ {
|
|
|
+ o.bom_child_examine_id = bc_ex.Id; o.tenant_id = param.tenantId;
|
|
|
+ o.factory_id = param.factoryId;
|
|
|
+ });
|
|
|
+ moorderList.AddRange(mlist);
|
|
|
+ }
|
|
|
+ if (s.subcontracting_list != null)
|
|
|
+ {
|
|
|
+ var slist = ObjectMapper.Map<List<ooder>, List<b_ooder>>(s.subcontracting_list);
|
|
|
+ slist.ForEach(o =>
|
|
|
+ {
|
|
|
+ o.bom_child_examine_id = bc_ex.Id; o.tenant_id = param.tenantId;
|
|
|
+ o.factory_id = param.factoryId;
|
|
|
+ });
|
|
|
+ ooderList.AddRange(slist);
|
|
|
+ }
|
|
|
+ if (s.purchase_list != null)
|
|
|
+ {
|
|
|
+ var plist = ObjectMapper.Map<List<purchase>, List<b_purchase>>(s.purchase_list);
|
|
|
+ plist.ForEach(o =>
|
|
|
+ {
|
|
|
+ o.bom_child_examine_id = bc_ex.Id; o.tenant_id = param.tenantId;
|
|
|
+ o.factory_id = param.factoryId;
|
|
|
+ });
|
|
|
+ purchaseList.AddRange(plist);
|
|
|
+ }
|
|
|
+ if (s.purchase_occupy_list != null)
|
|
|
+ {
|
|
|
+ var purlist = ObjectMapper.Map<List<purchase_occupy>, List<b_purchase_occupy>>(s.purchase_occupy_list);
|
|
|
+ purlist.ForEach(o =>
|
|
|
+ {
|
|
|
+ o.bom_child_examine_id = bc_ex.Id; o.tenant_id = param.tenantId;
|
|
|
+ o.factory_id = param.factoryId;
|
|
|
+ });
|
|
|
+ purchaseoccupyList.AddRange(purlist);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (examineList.Any())
|
|
|
+ {
|
|
|
+ _businessBangDbContext.BulkInsert(examineList);
|
|
|
+ }
|
|
|
+ if (bomExamineList.Any())
|
|
|
+ {
|
|
|
+ _businessBangDbContext.BulkInsert(bomExamineList.OrderBy(s => s.num_order).ToList());
|
|
|
+ }
|
|
|
+ if (mooccupyList.Any())
|
|
|
+ {
|
|
|
+ _businessBangDbContext.BulkInsert(mooccupyList);
|
|
|
+ }
|
|
|
+ if (moorderList.Any())
|
|
|
+ {
|
|
|
+ _businessBangDbContext.BulkInsert(moorderList);
|
|
|
+ }
|
|
|
+ if (ooderList.Any())
|
|
|
+ {
|
|
|
+ _businessBangDbContext.BulkInsert(ooderList);
|
|
|
+ }
|
|
|
+ if (purchaseList.Any())
|
|
|
+ {
|
|
|
+ _businessBangDbContext.BulkInsert(purchaseList);
|
|
|
+ }
|
|
|
+ if (purchaseoccupyList.Any())
|
|
|
+ {
|
|
|
+ _businessBangDbContext.BulkInsert(purchaseoccupyList);
|
|
|
+ }
|
|
|
+ await unitOfWork.CompleteAsync();
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查资源检查计算结果数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
+ unitOfWork.Dispose();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//清空快照数据
|
|
|
await ClearSnapShot(bangid);
|
|
|
return rtn;
|
|
|
@@ -2947,6 +3229,7 @@ namespace Business.ResourceExamineManagement
|
|
|
workOrd.IsConfirm = true;
|
|
|
workOrd.CreateTime = DateTime.Now;
|
|
|
workOrd.Batch = item.morder_no;
|
|
|
+ workOrd.Typed = "s";
|
|
|
workOrds.Add(workOrd);
|
|
|
|
|
|
//添加工单工艺路线数据
|