|
@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.date.DateField;
|
|
import cn.hutool.core.date.DateField;
|
|
import cn.hutool.core.date.DateUnit;
|
|
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.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.json.JSONConfig;
|
|
import cn.hutool.json.JSONConfig;
|
|
import cn.hutool.json.JSONUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
@@ -88,9 +89,10 @@ public class ApsServiceImpl implements ApsService {
|
|
* Aps排程
|
|
* Aps排程
|
|
* @param apsBlankOrders
|
|
* @param apsBlankOrders
|
|
* @param apsType cd:插单,lzcp:冷轧连续重排,mix:混合排程
|
|
* @param apsType cd:插单,lzcp:冷轧连续重排,mix:混合排程
|
|
|
|
+ * @param needUnLockProcessIdList 需要过滤的工序作业ID集合
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders,ApsTypeVo apsType,SysUserVo currentUser) {
|
|
|
|
|
|
+ public void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders,ApsTypeVo apsType,SysUserVo currentUser,List<String> needUnLockProcessIdList) {
|
|
logger.info("**********排程请求开始**********");
|
|
logger.info("**********排程请求开始**********");
|
|
// 当前等路人所属工厂
|
|
// 当前等路人所属工厂
|
|
if(currentUser == null){
|
|
if(currentUser == null){
|
|
@@ -145,9 +147,9 @@ public class ApsServiceImpl implements ApsService {
|
|
}
|
|
}
|
|
// 冷轧连续性问题重排
|
|
// 冷轧连续性问题重排
|
|
if(apsType != null && StrUtil.isNotBlank(apsType.getMixIf()) && "mix".equals(apsType.getMixIf())){
|
|
if(apsType != null && StrUtil.isNotBlank(apsType.getMixIf()) && "mix".equals(apsType.getMixIf())){
|
|
- lzlxOrderSchedule(apsBlankOrders,currentUser,apsType);
|
|
|
|
|
|
+ lzlxOrderSchedule(apsBlankOrders,currentUser,apsType,needUnLockProcessIdList);
|
|
}else{
|
|
}else{
|
|
- apsOrderScheduleNew(apsBlankOrders,currentUser,apsType);
|
|
|
|
|
|
+ apsOrderScheduleNew(apsBlankOrders,currentUser,apsType,needUnLockProcessIdList);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
@@ -285,7 +287,7 @@ public class ApsServiceImpl implements ApsService {
|
|
dataMapOrder.put(bo.getId(),bo);
|
|
dataMapOrder.put(bo.getId(),bo);
|
|
|
|
|
|
// 模型转换
|
|
// 模型转换
|
|
- ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,new Date());
|
|
|
|
|
|
+ ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,new Date(),null);
|
|
productionScheduleVos.add(productionScheduleVo);
|
|
productionScheduleVos.add(productionScheduleVo);
|
|
dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
|
|
dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
|
|
// int mergeThNum = mergeThNum(bo, productionScheduleVo);
|
|
// int mergeThNum = mergeThNum(bo, productionScheduleVo);
|
|
@@ -337,7 +339,7 @@ public class ApsServiceImpl implements ApsService {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- private void apsOrderScheduleNew(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType){
|
|
|
|
|
|
+ private void apsOrderScheduleNew(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType,List<String> needUnLockProcessIdList){
|
|
// 插单重排的优先排程
|
|
// 插单重排的优先排程
|
|
List<ApsBlankOrderVo> cdorders = apsBlankOrders.stream().filter(v -> "1".equals(v.getCdbs())).collect(Collectors.toList());
|
|
List<ApsBlankOrderVo> cdorders = apsBlankOrders.stream().filter(v -> "1".equals(v.getCdbs())).collect(Collectors.toList());
|
|
// 先按合金,合金状态分组,再每组分别排程
|
|
// 先按合金,合金状态分组,再每组分别排程
|
|
@@ -364,7 +366,7 @@ public class ApsServiceImpl implements ApsService {
|
|
Date finalApsPlanStartDate = apsPlanStartDate;
|
|
Date finalApsPlanStartDate = apsPlanStartDate;
|
|
if(cdorders != null && cdorders.size()>0){
|
|
if(cdorders != null && cdorders.size()>0){
|
|
try{
|
|
try{
|
|
- apsOrderScheduleApsNew(cdorders,currentUser,allEqs, finalApsPlanStartDate,apsType);
|
|
|
|
|
|
+ apsOrderScheduleApsNew(cdorders,currentUser,allEqs, finalApsPlanStartDate,apsType,needUnLockProcessIdList);
|
|
}catch (Exception e) {
|
|
}catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
logger.info("排程异常",e);
|
|
logger.info("排程异常",e);
|
|
@@ -460,7 +462,7 @@ public class ApsServiceImpl implements ApsService {
|
|
}
|
|
}
|
|
return a;
|
|
return a;
|
|
});
|
|
});
|
|
- apsOrderScheduleApsNew(v,currentUser,allEqs, finalApsPlanStartDate,apsType);
|
|
|
|
|
|
+ apsOrderScheduleApsNew(v,currentUser,allEqs, finalApsPlanStartDate,apsType,null);
|
|
}catch (Exception e) {
|
|
}catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
logger.info("排程异常",e);
|
|
logger.info("排程异常",e);
|
|
@@ -490,7 +492,7 @@ public class ApsServiceImpl implements ApsService {
|
|
* @param apsBlankOrders
|
|
* @param apsBlankOrders
|
|
* @param currentUser
|
|
* @param currentUser
|
|
*/
|
|
*/
|
|
- private void lzlxOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType){
|
|
|
|
|
|
+ private void lzlxOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType,List<String> needUnLockProcessIdList){
|
|
// 坯料计划排序
|
|
// 坯料计划排序
|
|
Collections.sort(apsBlankOrders,(v1,v2)->{
|
|
Collections.sort(apsBlankOrders,(v1,v2)->{
|
|
// 合金
|
|
// 合金
|
|
@@ -579,10 +581,10 @@ public class ApsServiceImpl implements ApsService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Date finalApsPlanStartDate = apsPlanStartDate;
|
|
Date finalApsPlanStartDate = apsPlanStartDate;
|
|
- apsOrderScheduleApsNew(apsBlankOrders,currentUser,allEqs, finalApsPlanStartDate,apsType);
|
|
|
|
|
|
+ apsOrderScheduleApsNew(apsBlankOrders,currentUser,allEqs, finalApsPlanStartDate,apsType,needUnLockProcessIdList);
|
|
}
|
|
}
|
|
|
|
|
|
- private void apsOrderScheduleApsNew(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,Map<String,Equipment> allEqs,Date apsPlanStartDate,ApsTypeVo apsType){
|
|
|
|
|
|
+ private void apsOrderScheduleApsNew(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,Map<String,Equipment> allEqs,Date apsPlanStartDate,ApsTypeVo apsType,List<String> needUnLockProcessIdList){
|
|
// 设备数据每批次开始清空
|
|
// 设备数据每批次开始清空
|
|
allEqs.clear();
|
|
allEqs.clear();
|
|
// 排程前解锁所有待排程订单
|
|
// 排程前解锁所有待排程订单
|
|
@@ -630,7 +632,7 @@ public class ApsServiceImpl implements ApsService {
|
|
dataMapOrder.put(bo.getId(),bo);
|
|
dataMapOrder.put(bo.getId(),bo);
|
|
|
|
|
|
// 模型转换
|
|
// 模型转换
|
|
- ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,apsPlanStartDate);
|
|
|
|
|
|
+ ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,apsPlanStartDate,needUnLockProcessIdList);
|
|
productionScheduleVos.add(productionScheduleVo);
|
|
productionScheduleVos.add(productionScheduleVo);
|
|
dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
|
|
dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
|
|
// int mergeThNum = mergeThNum(bo, productionScheduleVo);
|
|
// int mergeThNum = mergeThNum(bo, productionScheduleVo);
|
|
@@ -855,7 +857,7 @@ public class ApsServiceImpl implements ApsService {
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders,Date apsPlanStartDate) {
|
|
|
|
|
|
+ public ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders,Date apsPlanStartDate,List<String> needUnLockProcessIdList) {
|
|
// 待排程坯料计划ID集合
|
|
// 待排程坯料计划ID集合
|
|
List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
|
|
List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
|
|
// 查询当前坯料计划的历史排程明细
|
|
// 查询当前坯料计划的历史排程明细
|
|
@@ -906,6 +908,11 @@ public class ApsServiceImpl implements ApsService {
|
|
Map<String, ProductionProcesses> lockHbPp = new HashMap<>();
|
|
Map<String, ProductionProcesses> lockHbPp = new HashMap<>();
|
|
// 转换工序模型数据
|
|
// 转换工序模型数据
|
|
for (ApsProcessOperationDo operationDo : operationDos) {
|
|
for (ApsProcessOperationDo operationDo : operationDos) {
|
|
|
|
+ if (null != needUnLockProcessIdList){
|
|
|
|
+ if (!needUnLockProcessIdList.contains(operationDo.getId())){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
processIdss.add(operationDo.getId());
|
|
processIdss.add(operationDo.getId());
|
|
ProductionProcesses processes = new ProductionProcesses();
|
|
ProductionProcesses processes = new ProductionProcesses();
|
|
// 工序所属订单
|
|
// 工序所属订单
|