撤销修改和移动工单修改

parent 13d1cc93
......@@ -33,9 +33,6 @@ import java.util.stream.Collectors;
@Tag(name = "甘特图管理", description = "甘特图管理")
public class ResourceGanttController {
@Autowired
private PlanSchedulerService schedulingService;
@Autowired
private PlanResultService planResultService;
......@@ -756,6 +753,7 @@ public class ResourceGanttController {
}
@PostMapping("/getSceneVersion")
@Operation(summary = "获取版本号", description = "获取所有版本号")
public R<List<Integer>> getSceneVersion(@RequestBody Map<String, Object> params) {
......@@ -765,6 +763,56 @@ public class ResourceGanttController {
}
@PostMapping("/getSceneVersionWithIndex")
@Operation(summary = "获取版本号及当前索引", description = "获取版本号列表及当前版本在列表中的索引",
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "获取版本号及当前索引参数",
content = @io.swagger.v3.oas.annotations.media.Content(
mediaType = "application/json",
examples = @io.swagger.v3.oas.annotations.media.ExampleObject(
name = "获取版本号及当前索引示例",
value = "{\n \"sceneId\": \"B571EF6682DB463AB2977B1055A74112\"\n}"
)
)
)
)
public R<Map<String, Object>> getSceneVersionWithIndex(@RequestBody Map<String, Object> params) {
String sceneId = ParamValidator.getString(params, "sceneId", "场景ID");
Map<String, Object> versionData = planResultService.getSceneVersion(sceneId);
return R.ok(versionData);
}
@PostMapping("/revertVersion")
@Operation(summary = "撤销操作", description = "撤销操作",
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "撤销操作参数",
content = @io.swagger.v3.oas.annotations.media.Content(
mediaType = "application/json",
examples = @io.swagger.v3.oas.annotations.media.ExampleObject(
name = "撤销操作示例",
value = "{\n \"sceneId\": \"B571EF6682DB463AB2977B1055A74112\",\n \"version\": 1\n}"
)
)
)
)
public R<String> revertVersion(@RequestBody Map<String, Object> params) {
String sceneId = ParamValidator.getString(params, "sceneId", "场景ID不能为空");
Integer version = ParamValidator.getInteger(params, "version", "版本号不能为空");
if (sceneId == null ) {
return R.failed("场景ID和版本号不能为空");
}
Chromosome result = planResultService.revertVersion(sceneId, version);
return R.ok("撤销成功");
}
@PostMapping("/unFixStartDate")
@Operation(summary = "取消固定开始日期", description = "取消固定开始日期",
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
......@@ -794,5 +842,38 @@ public class ResourceGanttController {
}
@PostMapping("/operationDrag")
@Operation(summary = "工单拖拽排序", description = "工单拖拽排序",
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "工单拖拽排序",
content = @io.swagger.v3.oas.annotations.media.Content(
mediaType = "application/json",
examples = @io.swagger.v3.oas.annotations.media.ExampleObject(
name = "工单拖拽排序示例",
value = "{\n \"sceneId\": \"F2EAE9B2786349A2B950CEB0FD108807\",\n \"id\": [9,3],\n \"targetOpId\": 13,\n \"isFront\": true,\n \"newMachineId\": 1263\n}"
)
)
)
)
public R<String> operationDrag(@RequestBody Map<String, Object> params) {
log.info("operationDrag 请求参数: {}", params);
// 验证场景
String sceneId = ParamValidator.getString(params, "sceneId", "场景ID");
Integer targetOpId = ParamValidator.getInteger(params, "targetOpId", "目标操作ID");
Boolean isFront = ParamValidator.getBoolean(params, "isFront", "是否前置");
Long newMachineId = ParamValidator.getLong(params, "newMachineId", "新机器ID");
List opId = ParamValidator.getList(params, "id", "操作ID");
List<Integer> opIds= ParamValidator.convertToIntArray(opId, "操作IDS");
ParamValidator.validateSceneExists(sceneService, sceneId);
// 执行拖拽操作
Chromosome result = planResultService.Drag(sceneId,opIds, targetOpId, isFront, newMachineId);
return R.ok("工单拖拽排序成功");
}
}
\ No newline at end of file
......@@ -27,28 +27,19 @@ import java.util.stream.Collectors;
@Service
public class RoutingDataService {
@Autowired
private ProdLaunchOrderService _prodLaunchOrderService;
@Autowired
private ProdProcessExecService _prodProcessExecService;
@Autowired
private ProdEquipmentService _prodEquipmentService;
@Autowired
private PlanResourceService _PlanResourceService;
@Autowired
private SceneService _sceneService;
@Autowired
private ProdOrderProcessService _prodOrderProcessService;
@Autowired
private RoutingDiscreteParamService _routingDiscreteParamService;
@Autowired
private DiscreteParameterMatrixService _discreteParameterMatrixService;
@Autowired
private ProdEquipSpecialCalService _prodEquipSpecialCalService;
......@@ -67,6 +58,8 @@ public class RoutingDataService {
@Autowired
private MesShiftWorkSchedService _MesShiftWorkSchedService;
@Autowired
private EquipinfoService _equipinfoService;
public Map<Integer, Object> InitEntrys(String SceneId, List<ProdEquipment> ProdEquipments, List<Order> ProdLaunchOrders)
{
......@@ -302,14 +295,23 @@ public class RoutingDataService {
List<PlanResource> PlanResources = _PlanResourceService.lambdaQuery()
.eq(PlanResource::getIsdeleted, 0)
.list();
List<Equipinfo> equipinfoList = _equipinfoService.lambdaQuery()
.eq(Equipinfo::getIsdeleted, 0)
.list();
for (Long id : MachineIds) {
Machine machine = new Machine();
machine.setId(id);
machine.setCode("");
machine.setName("");
machines.add(machine);
}
//节假日
// List<MesHoliday> holidays= _MesHolidayService.list();
if (IsUseCalendar) {
......@@ -353,9 +355,21 @@ public class RoutingDataService {
PlanResource PlanResource = PlanResources.stream()
.filter(t -> t.getId() == machine.getId())
.findFirst().orElse(null);
if (PlanResource != null) {
machine.setCode(PlanResource.getCode());
Equipinfo equipinfo= equipinfoList.stream()
.filter(t->t.getId().equals(PlanResource.getReferenceId()))
.findFirst().orElse(null);
if(equipinfo!=null)
{
machine.setCode(equipinfo.getEquipId());
machine.setName(equipinfo.getEquipName());
}else {
machine.setCode(PlanResource.getReferenceCode());
machine.setName(PlanResource.getTitle());
}
List<MesShiftWorkSched> ShiftWorkScheds = MesShiftWorkScheds.stream()
.filter(t -> (long) t.getWeekWorkSchedId() == PlanResource.getWorkSchedId())
.collect(Collectors.toList());
......@@ -435,6 +449,7 @@ public class RoutingDataService {
List<PlanResource> PlanResources = _PlanResourceService.lambdaQuery()
.eq(PlanResource::getIsdeleted, 0)
.list();
List<MesShiftWorkSched> MesShiftWorkScheds = _MesShiftWorkSchedService.lambdaQuery()
.eq(MesShiftWorkSched::getIsdeleted, 0).list();
......@@ -464,14 +479,25 @@ public class RoutingDataService {
// SpecialCalendarDetailWrapper.ge(SpecialCalendarDetail::getEndTime, baseTime);
List<SpecialCalendarDetail> SpecialCalendarDetails = _specialCalendarDetailService.list(SpecialCalendarDetailWrapper);
List<Equipinfo> equipinfoList = _equipinfoService.lambdaQuery()
.eq(Equipinfo::getIsdeleted, 0)
.list();
for (PlanResource resource : PlanResources) {
Machine machine = new Machine();
machine.setId(resource.getId());
Equipinfo equipinfo= equipinfoList.stream()
.filter(t->t.getId().equals(resource.getReferenceId()))
.findFirst().orElse(null);
if(equipinfo!=null)
{
machine.setCode(equipinfo.getEquipId());
machine.setName(equipinfo.getEquipName());
}else {
machine.setCode(resource.getReferenceCode());
machine.setName(resource.getTitle());
}
List<EquipCapacityDef> machineProdEquipSpecialCals = ProdEquipSpecialCals.stream()
.filter(t -> t.getPlanResourceId() != null &&t.getReferenceId() != null && t.getPlanResourceId() == machine.getId() && t.getReferenceType() == 1)
......
......@@ -7,6 +7,7 @@ import com.aps.entity.*;
import com.aps.entity.Algorithm.*;
import com.aps.entity.Algorithm.IDAndChildID.GroupResult;
import com.aps.entity.Algorithm.IDAndChildID.NodeInfo;
import com.aps.entity.Gantt.ResourceGanttVO;
import com.aps.entity.Gantt.TaskVO;
import com.aps.entity.Schedule.SceneChromsome;
import com.aps.entity.basic.ScheduleChromosome;
......@@ -782,11 +783,24 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
{
return _sceneService.moveChromosome( sceneId, version);
}
//场景下所有操作版本
public SceneChromsome getSceneChromsome(String sceneId)
{
return _sceneService.getSceneChromsome( sceneId);
}
public Chromosome revertVersion(String sceneId,Integer version)
{
return _sceneService.revertVersion( sceneId, version);
}
public void testSceneChromsome(String sceneId)
{
Chromosome chromosome=new Chromosome();
......@@ -1694,8 +1708,8 @@ private GlobalParam InitGlobalParam()
* @param machineList 机器列表
* @return 转换后的数据
*/
public List<com.aps.entity.Gantt.ResourceGanttVO> convertToResourceGanttVO1(Chromosome scheduleChromosome, List<Machine> machineList) {
List<com.aps.entity.Gantt.ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
public List<ResourceGanttVO> convertToResourceGanttVO1(Chromosome scheduleChromosome, List<Machine> machineList) {
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List<Entry> allOperations = scheduleChromosome.getAllOperations();
......@@ -1716,7 +1730,6 @@ private GlobalParam InitGlobalParam()
List<GAScheduleResult> machineGenes = scheduleChromosome.getResult().stream()
.filter(gene -> gene.getMachineId()==(machine.getId()))
.collect(Collectors.toList());
System.out.println("machineGenes: " + machineGenes.size());
// 按开始时间排序
machineGenes.sort((g1, g2) -> Integer.compare(g1.getStartTime(), g2.getStartTime()));
......@@ -2236,7 +2249,92 @@ private GlobalParam InitGlobalParam()
// 对数字列表进行排序(从小到大)
Collections.sort(numbers);
return numbers;
}
public Map<String, Object> getSceneVersion(String sceneId) {
List<Integer> numbers = new ArrayList<>();
SceneChromsome sceneChromsome=(SceneChromsome)redisUtils.get("SceneId."+sceneId);
if (sceneChromsome==null){
Map<String, Object> result = new HashMap<>();
result.put("list", numbers);
result.put("index", -1);
return result;
}
Integer currultVersion =sceneChromsome.getVersion();
// 获取结果目录
File resultDir = new File("result");
if (!resultDir.exists() || !resultDir.isDirectory()) {
Map<String, Object> result = new HashMap<>();
result.put("list", numbers);
result.put("index", -1);
return result;
}
// 获取目录中的所有文件
File[] files = resultDir.listFiles();
if (files == null) {
Map<String, Object> result = new HashMap<>();
result.put("list", numbers);
result.put("index", -1);
return result;
}
// 定义要查找的前缀
String prefix = "chromosome_result_" + sceneId + "_";
String suffix = "_.json";
for (File file : files) {
if (file.isFile()) {
String fileName = file.getName();
// 检查文件名是否以指定前缀开始,并以指定后缀结束
if (fileName.startsWith(prefix) && fileName.endsWith(suffix)) {
// 提取前缀和后缀之间的部分
String middlePart = fileName.substring(
prefix.length(),
fileName.length() - suffix.length()
);
// 尝试将中间部分解析为数字
try {
int number = Integer.parseInt(middlePart);
numbers.add(number);
} catch (NumberFormatException e) {
// 如果中间部分不是数字,则跳过该文件
continue;
}
}
}
}
// 对数字列表进行排序(从小到大)
Collections.sort(numbers);
// 查找当前版本在numbers中的索引
int index = numbers.indexOf(currultVersion);
if (index == -1 && !numbers.isEmpty()) {
// 如果当前版本不在历史版本列表中,返回列表长度作为位置
index = numbers.size();
} else if (numbers.isEmpty()) {
index = -1; // 如果列表为空,索引为-1
}
Map<String, Object> result = new HashMap<>();
result.put("list", numbers);
result.put("index", index);
return result;
}
}
......@@ -239,6 +239,38 @@ public class SceneService {
}
public Chromosome revertVersion(String sceneId,Integer version)
{
SceneChromsome sceneChromsome=(SceneChromsome)redisUtils.get("SceneId."+sceneId);
Integer currentVersion = sceneChromsome.getVersion();
if(sceneChromsome==null) {
return null;
}else {
sceneChromsome.setVersion(version);
redisUtils.set("SceneId."+sceneId,sceneChromsome);
Chromosome chromosome = loadChromosomeFromFile(sceneId);
if (chromosome == null) {
sceneChromsome.setVersion(currentVersion);
redisUtils.set("SceneId."+sceneId,sceneChromsome);
throw new RuntimeException("撤销操作失败,未找到上一版本");
}
return chromosome;
}
}
/**
* 检查染色体文件是否存在
*/
......
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