mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	Merge branch 'master' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into feature/1.8.0-uniapp
# Conflicts: # yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponBaseVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExcelVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExportReqVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponPageReqVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponRespVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteBaseVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExcelVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExportReqVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempletePageReqVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteRespVO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/CouponTemplete/CouponTempleteDO.java # yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/coupon/CouponDO.java # yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java # yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuRespVO.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/discount/DiscountProductDO.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/reward/RewardActivityDO.java # yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java # yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/cart/TradeCartItemDO.java # yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserInfoDTO.java # yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java # yudao-server/pom.xml # yudao-server/src/main/resources/application-local.yaml # yudao-server/src/main/resources/application.yaml # yudao-ui-admin/src/views/mall/CouponTemplete/index.vue # yudao-ui-admin/src/views/mall/product/property/index.vue # yudao-ui-admin/src/views/mall/product/spu/index.vue # yudao-ui-admin/src/views/mall/product/spu/save.vue # yudao-ui-admin/src/views/system/role/index.vue
This commit is contained in:
		@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.service.errorcode.ErrorCodeService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -26,7 +26,7 @@ public class ErrorCodeApiImpl implements ErrorCodeApi {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, Date minUpdateTime) {
 | 
			
		||||
    public List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, LocalDateTime minUpdateTime) {
 | 
			
		||||
        return errorCodeService.getErrorCodeList(applicationName, minUpdateTime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Builder;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 登录 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -26,6 +26,6 @@ public class AuthLoginRespVO {
 | 
			
		||||
    private String refreshToken;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "过期时间", required = true)
 | 
			
		||||
    private Date expiresTime;
 | 
			
		||||
    private LocalDateTime expiresTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,45 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.controller.admin.captcha;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 | 
			
		||||
import com.anji.captcha.model.common.ResponseModel;
 | 
			
		||||
import com.anji.captcha.model.vo.CaptchaVO;
 | 
			
		||||
import io.swagger.annotations.Api;
 | 
			
		||||
import io.swagger.annotations.ApiOperation;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.security.PermitAll;
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码
 | 
			
		||||
 *
 | 
			
		||||
 * 问题:为什么不直接使用 anji 提供的 CaptchaController,而要另外继承?
 | 
			
		||||
 * 回答:管理使用 /admin-api/* 作为前缀,所以需要继承!
 | 
			
		||||
 *
 | 
			
		||||
 * @author 芋道源码
 | 
			
		||||
 */
 | 
			
		||||
@Api(tags = "管理后台 - 验证码")
 | 
			
		||||
@RestController("adminCaptchaController")
 | 
			
		||||
@RequestMapping("/system/captcha")
 | 
			
		||||
public class CaptchaController extends com.anji.captcha.controller.CaptchaController {
 | 
			
		||||
 | 
			
		||||
    @PostMapping({"/get"})
 | 
			
		||||
    @ApiOperation("获得验证码")
 | 
			
		||||
    @PermitAll
 | 
			
		||||
    @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
 | 
			
		||||
    public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) {
 | 
			
		||||
        return super.get(data, request);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/check")
 | 
			
		||||
    @ApiOperation("校验验证码")
 | 
			
		||||
    @PermitAll
 | 
			
		||||
    @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
 | 
			
		||||
    public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) {
 | 
			
		||||
        return super.check(data, request);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 部门信息 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -19,6 +19,6 @@ public class DeptRespVO extends DeptBaseVO {
 | 
			
		||||
    private Integer status;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 岗位信息 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -16,6 +16,6 @@ public class PostRespVO extends PostBaseVO {
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 字典数据信息 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -20,6 +20,6 @@ public class DictDataRespVO extends DictDataBaseVO {
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +24,6 @@ public class DictTypeExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -29,6 +29,6 @@ public class DictTypePageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 字典类型信息 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -23,6 +23,6 @@ public class DictTypeRespVO extends DictTypeBaseVO {
 | 
			
		||||
    private String type;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,10 @@ package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
 | 
			
		||||
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
 | 
			
		||||
//import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants;
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 错误码 Excel VO
 | 
			
		||||
@@ -36,6 +35,6 @@ public class ErrorCodeExcelVO {
 | 
			
		||||
    private String memo;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("创建时间")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -27,6 +27,6 @@ public class ErrorCodeExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -32,6 +32,6 @@ public class ErrorCodePageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 错误码 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -21,6 +21,6 @@ public class ErrorCodeRespVO extends ErrorCodeBaseVO {
 | 
			
		||||
    private Integer type;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 登录日志 Excel 导出响应 VO
 | 
			
		||||
@@ -35,6 +35,6 @@ public class LoginLogExcelVO {
 | 
			
		||||
    private String userAgent;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("登录时间")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +24,6 @@ public class LoginLogExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "登录时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -27,6 +27,6 @@ public class LoginLogPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "登录时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 登录日志 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -26,6 +26,6 @@ public class LoginLogRespVO extends LoginLogBaseVO {
 | 
			
		||||
    private Integer userType;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "登录时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.NotEmpty;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -66,7 +66,7 @@ public class OperateLogBaseVO {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "开始时间", required = true)
 | 
			
		||||
    @NotNull(message = "开始时间不能为空")
 | 
			
		||||
    private Date startTime;
 | 
			
		||||
    private LocalDateTime startTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "执行时长,单位:毫秒", required = true)
 | 
			
		||||
    @NotNull(message = "执行时长不能为空")
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作日志 Excel 导出响应 VO
 | 
			
		||||
@@ -34,7 +34,7 @@ public class OperateLogExcelVO {
 | 
			
		||||
    private String successStr;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("操作日志")
 | 
			
		||||
    private Date startTime;
 | 
			
		||||
    private LocalDateTime startTime;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("执行时长")
 | 
			
		||||
    private Integer duration;
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -27,6 +27,6 @@ public class OperateLogExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "开始时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] startTime;
 | 
			
		||||
    private LocalDateTime[] startTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -28,6 +28,6 @@ public class OperateLogPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "开始时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] startTime;
 | 
			
		||||
    private LocalDateTime[] startTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 通知公告信息 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -16,6 +16,6 @@ public class NoticeRespVO extends NoticeBaseVO {
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - OAuth2 客户端 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -18,6 +18,6 @@ public class OAuth2ClientRespVO extends OAuth2ClientBaseVO {
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 访问令牌 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -33,9 +33,9 @@ public class OAuth2AccessTokenRespVO {
 | 
			
		||||
    private String clientId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "过期时间", required = true)
 | 
			
		||||
    private Date expiresTime;
 | 
			
		||||
    private LocalDateTime expiresTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 菜单信息 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -23,6 +23,6 @@ public class MenuRespVO extends MenuBaseVO {
 | 
			
		||||
    private Integer status;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +24,6 @@ public class RoleExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "开始时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -27,6 +27,6 @@ public class RolePageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 角色信息 Response VO")
 | 
			
		||||
@@ -33,6 +33,6 @@ public class RoleRespVO extends RoleBaseVO {
 | 
			
		||||
    private Integer type;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -34,6 +34,6 @@ public class SensitiveWordExcelVO {
 | 
			
		||||
    private String description;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("创建时间")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +24,6 @@ public class SensitiveWordExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -29,6 +29,6 @@ public class SensitiveWordPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 敏感词 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -18,6 +18,6 @@ public class SensitiveWordRespVO extends SensitiveWordBaseVO {
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -26,6 +26,6 @@ public class SmsChannelPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 短信渠道 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -21,6 +21,6 @@ public class SmsChannelRespVO extends SmsChannelBaseVO {
 | 
			
		||||
    private String code;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -61,7 +61,7 @@ public class SmsLogExcelVO {
 | 
			
		||||
    private Integer sendStatus;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("发送时间")
 | 
			
		||||
    private Date sendTime;
 | 
			
		||||
    private LocalDateTime sendTime;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("发送结果的编码")
 | 
			
		||||
    private Integer sendCode;
 | 
			
		||||
@@ -86,7 +86,7 @@ public class SmsLogExcelVO {
 | 
			
		||||
    private Integer receiveStatus;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("接收时间")
 | 
			
		||||
    private Date receiveTime;
 | 
			
		||||
    private LocalDateTime receiveTime;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("API 接收结果的编码")
 | 
			
		||||
    private String apiReceiveCode;
 | 
			
		||||
@@ -95,6 +95,6 @@ public class SmsLogExcelVO {
 | 
			
		||||
    private String apiReceiveMsg;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("创建时间")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -27,13 +27,13 @@ public class SmsLogExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "开始发送时间")
 | 
			
		||||
    private Date[] sendTime;
 | 
			
		||||
    private LocalDateTime[] sendTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "接收状态", example = "0")
 | 
			
		||||
    private Integer receiveStatus;
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "开始接收时间")
 | 
			
		||||
    private Date[] receiveTime;
 | 
			
		||||
    private LocalDateTime[] receiveTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -32,13 +32,13 @@ public class SmsLogPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "发送时间")
 | 
			
		||||
    private Date[] sendTime;
 | 
			
		||||
    private LocalDateTime[] sendTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "接收状态", example = "0", notes = "参见 SmsReceiveStatusEnum 枚举类")
 | 
			
		||||
    private Integer receiveStatus;
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "接收时间")
 | 
			
		||||
    private Date[] receiveTime;
 | 
			
		||||
    private LocalDateTime[] receiveTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 短信日志 Response VO")
 | 
			
		||||
@@ -51,7 +51,7 @@ public class SmsLogRespVO {
 | 
			
		||||
    private Integer sendStatus;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "发送时间")
 | 
			
		||||
    private Date sendTime;
 | 
			
		||||
    private LocalDateTime sendTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "发送结果的编码", example = "0")
 | 
			
		||||
    private Integer sendCode;
 | 
			
		||||
@@ -75,7 +75,7 @@ public class SmsLogRespVO {
 | 
			
		||||
    private Integer receiveStatus;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "接收时间")
 | 
			
		||||
    private Date receiveTime;
 | 
			
		||||
    private LocalDateTime receiveTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "API 接收结果的编码", example = "DELIVRD")
 | 
			
		||||
    private String apiReceiveCode;
 | 
			
		||||
@@ -84,6 +84,6 @@ public class SmsLogRespVO {
 | 
			
		||||
    private String apiReceiveMsg;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 短信模板 Excel VO
 | 
			
		||||
@@ -50,6 +50,6 @@ public class SmsTemplateExcelVO {
 | 
			
		||||
    private String channelCode;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("创建时间")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -33,6 +33,6 @@ public class SmsTemplateExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -38,6 +38,6 @@ public class SmsTemplatePageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 短信模板 Response VO")
 | 
			
		||||
@@ -25,6 +25,6 @@ public class SmsTemplateRespVO extends SmsTemplateBaseVO {
 | 
			
		||||
    private List<String> params;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -29,5 +29,5 @@ public class TenantPackagePageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 租户套餐 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -18,6 +18,6 @@ public class TenantPackageRespVO extends TenantPackageBaseVO {
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.*;
 | 
			
		||||
import org.hibernate.validator.constraints.URL;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* 租户 Base VO,提供给添加、修改、详细的子 VO 使用
 | 
			
		||||
@@ -39,7 +39,7 @@ public class TenantBaseVO {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "过期时间", required = true)
 | 
			
		||||
    @NotNull(message = "过期时间不能为空")
 | 
			
		||||
    private Date expireTime;
 | 
			
		||||
    private LocalDateTime expireTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "账号数量", required = true, example = "1024")
 | 
			
		||||
    @NotNull(message = "账号数量不能为空")
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
 | 
			
		||||
@@ -34,6 +34,6 @@ public class TenantExcelVO {
 | 
			
		||||
    private Integer status;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("创建时间")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -27,6 +27,6 @@ public class TenantExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -32,6 +32,6 @@ public class TenantPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    @ApiModelProperty(value = "创建时间")
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,10 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant;
 | 
			
		||||
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import io.swagger.annotations.*;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 租户 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@@ -14,6 +15,6 @@ public class TenantRespVO extends TenantBaseVO {
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true)
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -29,10 +29,10 @@ public class UserProfileRespVO extends UserBaseVO {
 | 
			
		||||
    private String loginIp;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "最后登录时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date loginDate;
 | 
			
		||||
    private LocalDateTime loginDate;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 所属角色
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户 Excel 导出 VO
 | 
			
		||||
@@ -41,7 +41,7 @@ public class UserExcelVO {
 | 
			
		||||
    private String loginIp;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("最后登录时间")
 | 
			
		||||
    private Date loginDate;
 | 
			
		||||
    private LocalDateTime loginDate;
 | 
			
		||||
 | 
			
		||||
    @ExcelProperty("部门名称")
 | 
			
		||||
    private String deptName;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -28,7 +28,7 @@ public class UserExportReqVO {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "部门编号", example = "1024", notes = "同时筛选子部门")
 | 
			
		||||
    private Long deptId;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@@ -31,7 +31,7 @@ public class UserPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private Date[] createTime;
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "部门编号", example = "1024", notes = "同时筛选子部门")
 | 
			
		||||
    private Long deptId;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,8 @@ import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ApiModel("管理后台 - 用户信息 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@@ -23,9 +24,9 @@ public class UserRespVO extends UserBaseVO {
 | 
			
		||||
    private String loginIp;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "最后登录时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date loginDate;
 | 
			
		||||
    private LocalDateTime loginDate;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.convert.oauth2;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.date.LocalDateTimeUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.core.KeyValue;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
@@ -34,7 +35,7 @@ public interface OAuth2OpenConvert {
 | 
			
		||||
 | 
			
		||||
    default OAuth2OpenCheckTokenRespVO convert2(OAuth2AccessTokenDO bean) {
 | 
			
		||||
        OAuth2OpenCheckTokenRespVO respVO = convert3(bean);
 | 
			
		||||
        respVO.setExp(bean.getExpiresTime().getTime() / 1000L);
 | 
			
		||||
        respVO.setExp(LocalDateTimeUtil.toEpochMilli(bean.getExpiresTime()) / 1000L);
 | 
			
		||||
        respVO.setUserType(UserTypeEnum.ADMIN.getValue());
 | 
			
		||||
        return respVO;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -117,7 +117,7 @@ public class OperateLogDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 开始时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date startTime;
 | 
			
		||||
    private LocalDateTime startTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 执行时长,单位:毫秒
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -64,6 +64,6 @@ public class OAuth2AccessTokenDO extends TenantBaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date expiresTime;
 | 
			
		||||
    private LocalDateTime expiresTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * OAuth2 批准 DO
 | 
			
		||||
@@ -58,6 +58,6 @@ public class OAuth2ApproveDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date expiresTime;
 | 
			
		||||
    private LocalDateTime expiresTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -63,6 +63,6 @@ public class OAuth2CodeDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date expiresTime;
 | 
			
		||||
    private LocalDateTime expiresTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.experimental.Accessors;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -58,6 +58,6 @@ public class OAuth2RefreshTokenDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date expiresTime;
 | 
			
		||||
    private LocalDateTime expiresTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 手机验证码 DO
 | 
			
		||||
@@ -56,7 +56,7 @@ public class SmsCodeDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 使用时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date usedTime;
 | 
			
		||||
    private LocalDateTime usedTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 使用 IP
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -114,7 +114,7 @@ public class SmsLogDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 发送时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date sendTime;
 | 
			
		||||
    private LocalDateTime sendTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 发送结果的编码
 | 
			
		||||
     *
 | 
			
		||||
@@ -162,7 +162,7 @@ public class SmsLogDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 接收时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date receiveTime;
 | 
			
		||||
    private LocalDateTime receiveTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 短信 API 接收结果的编码
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 租户 DO
 | 
			
		||||
@@ -73,7 +73,7 @@ public class TenantDO extends BaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date expireTime;
 | 
			
		||||
    private LocalDateTime expireTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 账号数量
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -91,6 +91,6 @@ public class AdminUserDO extends TenantBaseDO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 最后登录时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date loginDate;
 | 
			
		||||
    private LocalDateTime loginDate;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -31,6 +31,6 @@ public interface DeptMapper extends BaseMapperX<DeptDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_dept WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,8 +8,8 @@ import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePag
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -43,7 +43,7 @@ public interface ErrorCodeMapper extends BaseMapperX<ErrorCodeDO> {
 | 
			
		||||
        return selectOne(new LambdaQueryWrapperX<ErrorCodeDO>().eq(ErrorCodeDO::getCode, code));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default List<ErrorCodeDO> selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) {
 | 
			
		||||
    default List<ErrorCodeDO> selectListByApplicationNameAndUpdateTimeGt(String applicationName, LocalDateTime minUpdateTime) {
 | 
			
		||||
        return selectList(new LambdaQueryWrapperX<ErrorCodeDO>().eq(ErrorCodeDO::getApplicationName, applicationName)
 | 
			
		||||
                .gtIfPresent(ErrorCodeDO::getUpdateTime, minUpdateTime));
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.token.OAuth2Acc
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -26,7 +26,7 @@ public interface OAuth2AccessTokenMapper extends BaseMapperX<OAuth2AccessTokenDO
 | 
			
		||||
                .eqIfPresent(OAuth2AccessTokenDO::getUserId, reqVO.getUserId())
 | 
			
		||||
                .eqIfPresent(OAuth2AccessTokenDO::getUserType, reqVO.getUserType())
 | 
			
		||||
                .likeIfPresent(OAuth2AccessTokenDO::getClientId, reqVO.getClientId())
 | 
			
		||||
                .gt(OAuth2AccessTokenDO::getExpiresTime, new Date())
 | 
			
		||||
                .gt(OAuth2AccessTokenDO::getExpiresTime, LocalDateTime.now())
 | 
			
		||||
                .orderByDesc(OAuth2AccessTokenDO::getId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,8 @@ import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * OAuth2 客户端 Mapper
 | 
			
		||||
@@ -30,6 +31,6 @@ public interface OAuth2ClientMapper extends BaseMapperX<OAuth2ClientDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_oauth2_client WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    int selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    int selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -29,6 +29,6 @@ public interface MenuMapper extends BaseMapperX<MenuDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_menu WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,8 @@ import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
import org.springframework.lang.Nullable;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -48,6 +48,6 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_role WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,8 +8,8 @@ import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
import org.springframework.stereotype.Repository;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -37,6 +37,6 @@ public interface RoleMenuMapper extends BaseMapperX<RoleMenuDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_role_menu WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -40,6 +40,6 @@ public interface UserRoleMapper extends BaseMapperX<UserRoleDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_user_role WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sensitiveword.SensitiveWord
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -43,6 +43,6 @@ public interface SensitiveWordMapper extends BaseMapperX<SensitiveWordDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_sensitive_word WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface SmsChannelMapper extends BaseMapperX<SmsChannelDO> {
 | 
			
		||||
@@ -22,6 +22,6 @@ public interface SmsChannelMapper extends BaseMapperX<SmsChannelDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_sms_channel WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ public interface SmsLogMapper extends BaseMapperX<SmsLogDO> {
 | 
			
		||||
                .likeIfPresent(SmsLogDO::getMobile, reqVO.getMobile())
 | 
			
		||||
                .eqIfPresent(SmsLogDO::getSendStatus, reqVO.getSendStatus())
 | 
			
		||||
                .betweenIfPresent(SmsLogDO::getSendTime, reqVO.getSendTime())
 | 
			
		||||
                .eqIfPresent(SmsLogDO::getSendStatus, reqVO.getReceiveStatus())
 | 
			
		||||
                .eqIfPresent(SmsLogDO::getReceiveStatus, reqVO.getReceiveStatus())
 | 
			
		||||
                .betweenIfPresent(SmsLogDO::getReceiveTime, reqVO.getReceiveTime())
 | 
			
		||||
                .orderByDesc(SmsLogDO::getId));
 | 
			
		||||
    }
 | 
			
		||||
@@ -32,7 +32,7 @@ public interface SmsLogMapper extends BaseMapperX<SmsLogDO> {
 | 
			
		||||
                .likeIfPresent(SmsLogDO::getMobile, reqVO.getMobile())
 | 
			
		||||
                .eqIfPresent(SmsLogDO::getSendStatus, reqVO.getSendStatus())
 | 
			
		||||
                .betweenIfPresent(SmsLogDO::getSendTime, reqVO.getSendTime())
 | 
			
		||||
                .eqIfPresent(SmsLogDO::getSendStatus, reqVO.getReceiveStatus())
 | 
			
		||||
                .eqIfPresent(SmsLogDO::getReceiveStatus, reqVO.getReceiveStatus())
 | 
			
		||||
                .betweenIfPresent(SmsLogDO::getReceiveTime, reqVO.getReceiveTime())
 | 
			
		||||
                .orderByDesc(SmsLogDO::getId));
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,14 +9,14 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface SmsTemplateMapper extends BaseMapperX<SmsTemplateDO> {
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_sms_template WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
    default SmsTemplateDO selectByCode(String code) {
 | 
			
		||||
        return selectOne(SmsTemplateDO::getCode, code);
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -53,6 +53,6 @@ public interface TenantMapper extends BaseMapperX<TenantDO> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM system_tenant WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
    Long selectCountByUpdateTimeGt(LocalDateTime maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.dal.redis.oauth2;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.date.LocalDateTimeUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
 | 
			
		||||
@@ -7,6 +8,8 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 | 
			
		||||
import org.springframework.stereotype.Repository;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.time.temporal.ChronoUnit;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
@@ -33,8 +36,8 @@ public class OAuth2AccessTokenRedisDAO {
 | 
			
		||||
        String redisKey = formatKey(accessTokenDO.getAccessToken());
 | 
			
		||||
        // 清理多余字段,避免缓存
 | 
			
		||||
        accessTokenDO.setUpdater(null).setUpdateTime(null).setCreateTime(null).setCreator(null).setDeleted(null);
 | 
			
		||||
        stringRedisTemplate.opsForValue().set(redisKey, JsonUtils.toJsonString(accessTokenDO),
 | 
			
		||||
                accessTokenDO.getExpiresTime().getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
 | 
			
		||||
        long time = LocalDateTimeUtil.between(LocalDateTime.now(), accessTokenDO.getExpiresTime(), ChronoUnit.SECONDS);
 | 
			
		||||
        stringRedisTemplate.opsForValue().set(redisKey, JsonUtils.toJsonString(accessTokenDO), time, TimeUnit.SECONDS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void delete(String accessToken) {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.framework.sms;
 | 
			
		||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
 | 
			
		||||
@Configuration
 | 
			
		||||
@Configuration(proxyBeanMethods = false)
 | 
			
		||||
@EnableConfigurationProperties(SmsCodeProperties.class)
 | 
			
		||||
public class SmsCodeConfiguration {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@ import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
@@ -64,7 +65,7 @@ public class DeptServiceImpl implements DeptService {
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存部门的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    private volatile Date maxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private DeptMapper deptMapper;
 | 
			
		||||
@@ -112,7 +113,7 @@ public class DeptServiceImpl implements DeptService {
 | 
			
		||||
     * @param maxUpdateTime 当前部门的最大更新时间
 | 
			
		||||
     * @return 部门列表
 | 
			
		||||
     */
 | 
			
		||||
    protected List<DeptDO> loadDeptIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    protected List<DeptDO> loadDeptIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadMenuIfUpdate][首次加载全量部门]");
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeUpd
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO;
 | 
			
		||||
 | 
			
		||||
import javax.validation.Valid;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -36,7 +36,7 @@ public interface ErrorCodeService {
 | 
			
		||||
     * @param minUpdateTime 最小更新时间
 | 
			
		||||
     * @return 错误码数组
 | 
			
		||||
     */
 | 
			
		||||
    List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, Date minUpdateTime);
 | 
			
		||||
    List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, LocalDateTime minUpdateTime);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建错误码
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@@ -164,7 +164,7 @@ public class ErrorCodeServiceImpl implements ErrorCodeService {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, Date minUpdateTime) {
 | 
			
		||||
    public List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, LocalDateTime minUpdateTime) {
 | 
			
		||||
        List<ErrorCodeDO> errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt(
 | 
			
		||||
                applicationName, minUpdateTime);
 | 
			
		||||
        return ErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs);
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 | 
			
		||||
@@ -44,7 +45,7 @@ public class OAuth2ApproveServiceImpl implements OAuth2ApproveService {
 | 
			
		||||
        Assert.notNull(clientDO, "客户端不能为空"); // 防御性编程
 | 
			
		||||
        if (CollUtil.containsAll(clientDO.getAutoApproveScopes(), requestedScopes)) {
 | 
			
		||||
            // gh-877 - if all scopes are auto approved, approvals still need to be added to the approval store.
 | 
			
		||||
            Date expireTime = DateUtils.addDate(Calendar.SECOND, TIMEOUT);
 | 
			
		||||
            LocalDateTime expireTime = LocalDateTime.now().plusSeconds(TIMEOUT);
 | 
			
		||||
            for (String scope : requestedScopes) {
 | 
			
		||||
                saveApprove(userId, userType, clientId, scope, true, expireTime);
 | 
			
		||||
            }
 | 
			
		||||
@@ -68,8 +69,8 @@ public class OAuth2ApproveServiceImpl implements OAuth2ApproveService {
 | 
			
		||||
 | 
			
		||||
        // 更新批准的信息
 | 
			
		||||
        boolean success = false; // 需要至少有一个同意
 | 
			
		||||
        Date expireTime = DateUtils.addDate(Calendar.SECOND, TIMEOUT);
 | 
			
		||||
        for (Map.Entry<String, Boolean> entry :requestedScopes.entrySet()) {
 | 
			
		||||
        LocalDateTime expireTime = LocalDateTime.now().plusSeconds(TIMEOUT);
 | 
			
		||||
        for (Map.Entry<String, Boolean> entry : requestedScopes.entrySet()) {
 | 
			
		||||
            if (entry.getValue()) {
 | 
			
		||||
                success = true;
 | 
			
		||||
            }
 | 
			
		||||
@@ -88,7 +89,7 @@ public class OAuth2ApproveServiceImpl implements OAuth2ApproveService {
 | 
			
		||||
 | 
			
		||||
    @VisibleForTesting
 | 
			
		||||
    void saveApprove(Long userId, Integer userType, String clientId,
 | 
			
		||||
                     String scope, Boolean approved, Date expireTime) {
 | 
			
		||||
                     String scope, Boolean approved, LocalDateTime expireTime) {
 | 
			
		||||
        // 先更新
 | 
			
		||||
        OAuth2ApproveDO approveDO = new OAuth2ApproveDO().setUserId(userId).setUserType(userType)
 | 
			
		||||
                .setClientId(clientId).setScope(scope).setApproved(approved).setExpiresTime(expireTime);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,7 @@ import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
@@ -59,7 +60,7 @@ public class OAuth2ClientServiceImpl implements OAuth2ClientService {
 | 
			
		||||
     * 缓存角色的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    private volatile Date maxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private OAuth2ClientMapper oauth2ClientMapper;
 | 
			
		||||
@@ -97,7 +98,7 @@ public class OAuth2ClientServiceImpl implements OAuth2ClientService {
 | 
			
		||||
     * @param maxUpdateTime 当前客户端的最大更新时间
 | 
			
		||||
     * @return 客户端列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<OAuth2ClientDO> loadOAuth2ClientIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    private List<OAuth2ClientDO> loadOAuth2ClientIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadOAuth2ClientIfUpdate][首次加载全量客户端]");
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
@@ -38,7 +38,7 @@ public class OAuth2CodeServiceImpl implements OAuth2CodeService {
 | 
			
		||||
        OAuth2CodeDO codeDO = new OAuth2CodeDO().setCode(generateCode())
 | 
			
		||||
                .setUserId(userId).setUserType(userType)
 | 
			
		||||
                .setClientId(clientId).setScopes(scopes)
 | 
			
		||||
                .setExpiresTime(DateUtils.addDate(Calendar.SECOND, TIMEOUT))
 | 
			
		||||
                .setExpiresTime(LocalDateTime.now().plusSeconds(TIMEOUT))
 | 
			
		||||
                .setRedirectUri(redirectUri).setState(state);
 | 
			
		||||
        oauth2CodeMapper.insert(codeDO);
 | 
			
		||||
        return codeDO;
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@@ -137,7 +138,7 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
 | 
			
		||||
                .setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType())
 | 
			
		||||
                .setClientId(clientDO.getClientId()).setScopes(refreshTokenDO.getScopes())
 | 
			
		||||
                .setRefreshToken(refreshTokenDO.getRefreshToken())
 | 
			
		||||
                .setExpiresTime(DateUtils.addDate(Calendar.SECOND, clientDO.getAccessTokenValiditySeconds()));
 | 
			
		||||
                .setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getAccessTokenValiditySeconds()));
 | 
			
		||||
        accessTokenDO.setTenantId(TenantContextHolder.getTenantId()); // 手动设置租户编号,避免缓存到 Redis 的时候,无对应的租户编号
 | 
			
		||||
        oauth2AccessTokenMapper.insert(accessTokenDO);
 | 
			
		||||
        // 记录到 Redis 中
 | 
			
		||||
@@ -149,7 +150,7 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
 | 
			
		||||
        OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO().setRefreshToken(generateRefreshToken())
 | 
			
		||||
                .setUserId(userId).setUserType(userType)
 | 
			
		||||
                .setClientId(clientDO.getClientId()).setScopes(scopes)
 | 
			
		||||
                .setExpiresTime(DateUtils.addDate(Calendar.SECOND, clientDO.getRefreshTokenValiditySeconds()));
 | 
			
		||||
                .setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getRefreshTokenValiditySeconds()));
 | 
			
		||||
        oauth2RefreshTokenMapper.insert(refreshToken);
 | 
			
		||||
        return refreshToken;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
@@ -66,7 +67,7 @@ public class MenuServiceImpl implements MenuService {
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存菜单的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    private volatile Date maxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private MenuMapper menuMapper;
 | 
			
		||||
@@ -118,7 +119,7 @@ public class MenuServiceImpl implements MenuService {
 | 
			
		||||
     * @param maxUpdateTime 当前菜单的最大更新时间
 | 
			
		||||
     * @return 菜单列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<MenuDO> loadMenuIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    private List<MenuDO> loadMenuIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadMenuIfUpdate][首次加载全量菜单]");
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.function.Supplier;
 | 
			
		||||
 | 
			
		||||
@@ -86,7 +87,7 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
     * 缓存 RoleMenu 的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    private volatile Date roleMenuMaxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime roleMenuMaxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户编号与角色编号的缓存映射
 | 
			
		||||
@@ -102,7 +103,7 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
     * 缓存 UserRole 的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    private volatile Date userRoleMaxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime userRoleMaxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private RoleMenuMapper roleMenuMapper;
 | 
			
		||||
@@ -192,7 +193,7 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
     * @param maxUpdateTime 当前角色与菜单的关联的最大更新时间
 | 
			
		||||
     * @return 角色与菜单的关联列表
 | 
			
		||||
     */
 | 
			
		||||
    protected List<RoleMenuDO> loadRoleMenuIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    protected List<RoleMenuDO> loadRoleMenuIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadRoleMenuIfUpdate][首次加载全量角色与菜单的关联]");
 | 
			
		||||
@@ -213,7 +214,7 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
     * @param maxUpdateTime 当前角色与菜单的关联的最大更新时间
 | 
			
		||||
     * @return 角色与菜单的关联列表
 | 
			
		||||
     */
 | 
			
		||||
    protected List<UserRoleDO> loadUserRoleIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    protected List<UserRoleDO> loadUserRoleIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadUserRoleIfUpdate][首次加载全量用户与角色的关联]");
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ import org.springframework.util.StringUtils;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
@@ -65,7 +66,7 @@ public class RoleServiceImpl implements RoleService {
 | 
			
		||||
     * 缓存角色的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    private volatile Date maxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private PermissionService permissionService;
 | 
			
		||||
@@ -111,7 +112,7 @@ public class RoleServiceImpl implements RoleService {
 | 
			
		||||
     * @param maxUpdateTime 当前角色的最大更新时间
 | 
			
		||||
     * @return 角色列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<RoleDO> loadRoleIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    private List<RoleDO> loadRoleIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadRoleIfUpdate][首次加载全量角色]");
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,7 @@ import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
@@ -58,7 +59,7 @@ public class SensitiveWordServiceImpl implements SensitiveWordService {
 | 
			
		||||
     * 缓存敏感词的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    private volatile Date maxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private SensitiveWordMapper sensitiveWordMapper;
 | 
			
		||||
@@ -133,7 +134,7 @@ public class SensitiveWordServiceImpl implements SensitiveWordService {
 | 
			
		||||
     * @param maxUpdateTime 当前敏感词的最大更新时间
 | 
			
		||||
     * @return 敏感词列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<SensitiveWordDO> loadSensitiveWordIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    private List<SensitiveWordDO> loadSensitiveWordIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
        if (maxUpdateTime == null) {
 | 
			
		||||
 
 | 
			
		||||
@@ -18,8 +18,8 @@ import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
@@ -45,7 +45,7 @@ public class SmsChannelServiceImpl implements SmsChannelService {
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存菜单的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    private volatile Date maxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private SmsClientFactory smsClientFactory;
 | 
			
		||||
@@ -89,7 +89,7 @@ public class SmsChannelServiceImpl implements SmsChannelService {
 | 
			
		||||
     * @param maxUpdateTime 当前短信渠道的最大更新时间
 | 
			
		||||
     * @return 短信渠道列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<SmsChannelDO> loadSmsChannelIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    private List<SmsChannelDO> loadSmsChannelIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadSmsChannelIfUpdate][首次加载全量短信渠道]");
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.service.sms;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.date.LocalDateTimeUtil;
 | 
			
		||||
import cn.hutool.core.lang.Assert;
 | 
			
		||||
import cn.hutool.core.map.MapUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
 | 
			
		||||
@@ -15,7 +16,9 @@ import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.time.temporal.ChronoUnit;
 | 
			
		||||
 | 
			
		||||
import static cn.hutool.core.util.RandomUtil.randomInt;
 | 
			
		||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
 | 
			
		||||
@@ -51,9 +54,9 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 | 
			
		||||
 | 
			
		||||
    private String createSmsCode(String mobile, Integer scene, String ip) {
 | 
			
		||||
        // 校验是否可以发送验证码,不用筛选场景
 | 
			
		||||
        SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, null,null);
 | 
			
		||||
        SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, null, null);
 | 
			
		||||
        if (lastSmsCode != null) {
 | 
			
		||||
            if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime()
 | 
			
		||||
            if (LocalDateTimeUtil.between(lastSmsCode.getCreateTime(), LocalDateTime.now()).toMillis()
 | 
			
		||||
                    < smsCodeProperties.getSendFrequency().toMillis()) { // 发送过于频繁
 | 
			
		||||
                throw ServiceExceptionUtil.exception(SMS_CODE_SEND_TOO_FAST);
 | 
			
		||||
            }
 | 
			
		||||
@@ -80,7 +83,7 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 | 
			
		||||
        SmsCodeDO lastSmsCode = this.checkSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene());
 | 
			
		||||
        // 使用验证码
 | 
			
		||||
        smsCodeMapper.updateById(SmsCodeDO.builder().id(lastSmsCode.getId())
 | 
			
		||||
                .used(true).usedTime(new Date()).usedIp(reqDTO.getUsedIp()).build());
 | 
			
		||||
                .used(true).usedTime(LocalDateTime.now()).usedIp(reqDTO.getUsedIp()).build());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -90,13 +93,13 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 | 
			
		||||
 | 
			
		||||
    public SmsCodeDO checkSmsCode0(String mobile, String code, Integer scene) {
 | 
			
		||||
        // 校验验证码
 | 
			
		||||
        SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile,code,scene);
 | 
			
		||||
        SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, code, scene);
 | 
			
		||||
        // 若验证码不存在,抛出异常
 | 
			
		||||
        if (lastSmsCode == null) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(SMS_CODE_NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        // 超过时间
 | 
			
		||||
        if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime()
 | 
			
		||||
        if (LocalDateTimeUtil.between(lastSmsCode.getCreateTime(), LocalDateTime.now()).toMillis()
 | 
			
		||||
                >= smsCodeProperties.getExpireTimes().toMillis()) { // 验证码已过期
 | 
			
		||||
            throw ServiceExceptionUtil.exception(SMS_CODE_EXPIRED);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,7 @@ public interface SmsLogService {
 | 
			
		||||
     * @param apiReceiveCode API 接收结果的编码
 | 
			
		||||
     * @param apiReceiveMsg API 接收结果的说明
 | 
			
		||||
     */
 | 
			
		||||
    void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg);
 | 
			
		||||
    void updateSmsReceiveResult(Long id, Boolean success, LocalDateTime receiveTime, String apiReceiveCode, String apiReceiveMsg);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得短信日志分页
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
@@ -61,13 +61,13 @@ public class SmsLogServiceImpl implements SmsLogService {
 | 
			
		||||
        SmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ?
 | 
			
		||||
                SmsSendStatusEnum.SUCCESS : SmsSendStatusEnum.FAILURE;
 | 
			
		||||
        smsLogMapper.updateById(SmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus())
 | 
			
		||||
                .sendTime(new Date()).sendCode(sendCode).sendMsg(sendMsg)
 | 
			
		||||
                .sendTime(LocalDateTime.now()).sendCode(sendCode).sendMsg(sendMsg)
 | 
			
		||||
                .apiSendCode(apiSendCode).apiSendMsg(apiSendMsg)
 | 
			
		||||
                .apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime,
 | 
			
		||||
    public void updateSmsReceiveResult(Long id, Boolean success, LocalDateTime receiveTime,
 | 
			
		||||
                                       String apiReceiveCode, String apiReceiveMsg) {
 | 
			
		||||
        SmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ?
 | 
			
		||||
                SmsReceiveStatusEnum.SUCCESS : SmsReceiveStatusEnum.FAILURE;
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.core.KeyValue;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 | 
			
		||||
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 | 
			
		||||
import cn.iocoder.yudao.framework.sms.core.client.SmsClient;
 | 
			
		||||
import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
 | 
			
		||||
import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
 | 
			
		||||
@@ -55,6 +56,7 @@ public class SmsSendServiceImpl implements SmsSendService {
 | 
			
		||||
    private SmsProducer smsProducer;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @DataPermission(enable = false) // 发送短信时,无需考虑数据权限
 | 
			
		||||
    public Long sendSingleSmsToAdmin(String mobile, Long userId, String templateCode, Map<String, Object> templateParams) {
 | 
			
		||||
        // 如果 mobile 为空,则加载用户编号对应的手机号
 | 
			
		||||
        if (StrUtil.isEmpty(mobile)) {
 | 
			
		||||
@@ -180,7 +182,7 @@ public class SmsSendServiceImpl implements SmsSendService {
 | 
			
		||||
        }
 | 
			
		||||
        // 更新短信日志的接收结果. 因为量一般不大,所以先使用 for 循环更新
 | 
			
		||||
        receiveResults.forEach(result -> smsLogService.updateSmsReceiveResult(result.getLogId(),
 | 
			
		||||
                result.getSuccess(), result.getReceiveTime(), result.getErrorCode(), result.getErrorCode()));
 | 
			
		||||
                result.getSuccess(), result.getReceiveTime(), result.getErrorCode(), result.getErrorMsg()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ import org.springframework.util.Assert;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
@@ -76,7 +77,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存短信模板的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
     */
 | 
			
		||||
    private volatile Date maxUpdateTime;
 | 
			
		||||
    private volatile LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @PostConstruct
 | 
			
		||||
@@ -100,7 +101,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
 | 
			
		||||
     * @param maxUpdateTime 当前短信模板的最大更新时间
 | 
			
		||||
     * @return 短信模板列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<SmsTemplateDO> loadSmsTemplateIfUpdate(Date maxUpdateTime) {
 | 
			
		||||
    private List<SmsTemplateDO> loadSmsTemplateIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadSmsTemplateIfUpdate][首次加载全量短信模板]");
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
@@ -129,7 +130,7 @@ public class AdminUserServiceImpl implements AdminUserService {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void updateUserLogin(Long id, String loginIp) {
 | 
			
		||||
        userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date()));
 | 
			
		||||
        userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(LocalDateTime.now()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,13 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.util.oauth2;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.hutool.core.date.LocalDateTimeUtil;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.time.temporal.ChronoUnit;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -46,7 +49,7 @@ public class OAuth2Utils {
 | 
			
		||||
     * @param additionalInformation 附加信息
 | 
			
		||||
     * @return 简化授权模式下的重定向 URI
 | 
			
		||||
     */
 | 
			
		||||
    public static String buildImplicitRedirectUri(String redirectUri, String accessToken, String state, Date expireTime,
 | 
			
		||||
    public static String buildImplicitRedirectUri(String redirectUri, String accessToken, String state, LocalDateTime expireTime,
 | 
			
		||||
                                                  Collection<String> scopes, Map<String, Object> additionalInformation) {
 | 
			
		||||
        Map<String, Object> vars = new LinkedHashMap<String, Object>();
 | 
			
		||||
        Map<String, String> keys = new HashMap<String, String>();
 | 
			
		||||
@@ -85,8 +88,8 @@ public class OAuth2Utils {
 | 
			
		||||
        return HttpUtils.append(redirectUri, query, null, !responseType.contains("code"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static long getExpiresIn(Date expireTime) {
 | 
			
		||||
        return (expireTime.getTime() - System.currentTimeMillis()) / 1000;
 | 
			
		||||
    public static long getExpiresIn(LocalDateTime expireTime) {
 | 
			
		||||
        return LocalDateTimeUtil.between(LocalDateTime.now(), expireTime, ChronoUnit.SECONDS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String buildScopeStr(Collection<String> scopes) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user