下发修改

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