|
@@ -1,8 +1,11 @@
|
|
|
package com.github.zuihou.business.operationManagementCenter.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.github.zuihou.authority.dao.auth.StationUserLoginInfoMapper;
|
|
|
+import com.github.zuihou.authority.dao.auth.UserMapper;
|
|
|
+import com.github.zuihou.authority.entity.auth.StationUserLoginInfo;
|
|
|
+import com.github.zuihou.authority.entity.auth.User;
|
|
|
import com.github.zuihou.base.service.SuperServiceImpl;
|
|
|
import com.github.zuihou.business.DemoLine.DemoCacheKey;
|
|
|
import com.github.zuihou.business.DemoLine.DemoLineConstant;
|
|
@@ -16,13 +19,15 @@ import com.github.zuihou.business.operationManagementCenter.dao.TTaskMapper;
|
|
|
import com.github.zuihou.business.operationManagementCenter.dao.WorkpieceMapper;
|
|
|
import com.github.zuihou.business.operationManagementCenter.entity.*;
|
|
|
import com.github.zuihou.business.operationManagementCenter.service.TaskService;
|
|
|
-import com.github.zuihou.business.operationManagementCenter.service.WorkpieceService;
|
|
|
import com.github.zuihou.business.productionReadyCenter.dao.AutoNodeMapper;
|
|
|
import com.github.zuihou.business.productionReadyCenter.dao.BomProcedureProductionresourceMapper;
|
|
|
import com.github.zuihou.business.productionReadyCenter.dao.BomProcedureProgramMapper;
|
|
|
import com.github.zuihou.business.productionReadyCenter.entity.*;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourceBizMapper;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.dao.ZZoneMapper;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.entity.Productionresource;
|
|
|
import com.github.zuihou.business.productionResourceCenter.entity.Repair;
|
|
|
-import com.github.zuihou.business.productionResourceCenter.entity.ResourceAutoCode;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.entity.ZZone;
|
|
|
import com.github.zuihou.business.productionResourceCenter.service.RepairService;
|
|
|
import com.github.zuihou.common.constant.CacheKey;
|
|
|
import com.github.zuihou.common.constant.CodeRuleModule;
|
|
@@ -38,8 +43,6 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.sql.Timestamp;
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.time.temporal.ChronoField;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -78,6 +81,14 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
|
private BomProcedureProductionresourceMapper procedureProductionresourceMapper;
|
|
|
@Autowired
|
|
|
private BomProcedureProgramMapper bomProcedureProgramMapper;
|
|
|
+ @Autowired
|
|
|
+ private StationUserLoginInfoMapper stationUserLoginInfoMapper;
|
|
|
+ @Autowired
|
|
|
+ private ZZoneMapper zZoneMapper;
|
|
|
+ @Autowired
|
|
|
+ private UserMapper userMapper;
|
|
|
+ @Autowired
|
|
|
+ private ProductionresourceBizMapper productionresourceBizMapper;
|
|
|
|
|
|
@Override
|
|
|
public List<TTask> createTaskByPlan(List<PlanProduct> planProductList, Map<Long,List<BomProcedure>> bomProcedureMap,String taskBatchNo) {
|
|
@@ -200,6 +211,25 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
|
List<BomProcedure> bomProcedureList = bomProcedureMap.get(bomId);
|
|
|
Map<Long,BomProcedure> bpMap = bomProcedureList.stream().collect(Collectors.toMap(BomProcedure::getId, t->t));
|
|
|
|
|
|
+ // 将人工上下料放在排产中计算,上下料工艺配置中可配置所有上下料,实际排产中根据上下料站人员登录的实际情况和订单产品进行绑定,将不是该订单产线登录的人员上下料站剔除
|
|
|
+ // 取得当前上下料站人员登录情况
|
|
|
+ Order order = orderMapper.selectById(orderProduct.getOrderId());
|
|
|
+ Long zoneId = order.getZoneId();
|
|
|
+ ZZone zZone = zZoneMapper.selectById(zoneId);
|
|
|
+ Long orgId = zZone.getOrgId();
|
|
|
+
|
|
|
+ // 查询该机构下的所有用户对应的上下料站
|
|
|
+ LbqWrapper<User> userWrapper = new LbqWrapper<User>().eq(User::getOrg, orgId);
|
|
|
+ List<User> orgUsers = userMapper.selectList(userWrapper);
|
|
|
+ List<Long> userIds = orgUsers.stream().map(p -> p.getId()).collect(Collectors.toList());
|
|
|
+ LbqWrapper<StationUserLoginInfo> stationUserLoginInfoWrapper = new LbqWrapper<StationUserLoginInfo>().in(StationUserLoginInfo::getUserId, userIds);
|
|
|
+ List<StationUserLoginInfo> stationUserLoginInfos = stationUserLoginInfoMapper.selectList(stationUserLoginInfoWrapper);
|
|
|
+ // 工人上下料站人员信息
|
|
|
+ List<Long> stationResourcesIds = stationUserLoginInfos.stream().map(p -> p.getStationId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if(stationResourcesIds.size() == 0){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
//产品批次号,用于产品分解任务关联
|
|
|
String bomBatchNo = UUID.randomUUID().toString().replace("-", "");
|
|
@@ -214,7 +244,6 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
|
for(int bomProcedureIndex = 0; bomProcedureIndex < bomProcedureList.size(); bomProcedureIndex++){
|
|
|
// 工序可用设备
|
|
|
List<CandidateProcess> candidateProcesses = new ArrayList<CandidateProcess>();
|
|
|
-
|
|
|
BomProcedure bomProcedure = bomProcedureList.get(bomProcedureIndex);
|
|
|
|
|
|
TTask task = new TTask();
|
|
@@ -266,49 +295,21 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
|
Machine machine = new Machine();
|
|
|
CandidateProcess candidateProcess = new CandidateProcess();
|
|
|
for(BomProcedureProductionresource bomProcedureProductionresource : bomProcedure.getProductionresourceList()){
|
|
|
- if(!machineMap.containsKey(bomProcedureProductionresource.getResourceId())){
|
|
|
- machine.setId(bomProcedureProductionresource.getResourceId().longValue());
|
|
|
- // 添加设备维保时间片
|
|
|
- LbqWrapper<Repair> repairWrapper = new LbqWrapper<Repair>().eq(Repair::getProductionresourceId, bomProcedureProductionresource.getResourceId()).gt(Repair::getRepairStartTime, cn.hutool.core.date.DateUtil.toLocalDateTime(cn.hutool.core.date.DateUtil.date()));
|
|
|
- List<Repair> repairs = repairService.list(repairWrapper);
|
|
|
- for(Repair repair : repairs){
|
|
|
- machine.getNoUseTime().add(Timestamp.valueOf(repair.getRepairStartTime()).getTime() + "-" + Timestamp.valueOf(repair.getRepairEndTime()).getTime());
|
|
|
- }
|
|
|
- // 添加设备已经分配的时间片(从当前系统时间开始计算)
|
|
|
- LbqWrapper<TTask> tTaskWrapper = new LbqWrapper<TTask>().eq(TTask::getResourceId, bomProcedureProductionresource.getResourceId()).gt(TTask::getExpectStartTime, cn.hutool.core.date.DateUtil.current(false)).orderByAsc(TTask::getExpectStartTime);
|
|
|
- List<TTask> resourseTasks = tTaskMapper.selectList(tTaskWrapper);
|
|
|
- for(TTask tTask : resourseTasks){
|
|
|
- machine.getNoUseTime().add(tTask.getExpectStartTime().getTime() + "-" + tTask.getExpectEndTime().getTime());
|
|
|
- }
|
|
|
- machineMap.put("M" + bomProcedureProductionresource.getResourceId(), machine);
|
|
|
- }
|
|
|
-
|
|
|
- if(!candidateProMap.containsKey(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo())){
|
|
|
- candidateProcess.setMachineId(bomProcedureProductionresource.getResourceId());
|
|
|
- LbqWrapper<BomProcedureProgram> bomProcedureProgramWrapper = new LbqWrapper<BomProcedureProgram>().eq(BomProcedureProgram::getResourceId, bomProcedureProductionresource.getResourceId()).eq(BomProcedureProgram::getProcedureId,bomProcedureProductionresource.getProcedureId());
|
|
|
- List<BomProcedureProgram> bomProcedureProgramList = bomProcedureProgramMapper.selectList(bomProcedureProgramWrapper);
|
|
|
|
|
|
- BomProcedureProgram bomProcedureProgram = null;
|
|
|
- if(CollectionUtil.isNotEmpty(bomProcedureProgramList)){
|
|
|
- bomProcedureProgram = bomProcedureProgramList.get(0);
|
|
|
+ // TODO 工艺模板还是需要工序类型,先用名称判断
|
|
|
+ if(bomProcedure.getName().contains("上料") || bomProcedure.getName().contains("下料")){
|
|
|
+ if(stationResourcesIds.contains(bomProcedureProductionresource.getResourceId())){
|
|
|
+ assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
|
|
|
}
|
|
|
|
|
|
- // 人工上下料没有程序的情况直接用工序时间
|
|
|
- if(null != bomProcedureProgram && null != bomProcedureProgram.getRunTime()){
|
|
|
- candidateProcess.setProcedureId(bomProcedureProgram.getProcedureId());
|
|
|
- candidateProcess.setDuration(bomProcedureProgram.getRunTime().intValue());
|
|
|
- candidateProcess.setRunTime(bomProcedureProgram.getRunTime());
|
|
|
- }else{
|
|
|
- candidateProcess.setProcedureId(bomProcedure.getId());
|
|
|
- //candidateProcess.setDuration(bomProcedure.getPrepareWorkhours().intValue() + bomProcedure.getRatedWorkhours().intValue());
|
|
|
- candidateProcess.setDuration(bomProcedure.getRatedWorkhours().intValue());
|
|
|
- candidateProcess.setRunTime( bomProcedure.getRatedWorkhours());
|
|
|
+ }else{
|
|
|
+ // 查询设备状态
|
|
|
+ Productionresource productionresource = productionresourceBizMapper.selectOne(Wraps.<Productionresource>lbQ().eq(Productionresource::getId, bomProcedureProductionresource.getResourceId()));
|
|
|
+ if("1".equals(productionresource.getStatus()) || "1".equals(productionresource.getOnlineStatus())){
|
|
|
+ assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
|
|
|
}
|
|
|
- if(!candidateProcesses.contains(candidateProcess)){
|
|
|
- candidateProcesses.add(candidateProcess);
|
|
|
- }
|
|
|
- candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(),candidateProcesses);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -338,6 +339,7 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
|
}
|
|
|
|
|
|
// 调用java简易排产
|
|
|
+
|
|
|
Instance instance = new Instance();
|
|
|
instance.setTotalOpNum(totalOpNum);
|
|
|
// 赋值设备map
|
|
@@ -376,6 +378,52 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
|
|
|
return taskList;
|
|
|
}
|
|
|
|
|
|
+ private void assemblingCandidate(Map<String, List<CandidateProcess>> candidateProMap, Map<String, Machine> machineMap, TWorkpiece workpiece, List<CandidateProcess> candidateProcesses, BomProcedure bomProcedure, Machine machine, CandidateProcess candidateProcess, BomProcedureProductionresource bomProcedureProductionresource) {
|
|
|
+ if (!machineMap.containsKey(bomProcedureProductionresource.getResourceId())) {
|
|
|
+ machine.setId(bomProcedureProductionresource.getResourceId().longValue());
|
|
|
+ // 添加设备维保时间片
|
|
|
+ LbqWrapper<Repair> repairWrapper = new LbqWrapper<Repair>().eq(Repair::getProductionresourceId, bomProcedureProductionresource.getResourceId()).gt(Repair::getRepairStartTime, cn.hutool.core.date.DateUtil.toLocalDateTime(cn.hutool.core.date.DateUtil.date()));
|
|
|
+ List<Repair> repairs = repairService.list(repairWrapper);
|
|
|
+ for (Repair repair : repairs) {
|
|
|
+ machine.getNoUseTime().add(Timestamp.valueOf(repair.getRepairStartTime()).getTime() + "-" + Timestamp.valueOf(repair.getRepairEndTime()).getTime());
|
|
|
+ }
|
|
|
+ // 添加设备已经分配的时间片(从当前系统时间开始计算)
|
|
|
+ LbqWrapper<TTask> tTaskWrapper = new LbqWrapper<TTask>().eq(TTask::getResourceId, bomProcedureProductionresource.getResourceId()).gt(TTask::getExpectStartTime, cn.hutool.core.date.DateUtil.current(false)).orderByAsc(TTask::getExpectStartTime);
|
|
|
+ List<TTask> resourseTasks = tTaskMapper.selectList(tTaskWrapper);
|
|
|
+ for (TTask tTask : resourseTasks) {
|
|
|
+ machine.getNoUseTime().add(tTask.getExpectStartTime().getTime() + "-" + tTask.getExpectEndTime().getTime());
|
|
|
+ }
|
|
|
+ machineMap.put("M" + bomProcedureProductionresource.getResourceId(), machine);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!candidateProMap.containsKey(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo())) {
|
|
|
+ candidateProcess.setMachineId(bomProcedureProductionresource.getResourceId());
|
|
|
+ LbqWrapper<BomProcedureProgram> bomProcedureProgramWrapper = new LbqWrapper<BomProcedureProgram>().eq(BomProcedureProgram::getResourceId, bomProcedureProductionresource.getResourceId()).eq(BomProcedureProgram::getProcedureId, bomProcedureProductionresource.getProcedureId());
|
|
|
+ List<BomProcedureProgram> bomProcedureProgramList = bomProcedureProgramMapper.selectList(bomProcedureProgramWrapper);
|
|
|
+
|
|
|
+ BomProcedureProgram bomProcedureProgram = null;
|
|
|
+ if (CollectionUtil.isNotEmpty(bomProcedureProgramList)) {
|
|
|
+ bomProcedureProgram = bomProcedureProgramList.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 人工上下料没有程序的情况直接用工序时间
|
|
|
+ if (null != bomProcedureProgram && null != bomProcedureProgram.getRunTime()) {
|
|
|
+ candidateProcess.setProcedureId(bomProcedureProgram.getProcedureId());
|
|
|
+ candidateProcess.setDuration(bomProcedureProgram.getRunTime().intValue());
|
|
|
+ candidateProcess.setRunTime(bomProcedureProgram.getRunTime());
|
|
|
+ } else {
|
|
|
+ candidateProcess.setProcedureId(bomProcedure.getId());
|
|
|
+ //candidateProcess.setDuration(bomProcedure.getPrepareWorkhours().intValue() + bomProcedure.getRatedWorkhours().intValue());
|
|
|
+ candidateProcess.setDuration(bomProcedure.getRatedWorkhours().intValue());
|
|
|
+ candidateProcess.setRunTime(bomProcedure.getRatedWorkhours());
|
|
|
+ }
|
|
|
+ if (!candidateProcesses.contains(candidateProcess)) {
|
|
|
+ candidateProcesses.add(candidateProcess);
|
|
|
+ }
|
|
|
+ candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(), candidateProcesses);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// private List<TTask> preHandMatlab(List<TTask> taskList,List<TTask> tList){
|
|
|
// List<TTask> returnList = new ArrayList<TTask>();
|
|
|
// String taskJSon = JSONArray.toJSONString(taskList,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty
|