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

parent a27d4795
......@@ -176,4 +176,15 @@ public class LanuchController {
.list();
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;
public enum ConditionEnum {
Equal("Equal",0), // 等于
NoEqual("NoEqual",10), // 等于
Like("Like",1), //模糊
Equal("Equal",0), // 等于
NoEqual("NoEqual",10), // 不等于
Like("Like",1), //模糊
NotLike("NotLike",11), // 不模糊
GreaterThan("GreaterThan",2), //大于
GreaterThanOrEqual("GreaterThanOrEqual",3), //大于等于
LessThan("LessThan",4), //小于
......@@ -35,10 +36,20 @@ public enum ConditionEnum {
String trimmedName = name.trim();
// 处理常见的不等于条件的不同拼写方式
if (trimmedName.equalsIgnoreCase("notequal") || trimmedName.equalsIgnoreCase("notEqual")) {
return NoEqual;
}
// 处理常见的不等于条件的不同拼写方式
if (trimmedName.equalsIgnoreCase("notequal") || trimmedName.equalsIgnoreCase("notEqual")) {
return NoEqual;
}
// 处理不模糊条件的不同拼写方式
if (trimmedName.equalsIgnoreCase("notlike") || trimmedName.equalsIgnoreCase("notLike") || trimmedName.equalsIgnoreCase("notContains")) {
return NotLike;
}
// 处理前端传入的Contains条件
if (trimmedName.equalsIgnoreCase("contains")) {
return Like;
}
// 遍历所有枚举值,使用equalsIgnoreCase比较
for (ConditionEnum status : ConditionEnum.values()) {
......
package com.aps.service.Algorithm;
import com.aps.common.util.GlobalCacheUtil;
import com.aps.common.util.SnowFlackIdWorker;
import com.aps.common.util.redis.RedisUtils;
import com.aps.entity.*;
import com.aps.entity.Algorithm.*;
......@@ -11,11 +11,10 @@ import com.aps.mapper.RoutingHeaderMapper;
import com.aps.mapper.RoutingSupportingReplaceMapper;
import com.aps.mapper.RoutingsupportingMapper;
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 org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -1619,5 +1618,6 @@ if(headers1==null)
GlobalCacheUtil.remove(sceneId+routingDiscreteParamCacheKey);
}
}
......@@ -62,4 +62,9 @@ public interface LanuchService {
String sceneId,
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 {
// 使用compareValues方法比较,支持数字和字符串
return compareValues(actualValueStr, fieldValue) != 0;
case Like:
return actualValueStr.contains(fieldValue);
return actualValueStr.toLowerCase().contains(fieldValue.toLowerCase());
case NotLike:
return !actualValueStr.toLowerCase().contains(fieldValue.toLowerCase());
case GreaterThan:
return compareValues(actualValueStr, fieldValue) > 0;
case GreaterThanOrEqual:
......
......@@ -599,6 +599,9 @@ public class DatabaseQueryService {
case Like:
params.addValue(paramName, "%" + condition.getSafeValue() + "%");
return fieldName + " LIKE :" + paramName;
case NotLike:
params.addValue(paramName, "%" + condition.getSafeValue() + "%");
return fieldName + " NOT LIKE :" + paramName;
case GreaterThan:
params.addValue(paramName, condition.getSafeValue());
return fieldName + " > :" + paramName;
......
......@@ -1040,6 +1040,75 @@ public class LanuchServiceImpl implements LanuchService {
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 List<Equiptype1> GetEquipTypes() {
List<Equiptype1> equipTypes=(List<Equiptype1>) GlobalCacheUtil.get("equipType");
......
......@@ -8,9 +8,12 @@ import com.aps.service.ProdProcessExecService;
import com.aps.service.ProdEquipmentService;
import com.aps.service.ProdEquipSpecialCalService;
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -43,6 +46,11 @@ public class ProdSceneConfigServiceImpl extends ServiceImpl<ProdSceneConfigMappe
@Autowired
private SceneService sceneService;
@Autowired
@Lazy // 添加@Lazy注解,延迟加载LanuchService,解决循环依赖问题
private MaterialRequirementService materialRequirementService;
/**
* 根据场景ID删除场景及其相关数据
* @param sceneId 场景ID
......@@ -80,6 +88,9 @@ public class ProdSceneConfigServiceImpl extends ServiceImpl<ProdSceneConfigMappe
// 删除场景对应的染色体文件
sceneService.deleteChromosomeFile(sceneId);
// 清除MaterialRequirementService的缓存
materialRequirementService.clearCache(sceneId);
// 2. 删除场景配置本身
return this.removeById(sceneId);
}
......
......@@ -304,7 +304,6 @@ public class SceneService {
if (deleted) {
logger.info("删除染色体文件成功: {}", file.getAbsolutePath());
}
return deleted;
}
}else {
for (SceneDetail d:sceneChromsome.getSceneDetails()) {
......@@ -316,11 +315,12 @@ public class SceneService {
}
}
return true;
}
}
// 删除Redis中的场景信息
redisUtils.del("SceneId."+sceneId);
logger.info("删除Redis场景信息成功: {}", "SceneId."+sceneId);
return true;
} 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