|
@@ -1,10 +1,8 @@
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
-import cn.hutool.core.bean.BeanUtil;
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.date.DateField;
|
|
import cn.hutool.core.date.DateField;
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateTime;
|
|
-import cn.hutool.core.date.DateUnit;
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
@@ -20,25 +18,20 @@ import com.rongwei.bsentity.vo.*;
|
|
import com.rongwei.commonservice.service.RedisService;
|
|
import com.rongwei.commonservice.service.RedisService;
|
|
import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
import com.rongwei.rwcommon.base.exception.CustomException;
|
|
import com.rongwei.rwcommon.base.exception.CustomException;
|
|
-import com.rongwei.rwcommon.utils.DateUtils;
|
|
|
|
import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
import com.rongwei.rwcommon.utils.StringUtils;
|
|
import com.rongwei.rwcommon.utils.StringUtils;
|
|
import com.rongwei.safecommon.utils.CXCommonUtils;
|
|
import com.rongwei.safecommon.utils.CXCommonUtils;
|
|
-import com.rongwei.safecommon.utils.SaveConstans;
|
|
|
|
-import org.apache.commons.math3.stat.descriptive.summary.Product;
|
|
|
|
import org.redisson.api.RLock;
|
|
import org.redisson.api.RLock;
|
|
import org.redisson.api.RedissonClient;
|
|
import org.redisson.api.RedissonClient;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
-import org.springframework.scheduling.annotation.Async;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -85,6 +78,8 @@ public class ApsServiceImpl implements ApsService {
|
|
private ApsProductionProcessesService apsProductionProcessesService;
|
|
private ApsProductionProcessesService apsProductionProcessesService;
|
|
@Autowired
|
|
@Autowired
|
|
private ApsProcessOperationEquService apsProcessOperationEquService;
|
|
private ApsProcessOperationEquService apsProcessOperationEquService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Aps排程
|
|
* Aps排程
|
|
@@ -904,6 +899,16 @@ public class ApsServiceImpl implements ApsService {
|
|
Map<String, List<String>> blankProcessIds = new HashMap<>();
|
|
Map<String, List<String>> blankProcessIds = new HashMap<>();
|
|
// 待合并生产的订单工序
|
|
// 待合并生产的订单工序
|
|
List<ApsProcessOperationVo> processOperationMs = new ArrayList<>();
|
|
List<ApsProcessOperationVo> processOperationMs = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ //查询所有坯料计划对应的 输出物料、工序作业、工序作业明细
|
|
|
|
+ List<String> blankIdList = apsBlankOrders.stream().map(ApsBlankOrderVo::getId).distinct().collect(Collectors.toList());
|
|
|
|
+ //工序作业
|
|
|
|
+ List<ApsProcessOperationDo> baseApsProcessOperationList = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid, blankIdList));
|
|
|
|
+ //输出物料
|
|
|
|
+ List<ApsProcessOperationOutMaterDo> baseApsProcessOperationOutMaterList = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>().in(ApsProcessOperationOutMaterDo::getBlankid, blankIdList));
|
|
|
|
+ //工序作业明细
|
|
|
|
+ List<ApsProcessOperationProcessEquDo> baseApsProcessOperationProcessEquList = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankIdList));
|
|
|
|
+
|
|
if (apsBlankOrders != null && apsBlankOrders.size() > 0) {
|
|
if (apsBlankOrders != null && apsBlankOrders.size() > 0) {
|
|
for (ApsBlankOrderVo apsBlankOrderVo : apsBlankOrders) {
|
|
for (ApsBlankOrderVo apsBlankOrderVo : apsBlankOrders) {
|
|
// 当前坯料计划作业集合
|
|
// 当前坯料计划作业集合
|
|
@@ -952,7 +957,7 @@ public class ApsServiceImpl implements ApsService {
|
|
// 设备列表初始化
|
|
// 设备列表初始化
|
|
// List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList,eqMaps,blankids,productionScheduleVo,apsScheduleConfig);
|
|
// List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList,eqMaps,blankids,productionScheduleVo,apsScheduleConfig);
|
|
// 工序作业相关数据初始化
|
|
// 工序作业相关数据初始化
|
|
- productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo,proEqus,processOperationEquDos);
|
|
|
|
|
|
+ productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo,proEqus,processOperationEquDos,baseApsProcessOperationList,baseApsProcessOperationProcessEquList,baseApsProcessOperationOutMaterList);
|
|
}
|
|
}
|
|
// 第一次排程需要建立关联关系
|
|
// 第一次排程需要建立关联关系
|
|
if(!"Y".equals(apsBlankOrderVo.getIfcp())){
|
|
if(!"Y".equals(apsBlankOrderVo.getIfcp())){
|
|
@@ -1383,10 +1388,14 @@ public class ApsServiceImpl implements ApsService {
|
|
*/
|
|
*/
|
|
private void productionProcessesInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder
|
|
private void productionProcessesInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder
|
|
,List<ProductionProcesses> processesList,Map<String,List<ProductionProcesses>> operationProductionProcesses
|
|
,List<ProductionProcesses> processesList,Map<String,List<ProductionProcesses>> operationProductionProcesses
|
|
- ,ApsBlankOrderVo apsBlankOrderVo,ProductionScheduleVo productionScheduleVo,Map<String, List<ApsProcessOperationProcessEquDo>> proEqus,List<ApsProcessOperationEquDo> processOperationEquDos){
|
|
|
|
|
|
+ ,ApsBlankOrderVo apsBlankOrderVo,ProductionScheduleVo productionScheduleVo,Map<String, List<ApsProcessOperationProcessEquDo>> proEqus,List<ApsProcessOperationEquDo> processOperationEquDos,
|
|
|
|
+ List<ApsProcessOperationDo> baseApsProcessOperationList,
|
|
|
|
+ List<ApsProcessOperationProcessEquDo> baseApsProcessOperationProcessEquList,
|
|
|
|
+ List<ApsProcessOperationOutMaterDo> baseApsProcessOperationOutMaterList){
|
|
// 输出物料
|
|
// 输出物料
|
|
- List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
|
|
|
|
- .eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
|
|
|
|
|
|
+// List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
|
|
|
|
+// .eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
|
|
|
|
+ List<ApsProcessOperationOutMaterDo> outMaterDos = baseApsProcessOperationOutMaterList.stream().filter(item -> item.getMainid().equals(operationDo.getId())).collect(Collectors.toList());
|
|
List<ProductionProcesses> operationProcess = new ArrayList<>();
|
|
List<ProductionProcesses> operationProcess = new ArrayList<>();
|
|
if(operationDo != null && operationDo.getPlanprocessrall() != null && operationDo.getPlanprocessrall()>0){
|
|
if(operationDo != null && operationDo.getPlanprocessrall() != null && operationDo.getPlanprocessrall()>0){
|
|
List<String> optionalEquipments = new ArrayList<>();
|
|
List<String> optionalEquipments = new ArrayList<>();
|
|
@@ -1396,11 +1405,17 @@ public class ApsServiceImpl implements ApsService {
|
|
}
|
|
}
|
|
// 锁定的作业
|
|
// 锁定的作业
|
|
if(LOCKMARK_Y.equals(operationDo.getLockmark())){
|
|
if(LOCKMARK_Y.equals(operationDo.getLockmark())){
|
|
- List<ApsProcessOperationProcessEquDo> processDetails = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
|
- .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId())
|
|
|
|
- .isNotNull(ApsProcessOperationProcessEquDo::getProcessdeviceid)
|
|
|
|
- .ne(ApsProcessOperationProcessEquDo::getProcessdeviceid,"")
|
|
|
|
- .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate));
|
|
|
|
|
|
+// List<ApsProcessOperationProcessEquDo> processDetails = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
|
+// .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId())
|
|
|
|
+// .isNotNull(ApsProcessOperationProcessEquDo::getProcessdeviceid)
|
|
|
|
+// .ne(ApsProcessOperationProcessEquDo::getProcessdeviceid,"")
|
|
|
|
+// .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate));
|
|
|
|
+ List<ApsProcessOperationProcessEquDo> processDetails = baseApsProcessOperationProcessEquList.stream().filter(item ->
|
|
|
|
+ item.getProcessid().equals(operationDo.getId())
|
|
|
|
+ && ObjectUtil.isNotEmpty(item.getProcessdeviceid())
|
|
|
|
+ && !"".equals(item.getProcessdeviceid()))
|
|
|
|
+ .sorted(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate))
|
|
|
|
+ .collect(Collectors.toList());
|
|
for (ApsProcessOperationProcessEquDo processDetail : processDetails) {
|
|
for (ApsProcessOperationProcessEquDo processDetail : processDetails) {
|
|
ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo,processOperationEquDos);
|
|
ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo,processOperationEquDos);
|
|
// 锁定的作业保留作业ID
|
|
// 锁定的作业保留作业ID
|
|
@@ -1423,7 +1438,8 @@ public class ApsServiceImpl implements ApsService {
|
|
processes.setEndTime(processDetail.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
processes.setEndTime(processDetail.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
if("小卷成退".equals(operationDo.getProcess()) || "小卷包装".equals(operationDo.getProcess())){
|
|
if("小卷成退".equals(operationDo.getProcess()) || "小卷包装".equals(operationDo.getProcess())){
|
|
String previousprocessid = operationDo.getPreviousprocessid();
|
|
String previousprocessid = operationDo.getPreviousprocessid();
|
|
- ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
|
|
|
|
|
|
+// ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
|
|
|
|
+ ApsProcessOperationDo preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(previousprocessid)).findFirst().orElse(null);
|
|
processes.setMinThPcNum(processDetail.getPlanprocessrall());
|
|
processes.setMinThPcNum(processDetail.getPlanprocessrall());
|
|
processes.setProducePcNum(preprocess.getPlanprocessrall());
|
|
processes.setProducePcNum(preprocess.getPlanprocessrall());
|
|
}
|
|
}
|
|
@@ -1454,7 +1470,8 @@ public class ApsServiceImpl implements ApsService {
|
|
Integer planprocessrall = null;
|
|
Integer planprocessrall = null;
|
|
String previousprocessid = operationDo.getPreviousprocessid();
|
|
String previousprocessid = operationDo.getPreviousprocessid();
|
|
if(StringUtils.isNotBlank(previousprocessid)){
|
|
if(StringUtils.isNotBlank(previousprocessid)){
|
|
- ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
|
|
|
|
|
|
+// ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
|
|
|
|
+ ApsProcessOperationDo preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(previousprocessid)).findFirst().orElse(null);
|
|
if(preprocess == null){
|
|
if(preprocess == null){
|
|
throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
|
|
throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
|
|
}
|
|
}
|
|
@@ -1525,12 +1542,15 @@ public class ApsServiceImpl implements ApsService {
|
|
|
|
|
|
} else if ("小卷包装".equals(operationDo.getProcess())) {
|
|
} else if ("小卷包装".equals(operationDo.getProcess())) {
|
|
String previousprocessid = operationDo.getPreviousprocessid();
|
|
String previousprocessid = operationDo.getPreviousprocessid();
|
|
- ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
|
|
|
|
|
|
+// ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
|
|
|
|
+ ApsProcessOperationDo preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(previousprocessid)).findFirst().orElse(null);
|
|
if(preprocess == null){
|
|
if(preprocess == null){
|
|
throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
|
|
throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
|
|
}
|
|
}
|
|
if("小卷成退".equals(preprocess.getProcess())){
|
|
if("小卷成退".equals(preprocess.getProcess())){
|
|
- preprocess = apsProcessOperationService.getById(preprocess.getPreviousprocessid());
|
|
|
|
|
|
+// preprocess = apsProcessOperationService.getById(preprocess.getPreviousprocessid());
|
|
|
|
+ String finalPreviousprocessid = preprocess.getPreviousprocessid();
|
|
|
|
+ preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(finalPreviousprocessid)).findFirst().orElse(null);
|
|
}
|
|
}
|
|
Integer planprocessrall = null;
|
|
Integer planprocessrall = null;
|
|
if(preprocess == null){
|
|
if(preprocess == null){
|