package com.ruoyi.common.core.service.dto; import java.io.Serializable; /** * 一条「循环任务组计划」的滚动结果({@link com.ruoyi.common.core.service.ScheduleRollPort#rollOneSchedule} 的返回)。 * *
* ServiceSubtask copy = JSON.parseObject(JSON.toJSONString(src), ServiceSubtask.class); * copy.setId(null); copy.setSenduuid(null); ... // 清 6 个字段 ** 而 {@code ServiceSubtask} 有 116 个字段。 * 如果在两个模块之间传"116 字段的 DTO"来做这件事,字段映射本身就是巨大风险面 —— * 而且这个风险换不来任何收益(全字段拷贝的语义由 JSON 序列化保证,不需要我们逐字段搬运)。 * *
所以第 9 步的切分方式是: *
本 DTO 只承载"用于日志与计数"的信息:原实现在滚动成功后打印 *
* log.info("[任务组-滚动] scheduleId={} 推进到第 {} 轮, 新建 {} 条 subtask", scheduleId, nextLoop, produced);
*
* 但那个方法返回的是 {@code boolean},调度侧拿不到 nextLoop / produced。
* 搬迁后用本 DTO 把这两个值带出来,让 inhospvisit 能打出与原实现完全相同的日志。
*/
public class VisitScheduleRollResultDto implements Serializable {
private static final long serialVersionUID = 1L;
/** 计划ID */
private Long scheduleId;
/** 滚动后推进到的轮次号(原实现里的 {@code nextLoop = currentLoop + 1}) */
private Long nextLoop;
/** 本轮新建的 subtask 条数(原实现里的 {@code produced}) */
private Integer produced;
/** 是否真的推进了(原方法返回的 boolean) */
private boolean rolled;
/** 未推进的原因(仅用于日志排查;推进成功时为 null) */
private String skipReason;
public static VisitScheduleRollResultDto skipped(Long scheduleId, String reason) {
VisitScheduleRollResultDto d = new VisitScheduleRollResultDto();
d.setScheduleId(scheduleId);
d.setRolled(false);
d.setSkipReason(reason);
return d;
}
public static VisitScheduleRollResultDto rolled(Long scheduleId, long nextLoop, int produced) {
VisitScheduleRollResultDto d = new VisitScheduleRollResultDto();
d.setScheduleId(scheduleId);
d.setNextLoop(nextLoop);
d.setProduced(produced);
d.setRolled(true);
return d;
}
public Long getScheduleId() {
return scheduleId;
}
public void setScheduleId(Long scheduleId) {
this.scheduleId = scheduleId;
}
public Long getNextLoop() {
return nextLoop;
}
public void setNextLoop(Long nextLoop) {
this.nextLoop = nextLoop;
}
public Integer getProduced() {
return produced;
}
public void setProduced(Integer produced) {
this.produced = produced;
}
public boolean isRolled() {
return rolled;
}
public void setRolled(boolean rolled) {
this.rolled = rolled;
}
public String getSkipReason() {
return skipReason;
}
public void setSkipReason(String skipReason) {
this.skipReason = skipReason;
}
}