Commit 632a132a6a9365c3a852cc6a3a6759fe3fc4f05d

Authored by xingyu4j
1 parent 2c1419fb

refactor: Date ==> LocalDateTime

Showing 324 changed files with 1137 additions and 997 deletions

Too many changes.

To preserve performance only 100 of 324 files are displayed.

yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
1 1 package cn.iocoder.yudao.framework.common.util.date;
2 2  
3 3 import cn.hutool.core.date.DateUtil;
  4 +import cn.hutool.core.date.LocalDateTimeUtil;
4 5  
5 6 import java.time.Duration;
  7 +import java.time.Instant;
  8 +import java.time.LocalDateTime;
  9 +import java.time.ZoneId;
  10 +import java.time.ZonedDateTime;
  11 +import java.time.temporal.ChronoUnit;
6 12 import java.util.Calendar;
7 13 import java.util.Date;
8 14  
... ... @@ -25,6 +31,22 @@ public class DateUtils {
25 31  
26 32 public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
27 33  
  34 + public static Date localDateTimeToDate(LocalDateTime date){
  35 + // 将此日期时间与时区相结合以创建 ZonedDateTime
  36 + ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault());
  37 + // 本地时间线LocalDateTime到即时时间线Instant时间戳
  38 + Instant instant = zonedDateTime.toInstant();
  39 + // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
  40 + return Date.from(instant);
  41 + }
  42 +
  43 + public static LocalDateTime dateToLocalDateTime(Date date){
  44 + // 转为时间戳
  45 + Instant instant = date.toInstant();
  46 + // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
  47 + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
  48 + }
  49 +
28 50 public static Date addTime(Duration duration) {
29 51 return new Date(System.currentTimeMillis() + duration.toMillis());
30 52 }
... ... @@ -33,6 +55,11 @@ public class DateUtils {
33 55 return System.currentTimeMillis() > time.getTime();
34 56 }
35 57  
  58 + public static boolean isExpired(LocalDateTime time) {
  59 + LocalDateTime now = LocalDateTime.now();
  60 + return now.isAfter(time);
  61 + }
  62 +
36 63 public static long diff(Date endTime, Date startTime) {
37 64 return endTime.getTime() - startTime.getTime();
38 65 }
... ... @@ -40,24 +67,28 @@ public class DateUtils {
40 67 /**
41 68 * 创建指定时间
42 69 *
43   - * @param year 年
44   - * @param mouth 月
45   - * @param day 日
  70 + * @param year 年
  71 + * @param mouth 月
  72 + * @param day 日
46 73 * @return 指定时间
47 74 */
48 75 public static Date buildTime(int year, int mouth, int day) {
49 76 return buildTime(year, mouth, day, 0, 0, 0);
50 77 }
51 78  
  79 + public static LocalDateTime buildLocalDateTime(int year, int mouth, int day) {
  80 + return buildLocalDateTime(year, mouth, day, 0, 0, 0);
  81 + }
  82 +
52 83 /**
53 84 * 创建指定时间
54 85 *
55   - * @param year 年
56   - * @param mouth 月
57   - * @param day 日
58   - * @param hour 小时
59   - * @param minute 分钟
60   - * @param second 秒
  86 + * @param year 年
  87 + * @param mouth 月
  88 + * @param day 日
  89 + * @param hour 小时
  90 + * @param minute 分钟
  91 + * @param second 秒
61 92 * @return 指定时间
62 93 */
63 94 public static Date buildTime(int year, int mouth, int day,
... ... @@ -73,6 +104,19 @@ public class DateUtils {
73 104 return calendar.getTime();
74 105 }
75 106  
  107 + public static LocalDateTime buildLocalDateTime(int year, int mouth, int day,
  108 + int hour, int minute, int second) {
  109 + Calendar calendar = Calendar.getInstance();
  110 + calendar.set(Calendar.YEAR, year);
  111 + calendar.set(Calendar.MONTH, mouth - 1);
  112 + calendar.set(Calendar.DAY_OF_MONTH, day);
  113 + calendar.set(Calendar.HOUR_OF_DAY, hour);
  114 + calendar.set(Calendar.MINUTE, minute);
  115 + calendar.set(Calendar.SECOND, second);
  116 + calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒
  117 + return dateToLocalDateTime(calendar.getTime());
  118 + }
  119 +
76 120 public static Date max(Date a, Date b) {
77 121 if (a == null) {
78 122 return b;
... ... @@ -83,6 +127,16 @@ public class DateUtils {
83 127 return a.compareTo(b) > 0 ? a : b;
84 128 }
85 129  
  130 + public static LocalDateTime maxLocalDateTime(LocalDateTime a, LocalDateTime b) {
  131 + if (a == null) {
  132 + return b;
  133 + }
  134 + if (b == null) {
  135 + return a;
  136 + }
  137 + return a.compareTo(b) > 0 ? a : b;
  138 + }
  139 +
86 140 public static boolean beforeNow(Date date) {
87 141 return date.getTime() < System.currentTimeMillis();
88 142 }
... ... @@ -91,6 +145,10 @@ public class DateUtils {
91 145 return date.getTime() >= System.currentTimeMillis();
92 146 }
93 147  
  148 + public static boolean afterNow(LocalDateTime localDateTime) {
  149 + return localDateTime.isAfter(LocalDateTime.now());
  150 + }
  151 +
94 152 /**
95 153 * 计算当期时间相差的日期
96 154 *
... ... @@ -135,4 +193,14 @@ public class DateUtils {
135 193 return DateUtil.isSameDay(date, new Date());
136 194 }
137 195  
  196 + /**
  197 + * 是否今天
  198 + *
  199 + * @param date 日期
  200 + * @return 是否
  201 + */
  202 + public static boolean isToday(LocalDateTime date) {
  203 + return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now());
  204 + }
  205 +
138 206 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-error-code/src/main/java/cn/iocoder/yudao/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java
... ... @@ -10,7 +10,7 @@ import org.springframework.boot.context.event.ApplicationReadyEvent;
10 10 import org.springframework.context.event.EventListener;
11 11 import org.springframework.scheduling.annotation.Scheduled;
12 12  
13   -import java.util.Date;
  13 +import java.time.LocalDateTime;
14 14 import java.util.List;
15 15  
16 16 /**
... ... @@ -41,7 +41,7 @@ public class ErrorCodeLoaderImpl implements ErrorCodeLoader {
41 41 /**
42 42 * 缓存错误码的最大更新时间,用于后续的增量轮询,判断是否有更新
43 43 */
44   - private Date maxUpdateTime;
  44 + private LocalDateTime maxUpdateTime;
45 45  
46 46 @EventListener(ApplicationReadyEvent.class)
47 47 public void loadErrorCodes() {
... ... @@ -66,7 +66,7 @@ public class ErrorCodeLoaderImpl implements ErrorCodeLoader {
66 66 // 写入到错误码的缓存
67 67 putErrorCode(errorCodeRespDTO.getCode(), errorCodeRespDTO.getMessage());
68 68 // 记录下更新时间,方便增量更新
69   - maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeRespDTO.getUpdateTime());
  69 + maxUpdateTime = DateUtils.maxLocalDateTime(maxUpdateTime, errorCodeRespDTO.getUpdateTime());
70 70 });
71 71 }
72 72  
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/aop/OperateLogAspect.java
1 1 package cn.iocoder.yudao.framework.operatelog.core.aop;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import cn.hutool.core.exceptions.ExceptionUtil;
4 5 import cn.hutool.core.util.ArrayUtil;
5 6 import cn.hutool.core.util.StrUtil;
... ... @@ -32,6 +33,7 @@ import javax.servlet.http.HttpServletRequest;
32 33 import javax.servlet.http.HttpServletResponse;
33 34 import java.lang.annotation.Annotation;
34 35 import java.lang.reflect.Array;
  36 +import java.time.LocalDateTime;
35 37 import java.util.*;
36 38 import java.util.function.Predicate;
37 39 import java.util.stream.IntStream;
... ... @@ -94,7 +96,7 @@ public class OperateLogAspect {
94 96 }
95 97  
96 98 // 记录开始时间
97   - Date startTime = new Date();
  99 + LocalDateTime startTime = LocalDateTime.now();
98 100 try {
99 101 // 执行原有方法
100 102 Object result = joinPoint.proceed();
... ... @@ -128,7 +130,7 @@ public class OperateLogAspect {
128 130 private void log(ProceedingJoinPoint joinPoint,
129 131 cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
130 132 ApiOperation apiOperation,
131   - Date startTime, Object result, Throwable exception) {
  133 + LocalDateTime startTime, Object result, Throwable exception) {
132 134 try {
133 135 // 判断不记录的情况
134 136 if (!isLogEnable(joinPoint, operateLog)) {
... ... @@ -145,7 +147,7 @@ public class OperateLogAspect {
145 147 private void log0(ProceedingJoinPoint joinPoint,
146 148 cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
147 149 ApiOperation apiOperation,
148   - Date startTime, Object result, Throwable exception) {
  150 + LocalDateTime startTime, Object result, Throwable exception) {
149 151 OperateLog operateLogObj = new OperateLog();
150 152 // 补全通用字段
151 153 operateLogObj.setTraceId(TracerUtils.getTraceId());
... ... @@ -226,7 +228,7 @@ public class OperateLogAspect {
226 228 private static void fillMethodFields(OperateLog operateLogObj,
227 229 ProceedingJoinPoint joinPoint,
228 230 cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
229   - Date startTime, Object result, Throwable exception) {
  231 + LocalDateTime startTime, Object result, Throwable exception) {
230 232 MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
231 233 operateLogObj.setJavaMethod(methodSignature.toString());
232 234 if (operateLog == null || operateLog.logArgs()) {
... ... @@ -235,7 +237,7 @@ public class OperateLogAspect {
235 237 if (operateLog == null || operateLog.logResultData()) {
236 238 operateLogObj.setResultData(obtainResultData(result));
237 239 }
238   - operateLogObj.setDuration((int) (System.currentTimeMillis() - startTime.getTime()));
  240 + operateLogObj.setDuration((int) (LocalDateTimeUtil.between(startTime, LocalDateTime.now()).toMillis()));
239 241 // (正常)处理 resultCode 和 resultMsg 字段
240 242 if (result instanceof CommonResult) {
241 243 CommonResult<?> commonResult = (CommonResult<?>) result;
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/OperateLog.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.framework.operatelog.core.service;
2 2  
3 3 import lombok.Data;
4 4  
5   -import java.util.Date;
  5 +import java.time.LocalDateTime;
6 6 import java.util.Map;
7 7  
8 8 /**
... ... @@ -85,7 +85,7 @@ public class OperateLog {
85 85 /**
86 86 * 开始时间
87 87 */
88   - private Date startTime;
  88 + private LocalDateTime startTime;
89 89  
90 90 /**
91 91 * 执行时长,单位:毫秒
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderNotifyRespDTO.java
... ... @@ -5,7 +5,7 @@ import lombok.Builder;
5 5 import lombok.Data;
6 6 import lombok.NoArgsConstructor;
7 7  
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 /**
11 11 * 支付通知 Response DTO
... ... @@ -33,7 +33,7 @@ public class PayOrderNotifyRespDTO {
33 33 /**
34 34 * 支付成功时间
35 35 */
36   - private Date successTime;
  36 + private LocalDateTime successTime;
37 37  
38 38 /**
39 39 * 通知的原始数据
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderUnifiedReqDTO.java
... ... @@ -7,7 +7,7 @@ import org.hibernate.validator.constraints.URL;
7 7 import javax.validation.constraints.DecimalMin;
8 8 import javax.validation.constraints.NotEmpty;
9 9 import javax.validation.constraints.NotNull;
10   -import java.util.Date;
  10 +import java.time.LocalDateTime;
11 11 import java.util.Map;
12 12  
13 13 /**
... ... @@ -68,7 +68,7 @@ public class PayOrderUnifiedReqDTO {
68 68 * 支付过期时间
69 69 */
70 70 @NotNull(message = "支付过期时间不能为空")
71   - private Date expireTime;
  71 + private LocalDateTime expireTime;
72 72  
73 73 // ========== 拓展参数 ==========
74 74 /**
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayRefundNotifyDTO.java
... ... @@ -5,7 +5,7 @@ import lombok.Builder;
5 5 import lombok.Data;
6 6 import lombok.ToString;
7 7  
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 /**
11 11 * 从渠道返回数据中解析得到的支付退款通知的Notify DTO
... ... @@ -57,7 +57,7 @@ public class PayRefundNotifyDTO {
57 57 /**
58 58 * 退款成功时间
59 59 */
60   - private Date refundSuccessTime;
  60 + private LocalDateTime refundSuccessTime;
61 61  
62 62  
63 63 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AbstractAlipayClient.java
1 1 package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
2 2  
3 3 import cn.hutool.core.bean.BeanUtil;
4   -import cn.hutool.core.date.DateUtil;
5   -import cn.hutool.http.HttpUtil;
  4 +import cn.hutool.core.date.LocalDateTimeUtil;
6 5 import cn.iocoder.yudao.framework.pay.core.client.AbstractPayCodeMapping;
7 6 import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
8 7 import cn.iocoder.yudao.framework.pay.core.client.dto.*;
... ... @@ -61,7 +60,7 @@ public abstract class AbstractAlipayClient extends AbstractPayClient&lt;AlipayPayCl
61 60 return PayOrderNotifyRespDTO.builder().orderExtensionNo(params.get("out_trade_no"))
62 61 .channelOrderNo(params.get("trade_no")).channelUserId(params.get("seller_id"))
63 62 .tradeStatus(params.get("trade_status"))
64   - .successTime(DateUtil.parse(params.get("notify_time"), "yyyy-MM-dd HH:mm:ss"))
  63 + .successTime(LocalDateTimeUtil.parse(params.get("notify_time"), "yyyy-MM-dd HH:mm:ss"))
65 64 .data(data.getBody()).build();
66 65 }
67 66  
... ... @@ -72,7 +71,7 @@ public abstract class AbstractAlipayClient extends AbstractPayClient&lt;AlipayPayCl
72 71 .tradeNo(params.get("out_trade_no"))
73 72 .reqNo(params.get("out_biz_no"))
74 73 .status(PayNotifyRefundStatusEnum.SUCCESS)
75   - .refundSuccessTime(DateUtil.parse(params.get("gmt_refund"), "yyyy-MM-dd HH:mm:ss"))
  74 + .refundSuccessTime(LocalDateTimeUtil.parse(params.get("gmt_refund"), "yyyy-MM-dd HH:mm:ss"))
76 75 .build();
77 76 return notifyDTO;
78 77 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXLitePayClient.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
2 2  
3 3 import cn.hutool.core.bean.BeanUtil;
4 4 import cn.hutool.core.date.DateUtil;
  5 +import cn.hutool.core.date.LocalDateTimeUtil;
5 6 import cn.hutool.core.lang.Assert;
6 7 import cn.hutool.core.map.MapUtil;
7 8 import cn.hutool.core.util.StrUtil;
... ... @@ -167,7 +168,7 @@ public class WXLitePayClient extends AbstractPayClient&lt;WXPayClientConfig&gt; {
167 168 .builder()
168 169 .orderExtensionNo(result.getOutTradeNo())
169 170 .channelOrderNo(result.getTradeState())
170   - .successTime(DateUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
  171 + .successTime(LocalDateTimeUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
171 172 .data(data.getBody())
172 173 .build();
173 174 }
... ... @@ -181,7 +182,7 @@ public class WXLitePayClient extends AbstractPayClient&lt;WXPayClientConfig&gt; {
181 182 .orderExtensionNo(notifyResult.getOutTradeNo())
182 183 .channelOrderNo(notifyResult.getTransactionId())
183 184 .channelUserId(notifyResult.getOpenid())
184   - .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
  185 + .successTime(LocalDateTimeUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
185 186 .data(data.getBody())
186 187 .build();
187 188  
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXNativePayClient.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
2 2  
3 3 import cn.hutool.core.bean.BeanUtil;
4 4 import cn.hutool.core.date.DateUtil;
  5 +import cn.hutool.core.date.LocalDateTimeUtil;
5 6 import cn.hutool.core.lang.Assert;
6 7 import cn.hutool.core.util.StrUtil;
7 8 import cn.iocoder.yudao.framework.common.util.io.FileUtils;
... ... @@ -150,7 +151,7 @@ public class WXNativePayClient extends AbstractPayClient&lt;WXPayClientConfig&gt; {
150 151 .builder()
151 152 .orderExtensionNo(result.getOutTradeNo())
152 153 .channelOrderNo(result.getTradeState())
153   - .successTime(DateUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
  154 + .successTime(LocalDateTimeUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
154 155 .data(data.getBody())
155 156 .build();
156 157 }
... ... @@ -164,7 +165,7 @@ public class WXNativePayClient extends AbstractPayClient&lt;WXPayClientConfig&gt; {
164 165 .orderExtensionNo(notifyResult.getOutTradeNo())
165 166 .channelOrderNo(notifyResult.getTransactionId())
166 167 .channelUserId(notifyResult.getOpenid())
167   - .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
  168 + .successTime(LocalDateTimeUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
168 169 .data(data.getBody())
169 170 .build();
170 171  
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPubPayClient.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
2 2  
3 3 import cn.hutool.core.bean.BeanUtil;
4 4 import cn.hutool.core.date.DateUtil;
  5 +import cn.hutool.core.date.LocalDateTimeUtil;
5 6 import cn.hutool.core.lang.Assert;
6 7 import cn.hutool.core.map.MapUtil;
7 8 import cn.hutool.core.util.StrUtil;
... ... @@ -161,7 +162,7 @@ public class WXPubPayClient extends AbstractPayClient&lt;WXPayClientConfig&gt; {
161 162 .builder()
162 163 .orderExtensionNo(result.getOutTradeNo())
163 164 .channelOrderNo(result.getTradeState())
164   - .successTime(DateUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
  165 + .successTime(LocalDateTimeUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
165 166 .data(data.getBody())
166 167 .build();
167 168 }
... ... @@ -175,7 +176,7 @@ public class WXPubPayClient extends AbstractPayClient&lt;WXPayClientConfig&gt; {
175 176 .orderExtensionNo(notifyResult.getOutTradeNo())
176 177 .channelOrderNo(notifyResult.getTransactionId())
177 178 .channelUserId(notifyResult.getOpenid())
178   - .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
  179 + .successTime(LocalDateTimeUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
179 180 .data(data.getBody())
180 181 .build();
181 182  
... ...
yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/dto/SmsReceiveRespDTO.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.framework.sms.core.client.dto;
2 2  
3 3 import lombok.Data;
4 4  
5   -import java.util.Date;
  5 +import java.time.LocalDateTime;
6 6  
7 7 /**
8 8 * 消息接收 Response DTO
... ... @@ -32,7 +32,7 @@ public class SmsReceiveRespDTO {
32 32 /**
33 33 * 用户接收时间
34 34 */
35   - private Date receiveTime;
  35 + private LocalDateTime receiveTime;
36 36  
37 37 /**
38 38 * 短信 API 发送返回的序号
... ...
yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/aliyun/AliyunSmsClient.java
... ... @@ -28,7 +28,7 @@ import com.google.common.annotations.VisibleForTesting;
28 28 import lombok.Data;
29 29 import lombok.extern.slf4j.Slf4j;
30 30  
31   -import java.util.Date;
  31 +import java.time.LocalDateTime;
32 32 import java.util.List;
33 33 import java.util.Objects;
34 34 import java.util.function.Function;
... ... @@ -166,13 +166,13 @@ public class AliyunSmsClient extends AbstractSmsClient {
166 166 */
167 167 @JsonProperty("send_time")
168 168 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
169   - private Date sendTime;
  169 + private LocalDateTime sendTime;
170 170 /**
171 171 * 状态报告时间
172 172 */
173 173 @JsonProperty("report_time")
174 174 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
175   - private Date reportTime;
  175 + private LocalDateTime reportTime;
176 176 /**
177 177 * 是否接收成功
178 178 */
... ...
yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/tencent/TencentSmsClient.java
... ... @@ -22,7 +22,7 @@ import com.tencentcloudapi.sms.v20210111.SmsClient;
22 22 import com.tencentcloudapi.sms.v20210111.models.*;
23 23 import lombok.Data;
24 24  
25   -import java.util.Date;
  25 +import java.time.LocalDateTime;
26 26 import java.util.List;
27 27 import java.util.function.Function;
28 28 import java.util.function.Supplier;
... ... @@ -240,7 +240,7 @@ public class TencentSmsClient extends AbstractSmsClient {
240 240 */
241 241 @JsonProperty("user_receive_time")
242 242 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
243   - private Date receiveTime;
  243 + private LocalDateTime receiveTime;
244 244  
245 245 /**
246 246 * 国家(或地区)码
... ...
yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/yunpian/YunpianSmsClient.java
... ... @@ -23,6 +23,7 @@ import com.yunpian.sdk.model.Template;
23 23 import lombok.Data;
24 24 import lombok.extern.slf4j.Slf4j;
25 25  
  26 +import java.time.LocalDateTime;
26 27 import java.util.*;
27 28 import java.util.function.Function;
28 29 import java.util.function.Supplier;
... ... @@ -198,7 +199,7 @@ public class YunpianSmsClient extends AbstractSmsClient {
198 199 */
199 200 @JsonProperty("user_receive_time")
200 201 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
201   - private Date userReceiveTime;
  202 + private LocalDateTime userReceiveTime;
202 203  
203 204 }
204 205  
... ...
yudao-framework/yudao-spring-boot-starter-biz-sms/src/test/java/cn/iocoder/yudao/framework/sms/core/client/impl/aliyun/AliyunSmsClientTest.java
... ... @@ -125,7 +125,7 @@ public class AliyunSmsClientTest extends BaseMockitoUnitTest {
125 125 assertEquals("DELIVERED", statuses.get(0).getErrorCode());
126 126 assertEquals("用户接收成功", statuses.get(0).getErrorMsg());
127 127 assertEquals("13900000001", statuses.get(0).getMobile());
128   - assertEquals(DateUtils.buildTime(2017, 2, 2, 22, 23, 24), statuses.get(0).getReceiveTime());
  128 + assertEquals(DateUtils.buildLocalDateTime(2017, 2, 2, 22, 23, 24), statuses.get(0).getReceiveTime());
129 129 assertEquals("12345", statuses.get(0).getSerialNo());
130 130 assertEquals(67890L, statuses.get(0).getLogId());
131 131 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-sms/src/test/java/cn/iocoder/yudao/framework/sms/core/client/impl/tencent/TencentSmsClientTest.java
... ... @@ -146,7 +146,7 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest {
146 146 assertEquals("DELIVRD", statuses.get(0).getErrorCode());
147 147 assertEquals("用户短信送达成功", statuses.get(0).getErrorMsg());
148 148 assertEquals("13900000001", statuses.get(0).getMobile());
149   - assertEquals(DateUtils.buildTime(2015, 10, 17, 8, 3, 4), statuses.get(0).getReceiveTime());
  149 + assertEquals(DateUtils.buildLocalDateTime(2015, 10, 17, 8, 3, 4), statuses.get(0).getReceiveTime());
150 150 assertEquals("12345", statuses.get(0).getSerialNo());
151 151 assertEquals(67890L, statuses.get(0).getLogId());
152 152 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-sms/src/test/java/cn/iocoder/yudao/framework/sms/core/client/impl/yunpian/YunpianSmsClientTest.java
... ... @@ -115,7 +115,7 @@ public class YunpianSmsClientTest extends BaseMockitoUnitTest {
115 115 assertEquals("", statuses.get(0).getErrorCode());
116 116 assertNull(statuses.get(0).getErrorMsg());
117 117 assertEquals("15205201314", statuses.get(0).getMobile());
118   - assertEquals(DateUtils.buildTime(2014, 3, 17, 22, 55, 21), statuses.get(0).getReceiveTime());
  118 + assertEquals(DateUtils.buildLocalDateTime(2014, 3, 17, 22, 55, 21), statuses.get(0).getReceiveTime());
119 119 assertEquals("9527", statuses.get(0).getSerialNo());
120 120 assertEquals(1024L, statuses.get(0).getLogId());
121 121 }
... ...
yudao-framework/yudao-spring-boot-starter-config/src/main/java/cn/iocoder/yudao/framework/apollo/internals/ConfigFrameworkDAO.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.framework.apollo.internals;
2 2  
3 3 import cn.iocoder.yudao.framework.apollo.internals.dto.ConfigRespDTO;
4 4  
5   -import java.util.Date;
  5 +import java.time.LocalDateTime;
6 6 import java.util.List;
7 7  
8 8 /**
... ... @@ -20,7 +20,7 @@ public interface ConfigFrameworkDAO {
20 20 * @param maxUpdateTime 最大更新时间
21 21 * @return 是否存在
22 22 */
23   - int selectCountByUpdateTimeGt(Date maxUpdateTime);
  23 + int selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
24 24  
25 25 /**
26 26 * 查询配置列表
... ...
yudao-framework/yudao-spring-boot-starter-config/src/main/java/cn/iocoder/yudao/framework/apollo/internals/DBConfigRepository.java
... ... @@ -18,8 +18,8 @@ import lombok.SneakyThrows;
18 18 import lombok.extern.slf4j.Slf4j;
19 19  
20 20 import java.lang.reflect.Constructor;
  21 +import java.time.LocalDateTime;
21 22 import java.util.Comparator;
22   -import java.util.Date;
23 23 import java.util.List;
24 24 import java.util.Properties;
25 25 import java.util.concurrent.Executors;
... ... @@ -48,7 +48,7 @@ public class DBConfigRepository extends AbstractConfigRepository {
48 48 /**
49 49 * 缓存配置的最大更新时间,用于后续的增量轮询,判断是否有更新
50 50 */
51   - private volatile Date maxUpdateTime;
  51 + private volatile LocalDateTime maxUpdateTime;
52 52  
53 53 /**
54 54 * 配置读取 DAO
... ... @@ -166,7 +166,7 @@ public class DBConfigRepository extends AbstractConfigRepository {
166 166 * @param maxUpdateTime 当前配置的最大更新时间
167 167 * @return 配置列表
168 168 */
169   - private List<ConfigRespDTO> loadConfigIfUpdate(Date maxUpdateTime) {
  169 + private List<ConfigRespDTO> loadConfigIfUpdate(LocalDateTime maxUpdateTime) {
170 170 // 第一步,判断是否要更新。
171 171 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
172 172 log.info("[loadConfigIfUpdate][首次加载全量配置]");
... ...
yudao-framework/yudao-spring-boot-starter-config/src/main/java/cn/iocoder/yudao/framework/apollo/internals/dto/ConfigRespDTO.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.framework.apollo.internals.dto;
2 2  
3 3 import lombok.Data;
4 4  
5   -import java.util.Date;
  5 +import java.time.LocalDateTime;
6 6  
7 7 /**
8 8 * 配置 Response DTO
... ... @@ -28,6 +28,6 @@ public class ConfigRespDTO {
28 28 /**
29 29 * 更新时间
30 30 */
31   - private Date updateTime;
  31 + private LocalDateTime updateTime;
32 32  
33 33 }
... ...
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/handler/JobHandlerInvoker.java
1 1 package cn.iocoder.yudao.framework.quartz.core.handler;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import cn.hutool.core.lang.Assert;
4 5 import cn.hutool.core.thread.ThreadUtil;
5 6 import cn.iocoder.yudao.framework.quartz.core.enums.JobDataKeyEnum;
... ... @@ -13,10 +14,10 @@ import org.springframework.context.ApplicationContext;
13 14 import org.springframework.scheduling.quartz.QuartzJobBean;
14 15  
15 16 import javax.annotation.Resource;
16   -import java.util.Date;
  17 +import java.time.LocalDateTime;
  18 +import java.time.temporal.ChronoUnit;
17 19  
18 20 import static cn.hutool.core.exceptions.ExceptionUtil.getRootCauseMessage;
19   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.diff;
20 21  
21 22 /**
22 23 * 基础 Job 调用者,负责调用 {@link JobHandler#execute(String)} 执行任务
... ... @@ -46,7 +47,7 @@ public class JobHandlerInvoker extends QuartzJobBean {
46 47  
47 48 // 第二步,执行任务
48 49 Long jobLogId = null;
49   - Date startTime = new Date();
  50 + LocalDateTime startTime = LocalDateTime.now();
50 51 String data = null;
51 52 Throwable exception = null;
52 53 try {
... ... @@ -73,9 +74,9 @@ public class JobHandlerInvoker extends QuartzJobBean {
73 74 return jobHandler.execute(jobHandlerParam);
74 75 }
75 76  
76   - private void updateJobLogResultAsync(Long jobLogId, Date startTime, String data, Throwable exception,
  77 + private void updateJobLogResultAsync(Long jobLogId, LocalDateTime startTime, String data, Throwable exception,
77 78 JobExecutionContext executionContext) {
78   - Date endTime = new Date();
  79 + LocalDateTime endTime = LocalDateTime.now();
79 80 // 处理是否成功
80 81 boolean success = exception == null;
81 82 if (!success) {
... ... @@ -83,7 +84,7 @@ public class JobHandlerInvoker extends QuartzJobBean {
83 84 }
84 85 // 更新日志
85 86 try {
86   - jobLogFrameworkService.updateJobLogResultAsync(jobLogId, endTime, (int) diff(endTime, startTime), success, data);
  87 + jobLogFrameworkService.updateJobLogResultAsync(jobLogId, endTime, (int) LocalDateTimeUtil.between(startTime, endTime).toMillis(), success, data);
87 88 } catch (Exception ex) {
88 89 log.error("[executeInternal][Job({}) logId({}) 记录执行日志失败({}/{})]",
89 90 executionContext.getJobDetail().getKey(), jobLogId, success, data);
... ...
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/service/JobLogFrameworkService.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.framework.quartz.core.service;
2 2  
3 3 import javax.validation.constraints.NotEmpty;
4 4 import javax.validation.constraints.NotNull;
5   -import java.util.Date;
  5 +import java.time.LocalDateTime;
6 6  
7 7 /**
8 8 * Job 日志 Framework Service 接口
... ... @@ -22,7 +22,7 @@ public interface JobLogFrameworkService {
22 22 * @return Job 日志的编号
23 23 */
24 24 Long createJobLog(@NotNull(message = "任务编号不能为空") Long jobId,
25   - @NotNull(message = "开始时间") Date beginTime,
  25 + @NotNull(message = "开始时间") LocalDateTime beginTime,
26 26 @NotEmpty(message = "Job 处理器的名字不能为空") String jobHandlerName,
27 27 String jobHandlerParam,
28 28 @NotNull(message = "第几次执行不能为空") Integer executeIndex);
... ... @@ -37,7 +37,7 @@ public interface JobLogFrameworkService {
37 37 * @param result 成功数据
38 38 */
39 39 void updateJobLogResultAsync(@NotNull(message = "日志编号不能为空") Long logId,
40   - @NotNull(message = "结束时间不能为空") Date endTime,
  40 + @NotNull(message = "结束时间不能为空") LocalDateTime endTime,
41 41 @NotNull(message = "运行时长不能为空") Integer duration,
42 42 boolean success, String result);
43 43  
... ...
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/util/CronUtils.java
1 1 package cn.iocoder.yudao.framework.quartz.core.util;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import org.quartz.CronExpression;
4 5  
5 6 import java.text.ParseException;
  7 +import java.time.LocalDateTime;
6 8 import java.util.ArrayList;
7 9 import java.util.Date;
8 10 import java.util.List;
... ... @@ -31,7 +33,7 @@ public class CronUtils {
31 33 * @param n 数量
32 34 * @return 满足条件的执行时间
33 35 */
34   - public static List<Date> getNextTimes(String cronExpression, int n) {
  36 + public static List<LocalDateTime> getNextTimes(String cronExpression, int n) {
35 37 // 获得 CronExpression 对象
36 38 CronExpression cron;
37 39 try {
... ... @@ -41,10 +43,10 @@ public class CronUtils {
41 43 }
42 44 // 从当前开始计算,n 个满足条件的
43 45 Date now = new Date();
44   - List<Date> nextTimes = new ArrayList<>(n);
  46 + List<LocalDateTime> nextTimes = new ArrayList<>(n);
45 47 for (int i = 0; i < n; i++) {
46 48 Date nextTime = cron.getNextValidTimeAfter(now);
47   - nextTimes.add(nextTime);
  49 + nextTimes.add(LocalDateTimeUtil.of(nextTime));
48 50 // 切换现在,为下一个触发时间;
49 51 now = nextTime;
50 52 }
... ...
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java
... ... @@ -7,7 +7,7 @@ import lombok.Data;
7 7 import org.apache.ibatis.type.JdbcType;
8 8  
9 9 import java.io.Serializable;
10   -import java.util.Date;
  10 +import java.time.LocalDateTime;
11 11  
12 12 /**
13 13 * 基础实体对象
... ... @@ -21,12 +21,12 @@ public abstract class BaseDO implements Serializable {
21 21 * 创建时间
22 22 */
23 23 @TableField(fill = FieldFill.INSERT)
24   - private Date createTime;
  24 + private LocalDateTime createTime;
25 25 /**
26 26 * 最后更新时间
27 27 */
28 28 @TableField(fill = FieldFill.INSERT_UPDATE)
29   - private Date updateTime;
  29 + private LocalDateTime updateTime;
30 30 /**
31 31 * 创建者,目前使用 SysUser 的 id 编号
32 32 *
... ...
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java
... ... @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
5 5 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
6 6 import org.apache.ibatis.reflection.MetaObject;
7 7  
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9 import java.util.Objects;
10 10  
11 11 /**
... ... @@ -22,7 +22,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
22 22 if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseDO) {
23 23 BaseDO baseDO = (BaseDO) metaObject.getOriginalObject();
24 24  
25   - Date current = new Date();
  25 + LocalDateTime current = LocalDateTime.now();
26 26 // 创建时间为空,则以当前时间为插入时间
27 27 if (Objects.isNull(baseDO.getCreateTime())) {
28 28 baseDO.setCreateTime(current);
... ... @@ -49,7 +49,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
49 49 // 更新时间为空,则以当前时间为更新时间
50 50 Object modifyTime = getFieldValByName("updateTime", metaObject);
51 51 if (Objects.isNull(modifyTime)) {
52   - setFieldValByName("updateTime", new Date(), metaObject);
  52 + setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
53 53 }
54 54  
55 55 // 当前登录用户不为空,更新人为空,则当前登录用户为更新人
... ...
yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java
1 1 package cn.iocoder.yudao.framework.test.core.util;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import cn.hutool.core.util.ArrayUtil;
4 5 import cn.hutool.core.util.RandomUtil;
5 6 import cn.hutool.core.util.StrUtil;
... ... @@ -8,6 +9,7 @@ import uk.co.jemos.podam.api.PodamFactory;
8 9 import uk.co.jemos.podam.api.PodamFactoryImpl;
9 10  
10 11 import java.lang.reflect.Type;
  12 +import java.time.LocalDateTime;
11 13 import java.util.Arrays;
12 14 import java.util.Date;
13 15 import java.util.List;
... ... @@ -76,6 +78,10 @@ public class RandomUtils {
76 78 return RandomUtil.randomDay(0, RANDOM_DATE_MAX);
77 79 }
78 80  
  81 + public static LocalDateTime randomLocalDateTime() {
  82 + return LocalDateTimeUtil.of(randomDate());
  83 + }
  84 +
79 85 public static Short randomShort() {
80 86 return (short) RandomUtil.randomInt(0, Short.MAX_VALUE);
81 87 }
... ...
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java
1 1 package cn.iocoder.yudao.framework.apilog.core.filter;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import cn.hutool.core.exceptions.ExceptionUtil;
4 5 import cn.hutool.core.map.MapUtil;
5 6 import cn.hutool.extra.servlet.ServletUtil;
... ... @@ -7,7 +8,6 @@ import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLog;
7 8 import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService;
8 9 import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
9 10 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
10   -import cn.iocoder.yudao.framework.common.util.date.DateUtils;
11 11 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
12 12 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
13 13 import cn.iocoder.yudao.framework.web.config.WebProperties;
... ... @@ -20,7 +20,8 @@ import javax.servlet.ServletException;
20 20 import javax.servlet.http.HttpServletRequest;
21 21 import javax.servlet.http.HttpServletResponse;
22 22 import java.io.IOException;
23   -import java.util.Date;
  23 +import java.time.LocalDateTime;
  24 +import java.time.temporal.ChronoUnit;
24 25 import java.util.Map;
25 26  
26 27 import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
... ... @@ -47,7 +48,7 @@ public class ApiAccessLogFilter extends ApiRequestFilter {
47 48 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
48 49 throws ServletException, IOException {
49 50 // 获得开始时间
50   - Date beginTim = new Date();
  51 + LocalDateTime beginTime = LocalDateTime.now();
51 52 // 提前获得参数,避免 XssFilter 过滤处理
52 53 Map<String, String> queryString = ServletUtil.getParamMap(request);
53 54 String requestBody = ServletUtils.isJsonRequest(request) ? ServletUtil.getBody(request) : null;
... ... @@ -56,15 +57,15 @@ public class ApiAccessLogFilter extends ApiRequestFilter {
56 57 // 继续过滤器
57 58 filterChain.doFilter(request, response);
58 59 // 正常执行,记录日志
59   - createApiAccessLog(request, beginTim, queryString, requestBody, null);
  60 + createApiAccessLog(request, beginTime, queryString, requestBody, null);
60 61 } catch (Exception ex) {
61 62 // 异常执行,记录日志
62   - createApiAccessLog(request, beginTim, queryString, requestBody, ex);
  63 + createApiAccessLog(request, beginTime, queryString, requestBody, ex);
63 64 throw ex;
64 65 }
65 66 }
66 67  
67   - private void createApiAccessLog(HttpServletRequest request, Date beginTime,
  68 + private void createApiAccessLog(HttpServletRequest request, LocalDateTime beginTime,
68 69 Map<String, String> queryString, String requestBody, Exception ex) {
69 70 ApiAccessLog accessLog = new ApiAccessLog();
70 71 try {
... ... @@ -75,7 +76,7 @@ public class ApiAccessLogFilter extends ApiRequestFilter {
75 76 }
76 77 }
77 78  
78   - private void buildApiAccessLogDTO(ApiAccessLog accessLog, HttpServletRequest request, Date beginTime,
  79 + private void buildApiAccessLogDTO(ApiAccessLog accessLog, HttpServletRequest request, LocalDateTime beginTime,
79 80 Map<String, String> queryString, String requestBody, Exception ex) {
80 81 // 处理用户信息
81 82 accessLog.setUserId(WebFrameworkUtils.getLoginUserId(request));
... ... @@ -103,8 +104,8 @@ public class ApiAccessLogFilter extends ApiRequestFilter {
103 104 accessLog.setUserIp(ServletUtil.getClientIP(request));
104 105 // 持续时间
105 106 accessLog.setBeginTime(beginTime);
106   - accessLog.setEndTime(new Date());
107   - accessLog.setDuration((int) DateUtils.diff(accessLog.getEndTime(), accessLog.getBeginTime()));
  107 + accessLog.setEndTime(LocalDateTime.now());
  108 + accessLog.setDuration((int) LocalDateTimeUtil.between(accessLog.getBeginTime(), accessLog.getEndTime(), ChronoUnit.SECONDS));
108 109 }
109 110  
110 111 }
... ...
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiAccessLog.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.framework.apilog.core.service;
3 3 import lombok.Data;
4 4  
5 5 import javax.validation.constraints.NotNull;
6   -import java.util.Date;
  6 +import java.time.LocalDateTime;
7 7  
8 8 /**
9 9 * API 访问日志
... ... @@ -61,12 +61,12 @@ public class ApiAccessLog {
61 61 * 开始请求时间
62 62 */
63 63 @NotNull(message = "开始请求时间不能为空")
64   - private Date beginTime;
  64 + private LocalDateTime beginTime;
65 65 /**
66 66 * 结束请求时间
67 67 */
68 68 @NotNull(message = "结束请求时间不能为空")
69   - private Date endTime;
  69 + private LocalDateTime endTime;
70 70 /**
71 71 * 执行时长,单位:毫秒
72 72 */
... ...
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiErrorLog.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.framework.apilog.core.service;
3 3 import lombok.Data;
4 4  
5 5 import javax.validation.constraints.NotNull;
6   -import java.util.Date;
  6 +import java.time.LocalDateTime;
7 7  
8 8 /**
9 9 * API 错误日志
... ... @@ -61,7 +61,7 @@ public class ApiErrorLog {
61 61 * 异常时间
62 62 */
63 63 @NotNull(message = "异常时间不能为空")
64   - private Date exceptionTime;
  64 + private LocalDateTime exceptionTime;
65 65 /**
66 66 * 异常名
67 67 */
... ...
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
... ... @@ -31,7 +31,7 @@ import javax.servlet.http.HttpServletRequest;
31 31 import javax.validation.ConstraintViolation;
32 32 import javax.validation.ConstraintViolationException;
33 33 import javax.validation.ValidationException;
34   -import java.util.Date;
  34 +import java.time.LocalDateTime;
35 35 import java.util.Map;
36 36  
37 37 import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.*;
... ... @@ -267,7 +267,7 @@ public class GlobalExceptionHandler {
267 267 errorLog.setRequestMethod(request.getMethod());
268 268 errorLog.setUserAgent(ServletUtils.getUserAgent(request));
269 269 errorLog.setUserIp(ServletUtil.getClientIP(request));
270   - errorLog.setExceptionTime(new Date());
  270 + errorLog.setExceptionTime(LocalDateTime.now());
271 271 }
272 272  
273 273 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java
... ... @@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9 9 import javax.validation.constraints.NotNull;
10   -import java.util.Date;
  10 +import java.time.LocalDateTime;
11 11 import java.util.List;
12 12  
13 13 @ApiModel("管理后台 - 动态表单 Response VO")
... ... @@ -28,6 +28,6 @@ public class BpmFormRespVO extends BpmFormBaseVO {
28 28 private List<String> fields;
29 29  
30 30 @ApiModelProperty(value = "创建时间", required = true)
31   - private Date createTime;
  31 + private LocalDateTime createTime;
32 32  
33 33 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java
... ... @@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
9 9 import lombok.ToString;
10 10 import org.springframework.format.annotation.DateTimeFormat;
11 11  
12   -import java.util.Date;
  12 +import java.time.LocalDateTime;
13 13  
14 14 @ApiModel("管理后台 - 用户组分页 Request VO")
15 15 @Data
... ... @@ -25,6 +25,6 @@ public class BpmUserGroupPageReqVO extends PageParam {
25 25  
26 26 @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
27 27 @ApiModelProperty(value = "创建时间")
28   - private Date[] createTime;
  28 + private LocalDateTime[] createTime;
29 29  
30 30 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java
1 1 package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
  4 +
  5 +import java.time.LocalDateTime;
  6 +
5 7 import io.swagger.annotations.*;
6 8  
7 9 @ApiModel("管理后台 - 用户组 Response VO")
... ... @@ -14,6 +16,6 @@ public class BpmUserGroupRespVO extends BpmUserGroupBaseVO {
14 16 private Long id;
15 17  
16 18 @ApiModelProperty(value = "创建时间", required = true)
17   - private Date createTime;
  19 + private LocalDateTime createTime;
18 20  
19 21 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelPageItemRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - 流程模型的分页的每一项 Response VO")
12 12 @Data
... ... @@ -21,7 +21,7 @@ public class BpmModelPageItemRespVO extends BpmModelBaseVO {
21 21 private String formName;
22 22  
23 23 @ApiModelProperty(value = "创建时间", required = true)
24   - private Date createTime;
  24 + private LocalDateTime createTime;
25 25  
26 26 /**
27 27 * 最新部署的流程定义
... ... @@ -39,7 +39,7 @@ public class BpmModelPageItemRespVO extends BpmModelBaseVO {
39 39 private Integer version;
40 40  
41 41 @ApiModelProperty(value = "部署时间", required = true)
42   - private Date deploymentTime;
  42 + private LocalDateTime deploymentTime;
43 43  
44 44 @ApiModelProperty(value = "中断状态", required = true, example = "1", notes = "参见 SuspensionState 枚举")
45 45 private Integer suspensionState;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - 流程模型的创建 Request VO")
12 12 @Data
... ... @@ -21,6 +21,6 @@ public class BpmModelRespVO extends BpmModelBaseVO {
21 21 private String bpmnXml;
22 22  
23 23 @ApiModelProperty(value = "创建时间", required = true)
24   - private Date createTime;
  24 + private LocalDateTime createTime;
25 25  
26 26 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - 流程定义的分页的每一项 Response VO")
12 12 @Data
... ... @@ -18,6 +18,6 @@ public class BpmProcessDefinitionPageItemRespVO extends BpmProcessDefinitionResp
18 18 private String formName;
19 19  
20 20 @ApiModelProperty(value = "部署时间", required = true)
21   - private Date deploymentTime;
  21 + private LocalDateTime deploymentTime;
22 22  
23 23 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveBaseVO.java
1 1 package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
  4 +import java.time.LocalDateTime;
5 5 import io.swagger.annotations.*;
6 6 import javax.validation.constraints.*;
7 7 import org.springframework.format.annotation.DateTimeFormat;
... ... @@ -18,11 +18,11 @@ public class BpmOALeaveBaseVO {
18 18 @ApiModelProperty(value = "请假的开始时间", required = true)
19 19 @NotNull(message = "开始时间不能为空")
20 20 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
21   - private Date startTime;
  21 + private LocalDateTime startTime;
22 22 @ApiModelProperty(value = "请假的结束时间", required = true)
23 23 @NotNull(message = "结束时间不能为空")
24 24 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
25   - private Date endTime;
  25 + private LocalDateTime endTime;
26 26  
27 27 @ApiModelProperty(value = "请假类型", required = true, example = "1", notes = "参见 bpm_oa_type 枚举")
28 28 private Integer type;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java
... ... @@ -15,7 +15,7 @@ public class BpmOALeaveCreateReqVO extends BpmOALeaveBaseVO {
15 15  
16 16 @AssertTrue(message = "结束时间,需要在开始时间之后")
17 17 public boolean isEndTimeValid() {
18   - return !getEndTime().before(getStartTime());
  18 + return !getEndTime().isBefore(getStartTime());
19 19 }
20 20  
21 21 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java
1 1 package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
  4 +import java.time.LocalDateTime;
5 5 import io.swagger.annotations.*;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageParam;
7 7 import org.springframework.format.annotation.DateTimeFormat;
... ... @@ -25,6 +25,6 @@ public class BpmOALeavePageReqVO extends PageParam {
25 25  
26 26 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
27 27 @ApiModelProperty(value = "申请时间")
28   - private Date[] createTime;
  28 + private LocalDateTime[] createTime;
29 29  
30 30 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java
... ... @@ -5,7 +5,7 @@ import io.swagger.annotations.*;
5 5 import org.springframework.format.annotation.DateTimeFormat;
6 6  
7 7 import javax.validation.constraints.NotNull;
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -24,7 +24,7 @@ public class BpmOALeaveRespVO extends BpmOALeaveBaseVO {
24 24 @ApiModelProperty(value = "申请时间", required = true)
25 25 @NotNull(message = "申请时间不能为空")
26 26 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
27   - private Date createTime;
  27 + private LocalDateTime createTime;
28 28  
29 29 @ApiModelProperty(value = "流程id")
30 30 private String processInstanceId;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java
... ... @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6  
7   -import java.util.Date;
  7 +import java.time.LocalDateTime;
8 8  
9 9 @ApiModel("管理后台 - 流程活动的 Response VO")
10 10 @Data
... ... @@ -16,9 +16,9 @@ public class BpmActivityRespVO {
16 16 private String type;
17 17  
18 18 @ApiModelProperty(value = "流程活动的开始时间", required = true)
19   - private Date startTime;
  19 + private LocalDateTime startTime;
20 20 @ApiModelProperty(value = "流程活动的结束时间", required = true)
21   - private Date endTime;
  21 + private LocalDateTime endTime;
22 22  
23 23 @ApiModelProperty(value = "关联的流程任务的编号", example = "2048", notes = "关联的流程任务,只有 UserTask 等类型才有")
24 24 private String taskId;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceMyPageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -35,6 +35,6 @@ public class BpmProcessInstanceMyPageReqVO extends PageParam {
35 35  
36 36 @ApiModelProperty(value = "创建时间")
37 37 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
38   - private Date[] createTime;
  38 + private LocalDateTime[] createTime;
39 39  
40 40 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageItemRespVO.java
... ... @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6  
7   -import java.util.Date;
  7 +import java.time.LocalDateTime;
8 8 import java.util.List;
9 9  
10 10 @ApiModel("管理后台 - 流程实例的分页 Item Response VO")
... ... @@ -30,10 +30,10 @@ public class BpmProcessInstancePageItemRespVO {
30 30 private Integer result;
31 31  
32 32 @ApiModelProperty(value = "提交时间", required = true)
33   - private Date createTime;
  33 + private LocalDateTime createTime;
34 34  
35 35 @ApiModelProperty(value = "结束时间", required = true)
36   - private Date endTime;
  36 + private LocalDateTime endTime;
37 37  
38 38 /**
39 39 * 当前任务
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java
... ... @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6  
7   -import java.util.Date;
  7 +import java.time.LocalDateTime;
8 8 import java.util.List;
9 9 import java.util.Map;
10 10  
... ... @@ -28,10 +28,10 @@ public class BpmProcessInstanceRespVO {
28 28 private Integer result;
29 29  
30 30 @ApiModelProperty(value = "提交时间", required = true)
31   - private Date createTime;
  31 + private LocalDateTime createTime;
32 32  
33 33 @ApiModelProperty(value = "结束时间", required = true)
34   - private Date endTime;
  34 + private LocalDateTime endTime;
35 35  
36 36 @ApiModelProperty(value = "提交的表单值", required = true)
37 37 private Map<String, Object> formVariables;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageItemRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - 流程任务的 Done 已完成的分页项 Response VO")
12 12 @Data
... ... @@ -15,7 +15,7 @@ import java.util.Date;
15 15 public class BpmTaskDonePageItemRespVO extends BpmTaskTodoPageItemRespVO {
16 16  
17 17 @ApiModelProperty(value = "结束时间", required = true)
18   - private Date endTime;
  18 + private LocalDateTime endTime;
19 19 @ApiModelProperty(value = "持续时间", required = true, example = "1000")
20 20 private Long durationInMillis;
21 21  
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -23,10 +23,10 @@ public class BpmTaskDonePageReqVO extends PageParam {
23 23  
24 24 @ApiModelProperty(value = "开始的创建收间")
25 25 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
26   - private Date beginCreateTime;
  26 + private LocalDateTime beginCreateTime;
27 27  
28 28 @ApiModelProperty(value = "结束的创建时间")
29 29 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
30   - private Date endCreateTime;
  30 + private LocalDateTime endCreateTime;
31 31  
32 32 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageItemRespVO.java
... ... @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6  
7   -import java.util.Date;
  7 +import java.time.LocalDateTime;
8 8  
9 9 @ApiModel("管理后台 - 流程任务的 Running 进行中的分页项 Response VO")
10 10 @Data
... ... @@ -17,10 +17,10 @@ public class BpmTaskTodoPageItemRespVO {
17 17 private String name;
18 18  
19 19 @ApiModelProperty(value = "接收时间", required = true)
20   - private Date claimTime;
  20 + private LocalDateTime claimTime;
21 21  
22 22 @ApiModelProperty(value = "创建时间", required = true)
23   - private Date createTime;
  23 + private LocalDateTime createTime;
24 24  
25 25 @ApiModelProperty(value = "激活状态", required = true, example = "1", notes = "参见 SuspensionState 枚举")
26 26 private Integer suspensionState;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -23,10 +23,10 @@ public class BpmTaskTodoPageReqVO extends PageParam {
23 23  
24 24 @ApiModelProperty(value = "开始的创建收间")
25 25 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
26   - private Date beginCreateTime;
  26 + private LocalDateTime beginCreateTime;
27 27  
28 28 @ApiModelProperty(value = "结束的创建时间")
29 29 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
30   - private Date endCreateTime;
  30 + private LocalDateTime endCreateTime;
31 31  
32 32 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmModelConvert.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.convert.definition;
2 2  
3 3 import cn.hutool.core.util.StrUtil;
4 4 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  5 +import cn.iocoder.yudao.framework.common.util.date.DateUtils;
5 6 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
6 7 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*;
7 8 import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
... ... @@ -44,7 +45,7 @@ public interface BpmModelConvert {
44 45 default BpmModelPageItemRespVO convert(Model model, BpmFormDO form, Deployment deployment, ProcessDefinition processDefinition) {
45 46 BpmModelPageItemRespVO modelRespVO = new BpmModelPageItemRespVO();
46 47 modelRespVO.setId(model.getId());
47   - modelRespVO.setCreateTime(model.getCreateTime());
  48 + modelRespVO.setCreateTime(DateUtils.dateToLocalDateTime(model.getCreateTime()));
48 49 // 通用 copy
49 50 copyTo(model, modelRespVO);
50 51 // Form
... ... @@ -57,7 +58,7 @@ public interface BpmModelConvert {
57 58 if (modelRespVO.getProcessDefinition() != null) {
58 59 modelRespVO.getProcessDefinition().setSuspensionState(processDefinition.isSuspended() ?
59 60 SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode());
60   - modelRespVO.getProcessDefinition().setDeploymentTime(deployment.getDeploymentTime());
  61 + modelRespVO.getProcessDefinition().setDeploymentTime(DateUtils.dateToLocalDateTime(deployment.getDeploymentTime()));
61 62 }
62 63 return modelRespVO;
63 64 }
... ... @@ -65,7 +66,7 @@ public interface BpmModelConvert {
65 66 default BpmModelRespVO convert(Model model) {
66 67 BpmModelRespVO modelRespVO = new BpmModelRespVO();
67 68 modelRespVO.setId(model.getId());
68   - modelRespVO.setCreateTime(model.getCreateTime());
  69 + modelRespVO.setCreateTime(DateUtils.dateToLocalDateTime(model.getCreateTime()));
69 70 // 通用 copy
70 71 copyTo(model, modelRespVO);
71 72 return modelRespVO;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmProcessDefinitionConvert.java
1 1 package cn.iocoder.yudao.module.bpm.convert.definition;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  5 +import cn.iocoder.yudao.framework.common.util.date.DateUtils;
4 6 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO;
5 7 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
6 8 import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
... ... @@ -67,7 +69,7 @@ public interface BpmProcessDefinitionConvert {
67 69 BpmProcessDefinitionPageItemRespVO respVO = convert(bean);
68 70 respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode());
69 71 if (deployment != null) {
70   - respVO.setDeploymentTime(deployment.getDeploymentTime());
  72 + respVO.setDeploymentTime(LocalDateTimeUtil.of(deployment.getDeploymentTime()));
71 73 }
72 74 if (form != null) {
73 75 respVO.setFormName(form.getName());
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
1 1 package cn.iocoder.yudao.module.bpm.convert.task;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
4 5 import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
5 6 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskDonePageItemRespVO;
... ... @@ -151,7 +152,7 @@ public interface BpmTaskConvert {
151 152 BpmTaskExtDO taskExtDO = new BpmTaskExtDO().setTaskId(task.getId())
152 153 .setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())).setName(task.getName())
153 154 .setProcessDefinitionId(task.getProcessDefinitionId()).setProcessInstanceId(task.getProcessInstanceId());
154   - taskExtDO.setCreateTime(task.getCreateTime());
  155 + taskExtDO.setCreateTime(LocalDateTimeUtil.of(task.getCreateTime()));
155 156 return taskExtDO;
156 157 }
157 158  
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
2 2  
3 3 import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
4 4 import lombok.*;
5   -import java.util.*;
  5 +import java.time.LocalDateTime;
6 6 import com.baomidou.mybatisplus.annotation.*;
7 7 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
8 8  
... ... @@ -46,11 +46,11 @@ public class BpmOALeaveDO extends BaseDO {
46 46 /**
47 47 * 开始时间
48 48 */
49   - private Date startTime;
  49 + private LocalDateTime startTime;
50 50 /**
51 51 * 结束时间
52 52 */
53   - private Date endTime;
  53 + private LocalDateTime endTime;
54 54 /**
55 55 * 请假天数
56 56 */
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmActivityDO.java
... ... @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
4 4 import lombok.*;
5 5 import org.springframework.format.annotation.DateTimeFormat;
6 6  
7   -import java.util.Date;
  7 +import java.time.LocalDateTime;
8 8  
9 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
... ... @@ -80,18 +80,18 @@ public class BpmActivityDO {
80 80 */
81 81 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
82 82 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
83   - private Date startTime;
  83 + private LocalDateTime startTime;
84 84  
85 85 /**
86 86 * 任务结束时间
87 87 */
88 88 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
89 89 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
90   - private Date endTime;
  90 + private LocalDateTime endTime;
91 91  
92 92 private Integer transactionOrder;
93 93  
94   - private Long duration;
  94 + private LocalDateTime duration;
95 95  
96 96 /**
97 97 * 删除结果
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java
... ... @@ -11,7 +11,7 @@ import lombok.Data;
11 11 import lombok.EqualsAndHashCode;
12 12 import lombok.ToString;
13 13  
14   -import java.util.Date;
  14 +import java.time.LocalDateTime;
15 15 import java.util.Map;
16 16  
17 17 /**
... ... @@ -79,7 +79,7 @@ public class BpmProcessInstanceExtDO extends BaseDO {
79 79 *
80 80 * 冗余 HistoricProcessInstance 的 endTime 属性
81 81 */
82   - private Date endTime;
  82 + private LocalDateTime endTime;
83 83  
84 84 /**
85 85 * 提交的表单值
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java
... ... @@ -8,7 +8,7 @@ import lombok.Data;
8 8 import lombok.EqualsAndHashCode;
9 9 import lombok.ToString;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 /**
14 14 * Bpm 流程任务的拓展表
... ... @@ -67,7 +67,7 @@ public class BpmTaskExtDO extends BaseDO {
67 67 *
68 68 * 冗余 HistoricTaskInstance 的 endTime 属性
69 69 */
70   - private Date endTime;
  70 + private LocalDateTime endTime;
71 71  
72 72 /**
73 73 * 流程实例的编号
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java
1 1 package cn.iocoder.yudao.module.bpm.service.oa;
2 2  
3   -import cn.hutool.core.date.DateUtil;
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
4 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 5 import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
6 6 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
... ... @@ -46,7 +46,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService {
46 46 @Transactional(rollbackFor = Exception.class)
47 47 public Long createLeave(Long userId, BpmOALeaveCreateReqVO createReqVO) {
48 48 // 插入 OA 请假单
49   - long day = DateUtil.betweenDay(createReqVO.getStartTime(), createReqVO.getEndTime(), false);
  49 + long day = LocalDateTimeUtil.between(createReqVO.getStartTime(), createReqVO.getEndTime()).toDays();
50 50 BpmOALeaveDO leave = BpmOALeaveConvert.INSTANCE.convert(createReqVO).setUserId(userId).setDay(day)
51 51 .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
52 52 leaveMapper.insert(leave);
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
1   -package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.event.FlowableCancelledEvent; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import javax.validation.Valid; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * 流程实例 Service 实现类 * * ProcessDefinition & ProcessInstance & Execution & Task 的关系: * 1. <a href="https://blog.csdn.net/bobozai86/article/details/105210414" /> * * HistoricProcessInstance & ProcessInstance 的关系: * 1. <a href=" https://my.oschina.net/843294669/blog/71902" /> * * 简单来说,前者 = 历史 + 运行中的流程实例,后者仅是运行中的流程实例 * * @author 芋道源码 */ @Service @Validated @Slf4j public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { @Resource private RuntimeService runtimeService; @Resource private BpmProcessInstanceExtMapper processInstanceExtMapper; @Resource @Lazy // 解决循环依赖 private BpmTaskService taskService; @Resource private BpmProcessDefinitionService processDefinitionService; @Resource private HistoryService historyService; @Resource private AdminUserApi adminUserApi; @Resource private DeptApi deptApi; @Resource private BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher; @Resource private BpmMessageService messageService; @Override public ProcessInstance getProcessInstance(String id) { return runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List<ProcessInstance> getProcessInstances(Set<String> ids) { return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public PageResult<BpmProcessInstancePageItemRespVO> getMyProcessInstancePage(Long userId, BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult<BpmProcessInstanceExtDO> pageResult = processInstanceExtMapper.selectPage(userId, pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List<String> processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map<String, List<Task>> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, taskMap); } @Override @Transactional(rollbackFor = Exception.class) public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); // 发起流程 return createProcessInstance0(userId, definition, createReqVO.getVariables(), null); } @Override public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getActiveProcessDefinition(createReqDTO.getProcessDefinitionKey()); // 发起流程 return createProcessInstance0(userId, definition, createReqDTO.getVariables(), createReqDTO.getBusinessKey()); } @Override public BpmProcessInstanceRespVO getProcessInstanceVO(String id) { // 获得流程实例 HistoricProcessInstance processInstance = getHistoricProcessInstance(id); if (processInstance == null) { return null; } BpmProcessInstanceExtDO processInstanceExt = processInstanceExtMapper.selectByProcessInstanceId(id); Assert.notNull(processInstanceExt, "流程实例拓展({}) 不存在", id); // 获得流程定义 ProcessDefinition processDefinition = processDefinitionService .getProcessDefinition(processInstance.getProcessDefinitionId()); Assert.notNull(processDefinition, "流程定义({}) 不存在", processInstance.getProcessDefinitionId()); BpmProcessDefinitionExtDO processDefinitionExt = processDefinitionService.getProcessDefinitionExt( processInstance.getProcessDefinitionId()); Assert.notNull(processDefinitionExt, "流程定义拓展({}) 不存在", id); String bpmnXml = processDefinitionService.getProcessDefinitionBpmnXML(processInstance.getProcessDefinitionId()); // 获得 User AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId())); DeptRespDTO dept = null; if (startUser != null) { dept = deptApi.getDept(startUser.getDeptId()); } // 拼接结果 return BpmProcessInstanceConvert.INSTANCE.convert2(processInstance, processInstanceExt, processDefinition, processDefinitionExt, bpmnXml, startUser, dept); } @Override public void cancelProcessInstance(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO) { // 校验流程实例存在 ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); if (instance == null) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); } // 只能取消自己的 if (!Objects.equals(instance.getStartUserId(), String.valueOf(userId))) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF); } // 通过删除流程实例,实现流程实例的取消, // 删除流程实例,正则执行任务 ACT_RU_TASK. 任务会被删除。通过历史表查询 deleteProcessInstance(cancelReqVO.getId(), BpmProcessInstanceDeleteReasonEnum.CANCEL_TASK.format(cancelReqVO.getReason())); } /** * 获得历史的流程实例 * * @param id 流程实例的编号 * @return 历史的流程实例 */ @Override public HistoricProcessInstance getHistoricProcessInstance(String id) { return historyService.createHistoricProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids) { return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public void createProcessInstanceExt(ProcessInstance instance) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition2(instance.getProcessDefinitionId()); // 插入 BpmProcessInstanceExtDO 对象 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getId()) .setProcessDefinitionId(definition.getId()) .setName(instance.getProcessDefinitionName()) .setStartUserId(Long.valueOf(instance.getStartUserId())) .setCategory(definition.getCategory()) .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()) .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); processInstanceExtMapper.insert(instanceExtDO); } @Override public void updateProcessInstanceExtCancel(FlowableCancelledEvent event) { // 判断是否为 Reject 不通过。如果是,则不进行更新. // 因为,updateProcessInstanceExtReject 方法,已经进行更新了 if (BpmProcessInstanceDeleteReasonEnum.isRejectReason((String)event.getCause())) { return; } // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(event.getProcessInstanceId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(event.getProcessInstanceId()) .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Override public void updateProcessInstanceExtComplete(ProcessInstance instance) { // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(instance.getId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getProcessInstanceId()) .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); // 如果正常完全,说明审批通过 processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程被通过的消息 messageService.sendMessageWhenProcessInstanceApprove(BpmProcessInstanceConvert.INSTANCE.convert2ApprovedReq(instance)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Transactional(rollbackFor = Exception.class) public void updateProcessInstanceExtReject(String id, String reason) { // 需要主动查询,因为 instance 只有 id 属性 ProcessInstance processInstance = getProcessInstance(id); // 删除流程实例,以实现驳回任务时,取消整个审批流程 deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.format(reason))); // 更新 status + result // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, // 设置 result 为 BpmProcessInstanceStatusEnum.CANCEL,显然和 result 不一定是一致的 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO().setProcessInstanceId(id) .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程被不通过的消息 messageService.sendMessageWhenProcessInstanceReject(BpmProcessInstanceConvert.INSTANCE.convert2RejectReq(processInstance, reason)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } private void deleteProcessInstance(String id, String reason) { runtimeService.deleteProcessInstance(id, reason); } private String createProcessInstance0(Long userId, ProcessDefinition definition, Map<String, Object> variables, String businessKey) { // 校验流程定义 if (definition == null) { throw exception(PROCESS_DEFINITION_NOT_EXISTS); } if (definition.isSuspended()) { throw exception(PROCESS_DEFINITION_IS_SUSPENDED); } // 创建流程实例 ProcessInstance instance = runtimeService.startProcessInstanceById(definition.getId(), businessKey, variables); // 设置流程名字 runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); // 补全流程实例的拓展表 processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(instance.getId()) .setFormVariables(variables)); return instance.getId(); } }
2 1 \ No newline at end of file
  2 +package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.event.FlowableCancelledEvent; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import javax.validation.Valid; import java.time.LocalDateTime; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * 流程实例 Service 实现类 * * ProcessDefinition & ProcessInstance & Execution & Task 的关系: * 1. <a href="https://blog.csdn.net/bobozai86/article/details/105210414" /> * * HistoricProcessInstance & ProcessInstance 的关系: * 1. <a href=" https://my.oschina.net/843294669/blog/71902" /> * * 简单来说,前者 = 历史 + 运行中的流程实例,后者仅是运行中的流程实例 * * @author 芋道源码 */ @Service @Validated @Slf4j public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { @Resource private RuntimeService runtimeService; @Resource private BpmProcessInstanceExtMapper processInstanceExtMapper; @Resource @Lazy // 解决循环依赖 private BpmTaskService taskService; @Resource private BpmProcessDefinitionService processDefinitionService; @Resource private HistoryService historyService; @Resource private AdminUserApi adminUserApi; @Resource private DeptApi deptApi; @Resource private BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher; @Resource private BpmMessageService messageService; @Override public ProcessInstance getProcessInstance(String id) { return runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List<ProcessInstance> getProcessInstances(Set<String> ids) { return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public PageResult<BpmProcessInstancePageItemRespVO> getMyProcessInstancePage(Long userId, BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult<BpmProcessInstanceExtDO> pageResult = processInstanceExtMapper.selectPage(userId, pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List<String> processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map<String, List<Task>> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, taskMap); } @Override @Transactional(rollbackFor = Exception.class) public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); // 发起流程 return createProcessInstance0(userId, definition, createReqVO.getVariables(), null); } @Override public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getActiveProcessDefinition(createReqDTO.getProcessDefinitionKey()); // 发起流程 return createProcessInstance0(userId, definition, createReqDTO.getVariables(), createReqDTO.getBusinessKey()); } @Override public BpmProcessInstanceRespVO getProcessInstanceVO(String id) { // 获得流程实例 HistoricProcessInstance processInstance = getHistoricProcessInstance(id); if (processInstance == null) { return null; } BpmProcessInstanceExtDO processInstanceExt = processInstanceExtMapper.selectByProcessInstanceId(id); Assert.notNull(processInstanceExt, "流程实例拓展({}) 不存在", id); // 获得流程定义 ProcessDefinition processDefinition = processDefinitionService .getProcessDefinition(processInstance.getProcessDefinitionId()); Assert.notNull(processDefinition, "流程定义({}) 不存在", processInstance.getProcessDefinitionId()); BpmProcessDefinitionExtDO processDefinitionExt = processDefinitionService.getProcessDefinitionExt( processInstance.getProcessDefinitionId()); Assert.notNull(processDefinitionExt, "流程定义拓展({}) 不存在", id); String bpmnXml = processDefinitionService.getProcessDefinitionBpmnXML(processInstance.getProcessDefinitionId()); // 获得 User AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId())); DeptRespDTO dept = null; if (startUser != null) { dept = deptApi.getDept(startUser.getDeptId()); } // 拼接结果 return BpmProcessInstanceConvert.INSTANCE.convert2(processInstance, processInstanceExt, processDefinition, processDefinitionExt, bpmnXml, startUser, dept); } @Override public void cancelProcessInstance(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO) { // 校验流程实例存在 ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); if (instance == null) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); } // 只能取消自己的 if (!Objects.equals(instance.getStartUserId(), String.valueOf(userId))) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF); } // 通过删除流程实例,实现流程实例的取消, // 删除流程实例,正则执行任务 ACT_RU_TASK. 任务会被删除。通过历史表查询 deleteProcessInstance(cancelReqVO.getId(), BpmProcessInstanceDeleteReasonEnum.CANCEL_TASK.format(cancelReqVO.getReason())); } /** * 获得历史的流程实例 * * @param id 流程实例的编号 * @return 历史的流程实例 */ @Override public HistoricProcessInstance getHistoricProcessInstance(String id) { return historyService.createHistoricProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids) { return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public void createProcessInstanceExt(ProcessInstance instance) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition2(instance.getProcessDefinitionId()); // 插入 BpmProcessInstanceExtDO 对象 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getId()) .setProcessDefinitionId(definition.getId()) .setName(instance.getProcessDefinitionName()) .setStartUserId(Long.valueOf(instance.getStartUserId())) .setCategory(definition.getCategory()) .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()) .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); processInstanceExtMapper.insert(instanceExtDO); } @Override public void updateProcessInstanceExtCancel(FlowableCancelledEvent event) { // 判断是否为 Reject 不通过。如果是,则不进行更新. // 因为,updateProcessInstanceExtReject 方法,已经进行更新了 if (BpmProcessInstanceDeleteReasonEnum.isRejectReason((String)event.getCause())) { return; } // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(event.getProcessInstanceId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(event.getProcessInstanceId()) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Override public void updateProcessInstanceExtComplete(ProcessInstance instance) { // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(instance.getId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getProcessInstanceId()) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); // 如果正常完全,说明审批通过 processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程被通过的消息 messageService.sendMessageWhenProcessInstanceApprove(BpmProcessInstanceConvert.INSTANCE.convert2ApprovedReq(instance)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Transactional(rollbackFor = Exception.class) public void updateProcessInstanceExtReject(String id, String reason) { // 需要主动查询,因为 instance 只有 id 属性 ProcessInstance processInstance = getProcessInstance(id); // 删除流程实例,以实现驳回任务时,取消整个审批流程 deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.format(reason))); // 更新 status + result // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, // 设置 result 为 BpmProcessInstanceStatusEnum.CANCEL,显然和 result 不一定是一致的 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO().setProcessInstanceId(id) .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程被不通过的消息 messageService.sendMessageWhenProcessInstanceReject(BpmProcessInstanceConvert.INSTANCE.convert2RejectReq(processInstance, reason)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } private void deleteProcessInstance(String id, String reason) { runtimeService.deleteProcessInstance(id, reason); } private String createProcessInstance0(Long userId, ProcessDefinition definition, Map<String, Object> variables, String businessKey) { // 校验流程定义 if (definition == null) { throw exception(PROCESS_DEFINITION_NOT_EXISTS); } if (definition.isSuspended()) { throw exception(PROCESS_DEFINITION_IS_SUSPENDED); } // 创建流程实例 ProcessInstance instance = runtimeService.startProcessInstanceById(definition.getId(), businessKey, variables); // 设置流程名字 runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); // 补全流程实例的拓展表 processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(instance.getId()) .setFormVariables(variables)); return instance.getId(); } }
3 3 \ No newline at end of file
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
... ... @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.bpm.service.task;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.StrUtil;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.date.DateUtils;
6 7 import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
7 8 import cn.iocoder.yudao.framework.common.util.object.PageUtils;
8 9 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*;
... ... @@ -32,6 +33,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
32 33  
33 34 import javax.annotation.Resource;
34 35 import javax.validation.Valid;
  36 +import java.time.LocalDateTime;
35 37 import java.util.*;
36 38  
37 39 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
... ... @@ -74,10 +76,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
74 76 taskQuery.taskNameLike("%" + pageVO.getName() + "%");
75 77 }
76 78 if (pageVO.getBeginCreateTime() != null) {
77   - taskQuery.taskCreatedAfter(pageVO.getBeginCreateTime());
  79 + taskQuery.taskCreatedAfter(DateUtils.localDateTimeToDate(pageVO.getBeginCreateTime()));
78 80 }
79 81 if (pageVO.getEndCreateTime() != null) {
80   - taskQuery.taskCreatedBefore(pageVO.getEndCreateTime());
  82 + taskQuery.taskCreatedBefore(DateUtils.localDateTimeToDate(pageVO.getEndCreateTime()));
81 83 }
82 84 // 执行查询
83 85 List<Task> tasks = taskQuery.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize());
... ... @@ -106,10 +108,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
106 108 taskQuery.taskNameLike("%" + pageVO.getName() + "%");
107 109 }
108 110 if (pageVO.getBeginCreateTime() != null) {
109   - taskQuery.taskCreatedAfter(pageVO.getBeginCreateTime());
  111 + taskQuery.taskCreatedAfter(DateUtils.localDateTimeToDate(pageVO.getBeginCreateTime()));
110 112 }
111 113 if (pageVO.getEndCreateTime() != null) {
112   - taskQuery.taskCreatedBefore(pageVO.getEndCreateTime());
  114 + taskQuery.taskCreatedBefore(DateUtils.localDateTimeToDate(pageVO.getEndCreateTime()));
113 115 }
114 116 // 执行查询
115 117 List<HistoricTaskInstance> tasks = taskQuery.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize());
... ... @@ -205,7 +207,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
205 207 // 更新任务拓展表为不通过
206 208 taskExtMapper.updateByTaskId(
207 209 new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.REJECT.getResult())
208   - .setEndTime(new Date()).setReason(reqVO.getReason()));
  210 + .setEndTime(LocalDateTime.now()).setReason(reqVO.getReason()));
209 211 }
210 212  
211 213 @Override
... ... @@ -249,7 +251,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
249 251 public void updateTaskExtComplete(Task task) {
250 252 BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert2TaskExt(task)
251 253 .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()) // 不设置也问题不大,因为 Complete 一般是审核通过,已经设置
252   - .setEndTime(new Date());
  254 + .setEndTime(LocalDateTime.now());
253 255 taskExtMapper.updateByTaskId(taskExtDO);
254 256 }
255 257  
... ... @@ -280,7 +282,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
280 282  
281 283 // 更新任务
282 284 taskExtMapper.updateById(new BpmTaskExtDO().setId(taskExt.getId()).setResult(BpmProcessInstanceResultEnum.CANCEL.getResult())
283   - .setEndTime(new Date()).setReason(BpmProcessInstanceDeleteReasonEnum.translateReason(task.getDeleteReason())));
  285 + .setEndTime(LocalDateTime.now()).setReason(BpmProcessInstanceDeleteReasonEnum.translateReason(task.getDeleteReason())));
284 286 }
285 287  
286 288 });
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java
... ... @@ -17,9 +17,9 @@ import org.springframework.context.annotation.Import;
17 17  
18 18 import javax.annotation.Resource;
19 19  
20   -import java.util.Date;
  20 +import java.time.LocalDateTime;
21 21  
22   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
  22 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildLocalDateTime;
23 23 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
24 24 import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.USER_GROUP_NOT_EXISTS;
25 25  
... ... @@ -106,7 +106,7 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest {
106 106 BpmUserGroupDO dbUserGroup = RandomUtils.randomPojo(BpmUserGroupDO.class, o -> { // 等会查询到
107 107 o.setName("芋道源码");
108 108 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
109   - o.setCreateTime(DateUtils.buildTime(2021, 11, 11));
  109 + o.setCreateTime(DateUtils.buildLocalDateTime(2021, 11, 11));
110 110 });
111 111 userGroupMapper.insert(dbUserGroup);
112 112 // 测试 name 不匹配
... ... @@ -114,12 +114,12 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest {
114 114 // 测试 status 不匹配
115 115 userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
116 116 // 测试 createTime 不匹配
117   - userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12))));
  117 + userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(DateUtils.buildLocalDateTime(2021, 12, 12))));
118 118 // 准备参数
119 119 BpmUserGroupPageReqVO reqVO = new BpmUserGroupPageReqVO();
120 120 reqVO.setName("源码");
121 121 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
122   - reqVO.setCreateTime((new Date[]{buildTime(2021, 11, 10),buildTime(2021, 11, 12)}));
  122 + reqVO.setCreateTime((new LocalDateTime[]{buildLocalDateTime(2021, 11, 10),buildLocalDateTime(2021, 11, 12)}));
123 123  
124 124 // 调用
125 125 PageResult<BpmUserGroupDO> pageResult = userGroupService.getUserGroupPage(reqVO);
... ...
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.api.logger.dto;
3 3 import lombok.Data;
4 4  
5 5 import javax.validation.constraints.NotNull;
6   -import java.util.Date;
  6 +import java.time.LocalDateTime;
7 7  
8 8 /**
9 9 * API 访问日志
... ... @@ -61,12 +61,12 @@ public class ApiAccessLogCreateReqDTO {
61 61 * 开始请求时间
62 62 */
63 63 @NotNull(message = "开始请求时间不能为空")
64   - private Date beginTime;
  64 + private LocalDateTime beginTime;
65 65 /**
66 66 * 结束请求时间
67 67 */
68 68 @NotNull(message = "结束请求时间不能为空")
69   - private Date endTime;
  69 + private LocalDateTime endTime;
70 70 /**
71 71 * 执行时长,单位:毫秒
72 72 */
... ...
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.api.logger.dto;
3 3 import lombok.Data;
4 4  
5 5 import javax.validation.constraints.NotNull;
6   -import java.util.Date;
  6 +import java.time.LocalDateTime;
7 7  
8 8 /**
9 9 * API 错误日志
... ... @@ -61,7 +61,7 @@ public class ApiErrorLogCreateReqDTO {
61 61 * 异常时间
62 62 */
63 63 @NotNull(message = "异常时间不能为空")
64   - private Date exceptionTime;
  64 + private LocalDateTime exceptionTime;
65 65 /**
66 66 * 异常名
67 67 */
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - 代码生成字段定义 Response VO")
12 12 @Data
... ... @@ -18,6 +18,6 @@ public class CodegenColumnRespVO extends CodegenColumnBaseVO {
18 18 private Long id;
19 19  
20 20 @ApiModelProperty(value = "创建时间", required = true)
21   - private Date createTime;
  21 + private LocalDateTime createTime;
22 22  
23 23 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -26,6 +26,6 @@ public class CodegenTablePageReqVO extends PageParam {
26 26  
27 27 @ApiModelProperty(value = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
28 28 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
29   - private Date[] createTime;
  29 + private LocalDateTime[] createTime;
30 30  
31 31 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - 代码生成表定义 Response VO")
12 12 @Data
... ... @@ -21,9 +21,9 @@ public class CodegenTableRespVO extends CodegenTableBaseVO {
21 21 private Integer dataSourceConfigId;
22 22  
23 23 @ApiModelProperty(value = "创建时间", required = true)
24   - private Date createTime;
  24 + private LocalDateTime createTime;
25 25  
26 26 @ApiModelProperty(value = "更新时间", required = true)
27   - private Date updateTime;
  27 + private LocalDateTime updateTime;
28 28  
29 29 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java
... ... @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
7 7 import lombok.Data;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 /**
12 12 * 参数配置 Excel 导出响应 VO
... ... @@ -41,6 +41,6 @@ public class ConfigExcelVO {
41 41 private String remark;
42 42  
43 43 @ExcelProperty("创建时间")
44   - private Date createTime;
  44 + private LocalDateTime createTime;
45 45  
46 46 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java
... ... @@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6 import org.springframework.format.annotation.DateTimeFormat;
7 7  
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -24,6 +24,6 @@ public class ConfigExportReqVO {
24 24  
25 25 @ApiModelProperty(value = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
26 26 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
27   - private Date[] createTime;
  27 + private LocalDateTime[] createTime;
28 28  
29 29 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -29,6 +29,6 @@ public class ConfigPageReqVO extends PageParam {
29 29  
30 30 @ApiModelProperty(value = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
31 31 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
32   - private Date[] createTime;
  32 + private LocalDateTime[] createTime;
33 33  
34 34 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java
... ... @@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
7 7  
8 8 import javax.validation.constraints.NotBlank;
9 9 import javax.validation.constraints.Size;
10   -import java.util.Date;
  10 +import java.time.LocalDateTime;
11 11  
12 12 @ApiModel("管理后台 - 参数配置信息 Response VO")
13 13 @Data
... ... @@ -26,6 +26,6 @@ public class ConfigRespVO extends ConfigBaseVO {
26 26 private Integer type;
27 27  
28 28 @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
29   - private Date createTime;
  29 + private LocalDateTime createTime;
30 30  
31 31 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/db/vo/DataSourceConfigRespVO.java
1 1 package cn.iocoder.yudao.module.infra.controller.admin.db.vo;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
  4 +
  5 +import java.time.LocalDateTime;
5 6 import io.swagger.annotations.*;
6 7  
7 8 @ApiModel("管理后台 - 数据源配置 Response VO")
... ... @@ -14,6 +15,6 @@ public class DataSourceConfigRespVO extends DataSourceConfigBaseVO {
14 15 private Integer id;
15 16  
16 17 @ApiModelProperty(value = "创建时间", required = true)
17   - private Date createTime;
  18 + private LocalDateTime createTime;
18 19  
19 20 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -26,6 +26,6 @@ public class FileConfigPageReqVO extends PageParam {
26 26  
27 27 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
28 28 @ApiModelProperty(value = "创建时间")
29   - private Date[] createTime;
  29 + private LocalDateTime[] createTime;
30 30  
31 31 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9  
10 10 import javax.validation.constraints.NotNull;
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 @ApiModel("管理后台 - 文件配置 Response VO")
14 14 @Data
... ... @@ -31,6 +31,6 @@ public class FileConfigRespVO extends FileConfigBaseVO {
31 31 private FileClientConfig config;
32 32  
33 33 @ApiModelProperty(value = "创建时间", required = true)
34   - private Date createTime;
  34 + private LocalDateTime createTime;
35 35  
36 36 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FilePageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -26,6 +26,6 @@ public class FilePageReqVO extends PageParam {
26 26  
27 27 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
28 28 @ApiModelProperty(value = "创建时间")
29   - private Date[] createTime;
  29 + private LocalDateTime[] createTime;
30 30  
31 31 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileRespVO.java
... ... @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6  
7   -import java.util.Date;
  7 +import java.time.LocalDateTime;
8 8  
9 9 @ApiModel(value = "管理后台 - 文件 Response VO", description = "不返回 content 字段,太大")
10 10 @Data
... ... @@ -32,6 +32,6 @@ public class FileRespVO {
32 32 private Integer size;
33 33  
34 34 @ApiModelProperty(value = "创建时间", required = true)
35   - private Date createTime;
  35 + private LocalDateTime createTime;
36 36  
37 37 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java
... ... @@ -22,9 +22,9 @@ import javax.annotation.Resource;
22 22 import javax.servlet.http.HttpServletResponse;
23 23 import javax.validation.Valid;
24 24 import java.io.IOException;
  25 +import java.time.LocalDateTime;
25 26 import java.util.Collection;
26 27 import java.util.Collections;
27   -import java.util.Date;
28 28 import java.util.List;
29 29  
30 30 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
... ... @@ -133,8 +133,8 @@ public class JobController {
133 133 @ApiImplicitParam(name = "count", value = "数量", example = "5", dataTypeClass = Long.class)
134 134 })
135 135 @PreAuthorize("@ss.hasPermission('infra:job:query')")
136   - public CommonResult<List<Date>> getJobNextTimes(@RequestParam("id") Long id,
137   - @RequestParam(value = "count", required = false, defaultValue = "5") Integer count) {
  136 + public CommonResult<List<LocalDateTime>> getJobNextTimes(@RequestParam("id") Long id,
  137 + @RequestParam(value = "count", required = false, defaultValue = "5") Integer count) {
138 138 JobDO job = jobService.getJob(id);
139 139 if (job == null) {
140 140 return success(Collections.emptyList());
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExcelVO.java
... ... @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
7 7 import lombok.Data;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 /**
12 12 * 定时任务 Excel VO
... ... @@ -36,21 +36,21 @@ public class JobExcelVO {
36 36 private String cronExpression;
37 37  
38 38 @ExcelProperty("最后一次执行的开始时间")
39   - private Date executeBeginTime;
  39 + private LocalDateTime executeBeginTime;
40 40  
41 41 @ExcelProperty("最后一次执行的结束时间")
42   - private Date executeEndTime;
  42 + private LocalDateTime executeEndTime;
43 43  
44 44 @ExcelProperty("上一次触发时间")
45   - private Date firePrevTime;
  45 + private LocalDateTime firePrevTime;
46 46  
47 47 @ExcelProperty("下一次触发时间")
48   - private Date fireNextTime;
  48 + private LocalDateTime fireNextTime;
49 49  
50 50 @ExcelProperty("监控超时时间")
51 51 private Integer monitorTimeout;
52 52  
53 53 @ExcelProperty("创建时间")
54   - private Date createTime;
  54 + private LocalDateTime createTime;
55 55  
56 56 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobRespVO.java
... ... @@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9 9 import javax.validation.constraints.NotNull;
10   -import java.util.Date;
  10 +import java.time.LocalDateTime;
11 11  
12 12 @ApiModel("管理后台 - 定时任务 Response VO")
13 13 @Data
... ... @@ -26,6 +26,6 @@ public class JobRespVO extends JobBaseVO {
26 26 private String handlerName;
27 27  
28 28 @ApiModelProperty(value = "创建时间", required = true)
29   - private Date createTime;
  29 + private LocalDateTime createTime;
30 30  
31 31 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 import org.springframework.format.annotation.DateTimeFormat;
6 6  
7 7 import javax.validation.constraints.NotNull;
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -34,11 +34,11 @@ public class JobLogBaseVO {
34 34 @ApiModelProperty(value = "开始执行时间", required = true)
35 35 @NotNull(message = "开始执行时间不能为空")
36 36 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
37   - private Date beginTime;
  37 + private LocalDateTime beginTime;
38 38  
39 39 @ApiModelProperty(value = "结束执行时间")
40 40 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
41   - private Date endTime;
  41 + private LocalDateTime endTime;
42 42  
43 43 @ApiModelProperty(value = "执行时长", example = "123")
44 44 private Integer duration;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExcelVO.java
... ... @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
7 7 import lombok.Data;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 /**
12 12 * 定时任务 Excel VO
... ... @@ -32,10 +32,10 @@ public class JobLogExcelVO {
32 32 private Integer executeIndex;
33 33  
34 34 @ExcelProperty("开始执行时间")
35   - private Date beginTime;
  35 + private LocalDateTime beginTime;
36 36  
37 37 @ExcelProperty("结束执行时间")
38   - private Date endTime;
  38 + private LocalDateTime endTime;
39 39  
40 40 @ExcelProperty("执行时长")
41 41 private Integer duration;
... ... @@ -48,6 +48,6 @@ public class JobLogExcelVO {
48 48 private String result;
49 49  
50 50 @ExcelProperty("创建时间")
51   - private Date createTime;
  51 + private LocalDateTime createTime;
52 52  
53 53 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java
... ... @@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6 import org.springframework.format.annotation.DateTimeFormat;
7 7  
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -21,11 +21,11 @@ public class JobLogExportReqVO {
21 21  
22 22 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
23 23 @ApiModelProperty(value = "开始执行时间")
24   - private Date beginTime;
  24 + private LocalDateTime beginTime;
25 25  
26 26 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
27 27 @ApiModelProperty(value = "结束执行时间")
28   - private Date endTime;
  28 + private LocalDateTime endTime;
29 29  
30 30 @ApiModelProperty(value = "任务状态", notes = "参见 JobLogStatusEnum 枚举")
31 31 private Integer status;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -26,11 +26,11 @@ public class JobLogPageReqVO extends PageParam {
26 26  
27 27 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
28 28 @ApiModelProperty(value = "开始执行时间")
29   - private Date beginTime;
  29 + private LocalDateTime beginTime;
30 30  
31 31 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
32 32 @ApiModelProperty(value = "结束执行时间")
33   - private Date endTime;
  33 + private LocalDateTime endTime;
34 34  
35 35 @ApiModelProperty(value = "任务状态", notes = "参见 JobLogStatusEnum 枚举")
36 36 private Integer status;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - 定时任务日志 Response VO")
12 12 @Data
... ... @@ -18,6 +18,6 @@ public class JobLogRespVO extends JobLogBaseVO {
18 18 private Long id;
19 19  
20 20 @ApiModelProperty(value = "创建时间", required = true)
21   - private Date createTime;
  21 + private LocalDateTime createTime;
22 22  
23 23 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogBaseVO.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 import org.springframework.format.annotation.DateTimeFormat;
6 6  
7 7 import javax.validation.constraints.NotNull;
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -54,12 +54,12 @@ public class ApiAccessLogBaseVO {
54 54 @ApiModelProperty(value = "开始请求时间", required = true)
55 55 @NotNull(message = "开始请求时间不能为空")
56 56 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
57   - private Date beginTime;
  57 + private LocalDateTime beginTime;
58 58  
59 59 @ApiModelProperty(value = "结束请求时间", required = true)
60 60 @NotNull(message = "结束请求时间不能为空")
61 61 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
62   - private Date endTime;
  62 + private LocalDateTime endTime;
63 63  
64 64 @ApiModelProperty(value = "执行时长", required = true, example = "100")
65 65 @NotNull(message = "执行时长不能为空")
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExcelVO.java
... ... @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
7 7 import lombok.Data;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 /**
12 12 * API 访问日志 Excel VO
... ... @@ -48,10 +48,10 @@ public class ApiAccessLogExcelVO {
48 48 private String userAgent;
49 49  
50 50 @ExcelProperty("开始请求时间")
51   - private Date beginTime;
  51 + private LocalDateTime beginTime;
52 52  
53 53 @ExcelProperty("结束请求时间")
54   - private Date endTime;
  54 + private LocalDateTime endTime;
55 55  
56 56 @ExcelProperty("执行时长")
57 57 private Integer duration;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java
... ... @@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6 import org.springframework.format.annotation.DateTimeFormat;
7 7  
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -27,7 +27,7 @@ public class ApiAccessLogExportReqVO {
27 27  
28 28 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
29 29 @ApiModelProperty(value = "开始请求时间")
30   - private Date[] beginTime;
  30 + private LocalDateTime[] beginTime;
31 31  
32 32 @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒")
33 33 private Integer duration;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -32,7 +32,7 @@ public class ApiAccessLogPageReqVO extends PageParam {
32 32  
33 33 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
34 34 @ApiModelProperty(value = "开始请求时间")
35   - private Date[] beginTime;
  35 + private LocalDateTime[] beginTime;
36 36  
37 37 @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒")
38 38 private Integer duration;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - API 访问日志 Response VO")
12 12 @Data
... ... @@ -18,6 +18,6 @@ public class ApiAccessLogRespVO extends ApiAccessLogBaseVO {
18 18 private Long id;
19 19  
20 20 @ApiModelProperty(value = "创建时间", required = true)
21   - private Date createTime;
  21 + private LocalDateTime createTime;
22 22  
23 23 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogBaseVO.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 import org.springframework.format.annotation.DateTimeFormat;
6 6  
7 7 import javax.validation.constraints.NotNull;
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -55,7 +55,7 @@ public class ApiErrorLogBaseVO {
55 55 @ApiModelProperty(value = "异常发生时间", required = true)
56 56 @NotNull(message = "异常发生时间不能为空")
57 57 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
58   - private Date exceptionTime;
  58 + private LocalDateTime exceptionTime;
59 59  
60 60 @ApiModelProperty(value = "异常名", required = true)
61 61 @NotNull(message = "异常名不能为空")
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExcelVO.java
... ... @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
7 7 import lombok.Data;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 /**
12 12 * API 错误日志 Excel VO
... ... @@ -48,7 +48,7 @@ public class ApiErrorLogExcelVO {
48 48 private String userAgent;
49 49  
50 50 @ExcelProperty("异常发生时间")
51   - private Date exceptionTime;
  51 + private LocalDateTime exceptionTime;
52 52  
53 53 @ExcelProperty("异常名")
54 54 private String exceptionName;
... ... @@ -75,14 +75,14 @@ public class ApiErrorLogExcelVO {
75 75 private Integer exceptionLineNumber;
76 76  
77 77 @ExcelProperty("创建时间")
78   - private Date createTime;
  78 + private LocalDateTime createTime;
79 79  
80 80 @ExcelProperty(value = "处理状态", converter = DictConvert.class)
81 81 @DictFormat(DictTypeConstants.API_ERROR_LOG_PROCESS_STATUS)
82 82 private Integer processStatus;
83 83  
84 84 @ExcelProperty("处理时间")
85   - private Date processTime;
  85 + private LocalDateTime processTime;
86 86  
87 87 @ExcelProperty("处理用户编号")
88 88 private Integer processUserId;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java
... ... @@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6 import org.springframework.format.annotation.DateTimeFormat;
7 7  
8   -import java.util.Date;
  8 +import java.time.LocalDateTime;
9 9  
10 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11  
... ... @@ -27,7 +27,7 @@ public class ApiErrorLogExportReqVO {
27 27  
28 28 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
29 29 @ApiModelProperty(value = "异常发生时间")
30   - private Date[] exceptionTime;
  30 + private LocalDateTime[] exceptionTime;
31 31  
32 32 @ApiModelProperty(value = "处理状态", example = "0")
33 33 private Integer processStatus;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java
... ... @@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9 import org.springframework.format.annotation.DateTimeFormat;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14  
... ... @@ -32,7 +32,7 @@ public class ApiErrorLogPageReqVO extends PageParam {
32 32  
33 33 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
34 34 @ApiModelProperty(value = "异常发生时间")
35   - private Date[] exceptionTime;
  35 + private LocalDateTime[] exceptionTime;
36 36  
37 37 @ApiModelProperty(value = "处理状态", example = "0")
38 38 private Integer processStatus;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
9   -import java.util.Date;
  9 +import java.time.LocalDateTime;
10 10  
11 11 @ApiModel("管理后台 - API 错误日志 Response VO")
12 12 @Data
... ... @@ -18,10 +18,10 @@ public class ApiErrorLogRespVO extends ApiErrorLogBaseVO {
18 18 private Integer id;
19 19  
20 20 @ApiModelProperty(value = "创建时间", required = true)
21   - private Date createTime;
  21 + private LocalDateTime createTime;
22 22  
23 23 @ApiModelProperty(value = "处理时间", required = true)
24   - private Date processTime;
  24 + private LocalDateTime processTime;
25 25  
26 26 @ApiModelProperty(value = "处理用户编号", example = "233")
27 27 private Integer processUserId;
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExcelVO.java
1 1 package cn.iocoder.yudao.module.infra.controller.admin.test.vo;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
  4 +
  5 +import java.time.LocalDateTime;
6 6  
7 7 import com.alibaba.excel.annotation.ExcelProperty;
8 8  
... ... @@ -33,6 +33,6 @@ public class TestDemoExcelVO {
33 33 private String remark;
34 34  
35 35 @ExcelProperty("创建时间")
36   - private Date createTime;
  36 + private LocalDateTime createTime;
37 37  
38 38 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExportReqVO.java
1 1 package cn.iocoder.yudao.module.infra.controller.admin.test.vo;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
  4 +
  5 +import java.time.LocalDateTime;
5 6 import io.swagger.annotations.*;
6   -import cn.iocoder.yudao.framework.common.pojo.PageParam;
7 7 import org.springframework.format.annotation.DateTimeFormat;
8 8  
9 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
... ... @@ -29,6 +29,6 @@ public class TestDemoExportReqVO {
29 29  
30 30 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
31 31 @ApiModelProperty(value = "创建时间")
32   - private Date[] createTime;
  32 + private LocalDateTime[] createTime;
33 33  
34 34 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoPageReqVO.java
1 1 package cn.iocoder.yudao.module.infra.controller.admin.test.vo;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
  4 +
  5 +import java.time.LocalDateTime;
5 6 import io.swagger.annotations.*;
6 7 import cn.iocoder.yudao.framework.common.pojo.PageParam;
7 8 import org.springframework.format.annotation.DateTimeFormat;
... ... @@ -31,6 +32,6 @@ public class TestDemoPageReqVO extends PageParam {
31 32  
32 33 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
33 34 @ApiModelProperty(value = "创建时间")
34   - private Date[] createTime;
  35 + private LocalDateTime[] createTime;
35 36  
36 37 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoRespVO.java
1 1 package cn.iocoder.yudao.module.infra.controller.admin.test.vo;
2 2  
3 3 import lombok.*;
4   -import java.util.*;
  4 +
  5 +import java.time.LocalDateTime;
5 6 import io.swagger.annotations.*;
6 7  
7 8 @ApiModel("管理后台 - 字典类型 Response VO")
... ... @@ -14,6 +15,6 @@ public class TestDemoRespVO extends TestDemoBaseVO {
14 15 private Long id;
15 16  
16 17 @ApiModelProperty(value = "创建时间", required = true)
17   - private Date createTime;
  18 + private LocalDateTime createTime;
18 19  
19 20 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobLogDO.java
... ... @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence;
7 7 import com.baomidou.mybatisplus.annotation.TableName;
8 8 import lombok.*;
9 9  
10   -import java.util.Date;
  10 +import java.time.LocalDateTime;
11 11  
12 12 /**
13 13 * 定时任务的执行日志
... ... @@ -56,11 +56,11 @@ public class JobLogDO extends BaseDO {
56 56 /**
57 57 * 开始执行时间
58 58 */
59   - private Date beginTime;
  59 + private LocalDateTime beginTime;
60 60 /**
61 61 * 结束执行时间
62 62 */
63   - private Date endTime;
  63 + private LocalDateTime endTime;
64 64 /**
65 65 * 执行时长,单位:毫秒
66 66 */
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiAccessLogDO.java
... ... @@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
8 8 import com.baomidou.mybatisplus.annotation.TableName;
9 9 import lombok.*;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 /**
14 14 * API 访问日志
... ... @@ -84,11 +84,11 @@ public class ApiAccessLogDO extends BaseDO {
84 84 /**
85 85 * 开始请求时间
86 86 */
87   - private Date beginTime;
  87 + private LocalDateTime beginTime;
88 88 /**
89 89 * 结束请求时间
90 90 */
91   - private Date endTime;
  91 + private LocalDateTime endTime;
92 92 /**
93 93 * 执行时长,单位:毫秒
94 94 */
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java
... ... @@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
8 8 import com.baomidou.mybatisplus.annotation.TableName;
9 9 import lombok.*;
10 10  
11   -import java.util.Date;
  11 +import java.time.LocalDateTime;
12 12  
13 13 /**
14 14 * API 异常数据
... ... @@ -84,7 +84,7 @@ public class ApiErrorLogDO extends BaseDO {
84 84 /**
85 85 * 异常发生时间
86 86 */
87   - private Date exceptionTime;
  87 + private LocalDateTime exceptionTime;
88 88 /**
89 89 * 异常名
90 90 *
... ... @@ -145,7 +145,7 @@ public class ApiErrorLogDO extends BaseDO {
145 145 /**
146 146 * 处理时间
147 147 */
148   - private Date processTime;
  148 + private LocalDateTime processTime;
149 149 /**
150 150 * 处理用户编号
151 151 *
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigDAOImpl.java
1 1 package cn.iocoder.yudao.module.infra.dal.mysql.config;
2 2  
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 4 import cn.iocoder.yudao.framework.apollo.internals.ConfigFrameworkDAO;
4 5 import cn.iocoder.yudao.framework.apollo.internals.dto.ConfigRespDTO;
5 6 import org.springframework.jdbc.core.JdbcTemplate;
6 7 import org.springframework.jdbc.datasource.DriverManagerDataSource;
7 8  
8 9 import javax.sql.DataSource;
9   -import java.util.Date;
  10 +import java.time.LocalDateTime;
10 11 import java.util.List;
11 12  
12 13 /**
... ... @@ -24,7 +25,7 @@ public class ConfigDAOImpl implements ConfigFrameworkDAO {
24 25 }
25 26  
26 27 @Override
27   - public int selectCountByUpdateTimeGt(Date maxUpdateTime) {
  28 + public int selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime) {
28 29 return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM infra_config WHERE update_time > ?",
29 30 Integer.class, maxUpdateTime);
30 31 }
... ... @@ -34,7 +35,7 @@ public class ConfigDAOImpl implements ConfigFrameworkDAO {
34 35 return jdbcTemplate.query("SELECT config_key, value, update_time, deleted FROM infra_config",
35 36 (rs, rowNum) -> new ConfigRespDTO().setKey(rs.getString("config_key"))
36 37 .setValue(rs.getString("value"))
37   - .setUpdateTime(rs.getDate("update_time"))
  38 + .setUpdateTime(LocalDateTimeUtil.of(rs.getDate("update_time")))
38 39 .setDeleted(rs.getBoolean("deleted")));
39 40 }
40 41  
... ...