保存订单和删除场景时删除缓存

parent a27d4795
...@@ -176,4 +176,15 @@ public class LanuchController { ...@@ -176,4 +176,15 @@ public class LanuchController {
.list(); .list();
return R.ok(scenes); return R.ok(scenes);
} }
/**
* 保存方案
*/
@PostMapping("/savePlan")
@Operation(summary = "保存方案")
public R<String> savePlan(@RequestBody Map<String, String> params) {
String sceneId = params.get("sceneId");
return lanuchService.savePlan(sceneId);
}
} }
\ No newline at end of file
...@@ -2,9 +2,10 @@ package com.aps.entity.common; ...@@ -2,9 +2,10 @@ package com.aps.entity.common;
public enum ConditionEnum { public enum ConditionEnum {
Equal("Equal",0), // 等于 Equal("Equal",0), // 等于
NoEqual("NoEqual",10), // 等于 NoEqual("NoEqual",10), // 不等于
Like("Like",1), //模糊 Like("Like",1), //模糊
NotLike("NotLike",11), // 不模糊
GreaterThan("GreaterThan",2), //大于 GreaterThan("GreaterThan",2), //大于
GreaterThanOrEqual("GreaterThanOrEqual",3), //大于等于 GreaterThanOrEqual("GreaterThanOrEqual",3), //大于等于
LessThan("LessThan",4), //小于 LessThan("LessThan",4), //小于
...@@ -35,10 +36,20 @@ public enum ConditionEnum { ...@@ -35,10 +36,20 @@ public enum ConditionEnum {
String trimmedName = name.trim(); String trimmedName = name.trim();
// 处理常见的不等于条件的不同拼写方式 // 处理常见的不等于条件的不同拼写方式
if (trimmedName.equalsIgnoreCase("notequal") || trimmedName.equalsIgnoreCase("notEqual")) { if (trimmedName.equalsIgnoreCase("notequal") || trimmedName.equalsIgnoreCase("notEqual")) {
return NoEqual; return NoEqual;
} }
// 处理不模糊条件的不同拼写方式
if (trimmedName.equalsIgnoreCase("notlike") || trimmedName.equalsIgnoreCase("notLike") || trimmedName.equalsIgnoreCase("notContains")) {
return NotLike;
}
// 处理前端传入的Contains条件
if (trimmedName.equalsIgnoreCase("contains")) {
return Like;
}
// 遍历所有枚举值,使用equalsIgnoreCase比较 // 遍历所有枚举值,使用equalsIgnoreCase比较
for (ConditionEnum status : ConditionEnum.values()) { for (ConditionEnum status : ConditionEnum.values()) {
......
package com.aps.service.Algorithm; package com.aps.service.Algorithm;
import com.aps.common.util.GlobalCacheUtil; import com.aps.common.util.GlobalCacheUtil;
import com.aps.common.util.SnowFlackIdWorker;
import com.aps.common.util.redis.RedisUtils; import com.aps.common.util.redis.RedisUtils;
import com.aps.entity.*; import com.aps.entity.*;
import com.aps.entity.Algorithm.*; import com.aps.entity.Algorithm.*;
...@@ -11,11 +11,10 @@ import com.aps.mapper.RoutingHeaderMapper; ...@@ -11,11 +11,10 @@ import com.aps.mapper.RoutingHeaderMapper;
import com.aps.mapper.RoutingSupportingReplaceMapper; import com.aps.mapper.RoutingSupportingReplaceMapper;
import com.aps.mapper.RoutingsupportingMapper; import com.aps.mapper.RoutingsupportingMapper;
import com.aps.service.*; import com.aps.service.*;
import com.aps.service.impl.LanuchServiceImpl;
import com.aps.service.plan.MachineSchedulerService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -1619,5 +1618,6 @@ if(headers1==null) ...@@ -1619,5 +1618,6 @@ if(headers1==null)
GlobalCacheUtil.remove(sceneId+routingDiscreteParamCacheKey); GlobalCacheUtil.remove(sceneId+routingDiscreteParamCacheKey);
} }
} }
...@@ -62,4 +62,9 @@ public interface LanuchService { ...@@ -62,4 +62,9 @@ public interface LanuchService {
String sceneId, String sceneId,
Map<String, String> routingDetailIdToExecIdMap); Map<String, String> routingDetailIdToExecIdMap);
/**
* 保存方案:将新创建的订单添加到PROD_LAUNCH_ORDER表
*/
R<String> savePlan(String sceneId);
} }
\ No newline at end of file
...@@ -2175,7 +2175,9 @@ public class ChromosomeDataService { ...@@ -2175,7 +2175,9 @@ public class ChromosomeDataService {
// 使用compareValues方法比较,支持数字和字符串 // 使用compareValues方法比较,支持数字和字符串
return compareValues(actualValueStr, fieldValue) != 0; return compareValues(actualValueStr, fieldValue) != 0;
case Like: case Like:
return actualValueStr.contains(fieldValue); return actualValueStr.toLowerCase().contains(fieldValue.toLowerCase());
case NotLike:
return !actualValueStr.toLowerCase().contains(fieldValue.toLowerCase());
case GreaterThan: case GreaterThan:
return compareValues(actualValueStr, fieldValue) > 0; return compareValues(actualValueStr, fieldValue) > 0;
case GreaterThanOrEqual: case GreaterThanOrEqual:
......
...@@ -599,6 +599,9 @@ public class DatabaseQueryService { ...@@ -599,6 +599,9 @@ public class DatabaseQueryService {
case Like: case Like:
params.addValue(paramName, "%" + condition.getSafeValue() + "%"); params.addValue(paramName, "%" + condition.getSafeValue() + "%");
return fieldName + " LIKE :" + paramName; return fieldName + " LIKE :" + paramName;
case NotLike:
params.addValue(paramName, "%" + condition.getSafeValue() + "%");
return fieldName + " NOT LIKE :" + paramName;
case GreaterThan: case GreaterThan:
params.addValue(paramName, condition.getSafeValue()); params.addValue(paramName, condition.getSafeValue());
return fieldName + " > :" + paramName; return fieldName + " > :" + paramName;
......
...@@ -1040,6 +1040,75 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -1040,6 +1040,75 @@ public class LanuchServiceImpl implements LanuchService {
return value; return value;
} }
/**
* 保存方案:将新创建的订单添加到PROD_LAUNCH_ORDER表
*/
@Override
@Transactional(rollbackFor = Exception.class)
public R<String> savePlan(String sceneId) {
if (sceneId == null || sceneId.trim().isEmpty()) {
throw new IllegalArgumentException("场景ID不能为空");
}
// 从文件加载Chromosome对象
Chromosome chromosome = sceneService.loadChromosomeFromFile(sceneId);
if (chromosome == null || chromosome.getOrders() == null || chromosome.getOrders().isEmpty()) {
throw new RuntimeException("未找到订单数据");
}
// 过滤出newCreate = true的Order对象
List<Order> newOrders = chromosome.getOrders().stream()
.filter(Order::isNewCreate)
.collect(Collectors.toList());
if (newOrders.isEmpty()) {
return R.ok("没有新创建的订单需要保存");
}
// 将Order对象转换为ProdLaunchOrder对象
List<ProdLaunchOrder> launchOrders = newOrders.stream()
.map(order -> convertOrderToLaunchOrder(order, sceneId))
.filter(Objects::nonNull)
.collect(Collectors.toList());
// 批量保存到PROD_LAUNCH_ORDER表
if (!launchOrders.isEmpty()) {
boolean saved = prodLaunchOrderService.saveBatch(launchOrders);
if (saved) {
log.info("成功保存{}个新订单到PROD_LAUNCH_ORDER表", launchOrders.size());
return R.ok("保存方案成功,共保存" + launchOrders.size() + "个新订单");
} else {
log.error("保存订单到PROD_LAUNCH_ORDER表失败");
throw new RuntimeException("保存订单失败");
}
} else {
return R.ok("没有有效的订单数据需要保存");
}
}
/**
* 将Order转换为ProdLaunchOrder
*/
private ProdLaunchOrder convertOrderToLaunchOrder(Order order, String sceneId) {
ProdLaunchOrder launchOrder = new ProdLaunchOrder();
launchOrder.setOrderId(order.getOrderId());
launchOrder.setSceneId(sceneId);
launchOrder.setRoutingId(order.getRoutingId());
launchOrder.setSerie(order.getSerie());
// 创建用户可以从场景配置中获取,这里暂时设置为默认值
launchOrder.setCreateUser("system");
launchOrder.setMaterialCode(order.getMaterialCode());
launchOrder.setMaterialName(order.getMaterialName());
launchOrder.setStartDate(order.getStartDate());
launchOrder.setEndDate(order.getDueDate());
launchOrder.setOrderPriority(order.getPriority());
launchOrder.setQuantity(order.getQuantity());
launchOrder.setOrderCode(order.getOrderCode());
launchOrder.setMaterialId(order.getMaterialId());
launchOrder.setRoutingCode(order.getRoutingCode());
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");
......
...@@ -8,9 +8,12 @@ import com.aps.service.ProdProcessExecService; ...@@ -8,9 +8,12 @@ import com.aps.service.ProdProcessExecService;
import com.aps.service.ProdEquipmentService; import com.aps.service.ProdEquipmentService;
import com.aps.service.ProdEquipSpecialCalService; import com.aps.service.ProdEquipSpecialCalService;
import com.aps.service.ProdOrderProcessService; import com.aps.service.ProdOrderProcessService;
import com.aps.common.util.redis.RedisUtils;
import com.aps.service.Algorithm.MaterialRequirementService;
import com.aps.service.plan.SceneService; import com.aps.service.plan.SceneService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -43,6 +46,11 @@ public class ProdSceneConfigServiceImpl extends ServiceImpl<ProdSceneConfigMappe ...@@ -43,6 +46,11 @@ public class ProdSceneConfigServiceImpl extends ServiceImpl<ProdSceneConfigMappe
@Autowired @Autowired
private SceneService sceneService; private SceneService sceneService;
@Autowired
@Lazy // 添加@Lazy注解,延迟加载LanuchService,解决循环依赖问题
private MaterialRequirementService materialRequirementService;
/** /**
* 根据场景ID删除场景及其相关数据 * 根据场景ID删除场景及其相关数据
* @param sceneId 场景ID * @param sceneId 场景ID
...@@ -80,6 +88,9 @@ public class ProdSceneConfigServiceImpl extends ServiceImpl<ProdSceneConfigMappe ...@@ -80,6 +88,9 @@ public class ProdSceneConfigServiceImpl extends ServiceImpl<ProdSceneConfigMappe
// 删除场景对应的染色体文件 // 删除场景对应的染色体文件
sceneService.deleteChromosomeFile(sceneId); sceneService.deleteChromosomeFile(sceneId);
// 清除MaterialRequirementService的缓存
materialRequirementService.clearCache(sceneId);
// 2. 删除场景配置本身 // 2. 删除场景配置本身
return this.removeById(sceneId); return this.removeById(sceneId);
} }
......
...@@ -304,7 +304,6 @@ public class SceneService { ...@@ -304,7 +304,6 @@ public class SceneService {
if (deleted) { if (deleted) {
logger.info("删除染色体文件成功: {}", file.getAbsolutePath()); logger.info("删除染色体文件成功: {}", file.getAbsolutePath());
} }
return deleted;
} }
}else { }else {
for (SceneDetail d:sceneChromsome.getSceneDetails()) { for (SceneDetail d:sceneChromsome.getSceneDetails()) {
...@@ -316,11 +315,12 @@ public class SceneService { ...@@ -316,11 +315,12 @@ public class SceneService {
} }
} }
return true;
} }
} }
// 删除Redis中的场景信息
redisUtils.del("SceneId."+sceneId);
logger.info("删除Redis场景信息成功: {}", "SceneId."+sceneId);
return true; return true;
} catch (Exception e) { } catch (Exception e) {
......
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