diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/props/impl/PropsBackpackServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/props/impl/PropsBackpackServiceImpl.java index 295566a1..44b92c76 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/props/impl/PropsBackpackServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/props/impl/PropsBackpackServiceImpl.java @@ -12,6 +12,7 @@ import com.red.circle.tool.core.collection.CollectionUtils; import com.red.circle.tool.core.date.TimestampUtils; import java.sql.Timestamp; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.Map; @@ -38,6 +39,9 @@ import org.springframework.stereotype.Service; public class PropsBackpackServiceImpl extends BaseServiceImpl implements PropsBackpackService { + private static final Timestamp MYSQL_DATETIME_MAX = Timestamp.valueOf("2038-01-19 00:00:00"); + + private final PropsBackpackDAO propsBackpackDAO; @Override @@ -254,18 +258,28 @@ public class PropsBackpackServiceImpl extends } if (Objects.isNull(propsBackpack)) { + backpack.setExpireTime(capExpireTime(backpack.getExpireTime())); save(backpack); return; } propsBackpack.setUseProps(backpack.getUseProps()); propsBackpack.setAllowGive(backpack.getAllowGive()); -// propsBackpack.setExpireTime( -// getExpireTime(propsBackpack.getExpireTime(), backpack.getExpireTime())); + propsBackpack.setExpireTime(capExpireTime(backpack.getExpireTime())); propsBackpack.setExpireTime(backpack.getExpireTime()); updateSelectiveById(propsBackpack); } + /** + * 防止 expire_time 超出 MySQL DATETIME 上限 (2038-01-19 00:00:00) + */ + private Timestamp capExpireTime(Timestamp expireTime) { + if (expireTime == null) { + return null; + } + return expireTime.after(MYSQL_DATETIME_MAX) ? MYSQL_DATETIME_MAX : expireTime; + } + private Timestamp getExpireTime(Timestamp historyExpireTime, Timestamp appendExpireTime) { if (Objects.isNull(historyExpireTime) || historyExpireTime.before(TimestampUtils.now())) { return appendExpireTime;