下发修改

parent 7666d8f3
...@@ -282,7 +282,7 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -282,7 +282,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
public void decode(Chromosome chromosome) { public void decode(Chromosome chromosome) {
List<OrderMaterialRequirement> orderMaterials = materialRequirementService.buildMultiLevelRequirementNetwork(chromosome, sceneId, baseTime,_globalParam); // List<OrderMaterialRequirement> orderMaterials = materialRequirementService.buildMultiLevelRequirementNetwork(chromosome, sceneId, baseTime,_globalParam);
chromosome.setScenarioID(sceneId); chromosome.setScenarioID(sceneId);
if(_globalParam.isIsCheckSf()) { if(_globalParam.isIsCheckSf()) {
int isnew= generateGlobalOpList(chromosome); int isnew= generateGlobalOpList(chromosome);
......
...@@ -115,12 +115,22 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -115,12 +115,22 @@ public class LanuchServiceImpl implements LanuchService {
if (apsOrderIds.isEmpty()) { if (apsOrderIds.isEmpty()) {
apsOrders = new ArrayList<>(); apsOrders = new ArrayList<>();
} else { } else {
apsOrders = apsOrderService.lambdaQuery() // Oracle IN子句限制最多1000个值,需要分批查询
.eq(ApsOrder::getIsdeleted, 0) apsOrders = new ArrayList<>();
.eq(ApsOrder::getStatus, 4) int batchSize = 1000;
// .eq(ApsOrder::getCreatoruserid, username) for (int i = 0; i < apsOrderIds.size(); i += batchSize) {
.in(ApsOrder::getId, apsOrderIds) int endIndex = Math.min(i + batchSize, apsOrderIds.size());
.list(); List<String> batchIds = apsOrderIds.subList(i, endIndex);
List<ApsOrder> batchOrders = apsOrderService.lambdaQuery()
.eq(ApsOrder::getIsdeleted, 0)
.eq(ApsOrder::getStatus, 4)
// .eq(ApsOrder::getCreatoruserid, username)
.in(ApsOrder::getId, batchIds)
.list();
apsOrders.addAll(batchOrders);
}
} }
if (CollectionUtils.isEmpty(apsOrders)) { if (CollectionUtils.isEmpty(apsOrders)) {
throw new SceneGenerationException("工单列表不能为空"); throw new SceneGenerationException("工单列表不能为空");
...@@ -247,22 +257,22 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -247,22 +257,22 @@ public class LanuchServiceImpl implements LanuchService {
} }
// 更新或插入 mes_order 数据 // 更新或插入 mes_order 数据
List<String> orderIds = prodLanuchList.stream().map(Order::getOrderId).distinct().collect(Collectors.toList()); List<String> orderIds = prodLanuchList.stream().map(Order::getOrderId).distinct().collect(Collectors.toList());
// 查询已存在的 mes_order 记录 // 查询已存在的 mes_order 记录
List<MesOrder> existingMesOrders = mesOrderService.lambdaQuery() List<MesOrder> existingMesOrders = mesOrderService.lambdaQuery()
.in(MesOrder::getMesCode, orderIds) .in(MesOrder::getMesCode, orderIds)
.list(); .list();
Map<String, MesOrder> existingMesOrderMap = existingMesOrders.stream() Map<String, MesOrder> existingMesOrderMap = existingMesOrders.stream()
.collect(Collectors.toMap(MesOrder::getMesCode, order -> order)); .collect(Collectors.toMap(MesOrder::getMesCode, order -> order));
List<MesOrder> toUpdate = new ArrayList<>(); List<MesOrder> toUpdate = new ArrayList<>();
List<MesOrder> toInsert = new ArrayList<>(); List<MesOrder> toInsert = new ArrayList<>();
for (Order prodLaunchOrder : prodLanuchList) { for (Order prodLaunchOrder : prodLanuchList) {
MesOrder existingOrder = existingMesOrderMap.get(prodLaunchOrder.getOrderId()); MesOrder existingOrder = existingMesOrderMap.get(prodLaunchOrder.getOrderId());
MesOrder mesOrder; MesOrder mesOrder;
if (existingOrder != null) { if (existingOrder != null) {
// 更新现有记录 // 更新现有记录
mesOrder = existingOrder; mesOrder = existingOrder;
...@@ -276,7 +286,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -276,7 +286,7 @@ public class LanuchServiceImpl implements LanuchService {
mesOrder.setCreationTime(LocalDateTime.now()); mesOrder.setCreationTime(LocalDateTime.now());
toInsert.add(mesOrder); toInsert.add(mesOrder);
} }
// 设置部门信息(使用upId字段存储部门ID) // 设置部门信息(使用upId字段存储部门ID)
Integer departmentId = orderDepartmentMap.get(prodLaunchOrder.getOrderId()); Integer departmentId = orderDepartmentMap.get(prodLaunchOrder.getOrderId());
if (departmentId != null) { if (departmentId != null) {
...@@ -294,21 +304,21 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -294,21 +304,21 @@ public class LanuchServiceImpl implements LanuchService {
mesOrder.setIsDeleted(0L); mesOrder.setIsDeleted(0L);
mesOrder.setTaskType(prodLaunchOrder.getFinishOrderId() != null ? "半成品" : "成品"); mesOrder.setTaskType(prodLaunchOrder.getFinishOrderId() != null ? "半成品" : "成品");
} }
// 批量更新和插入 // 批量更新和插入
boolean updateSuccess = true; boolean updateSuccess = true;
boolean insertSuccess = true; boolean insertSuccess = true;
if (!toUpdate.isEmpty()) { if (!toUpdate.isEmpty()) {
updateSuccess = mesOrderService.updateBatchById(toUpdate); updateSuccess = mesOrderService.updateBatchById(toUpdate);
log.info("更新 {} 条 mes_order 记录", toUpdate.size()); log.info("更新 {} 条 mes_order 记录", toUpdate.size());
} }
if (!toInsert.isEmpty()) { if (!toInsert.isEmpty()) {
insertSuccess = mesOrderService.saveBatch(toInsert); insertSuccess = mesOrderService.saveBatch(toInsert);
log.info("插入 {} 条 mes_order 记录", toInsert.size()); log.info("插入 {} 条 mes_order 记录", toInsert.size());
} }
if (!updateSuccess || !insertSuccess) { if (!updateSuccess || !insertSuccess) {
log.error("mes_order 操作失败"); log.error("mes_order 操作失败");
throw new RuntimeException("mes_order 操作失败"); throw new RuntimeException("mes_order 操作失败");
...@@ -330,18 +340,18 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -330,18 +340,18 @@ public class LanuchServiceImpl implements LanuchService {
.eq(Dispatch::getSceneId, sceneId) .eq(Dispatch::getSceneId, sceneId)
.eq(Dispatch::getIsDeleted, 0L) .eq(Dispatch::getIsDeleted, 0L)
.list(); .list();
// 构建现有记录的映射 (executeId + routingDetailId 作为唯一标识) // 构建现有记录的映射 (executeId + routingDetailId 作为唯一标识)
Map<String, Dispatch> existingDispatchMap = existingDispatches.stream() Map<String, Dispatch> existingDispatchMap = existingDispatches.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
dispatch -> dispatch.getExecuteId() + "_" + dispatch.getRoutingDetailId(), dispatch -> dispatch.getExecuteId() + "_" + dispatch.getRoutingDetailId(),
dispatch -> dispatch, dispatch -> dispatch,
(existing, replacement) -> existing (existing, replacement) -> existing
)); ));
List<Dispatch> toUpdateDispatches = new ArrayList<>(); List<Dispatch> toUpdateDispatches = new ArrayList<>();
List<Dispatch> toInsertDispatches = new ArrayList<>(); List<Dispatch> toInsertDispatches = new ArrayList<>();
// 遍历GAScheduleResult结果并转换为dispatch // 遍历GAScheduleResult结果并转换为dispatch
for (GAScheduleResult gaResult : chromosome.getResult()) { for (GAScheduleResult gaResult : chromosome.getResult()) {
Entry entry1 = entrys.stream() Entry entry1 = entrys.stream()
...@@ -353,11 +363,11 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -353,11 +363,11 @@ public class LanuchServiceImpl implements LanuchService {
log.warn("未找到对应的Entry,ExecId: {}", gaResult.getExecId()); log.warn("未找到对应的Entry,ExecId: {}", gaResult.getExecId());
continue; continue;
} }
String dispatchKey = entry1.getId() + "_" + entry1.getRoutingDetailId(); String dispatchKey = entry1.getId() + "_" + entry1.getRoutingDetailId();
Dispatch existingDispatch = existingDispatchMap.get(dispatchKey); Dispatch existingDispatch = existingDispatchMap.get(dispatchKey);
Dispatch dispatch; Dispatch dispatch;
if (existingDispatch != null) { if (existingDispatch != null) {
// 更新现有记录 // 更新现有记录
dispatch = existingDispatch; dispatch = existingDispatch;
...@@ -373,7 +383,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -373,7 +383,7 @@ public class LanuchServiceImpl implements LanuchService {
dispatch.setRoutingDetailId(entry1.getRoutingDetailId()); dispatch.setRoutingDetailId(entry1.getRoutingDetailId());
toInsertDispatches.add(dispatch); toInsertDispatches.add(dispatch);
} }
// 更新相关字段 // 更新相关字段
dispatch.setENof(gaResult.getOrderId()); dispatch.setENof(gaResult.getOrderId());
dispatch.setQuantity(gaResult.getQuantity()); dispatch.setQuantity(gaResult.getQuantity());
...@@ -399,21 +409,21 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -399,21 +409,21 @@ public class LanuchServiceImpl implements LanuchService {
} }
dispatch.setShopid(entry1.getDepartmentId()); dispatch.setShopid(entry1.getDepartmentId());
} }
// 批量更新和插入 dispatch // 批量更新和插入 dispatch
boolean updateDispatchSuccess = true; boolean updateDispatchSuccess = true;
boolean insertDispatchSuccess = true; boolean insertDispatchSuccess = true;
if (!toUpdateDispatches.isEmpty()) { if (!toUpdateDispatches.isEmpty()) {
updateDispatchSuccess = dispatchService.updateBatchById(toUpdateDispatches); updateDispatchSuccess = dispatchService.updateBatchById(toUpdateDispatches);
log.info("更新 {} 条 dispatch 记录", toUpdateDispatches.size()); log.info("更新 {} 条 dispatch 记录", toUpdateDispatches.size());
} }
if (!toInsertDispatches.isEmpty()) { if (!toInsertDispatches.isEmpty()) {
insertDispatchSuccess = dispatchService.saveBatch(toInsertDispatches); insertDispatchSuccess = dispatchService.saveBatch(toInsertDispatches);
log.info("插入 {} 条 dispatch 记录", toInsertDispatches.size()); log.info("插入 {} 条 dispatch 记录", toInsertDispatches.size());
} }
boolean savedDispatch = updateDispatchSuccess && insertDispatchSuccess; boolean savedDispatch = updateDispatchSuccess && insertDispatchSuccess;
// 构建ExecId到GAScheduleResult的映射,用于获取工序开始时间 // 构建ExecId到GAScheduleResult的映射,用于获取工序开始时间
...@@ -430,13 +440,13 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -430,13 +440,13 @@ public class LanuchServiceImpl implements LanuchService {
// 获取该Entry对应的GAScheduleResult // 获取该Entry对应的GAScheduleResult
GAScheduleResult gaResult = execIdToScheduleMap.get(entry.getExecId()); GAScheduleResult gaResult = execIdToScheduleMap.get(entry.getExecId());
LocalDateTime operationStartTime = null; LocalDateTime operationStartTime = null;
// 计算工序开始时间 // 计算工序开始时间
if (gaResult != null) { if (gaResult != null) {
LocalDateTime baseTime = chromosome.getBaseTime() != null ? chromosome.getBaseTime() : LocalDateTime.now(); LocalDateTime baseTime = chromosome.getBaseTime() != null ? chromosome.getBaseTime() : LocalDateTime.now();
operationStartTime = baseTime.plusSeconds(gaResult.getStartTime()); operationStartTime = baseTime.plusSeconds(gaResult.getStartTime());
} }
// 遍历物料需求,设置shortageTime // 遍历物料需求,设置shortageTime
for (OrderMaterialRequirement omr : entry.getMaterialRequirements()) { for (OrderMaterialRequirement omr : entry.getMaterialRequirements()) {
if (operationStartTime != null) { if (operationStartTime != null) {
...@@ -800,19 +810,33 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -800,19 +810,33 @@ public class LanuchServiceImpl implements LanuchService {
} }
public List<RoutingDetail> getRoutingDetails(List<Long> routingHeaderIds) { public List<RoutingDetail> getRoutingDetails(List<Long> routingHeaderIds) {
LambdaQueryWrapper<RoutingDetail> wrapper = new LambdaQueryWrapper<>(); if (routingHeaderIds.isEmpty()) {
wrapper.in(RoutingDetail::getRoutingHeaderId, routingHeaderIds) return new ArrayList<>();
.eq(RoutingDetail::getIsDeleted, 0) // 添加 is_deleted=0 过滤条件 }
.orderByAsc(RoutingDetail::getTaskSeq);
List<RoutingDetail> routingDetails = routingDetailMapper.selectList(wrapper); // Oracle IN子句限制最多1000个值,需要分批查询
List<RoutingDetail> allRoutingDetails = new ArrayList<>();
int batchSize = 1000;
if (CollectionUtils.isEmpty(routingDetails)) { for (int i = 0; i < routingHeaderIds.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, routingHeaderIds.size());
List<Long> batchIds = routingHeaderIds.subList(i, endIndex);
LambdaQueryWrapper<RoutingDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.in(RoutingDetail::getRoutingHeaderId, batchIds)
.eq(RoutingDetail::getIsDeleted, 0) // 添加 is_deleted=0 过滤条件
.orderByAsc(RoutingDetail::getTaskSeq);
List<RoutingDetail> batchDetails = routingDetailMapper.selectList(wrapper);
allRoutingDetails.addAll(batchDetails);
}
if (CollectionUtils.isEmpty(allRoutingDetails)) {
log.error("工艺下无工序信息: {}", routingHeaderIds); log.error("工艺下无工序信息: {}", routingHeaderIds);
throw new RuntimeException("工艺下无工序信息: " + routingHeaderIds); throw new RuntimeException("工艺下无工序信息: " + routingHeaderIds);
} }
return routingDetails; return allRoutingDetails;
} }
/** /**
...@@ -913,9 +937,9 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -913,9 +937,9 @@ public class LanuchServiceImpl implements LanuchService {
prodProcessExec.setConnectPropertyName(detail.getConnectPropertyName()); prodProcessExec.setConnectPropertyName(detail.getConnectPropertyName());
prodProcessExec.setCanInterrupt(detail.getCanInterrupt()); prodProcessExec.setCanInterrupt(detail.getCanInterrupt());
prodProcessExec.setDepartmentId(routingHeader.getDepartmentId()); prodProcessExec.setDepartmentId(routingHeader.getDepartmentId());
prodProcessExec.setRoutingCode(routingHeader.getCode()); prodProcessExec.setRoutingCode(routingHeader.getCode());
prodProcessExec.setRoutingName(routingHeader.getName()); prodProcessExec.setRoutingName(routingHeader.getName());
prodProcessExec.setSpeed( prodProcessExec.setSpeed(
...@@ -1193,16 +1217,16 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -1193,16 +1217,16 @@ public class LanuchServiceImpl implements LanuchService {
boolean saved = prodLaunchOrderService.saveBatch(launchOrders); boolean saved = prodLaunchOrderService.saveBatch(launchOrders);
if (saved) { if (saved) {
log.info("成功保存{}个新订单到PROD_LAUNCH_ORDER表", launchOrders.size()); log.info("成功保存{}个新订单到PROD_LAUNCH_ORDER表", launchOrders.size());
// 5. 转换工单于工序执行表 // 5. 转换工单于工序执行表
convertToProcessExecBatch(launchOrders, sceneId); convertToProcessExecBatch(launchOrders, sceneId);
// 6. 生成工序关联关系 // 6. 生成工序关联关系
generateProcessRelationsBatch(launchOrders, sceneId); generateProcessRelationsBatch(launchOrders, sceneId);
return R.ok("保存方案成功,共保存" + launchOrders.size() + "个新订单"); return R.ok("保存方案成功,共保存" + launchOrders.size() + "个新订单");
} else { } else {
throw new RuntimeException("保存订单失败"); throw new RuntimeException("保存订单失败");
} }
} else { } else {
...@@ -1232,7 +1256,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -1232,7 +1256,7 @@ public class LanuchServiceImpl implements LanuchService {
launchOrder.setRoutingCode(order.getRoutingCode()); launchOrder.setRoutingCode(order.getRoutingCode());
return launchOrder; return launchOrder;
} }
private int cachetimeout=60; private int cachetimeout=60;
private List<Equiptype1> GetEquipTypes() { private List<Equiptype1> GetEquipTypes() {
List<Equiptype1> equipTypes=(List<Equiptype1>) GlobalCacheUtil.get("equipType"); List<Equiptype1> equipTypes=(List<Equiptype1>) GlobalCacheUtil.get("equipType");
if(equipTypes==null) if(equipTypes==null)
...@@ -1621,7 +1645,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -1621,7 +1645,7 @@ public class LanuchServiceImpl implements LanuchService {
/** /**
* 插单功能:向现有场景添加新订单 * 插单功能:向现有场景添加新订单
* *
* @param sceneId 场景ID * @param sceneId 场景ID
* @param orderCode 订单编码 * @param orderCode 订单编码
* @param materialId 物料ID * @param materialId 物料ID
...@@ -1634,7 +1658,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -1634,7 +1658,7 @@ public class LanuchServiceImpl implements LanuchService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public R<String> insertOrder(String sceneId, String orderCode, String materialId, public R<String> insertOrder(String sceneId, String orderCode, String materialId,
LocalDateTime startDate, LocalDateTime endDate, LocalDateTime startDate, LocalDateTime endDate,
Integer priority, Double quantity) { Integer priority, Double quantity) {
// 1. 参数校验 // 1. 参数校验
if (sceneId == null || sceneId.trim().isEmpty()) { if (sceneId == null || sceneId.trim().isEmpty()) {
...@@ -1678,8 +1702,8 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -1678,8 +1702,8 @@ public class LanuchServiceImpl implements LanuchService {
throw new RuntimeException("物料没有配置工艺路线"); throw new RuntimeException("物料没有配置工艺路线");
} }
log.info("查询到物料 {} 的最新工艺路线: ID={}, Code={}, Version={}, CreationTime={}", log.info("查询到物料 {} 的最新工艺路线: ID={}, Code={}, Version={}, CreationTime={}",
materialId, routingHeader.getId(), routingHeader.getCode(), materialId, routingHeader.getId(), routingHeader.getCode(),
routingHeader.getVersion(), routingHeader.getCreationTime()); routingHeader.getVersion(), routingHeader.getCreationTime());
// 5. 生成订单ID(UUID格式) // 5. 生成订单ID(UUID格式)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment