设备维修设备日历修改

parent 5f4dee85
...@@ -106,6 +106,11 @@ ...@@ -106,6 +106,11 @@
<version>2.15.2</version> <!-- 建议与jackson-databind版本一致 --> <version>2.15.2</version> <!-- 建议与jackson-databind版本一致 -->
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture;
@RestController @RestController
@RequestMapping("/lanuch") @RequestMapping("/lanuch")
...@@ -44,8 +45,8 @@ public class LanuchController { ...@@ -44,8 +45,8 @@ public class LanuchController {
R<ProdSceneConfig> result = lanuchService.lanuch(sceneName, userId); R<ProdSceneConfig> result = lanuchService.lanuch(sceneName, userId);
// 异步更新物料和设备缓存 // 异步更新物料和设备缓存,不等待完成
updateMaterialAndEquipmentCacheAsync(); CompletableFuture.runAsync(this::updateMaterialAndEquipmentCacheAsync);
return result; return result;
} }
...@@ -56,7 +57,6 @@ public class LanuchController { ...@@ -56,7 +57,6 @@ public class LanuchController {
log.info("开始异步更新物料缓存"); log.info("开始异步更新物料缓存");
planResultService.getMaterials(); planResultService.getMaterials();
log.info("物料缓存更新完成"); log.info("物料缓存更新完成");
log.info("开始异步更新设备缓存"); log.info("开始异步更新设备缓存");
planResultService.InitCalendarToAllMachines(); planResultService.InitCalendarToAllMachines();
log.info("设备缓存更新完成"); log.info("设备缓存更新完成");
......
package com.aps.controller.gantt; package com.aps.controller.gantt;
import cn.hutool.core.bean.BeanUtil;
import com.aps.common.util.ParamValidator; import com.aps.common.util.ParamValidator;
import com.aps.common.util.R; import com.aps.common.util.R;
import com.aps.entity.Algorithm.Chromosome; import com.aps.entity.Algorithm.Chromosome;
...@@ -38,16 +39,15 @@ public class MaintenanceWindowController { ...@@ -38,16 +39,15 @@ public class MaintenanceWindowController {
) )
) )
) )
public R<Chromosome> addMaintenanceWindow(@RequestBody Map<String, Object> params) { public R<String> addMaintenanceWindow(@RequestBody Map<String, Object> params) {
String sceneId = ParamValidator.getString(params, "sceneId", "场景ID"); String sceneId = ParamValidator.getString(params, "sceneId", "场景ID");
Long machineId = ParamValidator.getLong(params, "machineId", "机器ID"); Long machineId = ParamValidator.getLong(params, "machineId", "机器ID");
MaintenanceWindow maintenanceWindow = (MaintenanceWindow) params.get("maintenanceWindow"); MaintenanceWindow maintenanceWindow = BeanUtil.toBean(params.get("maintenanceWindow"), MaintenanceWindow.class);
Chromosome result = planResultService.AddMaintenanceWindow(sceneId, machineId, maintenanceWindow); Chromosome result = planResultService.AddMaintenanceWindow(sceneId, machineId, maintenanceWindow);
return R.ok(result); return R.ok("添加成功");
} }
@DeleteMapping("/delete") @PostMapping("/delete")
@Operation(summary = "删除维护窗口", description = "删除指定机器的维护窗口", @Operation(summary = "删除维护窗口", description = "删除指定机器的维护窗口",
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "删除维护窗口请求参数", description = "删除维护窗口请求参数",
...@@ -60,13 +60,13 @@ public class MaintenanceWindowController { ...@@ -60,13 +60,13 @@ public class MaintenanceWindowController {
) )
) )
) )
public R<Chromosome> delMaintenanceWindow(@RequestBody Map<String, Object> params) { public R<String> delMaintenanceWindow(@RequestBody Map<String, Object> params) {
String sceneId = ParamValidator.getString(params, "sceneId", "场景ID"); String sceneId = ParamValidator.getString(params, "sceneId", "场景ID");
Long machineId = ParamValidator.getLong(params, "machineId", "机器ID"); Long machineId = ParamValidator.getLong(params, "machineId", "机器ID");
String maintenanceId = ParamValidator.getString(params, "maintenanceId", "维护窗口ID"); String maintenanceId = ParamValidator.getString(params, "maintenanceId", "维护窗口ID");
Chromosome result = planResultService.DelMaintenanceWindow(sceneId, machineId, maintenanceId); Chromosome result = planResultService.DelMaintenanceWindow(sceneId, machineId, maintenanceId);
return R.ok(result); return R.ok("删除成功");
} }
@PostMapping("/get") @PostMapping("/get")
......
...@@ -806,7 +806,7 @@ public class ResourceGanttController { ...@@ -806,7 +806,7 @@ public class ResourceGanttController {
return new ArrayList<>(); return new ArrayList<>();
} }
List<Machine> machineList = planResultService.InitCalendarToAllMachines2(sceneId); List<Machine> machineList = planResultService.InitCalendarToAllMachines3(schedule);
// 转换为 ResourceGanttVO 格式 // 转换为 ResourceGanttVO 格式
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>(); List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
......
...@@ -22,7 +22,7 @@ public class Entry { ...@@ -22,7 +22,7 @@ public class Entry {
/** /**
* 基因编号 * 基因编号
*/ */
public int Id ; public int id ;
/** /**
* 所属组ID 需要按照前后顺序生产的工单给一组 * 所属组ID 需要按照前后顺序生产的工单给一组
*/ */
......
...@@ -12,6 +12,9 @@ public class MaintenanceWindow { ...@@ -12,6 +12,9 @@ public class MaintenanceWindow {
private String reason; private String reason;
private String equipCode;
private String equipName;
public MaintenanceWindow() {} public MaintenanceWindow() {}
public MaintenanceWindow(LocalDateTime startTime, LocalDateTime endTime, String reason) { public MaintenanceWindow(LocalDateTime startTime, LocalDateTime endTime, String reason) {
...@@ -70,6 +73,21 @@ public class MaintenanceWindow { ...@@ -70,6 +73,21 @@ public class MaintenanceWindow {
this.id = id; this.id = id;
} }
public String getEquipCode() {
return equipCode;
}
public void setEquipCode(String equipCode) {
this.equipCode = equipCode;
}
public String getEquipName() {
return equipName;
}
public void setEquipName(String equipName) {
this.equipName = equipName;
}
@Override @Override
......
// DataSourceType.java
package com.aps.entity.common;
public enum DataSourceType {
FILE("file"), // 文件数据源(现有)
DATABASE("db"); // 数据库数据源(新增)
private String type;
DataSourceType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public static DataSourceType fromString(String type) {
for (DataSourceType dataSource : DataSourceType.values()) {
if (dataSource.getType().equalsIgnoreCase(type)) {
return dataSource;
}
}
return FILE; // 默认返回FILE
}
}
\ No newline at end of file
// EntityConfig.java
package com.aps.entity.common;
public class EntityConfig {
private String entityName;
private DataSourceType dataSource;
private String tableName; // 数据库表名(如果是数据库源)
private String fieldName; // Chromosome字段名(如果是文件源)
private Class<?> entityClass; // 实体类(数据库实体使用)
// 构造方法
public EntityConfig() {}
public EntityConfig(String entityName, DataSourceType dataSource, String fieldName, String tableName, Class<?> entityClass) {
this.entityName = entityName;
this.dataSource = dataSource;
this.fieldName = fieldName;
this.tableName = tableName;
this.entityClass = entityClass;
}
// getter/setter
public String getEntityName() { return entityName; }
public void setEntityName(String entityName) { this.entityName = entityName; }
public DataSourceType getDataSource() { return dataSource; }
public void setDataSource(DataSourceType dataSource) { this.dataSource = dataSource; }
public String getTableName() { return tableName; }
public void setTableName(String tableName) { this.tableName = tableName; }
public String getFieldName() { return fieldName; }
public void setFieldName(String fieldName) { this.fieldName = fieldName; }
public Class<?> getEntityClass() { return entityClass; }
public void setEntityClass(Class<?> entityClass) { this.entityClass = entityClass; }
@Override
public String toString() {
return "EntityConfig{" +
"entityName='" + entityName + '\'' +
", dataSource=" + dataSource +
", tableName='" + tableName + '\'' +
", fieldName='" + fieldName + '\'' +
", entityClass=" + entityClass +
'}';
}
}
\ No newline at end of file
package com.aps.entity.common;
import com.aps.entity.ProdEquipment;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class EntityConfigConfiguration {
@Bean
public Map<String, EntityConfig> entityConfigMap() {
Map<String, EntityConfig> configMap = new HashMap<>();
// ========== 文件实体配置 ==========
addFileEntity(configMap, "order", "orders");
addFileEntity(configMap, "entry", "allOperations");
addFileEntity(configMap, "machine", "InitMachines");
addFileEntity(configMap, "globaloperationinfo", "globalOpList");
addFileEntity(configMap, "groupresult", "OperatRel");
// ========== 数据库实体配置 ==========
// 设备表配置
addDbEntity(configMap, "prod_equipment", "PROD_EQUIPMENT", ProdEquipment.class);
return configMap;
}
/**
* 添加文件实体配置
*/
private void addFileEntity(Map<String, EntityConfig> configMap, String entityName, String fieldName) {
EntityConfig config = new EntityConfig();
config.setEntityName(entityName);
config.setDataSource(DataSourceType.FILE);
config.setFieldName(fieldName);
config.setTableName(null);
config.setEntityClass(null);
configMap.put(entityName.toLowerCase(), config);
}
/**
* 添加数据库实体配置
*/
private void addDbEntity(Map<String, EntityConfig> configMap, String entityName, String tableName, Class<?> entityClass) {
EntityConfig config = new EntityConfig();
config.setEntityName(entityName);
config.setDataSource(DataSourceType.DATABASE);
config.setTableName(tableName);
config.setEntityClass(entityClass);
config.setFieldName(null);
configMap.put(entityName.toLowerCase(), config);
}
}
\ No newline at end of file
...@@ -300,7 +300,7 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -300,7 +300,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
int opSequence = currentOp.getSequence(); int opSequence = currentOp.getSequence();
GAScheduleResult existingResult = chromosome.getResultOld().stream() GAScheduleResult existingResult = chromosome.getResultOld().stream()
.filter(r-> r.getOperationId() == currentOp.Id) .filter(r-> r.getOperationId() == currentOp.getId())
.findFirst().orElse(null); .findFirst().orElse(null);
if(existingResult!=null) { if(existingResult!=null) {
if(existingResult.isIsLocked()) if(existingResult.isIsLocked())
...@@ -429,7 +429,7 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -429,7 +429,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
// System.out.println(" 标准模式:安排主处理+" + setupTime + "分钟换型=" + processingTimeTotal + "分钟"); // System.out.println(" 标准模式:安排主处理+" + setupTime + "分钟换型=" + processingTimeTotal + "分钟");
} }
GAScheduleResult existingResult = chromosome.getResultOld().stream().filter(r-> r.getOperationId() == operation.Id).findFirst().orElse(null); GAScheduleResult existingResult = chromosome.getResultOld().stream().filter(r-> r.getOperationId() == operation.getId()).findFirst().orElse(null);
if(existingResult!=null) if(existingResult!=null)
{ {
earliestStartTime = Math.max(earliestStartTime,existingResult.getDesignatedStartTime()); earliestStartTime = Math.max(earliestStartTime,existingResult.getDesignatedStartTime());
......
...@@ -313,8 +313,9 @@ if(routingIds.size()==0) ...@@ -313,8 +313,9 @@ if(routingIds.size()==0)
order.setRoutingId(headers1.getId()); order.setRoutingId(headers1.getId());
ProdLaunchOrder prodOrderMain= convertToLaunchOrder(order,""); ProdLaunchOrder prodOrderMain= convertToLaunchOrder(order,"");
List<RoutingDetailEquip> finalRoutingDetailEquips = routingDetailEquips;
List<ProdProcessExec> processExecList = RoutingDetails.stream() List<ProdProcessExec> processExecList = RoutingDetails.stream()
.map(detail -> lanuchService.createProcessExec(prodOrderMain, detail, sceneId)) .map(detail -> lanuchService.createProcessExec(prodOrderMain, detail, sceneId, finalRoutingDetailEquips))
.collect(Collectors.toList()); .collect(Collectors.toList());
List<ProdEquipment> ProdEquipmentList= lanuchService.batchInsertEquipMent(routingDetailEquips, sceneId,processExecList,false); List<ProdEquipment> ProdEquipmentList= lanuchService.batchInsertEquipMent(routingDetailEquips, sceneId,processExecList,false);
......
...@@ -543,6 +543,8 @@ public class RoutingDataService { ...@@ -543,6 +543,8 @@ public class RoutingDataService {
maintenanceWindow.setId(equipMaintainTask.getId().toString()); maintenanceWindow.setId(equipMaintainTask.getId().toString());
maintenanceWindow.setStartTime(equipMaintainTask.getPlanStartTime()); maintenanceWindow.setStartTime(equipMaintainTask.getPlanStartTime());
maintenanceWindow.setEndTime(equipMaintainTask.getPlanFinishTime()); maintenanceWindow.setEndTime(equipMaintainTask.getPlanFinishTime());
maintenanceWindow.setEquipCode(equipMaintainTask.getEquipCode());
maintenanceWindow.setEquipName(equipMaintainTask.getEquipName());
maintenanceWindow.setReason(""); maintenanceWindow.setReason("");
maintenanceWindows.add(maintenanceWindow); maintenanceWindows.add(maintenanceWindow);
} }
...@@ -623,6 +625,8 @@ public class RoutingDataService { ...@@ -623,6 +625,8 @@ public class RoutingDataService {
maintenanceWindow.setId(equipMaintainTask.getId().toString()); maintenanceWindow.setId(equipMaintainTask.getId().toString());
maintenanceWindow.setStartTime(equipMaintainTask.getPlanStartTime()); maintenanceWindow.setStartTime(equipMaintainTask.getPlanStartTime());
maintenanceWindow.setEndTime(equipMaintainTask.getPlanFinishTime()); maintenanceWindow.setEndTime(equipMaintainTask.getPlanFinishTime());
maintenanceWindow.setEquipCode(equipMaintainTask.getEquipCode());
maintenanceWindow.setEquipName(equipMaintainTask.getEquipName());
maintenanceWindow.setReason(""); maintenanceWindow.setReason("");
maintenanceWindows.add(maintenanceWindow); maintenanceWindows.add(maintenanceWindow);
} }
......
...@@ -155,6 +155,9 @@ Integer newMachineId1=newMachineId.intValue(); ...@@ -155,6 +155,9 @@ Integer newMachineId1=newMachineId.intValue();
.findFirst().orElse(null); .findFirst().orElse(null);
if(machine!=null) if(machine!=null)
{ {
maintenanceWindow.setEquipCode(machine.getCode());
maintenanceWindow.setEquipName(machine.getName());
maintenanceWindow.setId(UUID.randomUUID().toString()); maintenanceWindow.setId(UUID.randomUUID().toString());
machine.getMaintenanceWindows().add(maintenanceWindow); machine.getMaintenanceWindows().add(maintenanceWindow);
......
...@@ -40,7 +40,7 @@ public interface LanuchService { ...@@ -40,7 +40,7 @@ public interface LanuchService {
ProdProcessExec createProcessExec(ProdLaunchOrder prodOrderMain, ProdProcessExec createProcessExec(ProdLaunchOrder prodOrderMain,
RoutingDetail detail, RoutingDetail detail,
String sceneId); String sceneId,List<RoutingDetailEquip> routingDetailEquip);
List<ProdEquipment> batchInsertEquipMent( List<ProdEquipment> batchInsertEquipMent(
List<RoutingDetailEquip> routingDetailEquips, List<RoutingDetailEquip> routingDetailEquips,
......
This diff is collapsed.
...@@ -6,6 +6,7 @@ import com.aps.common.util.SnowFlackIdWorker; ...@@ -6,6 +6,7 @@ import com.aps.common.util.SnowFlackIdWorker;
import com.aps.entity.*; import com.aps.entity.*;
import com.aps.entity.Algorithm.Chromosome; import com.aps.entity.Algorithm.Chromosome;
import com.aps.entity.Algorithm.GAScheduleResult; import com.aps.entity.Algorithm.GAScheduleResult;
import com.aps.entity.basic.Entry;
import com.aps.entity.basic.Order; import com.aps.entity.basic.Order;
import com.aps.mapper.RoutingDetailMapper; import com.aps.mapper.RoutingDetailMapper;
import com.aps.mapper.RoutingHeaderMapper; import com.aps.mapper.RoutingHeaderMapper;
...@@ -245,15 +246,15 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -245,15 +246,15 @@ public class LanuchServiceImpl implements LanuchService {
throw new RuntimeException("插入mes_order失败"); throw new RuntimeException("插入mes_order失败");
} }
List<ProdProcessExec> processExecList = prodProcessExecService.lambdaQuery() // List<ProdProcessExec> processExecList = prodProcessExecService.lambdaQuery()
.eq(ProdProcessExec::getSceneId, sceneId) // .eq(ProdProcessExec::getSceneId, sceneId)
.list(); // .list();
List<Entry> entrys= chromosome.getAllOperations();
// 遍历GAScheduleResult结果并转换为dispatch // 遍历GAScheduleResult结果并转换为dispatch
List<Dispatch> dispatches = new ArrayList<>(); List<Dispatch> dispatches = new ArrayList<>();
for (GAScheduleResult gaResult : chromosome.getResult()) { for (GAScheduleResult gaResult : chromosome.getResult()) {
ProdProcessExec prodProcessExec = processExecList.stream() Entry entry1 = entrys.stream()
.filter(processExec -> processExec.getExecId().equals(gaResult.getExecId())) .filter(entry -> entry.getExecId().equals(gaResult.getExecId()))
.findFirst() .findFirst()
.orElse(null); .orElse(null);
...@@ -267,10 +268,10 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -267,10 +268,10 @@ public class LanuchServiceImpl implements LanuchService {
dispatch.setEndTime(baseTime.plusSeconds(gaResult.getEndTime())); dispatch.setEndTime(baseTime.plusSeconds(gaResult.getEndTime()));
dispatch.setENof(gaResult.getOrderId()); dispatch.setENof(gaResult.getOrderId());
// 设置状态等其他字段 // 设置状态等其他字段
dispatch.setTaskSeq(prodProcessExec.getTaskSeq()); dispatch.setTaskSeq(entry1.getTaskSeq());
dispatch.setMesCode(gaResult.getOrderId()); dispatch.setMesCode(gaResult.getOrderId());
dispatch.setRoutingDetailId(prodProcessExec.getRoutingDetailId()); dispatch.setRoutingDetailId(entry1.getRoutingDetailId());
dispatch.setOpe(prodProcessExec.getRoutingDetailName()); dispatch.setOpe(entry1.getRoutingDetailName());
// 添加到列表中 // 添加到列表中
dispatches.add(dispatch); dispatches.add(dispatch);
} }
...@@ -619,7 +620,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -619,7 +620,7 @@ public class LanuchServiceImpl implements LanuchService {
List<RoutingDetail> routingDetails, List<RoutingDetail> routingDetails,
String sceneId, List<RoutingDetailEquip> routingDetailEquip) { String sceneId, List<RoutingDetailEquip> routingDetailEquip) {
List<ProdProcessExec> processExecList = routingDetails.stream() List<ProdProcessExec> processExecList = routingDetails.stream()
.map(detail -> createProcessExec(prodOrderMain, detail, sceneId)) .map(detail -> createProcessExec(prodOrderMain, detail, sceneId,routingDetailEquip))
.collect(Collectors.toList()); .collect(Collectors.toList());
batchInsertEquipMent(routingDetailEquip, sceneId,processExecList,true); batchInsertEquipMent(routingDetailEquip, sceneId,processExecList,true);
...@@ -645,7 +646,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -645,7 +646,7 @@ public class LanuchServiceImpl implements LanuchService {
*/ */
public ProdProcessExec createProcessExec(ProdLaunchOrder prodOrderMain, public ProdProcessExec createProcessExec(ProdLaunchOrder prodOrderMain,
RoutingDetail detail, RoutingDetail detail,
String sceneId) { String sceneId,List<RoutingDetailEquip> routingDetailEquip) {
ProdProcessExec prodProcessExec = new ProdProcessExec(); ProdProcessExec prodProcessExec = new ProdProcessExec();
prodProcessExec.setExecId(UUID.randomUUID().toString().replace("-", "")); prodProcessExec.setExecId(UUID.randomUUID().toString().replace("-", ""));
...@@ -653,7 +654,18 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -653,7 +654,18 @@ public class LanuchServiceImpl implements LanuchService {
prodProcessExec.setRoutingDetailId(detail.getId()); prodProcessExec.setRoutingDetailId(detail.getId());
prodProcessExec.setTaskSeq(detail.getTaskSeq()); prodProcessExec.setTaskSeq(detail.getTaskSeq());
prodProcessExec.setRoutingDetailName(detail.getName()); prodProcessExec.setRoutingDetailName(detail.getName());
prodProcessExec.setMachineId(detail.getEquipTypeId());
RoutingDetailEquip routingDetailEquip1 = routingDetailEquip.stream().
filter(detailEquip -> detailEquip.getRoutingDetailId().equals(detail.getId()))
.filter(detailEquip -> detailEquip.getType1() != null)
.filter(detailEquip -> detailEquip.getIsdeleted() == 0)
.findFirst()
.orElse(null);
prodProcessExec.setMachineId(routingDetailEquip1.getType1());
prodProcessExec.setRuntime(detail.getRuntime()); prodProcessExec.setRuntime(detail.getRuntime());
prodProcessExec.setSingleOut(detail.getSingleOut()); prodProcessExec.setSingleOut(detail.getSingleOut());
if (detail.getEquipTypeId() != null) if (detail.getEquipTypeId() != null)
......
...@@ -1725,6 +1725,8 @@ private GlobalParam InitGlobalParam() ...@@ -1725,6 +1725,8 @@ private GlobalParam InitGlobalParam()
maintenanceWindow.setStartTime(equipMaintainTask.getPlanStartTime()); maintenanceWindow.setStartTime(equipMaintainTask.getPlanStartTime());
maintenanceWindow.setEndTime(equipMaintainTask.getPlanFinishTime()); maintenanceWindow.setEndTime(equipMaintainTask.getPlanFinishTime());
maintenanceWindow.setReason(""); maintenanceWindow.setReason("");
maintenanceWindow.setEquipCode(equipMaintainTask.getEquipCode());
maintenanceWindow.setEquipName(equipMaintainTask.getEquipName());
maintenanceWindows.add(maintenanceWindow); maintenanceWindows.add(maintenanceWindow);
} }
...@@ -1881,4 +1883,62 @@ private GlobalParam InitGlobalParam() ...@@ -1881,4 +1883,62 @@ private GlobalParam InitGlobalParam()
} }
}
\ No newline at end of file
public List<Machine> InitCalendarToAllMachines3(Chromosome chromosome) {
List<Machine> machines = chromosome.getInitMachines();
Set<Long> machineIds = chromosome.getResult().stream()
.map(GAScheduleResult::getMachineId)
.collect(Collectors.toSet());
machines = machines.stream()
.filter(machine -> machineIds.contains(machine.getId()))
.collect(Collectors.toList());
for (Machine machine:machines) {
{
List<Shift> result = new ArrayList<>();
List<Shift> shifts = machine.getShifts();
for (Shift shift : shifts) {
// 处理跨天班次(开始时间晚于结束时间的情况,如 7:30 到 3:30)
if (shift.getEndTime().isBefore(shift.getStartTime())) {
// 创建第一天的班次 (开始时间到24:00)
Shift firstShift = new Shift();
firstShift.setStartTime(shift.getStartTime());
firstShift.setEndTime(LocalTime.of(23, 59, 59)); // 23:59:59代替24:00
firstShift.setDays(new HashSet<>(shift.getDays()));
firstShift.setStatus(shift.getStatus());
firstShift.setStartDate(shift.getStartDate());
firstShift.setEndDate(shift.getEndDate());
firstShift.setSpecial(shift.isSpecial());
// 创建第二天的班次 (00:00到结束时间)
Shift secondShift = new Shift();
secondShift.setStartTime(LocalTime.MIDNIGHT);
secondShift.setEndTime(shift.getEndTime());
secondShift.setDays(new HashSet<>(shift.getDays()));
secondShift.setStatus(shift.getStatus());
secondShift.setStartDate(shift.getStartDate().plusDays(1));
secondShift.setEndDate(shift.getEndDate().plusDays(1));
secondShift.setSpecial(shift.isSpecial());
result.add(firstShift);
result.add(secondShift);
} else {
// 正常班次直接添加
result.add(shift);
}
}
machine.setShifts(result);
}
}
return machines;
}
}
\ No newline at end of file
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