|
@@ -2407,7 +2407,7 @@ namespace Business.ResourceExamineManagement
|
|
|
return "当前任务工厂编号为空,请检查。";
|
|
return "当前任务工厂编号为空,请检查。";
|
|
|
}
|
|
}
|
|
|
List<string> tsWork = new List<string> { "test", "tcn", "rw" };
|
|
List<string> tsWork = new List<string> { "test", "tcn", "rw" };
|
|
|
- var ordlist = _workOrdMaster.Select(x => x.Domain == domain && (string.IsNullOrEmpty(x.Typed) == true || tsWork.Contains(x.Typed)) && x.Status.ToLower() == "p").ToList();
|
|
|
|
|
|
|
+ var ordlist = _workOrdMaster.Select(x => x.Domain == domain && x.WorkOrd == "M523101200000351" && (string.IsNullOrEmpty(x.Typed) == true || tsWork.Contains(x.Typed)) && x.Status.ToLower() == "p").ToList();
|
|
|
List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => ordlist.Select(c=>c.WorkOrd).Contains(x.morder_no) && x.factory_id.ToString() == domain).Result;
|
|
List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => ordlist.Select(c=>c.WorkOrd).Contains(x.morder_no) && x.factory_id.ToString() == domain).Result;
|
|
|
|
|
|
|
|
/*//先排除锁定期内的工单 //优先级排序
|
|
/*//先排除锁定期内的工单 //优先级排序
|
|
@@ -3166,6 +3166,10 @@ namespace Business.ResourceExamineManagement
|
|
|
|
|
|
|
|
//调用优先级计算算法
|
|
//调用优先级计算算法
|
|
|
var workOrds = _replenishmentAppService.CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
|
|
var workOrds = _replenishmentAppService.CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
|
|
|
|
|
+ //var recid = workOrds.Select(c => c.RecID).ToList();
|
|
|
|
|
+ //清理工单物料明细
|
|
|
|
|
+ var delWorkOrddetails = _workOrdDetail.Select(x => workOrds.Select(c => c.RecID).Contains((int)x.WorkOrdMasterRecID) && x.Domain == param.factoryId.ToString());
|
|
|
|
|
+ var productStructureMs = _productStructureMaster.Select(x => workOrds.Select(c => c.WorkOrd).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
|
|
|
List<mes_morder> priorityMorderList = new List<mes_morder>();
|
|
List<mes_morder> priorityMorderList = new List<mes_morder>();
|
|
|
foreach (var work in workOrds)
|
|
foreach (var work in workOrds)
|
|
|
{
|
|
{
|
|
@@ -3247,6 +3251,47 @@ namespace Business.ResourceExamineManagement
|
|
|
examines.Add(dtl);
|
|
examines.Add(dtl);
|
|
|
}
|
|
}
|
|
|
rtn.examines = examines;
|
|
rtn.examines = examines;
|
|
|
|
|
+ List<WorkOrdDetail> workOrdDetails = new List<WorkOrdDetail>();
|
|
|
|
|
+ foreach (var workord in workOrds)
|
|
|
|
|
+ {
|
|
|
|
|
+ var exm = examines.Find(s => s.morder_no == workord.WorkOrd);
|
|
|
|
|
+ if (exm != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ var childs = exm.BomChildExamineList.Where(s => s.is_use == true).ToList();
|
|
|
|
|
+
|
|
|
|
|
+ var child = childs.Find(s => s.item_number == workord.ItemNum);
|
|
|
|
|
+ if (child == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ List<BomChildExamineDto> returnList = new List<BomChildExamineDto>();
|
|
|
|
|
+ GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs);
|
|
|
|
|
+ if (returnList.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ foreach (var structure in returnList)
|
|
|
|
|
+ {
|
|
|
|
|
+ var psm = productStructureMs.Find(x => x.ParentItem == workord.ItemNum && x.ComponentItem == structure.item_number);
|
|
|
|
|
+ WorkOrdDetail woDetail = new WorkOrdDetail();
|
|
|
|
|
+ woDetail = new WorkOrdDetail();
|
|
|
|
|
+ woDetail.Domain = param.factoryId.ToString();
|
|
|
|
|
+ woDetail.WorkOrd = workord.WorkOrd;
|
|
|
|
|
+ woDetail.Op = structure.Op;
|
|
|
|
|
+ woDetail.ItemNum = structure.item_number;
|
|
|
|
|
+ woDetail.QtyRequired = structure.needCount;
|
|
|
|
|
+ woDetail.QtyPosted = 0m;
|
|
|
|
|
+ woDetail.QtyReturned = 0m;
|
|
|
|
|
+ woDetail.FrozenBOMQty = structure.qty;
|
|
|
|
|
+ woDetail.Status = "";
|
|
|
|
|
+ woDetail.IsActive = true;
|
|
|
|
|
+ woDetail.CreateTime = DateTime.Now;
|
|
|
|
|
+ woDetail.WorkOrdMasterRecID = workord.RecID;
|
|
|
|
|
+ woDetail.Yield = psm == null ? 0 : psm.Scrap;
|
|
|
|
|
+ workOrdDetails.Add(woDetail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (planCheck)
|
|
if (planCheck)
|
|
|
{
|
|
{
|
|
|
//如果有计划工单,则需要生成pr po oo
|
|
//如果有计划工单,则需要生成pr po oo
|
|
@@ -3350,6 +3395,14 @@ namespace Business.ResourceExamineManagement
|
|
|
var srmpooccupyInsert = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(_CalcBomViewAppService.srm_Po_OccupiesInsert);
|
|
var srmpooccupyInsert = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(_CalcBomViewAppService.srm_Po_OccupiesInsert);
|
|
|
_businessDbContext.BulkInsert(srmpooccupyInsert);
|
|
_businessDbContext.BulkInsert(srmpooccupyInsert);
|
|
|
}
|
|
}
|
|
|
|
|
+ if (delWorkOrddetails.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ _businessDbContext.BulkDelete(delWorkOrddetails);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (workOrdDetails.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ _businessDbContext.BulkInsert(workOrdDetails);
|
|
|
|
|
+ }
|
|
|
await unitOfWork.CompleteAsync();
|
|
await unitOfWork.CompleteAsync();
|
|
|
}
|
|
}
|
|
|
catch (Exception e)
|
|
catch (Exception e)
|
|
@@ -3769,7 +3822,7 @@ namespace Business.ResourceExamineManagement
|
|
|
LocationTo = LocationTo,//现在这几条线是同一线边仓,暂时不考虑多个线边仓
|
|
LocationTo = LocationTo,//现在这几条线是同一线边仓,暂时不考虑多个线边仓
|
|
|
WorkOrd = workord.WorkOrd,
|
|
WorkOrd = workord.WorkOrd,
|
|
|
QtyOrd = a.QtyRequired,
|
|
QtyOrd = a.QtyRequired,
|
|
|
- CurrQtyOpened = a.QtyRequired,
|
|
|
|
|
|
|
+ CurrQtyOpened = Math.Ceiling(a.QtyRequired * (1 + (a.Yield / 100))),
|
|
|
Line = i,
|
|
Line = i,
|
|
|
IsActive = true,
|
|
IsActive = true,
|
|
|
CreateTime = DateTime.Now,
|
|
CreateTime = DateTime.Now,
|
|
@@ -4065,7 +4118,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//工单工艺路线表
|
|
//工单工艺路线表
|
|
|
WorkOrdRouting woRouting;
|
|
WorkOrdRouting woRouting;
|
|
|
//工单物料表
|
|
//工单物料表
|
|
|
- WorkOrdDetail woDetail;
|
|
|
|
|
|
|
+ var productStructureMs = _productStructureMaster.Select(x => morders.Select(c => c.morder_no).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
|
|
|
foreach (var item in morders)
|
|
foreach (var item in morders)
|
|
|
{
|
|
{
|
|
|
//添加工单数据
|
|
//添加工单数据
|
|
@@ -4127,59 +4180,26 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
{
|
|
|
foreach (var structure in returnList)
|
|
foreach (var structure in returnList)
|
|
|
{
|
|
{
|
|
|
- woDetail = workOrdDetails.Find(s => s.ItemNum == structure.item_number && s.WorkOrd == item.morder_no);
|
|
|
|
|
- if (woDetail == null)
|
|
|
|
|
- {
|
|
|
|
|
- //添加工单的物料信息
|
|
|
|
|
- woDetail = new WorkOrdDetail();
|
|
|
|
|
- woDetail.Domain = item.factory_id.ToString();
|
|
|
|
|
- woDetail.WorkOrd = item.morder_no;
|
|
|
|
|
- woDetail.Op = structure.Op;
|
|
|
|
|
- woDetail.ItemNum = structure.item_number;
|
|
|
|
|
- woDetail.QtyRequired = structure.needCount.GetValueOrDefault();
|
|
|
|
|
- woDetail.QtyPosted = 0m;
|
|
|
|
|
- woDetail.QtyReturned = 0m;
|
|
|
|
|
- woDetail.FrozenBOMQty = structure.qty.GetValueOrDefault();
|
|
|
|
|
- woDetail.Status = "";
|
|
|
|
|
- woDetail.IsActive = true;
|
|
|
|
|
- woDetail.CreateTime = DateTime.Now;
|
|
|
|
|
- workOrdDetails.Add(woDetail);
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- woDetail.QtyRequired += structure.needCount.GetValueOrDefault();
|
|
|
|
|
- woDetail.FrozenBOMQty += structure.qty.GetValueOrDefault();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ var psm = productStructureMs.Find(x => x.ParentItem == item.morder_no && x.ComponentItem == structure.item_number);
|
|
|
|
|
+ WorkOrdDetail woDetail = new WorkOrdDetail();
|
|
|
|
|
+ //添加工单的物料信息
|
|
|
|
|
+ woDetail = new WorkOrdDetail();
|
|
|
|
|
+ woDetail.Domain = item.factory_id.ToString();
|
|
|
|
|
+ woDetail.WorkOrd = item.morder_no;
|
|
|
|
|
+ woDetail.Op = structure.Op;
|
|
|
|
|
+ woDetail.ItemNum = structure.item_number;
|
|
|
|
|
+ woDetail.QtyRequired = structure.needCount.GetValueOrDefault();
|
|
|
|
|
+ woDetail.QtyPosted = 0m;
|
|
|
|
|
+ woDetail.QtyReturned = 0m;
|
|
|
|
|
+ woDetail.FrozenBOMQty = structure.qty.GetValueOrDefault();
|
|
|
|
|
+ woDetail.Status = "";
|
|
|
|
|
+ woDetail.IsActive = true;
|
|
|
|
|
+ woDetail.CreateTime = DateTime.Now;
|
|
|
|
|
+ woDetail.Yield = psm == null ? 0 : psm.Scrap;
|
|
|
|
|
+ workOrdDetails.Add(woDetail);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- /*List<ProductStructureMaster> curStructures = GetProductStructure(item.product_code, workOrd.QtyOrded, item.factory_id.ToString());
|
|
|
|
|
- foreach (var structure in curStructures)
|
|
|
|
|
- {
|
|
|
|
|
- woDetail = workOrdDetails.Find(s => s.ItemNum == structure.ComponentItem);
|
|
|
|
|
- if (woDetail == null)
|
|
|
|
|
- {
|
|
|
|
|
- //添加工单的物料信息
|
|
|
|
|
- woDetail = new WorkOrdDetail();
|
|
|
|
|
- woDetail.Domain = item.factory_id.ToString();
|
|
|
|
|
- woDetail.WorkOrd = item.morder_no;
|
|
|
|
|
- woDetail.Op = structure.Op;
|
|
|
|
|
- woDetail.ItemNum = structure.ComponentItem;
|
|
|
|
|
- woDetail.QtyRequired = structure.Qty;
|
|
|
|
|
- woDetail.QtyPosted = 0m;
|
|
|
|
|
- woDetail.QtyReturned = 0m;
|
|
|
|
|
- woDetail.FrozenBOMQty = structure.Qty;
|
|
|
|
|
- woDetail.Status = "";
|
|
|
|
|
- woDetail.IsActive = true;
|
|
|
|
|
- woDetail.CreateTime = DateTime.Now;
|
|
|
|
|
- workOrdDetails.Add(woDetail);
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- woDetail.QtyRequired += structure.Qty;
|
|
|
|
|
- woDetail.FrozenBOMQty += structure.Qty;
|
|
|
|
|
- }
|
|
|
|
|
- }*/
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -4201,6 +4221,23 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
|
+ /// 获取虚拟件明细
|
|
|
|
|
+ /// </summary>
|
|
|
|
|
+ /// <param name="dtl"></param>
|
|
|
|
|
+ /// <param name="returnList"></param>
|
|
|
|
|
+ /// <param name="childs"></param>
|
|
|
|
|
+ public void GetWorkDetalis(List<BomChildExamineDto> dtl, List<BomChildExamineDto> returnList, List<BomChildExamineDto> childs)
|
|
|
|
|
+ {
|
|
|
|
|
+ returnList.AddRange(dtl);
|
|
|
|
|
+ var rst = childs.Where(s => dtl.Where(x => x.erp_cls == 4).Select(c => c.fid).Contains(s.parent_id.GetValueOrDefault())).ToList();
|
|
|
|
|
+ if (rst.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ GetWorkDetalis(rst, returnList, childs);
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
/// <summary>
|
|
|
/// 获取虚拟件明细
|
|
/// 获取虚拟件明细
|
|
|
/// </summary>
|
|
/// </summary>
|