|
@@ -211,7 +211,6 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public List<TTask> createNewTaskByPlan(List<OrderProduct> orderProductList, List<PlanProduct> planProductList, Map<Long,List<BomProcedure>> bomProcedureMap, String taskBatchNo) {
|
|
public List<TTask> createNewTaskByPlan(List<OrderProduct> orderProductList, List<PlanProduct> planProductList, Map<Long,List<BomProcedure>> bomProcedureMap, String taskBatchNo) {
|
|
-
|
|
|
|
// 可选设备集合(工序名称+可选设备列表)
|
|
// 可选设备集合(工序名称+可选设备列表)
|
|
Map<String, List<CandidateProcess>> candidateProMap = new HashMap<>(); // 可选处理集合(可选设备以及对应的加工时间)
|
|
Map<String, List<CandidateProcess>> candidateProMap = new HashMap<>(); // 可选处理集合(可选设备以及对应的加工时间)
|
|
// 工序集合(工序名+工序)
|
|
// 工序集合(工序名+工序)
|
|
@@ -224,21 +223,17 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
Map<Long,OrderProduct> orderProductMap = orderProductList.stream().collect(Collectors.toMap(OrderProduct::getId, t->t));
|
|
Map<Long,OrderProduct> orderProductMap = orderProductList.stream().collect(Collectors.toMap(OrderProduct::getId, t->t));
|
|
|
|
|
|
List<TTask> taskList = new ArrayList<TTask>();
|
|
List<TTask> taskList = new ArrayList<TTask>();
|
|
- //设置completeBatchNo
|
|
|
|
- Map<String,String> completeBatchNoMap = new HashMap<String,String>();
|
|
|
|
|
|
+
|
|
double totalOpNum = 0.0;
|
|
double totalOpNum = 0.0;
|
|
for(int partIndex = 1;partIndex <= planProductList.size(); partIndex++){
|
|
for(int partIndex = 1;partIndex <= planProductList.size(); partIndex++){
|
|
PlanProduct planProduct = planProductList.get(partIndex - 1);
|
|
PlanProduct planProduct = planProductList.get(partIndex - 1);
|
|
OrderProduct orderProduct = orderProductMap.get(planProduct.getOrderProductId());
|
|
OrderProduct orderProduct = orderProductMap.get(planProduct.getOrderProductId());
|
|
Long bomId = planProduct.getBomId();
|
|
Long bomId = planProduct.getBomId();
|
|
List<BomProcedure> bomProcedureList = bomProcedureMap.get(bomId);
|
|
List<BomProcedure> bomProcedureList = bomProcedureMap.get(bomId);
|
|
- Map<Long,BomProcedure> bpMap = bomProcedureList.stream().collect(Collectors.toMap(BomProcedure::getId, t->t));
|
|
|
|
-
|
|
|
|
String stationGaSwitchFlag = parameterService.getValue(ParameterKey.STATION_GA_SWITCH_FLAG, null);
|
|
String stationGaSwitchFlag = parameterService.getValue(ParameterKey.STATION_GA_SWITCH_FLAG, null);
|
|
-
|
|
|
|
List<Long> stationResourcesIds = new ArrayList<>();
|
|
List<Long> stationResourcesIds = new ArrayList<>();
|
|
if("1".equals(stationGaSwitchFlag)){
|
|
if("1".equals(stationGaSwitchFlag)){
|
|
-// 将人工上下料放在排产中计算,上下料工艺配置中可配置所有上下料,实际排产中根据上下料站人员登录的实际情况和订单产品进行绑定,将不是该订单产线登录的人员上下料站剔除
|
|
|
|
|
|
+ // 将人工上下料放在排产中计算,上下料工艺配置中可配置所有上下料,实际排产中根据上下料站人员登录的实际情况和订单产品进行绑定,将不是该订单产线登录的人员上下料站剔除
|
|
// 取得当前上下料站人员登录情况
|
|
// 取得当前上下料站人员登录情况
|
|
Order order = orderMapper.selectById(orderProduct.getOrderId());
|
|
Order order = orderMapper.selectById(orderProduct.getOrderId());
|
|
Long zoneId = order.getZoneId();
|
|
Long zoneId = order.getZoneId();
|
|
@@ -259,68 +254,41 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- //产品批次号,用于产品分解任务关联
|
|
|
|
- String bomBatchNo = UUID.randomUUID().toString().replace("-", "");
|
|
|
|
|
|
+ // 根据计划查询工件和任务
|
|
|
|
+ LbqWrapper<TWorkpiece> workpieceWrapper = new LbqWrapper<TWorkpiece>().in(TWorkpiece::getPlanId, planProduct.getPlanId());
|
|
|
|
+ List<TWorkpiece> planWorkpieces = workpieceMapper.selectList(workpieceWrapper);
|
|
|
|
|
|
- if(bomProcedureList == null || (bomProcedureList != null && bomProcedureList.size() == 0)) {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- for(int partNum = 0; partNum < planProduct.getPlanBomNum(); partNum++){
|
|
|
|
|
|
+ for(int partNum = 0; partNum < planWorkpieces.size(); partNum++){
|
|
|
|
+ TWorkpiece workpiece = planWorkpieces.get(partNum);
|
|
Part part = new Part();
|
|
Part part = new Part();
|
|
- TWorkpiece workpiece = new TWorkpiece();
|
|
|
|
List<Operation> opList = new ArrayList<Operation>();
|
|
List<Operation> opList = new ArrayList<Operation>();
|
|
- for(int bomProcedureIndex = 0; bomProcedureIndex < bomProcedureList.size(); bomProcedureIndex++){
|
|
|
|
- // 工序可用设备
|
|
|
|
- List<CandidateProcess> candidateProcesses = new ArrayList<CandidateProcess>();
|
|
|
|
- BomProcedure bomProcedure = bomProcedureList.get(bomProcedureIndex);
|
|
|
|
|
|
|
|
- TTask task = new TTask();
|
|
|
|
- task.setFirstProcedureFlag("0");
|
|
|
|
- if(bomProcedureIndex==0){
|
|
|
|
- task.setFirstProcedureFlag("1");
|
|
|
|
- }
|
|
|
|
- if(bomProcedureIndex==bomProcedureList.size()-1){
|
|
|
|
- task.setLastProcedureFlag("1");
|
|
|
|
- }
|
|
|
|
- String key = planProduct.getId().longValue() + partNum + "";
|
|
|
|
- if(completeBatchNoMap.containsKey(key)){
|
|
|
|
- task.setCompleteBatchNo(completeBatchNoMap.get(key));
|
|
|
|
- }else{
|
|
|
|
- task.setCompleteBatchNo(UUID.randomUUID().toString().replace("-", ""));
|
|
|
|
- completeBatchNoMap.put(key,task.getCompleteBatchNo());
|
|
|
|
|
|
+ // 根据工件id查询工件工序
|
|
|
|
+ LbqWrapper<TTask> tTaskWrapper = new LbqWrapper<TTask>().in(TTask::getCompleteBatchNo, workpiece.getCompleteBatchNo()).orderByAsc(TTask::getProcedureSort);
|
|
|
|
+ List<TTask> tTasks = tTaskMapper.selectList(tTaskWrapper);
|
|
|
|
|
|
- workpiece.setBomId(bomProcedure.getBomId()).setCompleteBatchNo(task.getCompleteBatchNo()).setOrderId(planProduct.getOrderId()).setOrderNo(planProduct.getOrderNo())
|
|
|
|
- .setPlanId(planProduct.getPlanId()).setPlanNo(planProduct.getPlanNo());
|
|
|
|
- workpieceMapper.insert(workpiece);
|
|
|
|
- }
|
|
|
|
- task.setProcedureSort(bomProcedureIndex);
|
|
|
|
- task.setDraftFlag("1");
|
|
|
|
- task.setPlanId(planProduct.getPlanId());
|
|
|
|
- task.setPlanNo(planProduct.getPlanNo());
|
|
|
|
- task.setOrderId(planProduct.getOrderId());
|
|
|
|
- task.setOrderNo(planProduct.getOrderNo());
|
|
|
|
- task.setProcedureId(bomProcedure.getId());
|
|
|
|
- task.setProcedureName(bomProcedure.getName());
|
|
|
|
- task.setProcedureNo(bomProcedure.getNo());
|
|
|
|
- task.setBomId(bomProcedure.getBomId());
|
|
|
|
- task.setStatus("1");
|
|
|
|
- task.setTaskNo(codeRuleService.getBillCode(CodeRuleModule.CODE_RULE_TASK)) ;
|
|
|
|
- task.setTaskBatchNo(taskBatchNo);
|
|
|
|
- task.setBomBatchNo(bomBatchNo);
|
|
|
|
- task.setPrority(bomProcedure.getSort());
|
|
|
|
- //根据算法分配资源、托盘等等
|
|
|
|
- assignResource(task,bpMap);
|
|
|
|
- //准备计算
|
|
|
|
- //assignResourcePrepare(task,bpMap);
|
|
|
|
- //侯莫安人员序加上判断
|
|
|
|
- task.setExecutorId(task.getResourceId());
|
|
|
|
- task.setExecutorType("1");
|
|
|
|
- task.setExecutorName("");
|
|
|
|
- task.setTmpId(UUID.randomUUID().toString().replace("-", ""));
|
|
|
|
- taskList.add(task);
|
|
|
|
|
|
+ taskList.addAll(tTasks);
|
|
|
|
|
|
- if (bomProcedure.getProductionresourceList().size() > 0){
|
|
|
|
|
|
+ for(int i = 0; i < tTasks.size(); i++){
|
|
|
|
+ TTask tTask = tTasks.get(i);
|
|
|
|
+ Operation operation = new Operation();
|
|
|
|
+ operation.setId(String.valueOf(tTask.getId()));
|
|
|
|
+ operation.setPartId(workpiece.getCompleteBatchNo());
|
|
|
|
+ operation.setName(tTask.getProcedureNo());
|
|
|
|
+ operation.setSeq(i + 1);
|
|
|
|
+ operation.setDueDate(orderProduct.getDeliveryTime().getTime());
|
|
|
|
+ operation.setPlanQty(1);
|
|
|
|
+ String operationkey = tTask.getCompleteBatchNo() + "_" + tTask.getProcedureNo();
|
|
|
|
+ operationMap.put(operationkey,operation);
|
|
|
|
+ opList.add(operation);
|
|
|
|
+ totalOpNum ++;
|
|
|
|
|
|
|
|
+ // 组装排产工序对应设备
|
|
|
|
+ // 工序可用设备
|
|
|
|
+ List<CandidateProcess> candidateProcesses = new ArrayList<CandidateProcess>();
|
|
|
|
+ BomProcedure bomProcedure = bomProcedureList.get(tTask.getProcedureSort());
|
|
|
|
+
|
|
|
|
+ if (bomProcedure.getProductionresourceList().size() > 0){
|
|
for(BomProcedureProductionresource bomProcedureProductionresource : bomProcedure.getProductionresourceList()){
|
|
for(BomProcedureProductionresource bomProcedureProductionresource : bomProcedure.getProductionresourceList()){
|
|
Machine machine = new Machine();
|
|
Machine machine = new Machine();
|
|
CandidateProcess candidateProcess = new CandidateProcess();
|
|
CandidateProcess candidateProcess = new CandidateProcess();
|
|
@@ -340,24 +308,10 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
|
|
assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- // 组装排产所以的工序信息
|
|
|
|
- // TODO 可优化成直接用task对象
|
|
|
|
- Operation operation = new Operation();
|
|
|
|
- operation.setId(task.getTmpId());
|
|
|
|
- operation.setPartId(workpiece.getCompleteBatchNo());
|
|
|
|
- operation.setName(bomProcedure.getNo());
|
|
|
|
- operation.setSeq(bomProcedureIndex+1);
|
|
|
|
- operation.setDueDate(orderProduct.getDeliveryTime().getTime());
|
|
|
|
- operation.setPlanQty(1);
|
|
|
|
- String operationLey = task.getCompleteBatchNo() + "_" + bomProcedure.getNo();
|
|
|
|
- operationMap.put(operationLey,operation);
|
|
|
|
- opList.add(operation);
|
|
|
|
- totalOpNum ++;
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
part.setId(workpiece.getCompleteBatchNo());
|
|
part.setId(workpiece.getCompleteBatchNo());
|
|
part.setName(orderProduct.getBomName());
|
|
part.setName(orderProduct.getBomName());
|
|
part.setOperationNum(bomProcedureList.size());
|
|
part.setOperationNum(bomProcedureList.size());
|
|
@@ -393,12 +347,13 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
while(it.hasNext()){
|
|
while(it.hasNext()){
|
|
Operation operation = it.next().getValue();
|
|
Operation operation = it.next().getValue();
|
|
for(TTask task : taskList){
|
|
for(TTask task : taskList){
|
|
- if(task.getTmpId().equals(operation.getId())){
|
|
|
|
|
|
+ if(task.getId().equals(Long.valueOf(operation.getId()))){
|
|
List<BomProcedureProductionresource> procedureProductionresourceList = procedureProductionresourceMapper.selectList(Wraps.<BomProcedureProductionresource>lbQ().eq(BomProcedureProductionresource::getProcedureId,task.getProcedureId())
|
|
List<BomProcedureProductionresource> procedureProductionresourceList = procedureProductionresourceMapper.selectList(Wraps.<BomProcedureProductionresource>lbQ().eq(BomProcedureProductionresource::getProcedureId,task.getProcedureId())
|
|
.eq(BomProcedureProductionresource::getResourceId,operation.getMachineId()).orderByDesc(BomProcedureProductionresource::getCreateTime));
|
|
.eq(BomProcedureProductionresource::getResourceId,operation.getMachineId()).orderByDesc(BomProcedureProductionresource::getCreateTime));
|
|
task.setExpectStartTime(new Date(operation.getStart()));
|
|
task.setExpectStartTime(new Date(operation.getStart()));
|
|
task.setExpectEndTime(new Date(operation.getFinish()));
|
|
task.setExpectEndTime(new Date(operation.getFinish()));
|
|
task.setResourceId(operation.getMachineId());
|
|
task.setResourceId(operation.getMachineId());
|
|
|
|
+ task.setExecutorId(operation.getMachineId());
|
|
if(CollectionUtil.isNotEmpty(procedureProductionresourceList)){
|
|
if(CollectionUtil.isNotEmpty(procedureProductionresourceList)){
|
|
task.setResourceBusinessId(procedureProductionresourceList.get(0).getResourceBusinessId());
|
|
task.setResourceBusinessId(procedureProductionresourceList.get(0).getResourceBusinessId());
|
|
}
|
|
}
|
|
@@ -406,7 +361,7 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- saveBatch(taskList);
|
|
|
|
|
|
+ updateBatchById(taskList);
|
|
return taskList;
|
|
return taskList;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -444,16 +399,18 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
candidateProcess.setProcedureId(bomProcedureProgram.getProcedureId());
|
|
candidateProcess.setProcedureId(bomProcedureProgram.getProcedureId());
|
|
candidateProcess.setDuration(bomProcedureProgram.getWorkTime().intValue());
|
|
candidateProcess.setDuration(bomProcedureProgram.getWorkTime().intValue());
|
|
candidateProcess.setRunTime(bomProcedureProgram.getWorkTime());
|
|
candidateProcess.setRunTime(bomProcedureProgram.getWorkTime());
|
|
|
|
+ candidateProcess.setPrority(bomProcedureProductionresource.getPrority());
|
|
} else {
|
|
} else {
|
|
candidateProcess.setProcedureId(bomProcedure.getId());
|
|
candidateProcess.setProcedureId(bomProcedure.getId());
|
|
//candidateProcess.setDuration(bomProcedure.getPrepareWorkhours().intValue() + bomProcedure.getRatedWorkhours().intValue());
|
|
//candidateProcess.setDuration(bomProcedure.getPrepareWorkhours().intValue() + bomProcedure.getRatedWorkhours().intValue());
|
|
candidateProcess.setDuration(bomProcedure.getRatedWorkhours().intValue());
|
|
candidateProcess.setDuration(bomProcedure.getRatedWorkhours().intValue());
|
|
candidateProcess.setRunTime(bomProcedure.getRatedWorkhours());
|
|
candidateProcess.setRunTime(bomProcedure.getRatedWorkhours());
|
|
|
|
+ candidateProcess.setPrority(bomProcedureProductionresource.getPrority());
|
|
}
|
|
}
|
|
if (!candidateProcesses.contains(candidateProcess)) {
|
|
if (!candidateProcesses.contains(candidateProcess)) {
|
|
candidateProcesses.add(candidateProcess);
|
|
candidateProcesses.add(candidateProcess);
|
|
}
|
|
}
|
|
- candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(), candidateProcesses);
|
|
|
|
|
|
+ candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(), candidateProcesses.stream().sorted(Comparator.comparing(CandidateProcess::getPrority,Comparator.reverseOrder())).collect(Collectors.toList()));
|
|
// }
|
|
// }
|
|
}
|
|
}
|
|
|
|
|