|
|
@@ -107,25 +107,15 @@ namespace Business.ResourceExamineManagement
|
|
|
List<mes_tech_proc_workshop> tech_Proc_Workshops = await _mes_tech_proc_workshop.GetManyByCondition(p => techProcIds.Contains(p.tech_proc_id.Value) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
|
|
|
#endregion
|
|
|
|
|
|
- //1、获取工艺路径下的第一层级工序
|
|
|
- List<mes_tech_process> fistChilds = tech_Processes.Where(p => p.parentprocid == tech.Id).ToList();
|
|
|
- if (fistChilds.Count == 0)
|
|
|
+ //1、获取工艺路径下的第一层级工序:目前只考虑第一层级
|
|
|
+ List<mes_tech_process> fistLevels = tech_Processes.Where(p => p.parentprocid == tech.Id).ToList();
|
|
|
+ if (fistLevels.Count == 0)
|
|
|
{
|
|
|
throw new NotImplementedException("当前工艺路径没有配置工序,请调整!");
|
|
|
}
|
|
|
- List<mes_tech_process> sortChilds = new List<mes_tech_process>();
|
|
|
- //添加最后一个工序
|
|
|
- var last = fistChilds.FirstOrDefault(p => p.nextprocid == null);
|
|
|
- if (last == null)
|
|
|
- {
|
|
|
- throw new NotImplementedException("当前工艺路径没有配置最终工序,请调整!");
|
|
|
- }
|
|
|
- sortChilds.Add(last);
|
|
|
- //递归按工序先后顺序排序
|
|
|
- SortProcess(fistChilds, last.proc_id.Value, sortChilds);
|
|
|
- //总耗时(分钟)
|
|
|
- //decimal sumTimes = CalcTakeTimeByLq(sortChilds, param.packages);//通过Lq计算
|
|
|
- decimal sumTimes = CalcTakeTimeByLqt(sortChilds, param.packages);//通过Lqt计算
|
|
|
+ //工艺预处理
|
|
|
+ List<TechProcDto> teches = TechProcPretreatment(fistLevels,param.packages);
|
|
|
+ decimal sumTimes = teches.OrderByDescending(p => p.sumTimes).First().sumTimes;
|
|
|
return sumTimes;
|
|
|
}
|
|
|
|
|
|
@@ -145,15 +135,69 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 工序预处理,按照多分支生成多条单独的工艺路径
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="proc">当前工序</param>
|
|
|
+ /// <param name="processes">工艺关联工序list</param>
|
|
|
+ /// <param name="packages">生产件数</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private List<TechProcDto> TechProcPretreatment(List<mes_tech_process> processes,int packages)
|
|
|
+ {
|
|
|
+ //工艺路径预处理dto
|
|
|
+ List<TechProcDto> techProcDtos = new List<TechProcDto>();
|
|
|
+ TechProcDto dto;
|
|
|
+ //获取下一步工序id
|
|
|
+ List<long> nextProcIds = processes.Select(p => p.nextprocid.Value).ToList();
|
|
|
+ //获取起点工序
|
|
|
+ var startProcs = processes.Where(p => !nextProcIds.Contains(p.proc_id.Value)).ToList();
|
|
|
+ //递归处理工序返回值
|
|
|
+ List<mes_tech_process> rtnList;
|
|
|
+ for (int i = 0; i < startProcs.Count; i++)
|
|
|
+ {
|
|
|
+ dto = new TechProcDto();
|
|
|
+ rtnList = new List<mes_tech_process>();
|
|
|
+ GetNextProc(startProcs[i], processes, rtnList);
|
|
|
+ dto.serialno = i;
|
|
|
+ dto.processes = rtnList;
|
|
|
+ //dto.startTimes = CalcTakeTimeByLq(rtnList, packages);//通过Lq计算
|
|
|
+ dto.details = CalcTakeTimeByLqt(rtnList, packages);//通过Lqt计算
|
|
|
+ dto.sumTimes = dto.details.Sum(p=>p.wait_time);
|
|
|
+ }
|
|
|
+ return techProcDtos;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 递归:根据起始工序,获取后续工序
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="proc"></param>
|
|
|
+ /// <param name="processes"></param>
|
|
|
+ /// <param name="rtnList"></param>
|
|
|
+ private void GetNextProc(mes_tech_process proc, List<mes_tech_process> processes, List<mes_tech_process> rtnList)
|
|
|
+ {
|
|
|
+ rtnList.Add(proc);
|
|
|
+ //下一工序id为null,终止
|
|
|
+ if (proc?.nextprocid == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //获取下一个工序
|
|
|
+ var nextProc = processes.FirstOrDefault(p=>p.proc_id == proc.nextprocid);
|
|
|
+ if (nextProc == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ GetNextProc(nextProc, processes, rtnList);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 通过Lq计算工艺耗时
|
|
|
/// </summary>
|
|
|
/// <param name="Processes"></param>
|
|
|
/// <param name="packages"></param>
|
|
|
/// <returns></returns>
|
|
|
- private decimal CalcTakeTimeByLq(List<mes_tech_process> Processes, int packages)
|
|
|
+ private List<StartTimeDto> CalcTakeTimeByLq(List<mes_tech_process> Processes, int packages)
|
|
|
{
|
|
|
- decimal sumTimes = 0.00m;//总耗时(分钟)
|
|
|
//工序需要等待时间记录
|
|
|
List<StartTimeDto> starts = new List<StartTimeDto>();
|
|
|
StartTimeDto dto;
|
|
|
@@ -169,11 +213,10 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
dto = CalcProcTakeTimeByLq(chd, chd.lq.Value, packages);
|
|
|
}
|
|
|
- sumTimes += dto.wait_time;
|
|
|
//添加记录
|
|
|
starts.Add(dto);
|
|
|
}
|
|
|
- return sumTimes;
|
|
|
+ return starts;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -215,10 +258,8 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="Processes"></param>
|
|
|
/// <param name="packages"></param>
|
|
|
/// <returns></returns>
|
|
|
- private decimal CalcTakeTimeByLqt(List<mes_tech_process> Processes, int packages)
|
|
|
+ private List<StartTimeDto> CalcTakeTimeByLqt(List<mes_tech_process> Processes, int packages)
|
|
|
{
|
|
|
- //总耗时
|
|
|
- decimal sumTimes = 0;
|
|
|
//工序需要等待时间记录
|
|
|
List<StartTimeDto> starts = new List<StartTimeDto>();
|
|
|
StartTimeDto dto;
|
|
|
@@ -240,11 +281,10 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
dto.wait_time = chd.lqt.Value;
|
|
|
}
|
|
|
- sumTimes += dto.wait_time;
|
|
|
//添加记录
|
|
|
starts.Add(dto);
|
|
|
}
|
|
|
- return sumTimes;
|
|
|
+ return starts;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|