diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index f4090fd39..ae7766c57 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -14,7 +14,7 @@
https://github.com/YunaiV/ruoyi-vue-pro
- 1.8.3-snapshot
+ 1.8.2-snapshot
1.5.0
3.1.4
@@ -32,8 +32,6 @@
1.4.6
3.23.4
8.1.2.141
-
- 2.2.3
1.9.2
@@ -81,7 +79,7 @@
2.0.3
1.5.8
2.12.2
- 4.5.7.B
+ 4.5.5.B
@@ -150,6 +148,11 @@
yudao-spring-boot-starter-biz-data-permission
${revision}
+
+ cn.iocoder.cloud
+ yudao-spring-boot-starter-biz-social
+ ${revision}
+
cn.iocoder.cloud
yudao-spring-boot-starter-biz-error-code
@@ -198,12 +201,6 @@
${revision}
-
- cn.iocoder.cloud
- yudao-spring-boot-starter-websocket
- ${revision}
-
-
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
@@ -214,11 +211,6 @@
springdoc-openapi-starter-webmvc-api
${springdoc.version}
-
- org.springdoc
- springdoc-openapi-ui
- ${springdoc.version}
-
com.github.xiaoymin
knife4j-gateway-spring-boot-starter
@@ -306,12 +298,6 @@
${revision}
-
- org.apache.rocketmq
- rocketmq-spring-boot-starter
- ${rocketmq-spring.version}
-
-
cn.iocoder.cloud
@@ -630,12 +616,12 @@
com.github.binarywang
- wx-java-mp-spring-boot-starter
+ weixin-java-mp
${weixin-java.version}
com.github.binarywang
- wx-java-miniapp-spring-boot-starter
+ wx-java-mp-spring-boot-starter
${weixin-java.version}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/java/cn/iocoder/yudao/framework/weixin/WxMpServiceTest.java b/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/java/cn/iocoder/yudao/framework/weixin/WxMpServiceTest.java
new file mode 100644
index 000000000..3ac1d5b63
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/java/cn/iocoder/yudao/framework/weixin/WxMpServiceTest.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.framework.weixin;
+
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import jakarta.annotation.Resource;
+
+@SpringBootTest(classes = WxMpServiceTest.Application.class)
+public class WxMpServiceTest {
+
+ @Resource
+ private WxMpService wxMpService;
+
+ @Test
+ public void testGetAccessToken() throws WxErrorException {
+ String accessToken = wxMpService.getAccessToken();
+ System.out.println(accessToken);
+ }
+
+ @Test
+ public void testGet() throws WxErrorException {
+ String jsapiTicket = wxMpService.getJsapiTicket();
+ System.out.println(jsapiTicket);
+ }
+
+ @SpringBootApplication
+ public static class Application {
+
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/bus/AbstractBusProducer.java b/yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/bus/AbstractBusProducer.java
new file mode 100644
index 000000000..c690fc131
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/bus/AbstractBusProducer.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.framework.mq.core.bus;
+
+import jakarta.annotation.Resource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.bus.ServiceMatcher;
+import org.springframework.cloud.bus.event.RemoteApplicationEvent;
+import org.springframework.context.ApplicationEventPublisher;
+
+/**
+ * 基于 Spring Cloud Bus 实现的 Producer 抽象类
+ *
+ * @author 芋道源码
+ */
+public abstract class AbstractBusProducer {
+
+ @Resource
+ protected ApplicationEventPublisher applicationEventPublisher;
+
+ @Resource
+ protected ServiceMatcher serviceMatcher;
+
+ @Value("${spring.application.name}")
+ protected String applicationName;
+
+ protected void publishEvent(RemoteApplicationEvent event) {
+ applicationEventPublisher.publishEvent(event);
+ }
+
+ /**
+ * @return 只广播给自己服务的实例
+ */
+ protected String selfDestinationService() {
+ return applicationName + ":**";
+ }
+
+ protected String getBusId() {
+ return serviceMatcher.getBusId();
+ }
+
+}
diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java
index 1e3d158f0..7bc143c2b 100644
--- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java
+++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java
@@ -1,28 +1,22 @@
package cn.iocoder.yudao.module.bpm.api.task;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
-import cn.iocoder.yudao.module.bpm.enums.ApiConstants;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-
import jakarta.validation.Valid;
-@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
-@Tag(name = "RPC 服务 - 流程实例")
+/**
+ * 流程实例 Api 接口
+ *
+ * @author 芋道源码
+ */
public interface BpmProcessInstanceApi {
- String PREFIX = ApiConstants.PREFIX + "/process-instance";
-
- @PostMapping(PREFIX + "/create")
- @Operation(summary = "创建流程实例(提供给内部),返回实例编号")
- @Parameter(name = "userId", description = "用户编号", required = true, example = "1")
- CommonResult createProcessInstance(@RequestParam("userId") Long userId,
- @Valid @RequestBody BpmProcessInstanceCreateReqDTO reqDTO);
+ /**
+ * 创建流程实例(提供给内部)
+ *
+ * @param userId 用户编号
+ * @param reqDTO 创建信息
+ * @return 实例的编号
+ */
+ String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO);
}
diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java
index e5706171d..151daed17 100644
--- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java
+++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java
@@ -1,24 +1,33 @@
package cn.iocoder.yudao.module.bpm.api.task.dto;
-import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
-import jakarta.validation.constraints.NotEmpty;
import java.util.Map;
-@Schema(description = "RPC 服务 - 流程实例的创建 Request DTO")
+/**
+ * 流程实例的创建 Request DTO
+ *
+ * @author 芋道源码
+ */
@Data
public class BpmProcessInstanceCreateReqDTO {
- @Schema(description = "流程定义的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "leave")
+ /**
+ * 流程定义的标识
+ */
@NotEmpty(message = "流程定义的标识不能为空")
private String processDefinitionKey;
-
- @Schema(description = "变量实例", requiredMode = Schema.RequiredMode.REQUIRED)
+ /**
+ * 变量实例
+ */
private Map variables;
- @Schema(description = "业务的唯一标识", requiredMode = Schema.RequiredMode.REQUIRED)
- @NotEmpty(message = "业务的唯一标识不能为空")
- private String businessKey; // 例如说,请假申请的编号。通过它,可以查询到对应的实例
-
+ /**
+ * 业务的唯一标识
+ *
+ * 例如说,请假申请的编号。通过它,可以查询到对应的实例
+ */
+ @NotEmpty(message = "业务的唯一标识")
+ private String businessKey;
}
diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java
index d058a11c7..aa9b15cb6 100644
--- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java
+++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java
@@ -1,15 +1,11 @@
package cn.iocoder.yudao.module.bpm.api.task;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RestController;
-
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
/**
* Flowable 流程实例 Api 实现类
@@ -17,7 +13,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
* @author 芋道源码
* @author jason
*/
-@RestController
+@Service
@Validated
public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi {
@@ -25,8 +21,7 @@ public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi {
private BpmProcessInstanceService processInstanceService;
@Override
- public CommonResult createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO) {
- return success(processInstanceService.createProcessInstance(userId, reqDTO));
+ public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO) {
+ return processInstanceService.createProcessInstance(userId, reqDTO);
}
-
}
diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
index 6c3837179..400f81ed9 100644
--- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
+++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
@@ -3,10 +3,9 @@ package cn.iocoder.yudao.module.bpm.service.task;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*;
-import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO;
+import jakarta.validation.Valid;
import org.flowable.task.api.Task;
-import jakarta.validation.Valid;
import java.util.List;
import java.util.Map;
@@ -23,6 +22,7 @@ public interface BpmTaskService {
*
* @param userId 用户编号
* @param pageReqVO 分页请求
+ *
* @return 流程任务分页
*/
PageResult getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageReqVO);
@@ -32,6 +32,7 @@ public interface BpmTaskService {
*
* @param userId 用户编号
* @param pageReqVO 分页请求
+ *
* @return 流程任务分页
*/
PageResult getDoneTaskPage(Long userId, BpmTaskDonePageReqVO pageReqVO);
@@ -40,17 +41,19 @@ public interface BpmTaskService {
* 获得流程任务 Map
*
* @param processInstanceIds 流程实例的编号数组
+ *
* @return 流程任务 Map
*/
default Map> getTaskMapByProcessInstanceIds(List processInstanceIds) {
return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds),
- Task::getProcessInstanceId);
+ Task::getProcessInstanceId);
}
/**
* 获得流程任务列表
*
* @param processInstanceIds 流程实例的编号数组
+ *
* @return 流程任务列表
*/
List getTasksByProcessInstanceIds(List processInstanceIds);
@@ -59,19 +62,11 @@ public interface BpmTaskService {
* 获得指令流程实例的流程任务列表,包括所有状态的
*
* @param processInstanceId 流程实例的编号
+ *
* @return 流程任务列表
*/
List getTaskListByProcessInstanceId(String processInstanceId);
-
- /**
- * 通过任务 ID 集合,获取任务扩展表信息集合
- *
- * @param taskIdList 任务 ID 集合
- * @return 任务列表
- */
- List getTaskListByTaskIdList(List taskIdList);
-
/**
* 通过任务
*
@@ -132,53 +127,4 @@ public interface BpmTaskService {
*/
void updateTaskExtAssign(Task task);
- /**
- * 获取当前任务的可回退的流程集合
- *
- * @param taskId 当前的任务 ID
- * @return 可以回退的节点列表
- */
- List getReturnTaskList(String taskId);
-
- /**
- * 将任务回退到指定的 targetDefinitionKey 位置
- *
- * @param userId 用户编号
- * @param reqVO 回退的任务key和当前所在的任务ID
- */
- void returnTask(Long userId, BpmTaskReturnReqVO reqVO);
-
-
- /**
- * 将指定任务委派给其他人处理,等接收人处理后再回到原审批人手中审批
- *
- * @param userId 用户编号
- * @param reqVO 被委派人和被委派的任务编号理由参数
- */
- void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO);
-
- /**
- * 任务加签
- *
- * @param userId 被加签的用户和任务 ID,加签类型
- * @param reqVO 当前用户 ID
- */
- void createSignTask(Long userId, BpmTaskAddSignReqVO reqVO);
-
- /**
- * 任务减签名
- *
- * @param userId 当前用户ID
- * @param reqVO 被减签的任务 ID,理由
- */
- void deleteSignTask(Long userId, BpmTaskSubSignReqVO reqVO);
-
- /**
- * 获取指定任务的子任务和审批人信息
- *
- * @param parentId 指定任务ID
- * @return 子任务列表
- */
- List getChildrenTaskList(String parentId);
-
}
diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/dto/FileCreateReqDTO.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/dto/FileCreateReqDTO.java
index 5d134fae1..2be4cb3fa 100644
--- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/dto/FileCreateReqDTO.java
+++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/dto/FileCreateReqDTO.java
@@ -1,9 +1,8 @@
package cn.iocoder.yudao.module.infra.api.file.dto;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
@Schema(description = "RPC 服务 - 文件创建 Request DTO")
@Data
@@ -15,8 +14,8 @@ public class FileCreateReqDTO {
@Schema(description = "文件路径", example = "xxx.png")
private String path;
- @Schema(description = "文件内容", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "文件内容", required = true)
@NotEmpty(message = "文件内容不能为空")
private byte[] content;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java
index 0f62f6b07..b68b67627 100644
--- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java
+++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.infra.api.logger.dto;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "RPC 服务 - API 访问日志创建 Request DTO")
@@ -13,43 +13,43 @@ public class ApiAccessLogCreateReqDTO {
@Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
- @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @Schema(description = "用户编号", required = true, example = "1024")
private Long userId;
- @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "用户类型", required = true, example = "1")
private Integer userType;
- @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "system-server")
+ @Schema(description = "应用名", required = true, example = "system-server")
@NotNull(message = "应用名不能为空")
private String applicationName;
- @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET")
+ @Schema(description = "请求方法名", required = true, example = "GET")
@NotNull(message = "http 请求方法不能为空")
private String requestMethod;
- @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy")
+ @Schema(description = "请求地址", required = true, example = "/xxx/yyy")
@NotNull(message = "访问地址不能为空")
private String requestUrl;
- @Schema(description = "请求参数", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "请求参数", required = true)
@NotNull(message = "请求参数不能为空")
private String requestParams;
- @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
+ @Schema(description = "用户 IP", required = true, example = "127.0.0.1")
@NotNull(message = "ip 不能为空")
private String userIp;
- @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0")
+ @Schema(description = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")
@NotNull(message = "User-Agent 不能为空")
private String userAgent;
- @Schema(description = "开始时间",requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "开始时间", required = true)
@NotNull(message = "开始请求时间不能为空")
private LocalDateTime beginTime;
- @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "结束时间", required = true)
@NotNull(message = "结束请求时间不能为空")
private LocalDateTime endTime;
- @Schema(description = "执行时长,单位:毫秒", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "执行时长,单位:毫秒", required = true)
@NotNull(message = "执行时长不能为空")
private Integer duration;
- @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "结果码", required = true)
@NotNull(message = "错误码不能为空")
private Integer resultCode;
@Schema(description = "结果提示")
private String resultMsg;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java
index e3659e1aa..53b55122f 100644
--- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java
+++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.infra.api.logger.dto;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "RPC 服务 - API 错误日志创建 Request DTO")
@@ -13,56 +13,56 @@ public class ApiErrorLogCreateReqDTO {
@Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
- @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @Schema(description = "用户编号", required = true, example = "1024")
private Long userId;
- @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "用户类型", required = true, example = "1")
private Integer userType;
- @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "system-server")
+ @Schema(description = "应用名", required = true, example = "system-server")
@NotNull(message = "应用名不能为空")
private String applicationName;
- @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET")
+ @Schema(description = "请求方法名", required = true, example = "GET")
@NotNull(message = "http 请求方法不能为空")
private String requestMethod;
- @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy")
+ @Schema(description = "请求地址", required = true, example = "/xxx/yyy")
@NotNull(message = "访问地址不能为空")
private String requestUrl;
- @Schema(description = "请求参数", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "请求参数", required = true)
@NotNull(message = "请求参数不能为空")
private String requestParams;
- @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
+ @Schema(description = "用户 IP", required = true, example = "127.0.0.1")
@NotNull(message = "ip 不能为空")
private String userIp;
- @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0")
+ @Schema(description = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")
@NotNull(message = "User-Agent 不能为空")
private String userAgent;
- @Schema(description = "异常时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常时间", required = true)
@NotNull(message = "异常时间不能为空")
private LocalDateTime exceptionTime;
- @Schema(description = "异常名", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常名", required = true)
@NotNull(message = "异常名不能为空")
private String exceptionName;
- @Schema(description = "异常发生的类全名", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常发生的类全名", required = true)
@NotNull(message = "异常发生的类全名不能为空")
private String exceptionClassName;
- @Schema(description = "异常发生的类文件", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常发生的类文件", required = true)
@NotNull(message = "异常发生的类文件不能为空")
private String exceptionFileName;
- @Schema(description = "异常发生的方法名", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常发生的方法名", required = true)
@NotNull(message = "异常发生的方法名不能为空")
private String exceptionMethodName;
- @Schema(description = "异常发生的方法所在行", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常发生的方法所在行", required = true)
@NotNull(message = "异常发生的方法所在行不能为空")
private Integer exceptionLineNumber;
- @Schema(description = "异常的栈轨迹异常的栈轨迹", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常的栈轨迹异常的栈轨迹", required = true)
@NotNull(message = "异常的栈轨迹不能为空")
private String exceptionStackTrace;
- @Schema(description = "异常导致的根消息", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常导致的根消息", required = true)
@NotNull(message = "异常导致的根消息不能为空")
private String exceptionRootCauseMessage;
- @Schema(description = "异常导致的消息", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "异常导致的消息", required = true)
@NotNull(message = "异常导致的消息不能为空")
private String exceptionMessage;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java
index 08f717a6c..759326bec 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java
@@ -20,13 +20,13 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.Valid;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -60,19 +60,10 @@ public class CodegenController {
return success(codegenService.getDatabaseTableList(dataSourceConfigId, name, comment));
}
- @GetMapping("/table/list")
- @Operation(summary = "获得表定义列表")
- @Parameter(name = "dataSourceConfigId", description = "数据源配置的编号", required = true, example = "1")
- @PreAuthorize("@ss.hasPermission('infra:codegen:query')")
- public CommonResult> getCodegenTableList(@RequestParam(value = "dataSourceConfigId") Long dataSourceConfigId) {
- List list = codegenService.getCodegenTableList(dataSourceConfigId);
- return success(CodegenConvert.INSTANCE.convertList05(list));
- }
-
@GetMapping("/table/page")
@Operation(summary = "获得表定义分页")
@PreAuthorize("@ss.hasPermission('infra:codegen:query')")
- public CommonResult> getCodegenTablePage(@Valid CodegenTablePageReqVO pageReqVO) {
+ public CommonResult> getCodeGenTablePage(@Valid CodegenTablePageReqVO pageReqVO) {
PageResult pageResult = codegenService.getCodegenTablePage(pageReqVO);
return success(CodegenConvert.INSTANCE.convertPage(pageResult));
}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java
index 5e73377d7..cd00e8a91 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.util.List;
@Schema(description = "管理后台 - 基于数据库的表结构,创建代码生成器的表和字段定义 Request VO")
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java
index a6f7ab043..b34259069 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java
@@ -4,16 +4,14 @@ import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column.CodegenColumnBaseVO;
import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTableBaseVO;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
-import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
-import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.AssertTrue;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.AssertTrue;
-import jakarta.validation.constraints.NotNull;
import java.util.List;
@Schema(description = "管理后台 - 代码生成表和字段的修改 Request VO")
@@ -39,27 +37,12 @@ public class CodegenUpdateReqVO {
private Long id;
@AssertTrue(message = "上级菜单不能为空,请前往 [修改生成配置 -> 生成信息] 界面,设置“上级菜单”字段")
- @JsonIgnore
public boolean isParentMenuIdValid() {
// 生成场景为管理后台时,必须设置上级菜单,不然生成的菜单 SQL 是无父级菜单的
return ObjectUtil.notEqual(getScene(), CodegenSceneEnum.ADMIN.getScene())
|| getParentMenuId() != null;
}
- @AssertTrue(message = "关联的父表信息不全")
- @JsonIgnore
- public boolean isSubValid() {
- return ObjectUtil.notEqual(getTemplateType(), CodegenTemplateTypeEnum.SUB)
- || (ObjectUtil.isAllNotEmpty(getMasterTableId(), getSubJoinColumnId(), getSubJoinMany()));
- }
-
- @AssertTrue(message = "关联的树表信息不全")
- @JsonIgnore
- public boolean isTreeValid() {
- return ObjectUtil.notEqual(getTemplateType(), CodegenTemplateTypeEnum.TREE)
- || (ObjectUtil.isAllNotEmpty(getTreeParentColumnId(), getTreeNameColumnId()));
- }
-
}
@Schema(description = "更新表定义")
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java
index 9fc35cb69..1441b13e2 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 参数配置创建 Request VO")
@Data
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java
index 4d898e2e1..ddaf9cda1 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java
@@ -1,11 +1,11 @@
package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 参数配置信息 Response VO")
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java
index 718c97ecd..c13d883d7 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 参数配置创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigCreateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigCreateReqVO.java
index dfe330840..de876442e 100755
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigCreateReqVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigCreateReqVO.java
@@ -1,11 +1,11 @@
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
import java.util.Map;
@Schema(description = "管理后台 - 文件配置创建 Request VO")
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java
index ff9370a99..d0e912f66 100755
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java
@@ -2,11 +2,11 @@ package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
import cn.iocoder.yudao.framework.file.core.client.FileClientConfig;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 文件配置 Response VO")
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigUpdateReqVO.java
index e06bdd00d..6773764d6 100755
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigUpdateReqVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigUpdateReqVO.java
@@ -1,11 +1,11 @@
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
import java.util.Map;
@Schema(description = "管理后台 - 文件配置更新 Request VO")
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java
index 5d94cc7eb..34f230267 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 上传文件 Request VO")
@Data
public class FileUploadReqVO {
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java
new file mode 100755
index 000000000..828059ca4
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java
@@ -0,0 +1,97 @@
+package cn.iocoder.yudao.module.infra.controller.admin.test;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.*;
+import cn.iocoder.yudao.module.infra.convert.test.TestDemoConvert;
+import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO;
+import cn.iocoder.yudao.module.infra.service.test.TestDemoService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 字典类型")
+@RestController
+@RequestMapping("/infra/test-demo")
+@Validated
+public class TestDemoController {
+
+ @Resource
+ private TestDemoService testDemoService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建字典类型")
+ @PreAuthorize("@ss.hasPermission('infra:test-demo:create')")
+ public CommonResult createTestDemo(@Valid @RequestBody TestDemoCreateReqVO createReqVO) {
+ return success(testDemoService.createTestDemo(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新字典类型")
+ @PreAuthorize("@ss.hasPermission('infra:test-demo:update')")
+ public CommonResult updateTestDemo(@Valid @RequestBody TestDemoUpdateReqVO updateReqVO) {
+ testDemoService.updateTestDemo(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除字典类型")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('infra:test-demo:delete')")
+ public CommonResult deleteTestDemo(@RequestParam("id") Long id) {
+ testDemoService.deleteTestDemo(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得字典类型")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('infra:test-demo:query')")
+ public CommonResult getTestDemo(@RequestParam("id") Long id) {
+ TestDemoDO testDemo = testDemoService.getTestDemo(id);
+ return success(TestDemoConvert.INSTANCE.convert(testDemo));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得字典类型列表")
+ @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
+ @PreAuthorize("@ss.hasPermission('infra:test-demo:query')")
+ public CommonResult> getTestDemoList(@RequestParam("ids") Collection ids) {
+ List list = testDemoService.getTestDemoList(ids);
+ return success(TestDemoConvert.INSTANCE.convertList(list));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得字典类型分页")
+ @PreAuthorize("@ss.hasPermission('infra:test-demo:query')") public CommonResult> getTestDemoPage(@Valid TestDemoPageReqVO pageVO) {
+ PageResult pageResult = testDemoService.getTestDemoPage(pageVO);
+ return success(TestDemoConvert.INSTANCE.convertPage(pageResult));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出字典类型 Excel")
+ @PreAuthorize("@ss.hasPermission('infra:test-demo:export')") @OperateLog(type = EXPORT)
+ public void exportTestDemoExcel(@Valid TestDemoExportReqVO exportReqVO,
+ HttpServletResponse response) throws IOException {
+ List list = testDemoService.getTestDemoList(exportReqVO);
+ // 导出 Excel
+ List datas = TestDemoConvert.INSTANCE.convertList02(list);
+ ExcelUtils.write(response, "字典类型.xls", "数据", TestDemoExcelVO.class, datas);
+ }
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java
new file mode 100755
index 000000000..d58c5afbc
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.infra.controller.admin.test.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+* 字典类型 Base VO,提供给添加、修改、详细的子 VO 使用
+* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+*/
+@Data
+public class TestDemoBaseVO {
+
+ @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "名字不能为空")
+ private String name;
+
+ @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "状态不能为空")
+ private Integer status;
+
+ @Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "类型不能为空")
+ private Integer type;
+
+ @Schema(description = "分类", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "分类不能为空")
+ private Integer category;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java
index 7f51c6899..7c8291f63 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java
@@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper;
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
-import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties;
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenBuilder;
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine;
@@ -22,11 +21,14 @@ import cn.iocoder.yudao.module.infra.service.db.DatabaseTableService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import com.baomidou.mybatisplus.generator.config.po.TableField;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import jakarta.annotation.Resource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.function.BiPredicate;
import java.util.stream.Collectors;
@@ -127,16 +129,6 @@ public class CodegenServiceImpl implements CodegenService {
if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) {
throw exception(CODEGEN_TABLE_NOT_EXISTS);
}
- // 校验主表字段存在
- if (Objects.equals(updateReqVO.getTable().getTemplateType(), CodegenTemplateTypeEnum.SUB.getType())) {
- if (codegenTableMapper.selectById(updateReqVO.getTable().getMasterTableId()) == null) {
- throw exception(CODEGEN_MASTER_TABLE_NOT_EXISTS, updateReqVO.getTable().getMasterTableId());
- }
- if (CollUtil.findOne(updateReqVO.getColumns(), // 关联主表的字段不存在
- column -> column.getId().equals(updateReqVO.getTable().getSubJoinColumnId())) == null) {
- throw exception(CODEGEN_SUB_COLUMN_NOT_EXISTS, updateReqVO.getTable().getSubJoinColumnId());
- }
- }
// 更新 table 表定义
CodegenTableDO updateTableObj = CodegenConvert.INSTANCE.convert(updateReqVO.getTable());
@@ -216,11 +208,6 @@ public class CodegenServiceImpl implements CodegenService {
codegenColumnMapper.deleteListByTableId(tableId);
}
- @Override
- public List getCodegenTableList(Long dataSourceConfigId) {
- return codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId);
- }
-
@Override
public PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO) {
return codegenTableMapper.selectPage(pageReqVO);
@@ -248,34 +235,14 @@ public class CodegenServiceImpl implements CodegenService {
throw exception(CODEGEN_COLUMN_NOT_EXISTS);
}
- // 如果是主子表,则加载对应的子表信息
- List subTables = null;
- List> subColumnsList = null;
- if (CodegenTemplateTypeEnum.isMaster(table.getTemplateType())) {
- // 校验子表存在
- subTables = codegenTableMapper.selectListByTemplateTypeAndMasterTableId(
- CodegenTemplateTypeEnum.SUB.getType(), tableId);
- if (CollUtil.isEmpty(subTables)) {
- throw exception(CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_TABLE);
- }
- // 校验子表的关联字段存在
- subColumnsList = new ArrayList<>();
- for (CodegenTableDO subTable : subTables) {
- List subColumns = codegenColumnMapper.selectListByTableId(subTable.getId());
- if (CollUtil.findOne(subColumns, column -> column.getId().equals(subTable.getSubJoinColumnId())) == null) {
- throw exception(CODEGEN_SUB_COLUMN_NOT_EXISTS, subTable.getId());
- }
- subColumnsList.add(subColumns);
- }
- }
-
// 执行生成
- return codegenEngine.execute(table, columns, subTables, subColumnsList);
+ return codegenEngine.execute(table, columns);
}
@Override
public List getDatabaseTableList(Long dataSourceConfigId, String name, String comment) {
List tables = databaseTableService.getTableList(dataSourceConfigId, name, comment);
+ // 移除已经生成的表
// 移除在 Codegen 中,已经存在的
Set existsTables = CollectionUtils.convertSet(
codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId), CodegenTableDO::getTableName);
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
index 51d2c7df0..d8d89793c 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
@@ -1,8 +1,6 @@
package cn.iocoder.yudao.module.infra.service.codegen.inner;
-import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
@@ -14,9 +12,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
-import cn.iocoder.yudao.framework.common.util.string.StrUtils;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
@@ -29,17 +25,18 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
-import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties;
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableTable;
import com.google.common.collect.Maps;
import com.google.common.collect.Table;
-import org.springframework.stereotype.Component;
-
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
-import java.util.*;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
import static cn.hutool.core.map.MapUtil.getStr;
import static cn.hutool.core.text.CharSequenceUtil.*;
@@ -63,19 +60,20 @@ public class CodegenEngine {
*/
private static final Map SERVER_TEMPLATES = MapUtil.builder(new LinkedHashMap<>()) // 有序
// Java module-biz Main
+ .put(javaTemplatePath("controller/vo/baseVO"), javaModuleImplVOFilePath("BaseVO"))
+ .put(javaTemplatePath("controller/vo/createReqVO"), javaModuleImplVOFilePath("CreateReqVO"))
.put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO"))
- .put(javaTemplatePath("controller/vo/listReqVO"), javaModuleImplVOFilePath("ListReqVO"))
.put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO"))
- .put(javaTemplatePath("controller/vo/saveReqVO"), javaModuleImplVOFilePath("SaveReqVO"))
+ .put(javaTemplatePath("controller/vo/updateReqVO"), javaModuleImplVOFilePath("UpdateReqVO"))
+ .put(javaTemplatePath("controller/vo/exportReqVO"), javaModuleImplVOFilePath("ExportReqVO"))
+ .put(javaTemplatePath("controller/vo/excelVO"), javaModuleImplVOFilePath("ExcelVO"))
.put(javaTemplatePath("controller/controller"), javaModuleImplControllerFilePath())
+ .put(javaTemplatePath("convert/convert"),
+ javaModuleImplMainFilePath("convert/${table.businessName}/${table.className}Convert"))
.put(javaTemplatePath("dal/do"),
javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${table.className}DO"))
- .put(javaTemplatePath("dal/do_sub"), // 特殊:主子表专属逻辑
- javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${subTable.className}DO"))
.put(javaTemplatePath("dal/mapper"),
javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${table.className}Mapper"))
- .put(javaTemplatePath("dal/mapper_sub"), // 特殊:主子表专属逻辑
- javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${subTable.className}Mapper"))
.put(javaTemplatePath("dal/mapper.xml"), mapperXmlFilePath())
.put(javaTemplatePath("service/serviceImpl"),
javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl"))
@@ -101,44 +99,34 @@ public class CodegenEngine {
private static final Table FRONT_TEMPLATES = ImmutableTable.builder()
// Vue2 标准模版
.put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/index.vue"),
- vueFilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
+ vueFilePath("views/${table.moduleName}/${classNameVar}/index.vue"))
.put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("api/api.js"),
vueFilePath("api/${table.moduleName}/${classNameVar}.js"))
// Vue3 标准模版
.put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/index.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/index.vue"))
.put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/form.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/form_sub_normal.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/form_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/form_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/list_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue"))
- .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/list_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/${simpleClassName}Form.vue"))
.put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("api/api.ts"),
- vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
+ vue3FilePath("api/${table.moduleName}/${classNameVar}/index.ts"))
// Vue3 Schema 模版
.put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("views/data.ts"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/${classNameVar}.data.ts"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/${classNameVar}.data.ts"))
.put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("views/index.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/index.vue"))
.put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("views/form.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Form.vue"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/${simpleClassName}Form.vue"))
.put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("api/api.ts"),
- vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
+ vue3FilePath("api/${table.moduleName}/${classNameVar}/index.ts"))
// Vue3 vben 模版
.put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("views/data.ts"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/${classNameVar}.data.ts"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/${classNameVar}.data.ts"))
.put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("views/index.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/index.vue"))
.put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("views/form.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Modal.vue"))
+ vue3FilePath("views/${table.moduleName}/${classNameVar}/${simpleClassName}Modal.vue"))
.put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("api/api.ts"),
- vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
+ vue3FilePath("api/${table.moduleName}/${classNameVar}/index.ts"))
.build();
@Resource
@@ -161,8 +149,7 @@ public class CodegenEngine {
}
@PostConstruct
- @VisibleForTesting
- void initGlobalBindingMap() {
+ private void initGlobalBindingMap() {
// 全局配置
globalBindingMap.put("basePackage", codegenProperties.getBasePackage());
globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage()
@@ -187,122 +174,9 @@ public class CodegenEngine {
globalBindingMap.put("DictConvertClassName", DictConvert.class.getName());
globalBindingMap.put("OperateLogClassName", OperateLog.class.getName());
globalBindingMap.put("OperateTypeEnumClassName", OperateTypeEnum.class.getName());
- globalBindingMap.put("BeanUtils", BeanUtils.class.getName());
}
- /**
- * 生成代码
- *
- * @param table 表定义
- * @param columns table 的字段定义数组
- * @param subTables 子表数组,当且仅当主子表时使用
- * @param subColumnsList subTables 的字段定义数组
- * @return 生成的代码,key 是路径,value 是对应代码
- */
- public Map execute(CodegenTableDO table, List columns,
- List subTables, List> subColumnsList) {
- // 1.1 初始化 bindMap 上下文
- Map bindingMap = initBindingMap(table, columns, subTables, subColumnsList);
- // 1.2 获得模版
- Map templates = getTemplates(table.getFrontType());
-
- // 2. 执行生成
- Map result = Maps.newLinkedHashMapWithExpectedSize(templates.size()); // 有序
- templates.forEach((vmPath, filePath) -> {
- // 2.1 特殊:主子表专属逻辑
- if (isSubTemplate(vmPath)) {
- generateSubCode(table, subTables, result, vmPath, filePath, bindingMap);
- return;
- // 2.2 特殊:树表专属逻辑
- } else if (isPageReqVOTemplate(vmPath)) {
- // 减少多余的类生成,例如说 PageVO.java 类
- if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
- return;
- }
- } else if (isListReqVOTemplate(vmPath)) {
- // 减少多余的类生成,例如说 ListVO.java 类
- if (!CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
- return;
- }
- }
- // 2.3 默认生成
- generateCode(result, vmPath, filePath, bindingMap);
- });
- return result;
- }
-
- private void generateCode(Map result, String vmPath,
- String filePath, Map bindingMap) {
- filePath = formatFilePath(filePath, bindingMap);
- String content = templateEngine.getTemplate(vmPath).render(bindingMap);
- // 格式化代码
- content = prettyCode(content);
- result.put(filePath, content);
- }
-
- private void generateSubCode(CodegenTableDO table, List subTables,
- Map result, String vmPath,
- String filePath, Map bindingMap) {
- // 没有子表,所以不生成
- if (CollUtil.isEmpty(subTables)) {
- return;
- }
- // 主子表的模式匹配。目的:过滤掉个性化的模版
- if (vmPath.contains("_normal")
- && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_NORMAL.getType())) {
- return;
- }
- if (vmPath.contains("_erp")
- && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_ERP.getType())) {
- return;
- }
- if (vmPath.contains("_inner")
- && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_INNER.getType())) {
- return;
- }
-
- // 逐个生成
- for (int i = 0; i < subTables.size(); i++) {
- bindingMap.put("subIndex", i);
- generateCode(result, vmPath, filePath, bindingMap);
- }
- bindingMap.remove("subIndex");
- }
-
- /**
- * 格式化生成后的代码
- *
- * 因为尽量让 vm 模版简单,所以统一的处理都在这个方法。
- * 如果不处理,Vue 的 Pretty 格式校验可能会报错
- *
- * @param content 格式化前的代码
- * @return 格式化后的代码
- */
- private String prettyCode(String content) {
- // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错
- content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }");
- // Vue 界面:去除多的 dateFormatter,只有一个的情况下,说明没使用到
- if (StrUtil.count(content, "dateFormatter") == 1) {
- content = StrUtils.removeLineContains(content, "dateFormatter");
- }
- // Vue 界面:去除多的 dict 相关,只有一个的情况下,说明没使用到
- if (StrUtil.count(content, "getIntDictOptions") == 1) {
- content = content.replace("getIntDictOptions, ", "");
- }
- if (StrUtil.count(content, "getStrDictOptions") == 1) {
- content = content.replace("getStrDictOptions, ", "");
- }
- if (StrUtil.count(content, "getBoolDictOptions") == 1) {
- content = content.replace("getBoolDictOptions, ", "");
- }
- if (StrUtil.count(content, "DICT_TYPE.") == 0) {
- content = StrUtils.removeLineContains(content, "DICT_TYPE");
- }
- return content;
- }
-
- private Map initBindingMap(CodegenTableDO table, List columns,
- List subTables, List> subColumnsList) {
+ public Map execute(CodegenTableDO table, List columns) {
// 创建 bindingMap
Map bindingMap = new HashMap<>(globalBindingMap);
bindingMap.put("table", table);
@@ -322,54 +196,17 @@ public class CodegenEngine {
// permission 前缀
bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase);
- // 特殊:树表专属逻辑
- if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
- CodegenColumnDO treeParentColumn = CollUtil.findOne(columns,
- column -> Objects.equals(column.getId(), table.getTreeParentColumnId()));
- bindingMap.put("treeParentColumn", treeParentColumn);
- bindingMap.put("treeParentColumn_javaField_underlineCase", toUnderlineCase(treeParentColumn.getJavaField()));
- CodegenColumnDO treeNameColumn = CollUtil.findOne(columns,
- column -> Objects.equals(column.getId(), table.getTreeNameColumnId()));
- bindingMap.put("treeNameColumn", treeNameColumn);
- bindingMap.put("treeNameColumn_javaField_underlineCase", toUnderlineCase(treeNameColumn.getJavaField()));
- }
-
- // 特殊:主子表专属逻辑
- if (CollUtil.isNotEmpty(subTables)) {
- // 创建 bindingMap
- bindingMap.put("subTables", subTables);
- bindingMap.put("subColumnsList", subColumnsList);
- List subPrimaryColumns = new ArrayList<>();
- List subJoinColumns = new ArrayList<>();
- List subJoinColumnStrikeCases = new ArrayList<>();
- List subSimpleClassNames = new ArrayList<>();
- List subClassNameVars = new ArrayList<>();
- List simpleClassNameUnderlineCases = new ArrayList<>();
- List subSimpleClassNameStrikeCases = new ArrayList<>();
- for (int i = 0; i < subTables.size(); i++) {
- CodegenTableDO subTable = subTables.get(i);
- List subColumns = subColumnsList.get(i);
- subPrimaryColumns.add(CollectionUtils.findFirst(subColumns, CodegenColumnDO::getPrimaryKey)); //
- CodegenColumnDO subColumn = CollectionUtils.findFirst(subColumns, // 关联的字段
- column -> Objects.equals(column.getId(), subTable.getSubJoinColumnId()));
- subJoinColumns.add(subColumn);
- subJoinColumnStrikeCases.add(toSymbolCase(subColumn.getJavaField(), '-')); // 将 DictType 转换成 dict-type
- // className 相关
- String subSimpleClassName = removePrefix(subTable.getClassName(), upperFirst(subTable.getModuleName()));
- subSimpleClassNames.add(subSimpleClassName);
- simpleClassNameUnderlineCases.add(toUnderlineCase(subSimpleClassName)); // 将 DictType 转换成 dict_type
- subClassNameVars.add(lowerFirst(subSimpleClassName)); // 将 DictType 转换成 dictType,用于变量
- subSimpleClassNameStrikeCases.add(toSymbolCase(subSimpleClassName, '-')); // 将 DictType 转换成 dict-type
- }
- bindingMap.put("subPrimaryColumns", subPrimaryColumns);
- bindingMap.put("subJoinColumns", subJoinColumns);
- bindingMap.put("subJoinColumn_strikeCases", subJoinColumnStrikeCases);
- bindingMap.put("subSimpleClassNames", subSimpleClassNames);
- bindingMap.put("simpleClassNameUnderlineCases", simpleClassNameUnderlineCases);
- bindingMap.put("subClassNameVars", subClassNameVars);
- bindingMap.put("subSimpleClassName_strikeCases", subSimpleClassNameStrikeCases);
- }
- return bindingMap;
+ // 执行生成
+ Map templates = getTemplates(table.getFrontType());
+ Map result = Maps.newLinkedHashMapWithExpectedSize(templates.size()); // 有序
+ templates.forEach((vmPath, filePath) -> {
+ filePath = formatFilePath(filePath, bindingMap);
+ String content = templateEngine.getTemplate(vmPath).render(bindingMap);
+ // 去除字段后面多余的 , 逗号
+ content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }");
+ result.put(filePath, content);
+ });
+ return result;
}
private Map getTemplates(Integer frontType) {
@@ -379,7 +216,6 @@ public class CodegenEngine {
return templates;
}
- @SuppressWarnings("unchecked")
private String formatFilePath(String filePath, Map bindingMap) {
filePath = StrUtil.replace(filePath, "${basePackage}",
getStr(bindingMap, "basePackage").replaceAll("\\.", "/"));
@@ -396,16 +232,6 @@ public class CodegenEngine {
filePath = StrUtil.replace(filePath, "${table.moduleName}", table.getModuleName());
filePath = StrUtil.replace(filePath, "${table.businessName}", table.getBusinessName());
filePath = StrUtil.replace(filePath, "${table.className}", table.getClassName());
- // 特殊:主子表专属逻辑
- Integer subIndex = (Integer) bindingMap.get("subIndex");
- if (subIndex != null) {
- CodegenTableDO subTable = ((List) bindingMap.get("subTables")).get(subIndex);
- filePath = StrUtil.replace(filePath, "${subTable.moduleName}", subTable.getModuleName());
- filePath = StrUtil.replace(filePath, "${subTable.businessName}", subTable.getBusinessName());
- filePath = StrUtil.replace(filePath, "${subTable.className}", subTable.getClassName());
- filePath = StrUtil.replace(filePath, "${subSimpleClassName}",
- ((List) bindingMap.get("subSimpleClassNames")).get(subIndex));
- }
return filePath;
}
@@ -472,17 +298,4 @@ public class CodegenEngine {
private static String vue3VbenTemplatePath(String path) {
return "codegen/vue3_vben/" + path + ".vm";
}
-
- private static boolean isSubTemplate(String path) {
- return path.contains("_sub");
- }
-
- private static boolean isPageReqVOTemplate(String path) {
- return path.contains("pageReqVO");
- }
-
- private static boolean isListReqVOTemplate(String path) {
- return path.contains("listReqVO");
- }
-
}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java
index 969cdc816..21207c389 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java
@@ -7,12 +7,10 @@ import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.Api
import cn.iocoder.yudao.module.infra.convert.logger.ApiAccessLogConvert;
import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO;
import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper;
-import lombok.extern.slf4j.Slf4j;
+import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
-import jakarta.annotation.Resource;
-import java.time.LocalDateTime;
import java.util.List;
/**
@@ -20,7 +18,6 @@ import java.util.List;
*
* @author 芋道源码
*/
-@Slf4j
@Service
@Validated
public class ApiAccessLogServiceImpl implements ApiAccessLogService {
@@ -44,21 +41,4 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService {
return apiAccessLogMapper.selectList(exportReqVO);
}
- @Override
- @SuppressWarnings("DuplicatedCode")
- public Integer cleanAccessLog(Integer exceedDay, Integer deleteLimit) {
- int count = 0;
- LocalDateTime expireDate = LocalDateTime.now().minusDays(exceedDay);
- // 循环删除,直到没有满足条件的数据
- for (int i = 0; i < Short.MAX_VALUE; i++) {
- int deleteCount = apiAccessLogMapper.deleteByCreateTimeLt(expireDate, deleteLimit);
- count += deleteCount;
- // 达到删除预期条数,说明到底了
- if (deleteCount < deleteLimit) {
- break;
- }
- }
- return count;
- }
-
}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java
index f45fc6384..ef4acdd49 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java
@@ -8,11 +8,10 @@ import cn.iocoder.yudao.module.infra.convert.logger.ApiErrorLogConvert;
import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO;
import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper;
import cn.iocoder.yudao.module.infra.enums.logger.ApiErrorLogProcessStatusEnum;
-import lombok.extern.slf4j.Slf4j;
+import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
-import jakarta.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
@@ -25,7 +24,6 @@ import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_L
*
* @author 芋道源码
*/
-@Slf4j
@Service
@Validated
public class ApiErrorLogServiceImpl implements ApiErrorLogService {
@@ -64,21 +62,4 @@ public class ApiErrorLogServiceImpl implements ApiErrorLogService {
.processUserId(processUserId).processTime(LocalDateTime.now()).build());
}
- @Override
- @SuppressWarnings("DuplicatedCode")
- public Integer cleanErrorLog(Integer exceedDay, Integer deleteLimit) {
- int count = 0;
- LocalDateTime expireDate = LocalDateTime.now().minusDays(exceedDay);
- // 循环删除,直到没有满足条件的数据
- for (int i = 0; i < Short.MAX_VALUE; i++) {
- int deleteCount = apiErrorLogMapper.deleteByCreateTimeLt(expireDate, deleteLimit);
- count += deleteCount;
- // 达到删除预期条数,说明到底了
- if (deleteCount < deleteLimit) {
- break;
- }
- }
- return count;
- }
-
}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java
new file mode 100755
index 000000000..813a181b1
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java
@@ -0,0 +1,75 @@
+package cn.iocoder.yudao.module.infra.service.test;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoCreateReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoExportReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoPageReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoUpdateReqVO;
+import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO;
+import jakarta.validation.Valid;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 字典类型 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface TestDemoService {
+
+ /**
+ * 创建字典类型
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createTestDemo(@Valid TestDemoCreateReqVO createReqVO);
+
+ /**
+ * 更新字典类型
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateTestDemo(@Valid TestDemoUpdateReqVO updateReqVO);
+
+ /**
+ * 删除字典类型
+ *
+ * @param id 编号
+ */
+ void deleteTestDemo(Long id);
+
+ /**
+ * 获得字典类型
+ *
+ * @param id 编号
+ * @return 字典类型
+ */
+ TestDemoDO getTestDemo(Long id);
+
+ /**
+ * 获得字典类型列表
+ *
+ * @param ids 编号
+ * @return 字典类型列表
+ */
+ List getTestDemoList(Collection ids);
+
+ /**
+ * 获得字典类型分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 字典类型分页
+ */
+ PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO);
+
+ /**
+ * 获得字典类型列表, 用于 Excel 导出
+ *
+ * @param exportReqVO 查询条件
+ * @return 字典类型列表
+ */
+ List getTestDemoList(TestDemoExportReqVO exportReqVO);
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java
new file mode 100755
index 000000000..65e9f13a9
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.infra.service.test;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoCreateReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoExportReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoPageReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoUpdateReqVO;
+import cn.iocoder.yudao.module.infra.convert.test.TestDemoConvert;
+import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO;
+import cn.iocoder.yudao.module.infra.dal.mysql.test.TestDemoMapper;
+import jakarta.annotation.Resource;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.Collection;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.TEST_DEMO_NOT_EXISTS;
+
+/**
+ * 字典类型 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class TestDemoServiceImpl implements TestDemoService {
+
+ @Resource
+ private TestDemoMapper testDemoMapper;
+
+ @Override
+ public Long createTestDemo(TestDemoCreateReqVO createReqVO) {
+ // 插入
+ TestDemoDO testDemo = TestDemoConvert.INSTANCE.convert(createReqVO);
+ testDemoMapper.insert(testDemo);
+ // 返回
+ return testDemo.getId();
+ }
+
+ @Override
+ @CacheEvict(value = "test", key = "#updateReqVO.id")
+ public void updateTestDemo(TestDemoUpdateReqVO updateReqVO) {
+ // 校验存在
+ validateTestDemoExists(updateReqVO.getId());
+ // 更新
+ TestDemoDO updateObj = TestDemoConvert.INSTANCE.convert(updateReqVO);
+ testDemoMapper.updateById(updateObj);
+ }
+
+ @Override
+ @CacheEvict(value = "test", key = "#id")
+ public void deleteTestDemo(Long id) {
+ // 校验存在
+ validateTestDemoExists(id);
+ // 删除
+ testDemoMapper.deleteById(id);
+ }
+
+ private void validateTestDemoExists(Long id) {
+ if (testDemoMapper.selectById(id) == null) {
+ throw exception(TEST_DEMO_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ @Cacheable(cacheNames = "test", key = "#id")
+ public TestDemoDO getTestDemo(Long id) {
+ return testDemoMapper.selectById(id);
+ }
+
+ @Override
+ public List getTestDemoList(Collection ids) {
+ return testDemoMapper.selectBatchIds(ids);
+ }
+
+ @Override
+ public PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO) {
+// testDemoMapper.selectList2();
+ return testDemoMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public List getTestDemoList(TestDemoExportReqVO exportReqVO) {
+ return testDemoMapper.selectList(exportReqVO);
+ }
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/baseVO.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/baseVO.vm
new file mode 100644
index 000000000..0f3295d37
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/baseVO.vm
@@ -0,0 +1,39 @@
+package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+#foreach ($column in $columns)
+#if (${column.javaType} == "BigDecimal")
+import java.math.BigDecimal;
+#end
+#if (${column.javaType} == "LocalDateTime")
+import java.time.LocalDateTime;
+#end
+#end
+import jakarta.validation.constraints.*;
+## 处理 Date 字段的引入
+#foreach ($column in $columns)
+#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult}
+ && ${column.javaType} == "LocalDateTime")## 时间类型
+import org.springframework.format.annotation.DateTimeFormat;
+
+import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+#break
+#end
+#end
+
+/**
+ * ${table.classComment} Base VO,提供给添加、修改、详细的子 VO 使用
+ * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+ */
+@Data
+public class ${sceneEnum.prefixClass}${table.className}BaseVO {
+
+#foreach ($column in $columns)
+#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult})##通用操作
+ #parse("codegen/java/controller/vo/_column.vm")
+
+#end
+#end
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/createReqVO.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/createReqVO.vm
new file mode 100644
index 000000000..fe4e72131
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/createReqVO.vm
@@ -0,0 +1,30 @@
+package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.*;
+## 处理 Date 字段的引入
+#foreach ($column in $columns)
+#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult})
+ && ${column.javaType} == "LocalDateTime")## 时间类型
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+#break
+#end
+#end
+
+@Schema(description = "${sceneEnum.name} - ${table.classComment}创建 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ${sceneEnum.prefixClass}${table.className}CreateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO {
+
+#foreach ($column in $columns)
+#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}))##不是通用字段
+ #parse("codegen/java/controller/vo/_column.vm")
+
+#end
+#end
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/updateReqVO.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/updateReqVO.vm
new file mode 100644
index 000000000..162ef4b23
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/updateReqVO.vm
@@ -0,0 +1,30 @@
+package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+## 处理 Date 字段的引入
+#foreach ($column in $columns)
+#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult})
+ && ${column.javaType} == "LocalDateTime")## 时间类型
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+#break
+#end
+#end
+
+@Schema(description = "${sceneEnum.name} - ${table.classComment}更新 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ${sceneEnum.prefixClass}${table.className}UpdateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO {
+
+#foreach ($column in $columns)
+#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))##不是通用字段
+ #parse("codegen/java/controller/vo/_column.vm")
+
+#end
+#end
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java
new file mode 100644
index 000000000..55cb87f1e
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.infra.dal.mysql.codegen;
+
+import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO;
+import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest;
+import org.junit.jupiter.api.Test;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class SchemaColumnMapperTest extends BaseDbUnitTest {
+
+ @Resource
+ private SchemaColumnMapper schemaColumnMapper;
+
+ @Test
+ public void testSelectListByTableName() {
+ List columns = schemaColumnMapper.selectListByTableName("", "inf_config");
+ assertTrue(columns.size() > 0);
+ }
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java
new file mode 100644
index 000000000..f73737196
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.infra.service.codegen;
+
+import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO;
+import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
+import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper;
+import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper;
+import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine;
+import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest;
+import org.junit.jupiter.api.Test;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+public class CodegenEngineTest extends BaseDbUnitTest {
+
+ @Resource
+ private CodegenTableMapper codegenTableMapper;
+ @Resource
+ private CodegenColumnMapper codegenColumnMapper;
+
+ @Resource
+ private CodegenEngine codegenEngine;
+
+ @Test
+ public void testExecute() {
+ CodegenTableDO table = codegenTableMapper.selectById(20);
+ List columns = codegenColumnMapper.selectListByTableId(table.getId());
+ Map result = codegenEngine.execute(table, columns);
+ result.forEach((s, s2) -> System.out.println(s2));
+// System.out.println(result.get("vue/views/system/test/index.vue"));
+ }
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java
new file mode 100644
index 000000000..be6081404
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.infra.service.codegen;
+
+import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest;
+import org.junit.jupiter.api.Test;
+
+import jakarta.annotation.Resource;
+
+class CodegenServiceImplTest extends BaseDbUnitTest {
+
+ @Resource
+ private CodegenServiceImpl codegenService;
+
+ @Test
+ public void tetCreateCodegenTable() {
+ codegenService.createCodegen(0L, "infra_test_demo");
+// infraCodegenService.createCodegenTable("infra_codegen_table");
+// infraCodegenService.createCodegen("infra_codegen_column");
+ }
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java
new file mode 100755
index 000000000..2dd582b63
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java
@@ -0,0 +1,186 @@
+package cn.iocoder.yudao.module.infra.service.test;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoCreateReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoExportReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoPageReqVO;
+import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoUpdateReqVO;
+import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO;
+import cn.iocoder.yudao.module.infra.dal.mysql.test.TestDemoMapper;
+import jakarta.annotation.Resource;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.annotation.Import;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
+import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
+import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
+import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
+import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.TEST_DEMO_NOT_EXISTS;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link TestDemoServiceImpl} 的单元测试类
+ *
+ * @author 芋道源码
+ */
+@Import(TestDemoServiceImpl.class)
+public class TestDemoServiceImplTest extends BaseDbUnitTest {
+
+ @Resource
+ private TestDemoServiceImpl testDemoService;
+
+ @Resource
+ private TestDemoMapper testDemoMapper;
+
+ @Test
+ public void testCreateTestDemo_success() {
+ // 准备参数
+ TestDemoCreateReqVO reqVO = randomPojo(TestDemoCreateReqVO.class);
+
+ // 调用
+ Long testDemoId = testDemoService.createTestDemo(reqVO);
+ // 断言
+ assertNotNull(testDemoId);
+ // 校验记录的属性是否正确
+ TestDemoDO testDemo = testDemoMapper.selectById(testDemoId);
+ assertPojoEquals(reqVO, testDemo);
+ }
+
+ @Test
+ public void testUpdateTestDemo_success() {
+ // mock 数据
+ TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class);
+ testDemoMapper.insert(dbTestDemo);// @Sql: 先插入出一条存在的数据
+ // 准备参数
+ TestDemoUpdateReqVO reqVO = randomPojo(TestDemoUpdateReqVO.class, o -> {
+ o.setId(dbTestDemo.getId()); // 设置更新的 ID
+ });
+
+ // 调用
+ testDemoService.updateTestDemo(reqVO);
+ // 校验是否更新正确
+ TestDemoDO testDemo = testDemoMapper.selectById(reqVO.getId()); // 获取最新的
+ assertPojoEquals(reqVO, testDemo);
+ }
+
+ @Test
+ public void testUpdateTestDemo_notExists() {
+ // 准备参数
+ TestDemoUpdateReqVO reqVO = randomPojo(TestDemoUpdateReqVO.class);
+
+ // 调用, 并断言异常
+ assertServiceException(() -> testDemoService.updateTestDemo(reqVO), TEST_DEMO_NOT_EXISTS);
+ }
+
+ @Test
+ public void testDeleteTestDemo_success() {
+ // mock 数据
+ TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class);
+ testDemoMapper.insert(dbTestDemo);// @Sql: 先插入出一条存在的数据
+ // 准备参数
+ Long id = dbTestDemo.getId();
+
+ // 调用
+ testDemoService.deleteTestDemo(id);
+ // 校验数据不存在了
+ assertNull(testDemoMapper.selectById(id));
+ }
+
+ @Test
+ public void testDeleteTestDemo_notExists() {
+ // 准备参数
+ Long id = randomLongId();
+
+ // 调用, 并断言异常
+ assertServiceException(() -> testDemoService.deleteTestDemo(id), TEST_DEMO_NOT_EXISTS);
+ }
+
+ @Test
+ public void testGetTestDemoPage() {
+ // mock 数据
+ TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class, o -> { // 等会查询到
+ o.setName("芋道源码");
+ o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+ o.setType(1);
+ o.setCategory(2);
+ o.setRemark("哈哈哈");
+ o.setCreateTime(buildTime(2021, 11, 11));
+ });
+ testDemoMapper.insert(dbTestDemo);
+ // 测试 name 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setName("不匹配")));
+ // 测试 status 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
+ // 测试 type 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setType(2)));
+ // 测试 category 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCategory(1)));
+ // 测试 remark 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setRemark("呵呵呵")));
+ // 测试 createTime 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCreateTime(buildTime(2021, 12, 12))));
+ // 准备参数
+ TestDemoPageReqVO reqVO = new TestDemoPageReqVO();
+ reqVO.setName("芋道");
+ reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+ reqVO.setType(1);
+ reqVO.setCategory(2);
+ reqVO.setRemark("哈哈哈");
+ reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 11, 10),buildTime(2021, 11, 12)}));
+
+ // 调用
+ PageResult pageResult = testDemoService.getTestDemoPage(reqVO);
+ // 断言
+ assertEquals(1, pageResult.getTotal());
+ assertEquals(1, pageResult.getList().size());
+ assertPojoEquals(dbTestDemo, pageResult.getList().get(0));
+ }
+
+ @Test
+ public void testGetTestDemoList() {
+ // mock 数据
+ TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class, o -> { // 等会查询到
+ o.setName("芋道源码");
+ o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+ o.setType(1);
+ o.setCategory(2);
+ o.setRemark("哈哈哈");
+ o.setCreateTime(buildTime(2021, 11, 11));
+ });
+ testDemoMapper.insert(dbTestDemo);
+ // 测试 name 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setName("不匹配")));
+ // 测试 status 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
+ // 测试 type 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setType(2)));
+ // 测试 category 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCategory(1)));
+ // 测试 remark 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setRemark("呵呵呵")));
+ // 测试 createTime 不匹配
+ testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCreateTime(buildTime(2021, 12, 12))));
+ // 准备参数
+ TestDemoExportReqVO reqVO = new TestDemoExportReqVO();
+ reqVO.setName("芋道");
+ reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+ reqVO.setType(1);
+ reqVO.setCategory(2);
+ reqVO.setRemark("哈哈哈");
+ reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 11, 10),buildTime(2021, 11, 12)}));
+
+ // 调用
+ List list = testDemoService.getTestDemoList(reqVO);
+ // 断言
+ assertEquals(1, list.size());
+ assertPojoEquals(dbTestDemo, list.get(0));
+ }
+
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java
old mode 100644
new mode 100755
index 58c58c8f1..23979926e
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java
@@ -1,19 +1,18 @@
-package cn.iocoder.yudao.module.member.controller.admin.tag.vo;
+package cn.iocoder.yudao.module.infra.controller.admin.test.vo;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
-@Schema(description = "管理后台 - 会员标签更新 Request VO")
+@Schema(description = "管理后台 - 字典类型更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
-public class MemberTagUpdateReqVO extends MemberTagBaseVO {
+public class TestDemoUpdateReqVO extends TestDemoBaseVO {
- @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "907")
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "编号不能为空")
private Long id;
diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java
index fec218ff5..78ed1786d 100644
--- a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java
+++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java
@@ -1,16 +1,15 @@
package cn.iocoder.yudao.module.pay.api.order;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;
import cn.iocoder.yudao.module.pay.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
@Tag(name = "RPC 服务 - 支付单")
@@ -20,20 +19,11 @@ public interface PayOrderApi {
@PostMapping(PREFIX + "/create")
@Operation(summary = "创建支付单")
- CommonResult createOrder(@Valid @RequestBody PayOrderCreateReqDTO reqDTO);
+ Long createOrder(@Valid @RequestBody PayOrderCreateReqDTO reqDTO);
- @GetMapping(PREFIX + "/get")
+ @PostMapping(PREFIX + "/get")
@Operation(summary = "获得支付单")
@Parameter(name = "id", description = "支付单编号", example = "1", required = true)
- CommonResult getOrder(@RequestParam("id") Long id);
-
- @PutMapping(PREFIX + "/update-price")
- @Operation(summary = "更新支付订单价格")
- @Parameters({
- @Parameter(name = "id", description = "支付单编号", example = "1", required = true),
- @Parameter(name = "payPrice", description = "支付单价格", example = "100", required = true)
- })
- CommonResult updatePayOrderPrice(@RequestParam("id") Long id,
- @RequestParam("payPrice") Integer payPrice);
+ PayOrderRespDTO getOrder(Long id);
}
diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApi.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApi.java
index c90ed6aec..11085af39 100644
--- a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApi.java
+++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApi.java
@@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.pay.api.refund;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundRespDTO;
import cn.iocoder.yudao.module.pay.enums.ApiConstants;
@@ -9,10 +8,8 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
@Tag(name = "RPC 服务 - 退款单")
@@ -22,11 +19,11 @@ public interface PayRefundApi {
@PostMapping(PREFIX + "/create")
@Operation(summary = "创建退款单")
- CommonResult createRefund(@Valid @RequestBody PayRefundCreateReqDTO reqDTO);
+ Long createRefund(@Valid @RequestBody PayRefundCreateReqDTO reqDTO);
- @GetMapping(PREFIX + "/get")
+ @PostMapping(PREFIX + "/get")
@Operation(summary = "获得退款单")
@Parameter(name = "id", description = "退款单编号", example = "1", required = true)
- CommonResult getRefund(@RequestParam("id") Long id);
+ PayRefundRespDTO getRefund(Long id);
}
diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java
index 1ca3414db..8490c482b 100644
--- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java
+++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java
@@ -1,18 +1,16 @@
package cn.iocoder.yudao.module.pay.api.order;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;
import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
-import jakarta.annotation.Resource;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
+@Service
@RestController // 提供 RESTful API 接口,给 Feign 调用
@Validated
public class PayOrderApiImpl implements PayOrderApi {
@@ -21,20 +19,14 @@ public class PayOrderApiImpl implements PayOrderApi {
private PayOrderService payOrderService;
@Override
- public CommonResult createOrder(PayOrderCreateReqDTO reqDTO) {
- return success(payOrderService.createOrder(reqDTO));
+ public Long createOrder(PayOrderCreateReqDTO reqDTO) {
+ return payOrderService.createOrder(reqDTO);
}
@Override
- public CommonResult getOrder(Long id) {
+ public PayOrderRespDTO getOrder(Long id) {
PayOrderDO order = payOrderService.getOrder(id);
- return success(PayOrderConvert.INSTANCE.convert2(order));
- }
-
- @Override
- public CommonResult updatePayOrderPrice(Long id, Integer payPrice) {
- payOrderService.updatePayOrderPrice(id, payPrice);
- return success(true);
+ return PayOrderConvert.INSTANCE.convert2(order);
}
}
diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApiImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApiImpl.java
index 7e985d673..de04d95e8 100644
--- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApiImpl.java
+++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApiImpl.java
@@ -1,17 +1,15 @@
package cn.iocoder.yudao.module.pay.api.refund;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundRespDTO;
import cn.iocoder.yudao.module.pay.convert.refund.PayRefundConvert;
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
-import jakarta.annotation.Resource;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
+@Service
@RestController // 提供 RESTful API 接口,给 Feign 调用
@Validated
public class PayRefundApiImpl implements PayRefundApi {
@@ -20,13 +18,13 @@ public class PayRefundApiImpl implements PayRefundApi {
private PayRefundService payRefundService;
@Override
- public CommonResult createRefund(PayRefundCreateReqDTO reqDTO) {
- return success(payRefundService.createPayRefund(reqDTO));
+ public Long createRefund(PayRefundCreateReqDTO reqDTO) {
+ return payRefundService.createPayRefund(reqDTO);
}
@Override
- public CommonResult getRefund(Long id) {
- return success(PayRefundConvert.INSTANCE.convert02(payRefundService.getRefund(id)));
+ public PayRefundRespDTO getRefund(Long id) {
+ return PayRefundConvert.INSTANCE.convert02(payRefundService.getRefund(id));
}
}
diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java
index da3cf7294..97f388cfc 100644
--- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java
+++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java
@@ -1,31 +1,22 @@
package cn.iocoder.yudao.module.pay.controller.app.order;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderSubmitRespVO;
import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitReqVO;
import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO;
import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert;
-import cn.iocoder.yudao.module.pay.framework.pay.core.WalletPayClient;
import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
-import com.google.common.collect.Maps;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-
-import java.util.Map;
-import java.util.Objects;
-
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
-import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
-import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserType;
@Tag(name = "用户 APP - 支付订单")
@RestController
@@ -48,16 +39,6 @@ public class AppPayOrderController {
@PostMapping("/submit")
@Operation(summary = "提交支付订单")
public CommonResult submitPayOrder(@RequestBody AppPayOrderSubmitReqVO reqVO) {
- // 1. 钱包支付事,需要额外传 user_id 和 user_type
- if (Objects.equals(reqVO.getChannelCode(), PayChannelEnum.WALLET.getCode())) {
- Map channelExtras = reqVO.getChannelExtras() == null ?
- Maps.newHashMapWithExpectedSize(2) : reqVO.getChannelExtras();
- channelExtras.put(WalletPayClient.USER_ID_KEY, String.valueOf(getLoginUserId()));
- channelExtras.put(WalletPayClient.USER_TYPE_KEY, String.valueOf(getLoginUserType()));
- reqVO.setChannelExtras(channelExtras);
- }
-
- // 2. 提交支付
PayOrderSubmitRespVO respVO = payOrderService.submitOrder(reqVO, getClientIP());
return success(PayOrderConvert.INSTANCE.convert3(respVO));
}
diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/no/PayNoRedisDAO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/no/PayNoRedisDAO.java
index 1482ddf63..cdfb30040 100644
--- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/no/PayNoRedisDAO.java
+++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/no/PayNoRedisDAO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.pay.dal.redis.no;
-import cn.hutool.core.date.DatePattern;import cn.hutool.core.date.DateUtil;
-import cn.iocoder.yudao.module.pay.dal.redis.RedisKeyConstants;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import jakarta.annotation.Resource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;
-import jakarta.annotation.Resource;
-import java.time.Duration;
import java.time.LocalDateTime;
/**
@@ -27,12 +26,8 @@ public class PayNoRedisDAO {
* @return 序号
*/
public String generate(String prefix) {
- // 递增序号
String noPrefix = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN);
- String key = RedisKeyConstants.PAY_NO + noPrefix;
- Long no = stringRedisTemplate.opsForValue().increment(key);
- // 设置过期时间
- stringRedisTemplate.expire(key, Duration.ofMinutes(1L));
+ Long no = stringRedisTemplate.opsForValue().increment(noPrefix);
return noPrefix + no;
}
diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/channel/PayChannelServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/channel/PayChannelServiceImpl.java
index 522b2b0ae..f526baff6 100644
--- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/channel/PayChannelServiceImpl.java
+++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/channel/PayChannelServiceImpl.java
@@ -13,17 +13,15 @@ import cn.iocoder.yudao.module.pay.controller.admin.channel.vo.PayChannelUpdateR
import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.channel.PayChannelDO;
import cn.iocoder.yudao.module.pay.dal.mysql.channel.PayChannelMapper;
-import cn.iocoder.yudao.module.pay.framework.pay.core.WalletPayClient;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
+import jakarta.annotation.Resource;
+import jakarta.validation.Validator;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
-import jakarta.annotation.PostConstruct;
-import jakarta.annotation.Resource;
-import jakarta.validation.Validator;
import java.time.Duration;
import java.util.Collection;
import java.util.List;
@@ -70,14 +68,6 @@ public class PayChannelServiceImpl implements PayChannelService {
@Resource
private Validator validator;
- /**
- * 初始化,为了注册钱包
- */
- @PostConstruct
- public void init() {
- payClientFactory.registerPayClientClass(PayChannelEnum.WALLET, WalletPayClient.class);
- }
-
@Override
public Long createChannel(PayChannelCreateReqVO reqVO) {
// 断言是否有重复的
diff --git a/yudao-module-system/yudao-module-system-api/pom.xml b/yudao-module-system/yudao-module-system-api/pom.xml
index 288a1a045..57ddc0658 100644
--- a/yudao-module-system/yudao-module-system-api/pom.xml
+++ b/yudao-module-system/yudao-module-system-api/pom.xml
@@ -26,7 +26,7 @@
org.springdoc
springdoc-openapi-starter-webmvc-api
- provided
+ provided
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/errorcode/dto/ErrorCodeAutoGenerateReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/errorcode/dto/ErrorCodeAutoGenerateReqDTO.java
index 6ae76558d..b907bf58a 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/errorcode/dto/ErrorCodeAutoGenerateReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/errorcode/dto/ErrorCodeAutoGenerateReqDTO.java
@@ -1,24 +1,32 @@
package cn.iocoder.yudao.module.system.api.errorcode.dto;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.experimental.Accessors;
-@Schema(description = "RPC 服务 - 错误码自动生成 Request DTO")
+/**
+ * 错误码自动生成 DTO
+ *
+ * @author dylan
+ */
@Data
+@Accessors(chain = true)
public class ErrorCodeAutoGenerateReqDTO {
- @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
+ /**
+ * 应用名
+ */
@NotNull(message = "应用名不能为空")
private String applicationName;
-
- @Schema(description = "错误码编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
+ /**
+ * 错误码编码
+ */
@NotNull(message = "错误码编码不能为空")
private Integer code;
-
- @Schema(description = "错误码错误提示", requiredMode = Schema.RequiredMode.REQUIRED, example = "业务不能为空")
+ /**
+ * 错误码错误提示
+ */
@NotEmpty(message = "错误码错误提示不能为空")
private String message;
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java
index 795c80702..b4de898aa 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java
@@ -1,43 +1,46 @@
package cn.iocoder.yudao.module.system.api.logger.dto;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
+import lombok.Data;
-@Schema(description = "RPC 服务 - 登录日志创建 Request DTO")
+/**
+ * 登录日志创建 Request DTO
+ *
+ * @author 芋道源码
+ */
@Data
public class LoginLogCreateReqDTO {
- @Schema(description = "日志类型,参见 LoginLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1" )
+ @Schema(description = "日志类型,参见 LoginLogTypeEnum 枚举类", required = true, example = "1" )
@NotNull(message = "日志类型不能为空")
private Integer logType;
- @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "89aca178-a370-411c-ae02-3f0d672be4ab")
+ @Schema(description = "链路追踪编号", required = true, example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
@Schema(description = "用户编号", example = "666")
private Long userId;
- @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2" )
+ @Schema(description = "用户类型,参见 UserTypeEnum 枚举", required = true, example = "2" )
@NotNull(message = "用户类型不能为空")
private Integer userType;
- @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
+ @Schema(description = "用户账号", required = true, example = "yudao")
@NotBlank(message = "用户账号不能为空")
@Size(max = 30, message = "用户账号长度不能超过30个字符")
private String username;
- @Schema(description = "登录结果,参见 LoginResultEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "登录结果,参见 LoginResultEnum 枚举类", required = true, example = "1")
@NotNull(message = "登录结果不能为空")
private Integer result;
- @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
+ @Schema(description = "用户 IP", required = true, example = "127.0.0.1")
@NotEmpty(message = "用户 IP 不能为空")
private String userIp;
- @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0")
+ @Schema(description = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")
private String userAgent;
}
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogCreateReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogCreateReqDTO.java
index 3c65a1afc..e0826f2d6 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogCreateReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogCreateReqDTO.java
@@ -1,10 +1,10 @@
package cn.iocoder.yudao.module.system.api.logger.dto;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
import java.time.LocalDateTime;
import java.util.Map;
@@ -15,22 +15,22 @@ public class OperateLogCreateReqDTO {
@Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
- @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @Schema(description = "用户编号", required = true, example = "1024")
@NotNull(message = "用户编号不能为空")
private Long userId;
- @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "用户类型", required = true, example = "1")
@NotNull(message = "用户类型不能为空")
private Integer userType;
- @Schema(description = "操作模块", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单")
+ @Schema(description = "操作模块", required = true, example = "订单")
@NotEmpty(message = "操作模块不能为空")
private String module;
- @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "创建订单")
+ @Schema(description = "操作名", required = true, example = "创建订单")
@NotEmpty(message = "操作名")
private String name;
- @Schema(description = "操作分类,参见 SysOperateLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "操作分类,参见 SysOperateLogTypeEnum 枚举类", required = true, example = "1")
@NotNull(message = "操作分类不能为空")
private Integer type;
@@ -40,38 +40,38 @@ public class OperateLogCreateReqDTO {
@Schema(description = "拓展字段", example = "{'orderId': 1}")
private Map exts;
- @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET")
+ @Schema(description = "请求方法名", required = true, example = "GET")
@NotEmpty(message = "请求方法名不能为空")
private String requestMethod;
- @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy")
+ @Schema(description = "请求地址", required = true, example = "/xxx/yyy")
@NotEmpty(message = "请求地址不能为空")
private String requestUrl;
- @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
+ @Schema(description = "用户 IP", required = true, example = "127.0.0.1")
@NotEmpty(message = "用户 IP 不能为空")
private String userIp;
- @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0")
+ @Schema(description = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")
@NotEmpty(message = "浏览器 UserAgent 不能为空")
private String userAgent;
- @Schema(description = "Java 方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "cn.iocoder.yudao.UserController.save(...)")
+ @Schema(description = "Java 方法名", required = true, example = "cn.iocoder.yudao.UserController.save(...)")
@NotEmpty(message = "Java 方法名不能为空")
private String javaMethod;
@Schema(description = "Java 方法的参数")
private String javaMethodArgs;
- @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "开始时间", required = true)
@NotNull(message = "开始时间不能为空")
private LocalDateTime startTime;
- @Schema(description = "执行时长,单位:毫秒", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "执行时长,单位:毫秒", required = true)
@NotNull(message = "执行时长不能为空")
private Integer duration;
- @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Schema(description = "结果码", required = true)
@NotNull(message = "结果码不能为空")
private Integer resultCode;
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java
index 78b9233ce..4bb30488c 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java
@@ -1,10 +1,10 @@
package cn.iocoder.yudao.module.system.api.mail.dto;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
import java.util.Map;
@Schema(description = "RPC 服务 - 邮件发送给 Admin 或者 Member 用户 Request DTO")
@@ -13,15 +13,14 @@ public class MailSendSingleToUserReqDTO {
@Schema(description = "用户编号", example = "1024")
private Long userId;
- @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
+ @Schema(description = "手机号", required = true, example = "15601691300")
@Email
private String mail;
- @Schema(description = "邮件模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "USER_SEND")
+ @Schema(description = "邮件模板编号", required = true, example = "USER_SEND")
@NotNull(message = "邮件模板编号不能为空")
private String templateCode;
-
@Schema(description = "邮件模板参数")
private Map templateParams;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java
index a364892f6..f67ee600b 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java
@@ -1,23 +1,23 @@
package cn.iocoder.yudao.module.system.api.notify.dto;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
import java.util.Map;
@Schema(description = "RPC 服务 - 站内信发送给 Admin 或者 Member 用户 Request DTO")
@Data
public class NotifySendSingleToUserReqDTO {
- @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @Schema(description = "用户编号", required = true, example = "1024")
@NotNull(message = "用户编号不能为空")
private Long userId;
- @Schema(description = "站内信模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "USER_SEND")
+ @Schema(description = "站内信模板编号", required = true, example = "USER_SEND")
@NotEmpty(message = "站内信模板编号不能为空")
private String templateCode;
@Schema(description = "邮件模板参数")
private Map templateParams;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java
index 11e7cbfbb..9f990ff83 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java
@@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.system.api.oauth2.dto;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@@ -13,16 +13,16 @@ import java.util.List;
@Data
public class OAuth2AccessTokenCreateReqDTO implements Serializable {
- @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
+ @Schema(description = "用户编号", required = true, example = "10")
@NotNull(message = "用户编号不能为空")
private Long userId;
- @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "用户类型,参见 UserTypeEnum 枚举", required = true, example = "1")
@NotNull(message = "用户类型不能为空")
@InEnum(value = UserTypeEnum.class, message = "用户类型必须是 {value}")
private Integer userType;
- @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudaoyuanma")
+ @Schema(description = "客户端编号", required = true, example = "yudaoyuanma")
@NotNull(message = "客户端编号不能为空")
private String clientId;
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
index 6cd9d4570..37f69eb05 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
@@ -4,27 +4,24 @@ import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
@Schema(description = "RPC 服务 - 短信验证码的发送 Request DTO")
@Data
public class SmsCodeSendReqDTO {
- @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
+ @Schema(description = "手机号", required = true, example = "15601691300")
@Mobile
@NotEmpty(message = "手机号不能为空")
private String mobile;
-
- @Schema(description = "发送场景", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "发送场景", required = true, example = "1")
@NotNull(message = "发送场景不能为空")
@InEnum(SmsSceneEnum.class)
-
private Integer scene;
- @Schema(description = "发送 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "10.20.30.40")
+ @Schema(description = "发送 IP", required = true, example = "10.20.30.40")
@NotEmpty(message = "发送 IP 不能为空")
private String createIp;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java
index 6389bf0c9..309bdd5fb 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java
@@ -4,31 +4,27 @@ import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
@Schema(description = "RPC 服务 - 短信验证码的使用 Request DTO")
@Data
public class SmsCodeUseReqDTO {
- @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
+ @Schema(description = "手机号", required = true, example = "15601691300")
@Mobile
@NotEmpty(message = "手机号不能为空")
private String mobile;
-
- @Schema(description = "发送场景", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "发送场景", required = true, example = "1")
@NotNull(message = "发送场景不能为空")
@InEnum(SmsSceneEnum.class)
private Integer scene;
-
- @Schema(description = "验证码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @Schema(description = "验证码", required = true, example = "1024")
@NotEmpty(message = "验证码")
private String code;
-
- @Schema(description = "发送 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "10.20.30.40")
+ @Schema(description = "发送 IP", required = true, example = "10.20.30.40")
@NotEmpty(message = "使用 IP 不能为空")
private String usedIp;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java
index f9859b9ed..3cfcae795 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java
@@ -4,27 +4,24 @@ import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
@Schema(description = "RPC 服务 - 短信验证码的校验 Request DTO")
@Data
public class SmsCodeValidateReqDTO {
- @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
+ @Schema(description = "手机号", required = true, example = "15601691300")
@Mobile
@NotEmpty(message = "手机号不能为空")
private String mobile;
-
- @Schema(description = "发送场景", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @Schema(description = "发送场景", required = true, example = "1")
@NotNull(message = "发送场景不能为空")
@InEnum(SmsSceneEnum.class)
private Integer scene;
-
- @Schema(description = "验证码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @Schema(description = "验证码", required = true, example = "1024")
@NotEmpty(message = "验证码")
private String code;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java
index bb23fdf56..fe02eaa1a 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java
@@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.system.api.sms.dto.send;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
-import jakarta.validation.constraints.NotEmpty;
import java.util.Map;
@Schema(description = "RPC 服务 - 短信发送给 Admin 或者 Member 用户 Request DTO")
@@ -13,14 +13,14 @@ public class SmsSendSingleToUserReqDTO {
@Schema(description = "用户编号", example = "1024")
private Long userId;
- @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
+ @Schema(description = "手机号", required = true, example = "15601691300")
@Mobile
private String mobile;
- @Schema(description = "短信模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "USER_SEND")
+ @Schema(description = "短信模板编号", required = true, example = "USER_SEND")
@NotEmpty(message = "短信模板编号不能为空")
private String templateCode;
@Schema(description = "短信模板参数")
private Map templateParams;
-}
+}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java
index b651010a4..b241a1db1 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java
@@ -2,43 +2,50 @@ package cn.iocoder.yudao.module.system.api.social;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
-import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO;
import cn.iocoder.yudao.module.system.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-import jakarta.validation.Valid;
-
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
@Tag(name = "RPC 服务 - 社交用户")
public interface SocialUserApi {
String PREFIX = ApiConstants.PREFIX + "/social-user";
- @PostMapping(PREFIX + "/bind")
- @Operation(summary = "绑定社交用户")
- CommonResult bindSocialUser(@Valid @RequestBody SocialUserBindReqDTO reqDTO);
+ @GetMapping("PREFIX + /get-authorize-url")
+ @Operation(summary = "获得社交平台的授权 URL")
+ @Parameters({
+ @Parameter(name = "type", description = "社交平台的类型", example = "1", required = true),
+ @Parameter(name = "redirectUri", description = "重定向 URL", example = "https://www.iocoder.cn",required = true)
+ })
+ CommonResult getAuthorizeUrl(@RequestParam("type") Integer type,
+ @RequestParam("redirectUri") String redirectUri);
- @DeleteMapping(PREFIX + "/unbind")
+ @PostMapping("PREFIX + /bind")
+ @Operation(summary = "绑定社交用户")
+ CommonResult bindSocialUser(@Valid @RequestBody SocialUserBindReqDTO reqDTO);
+
+ @DeleteMapping("PREFIX + /unbind")
@Operation(summary = "取消绑定社交用户")
CommonResult unbindSocialUser(@Valid @RequestBody SocialUserUnbindReqDTO reqDTO);
- @GetMapping(PREFIX + "/get")
+ @GetMapping("PREFIX + /get-bind-user-id")
@Operation(summary = "获得社交用户的绑定用户编号")
@Parameters({
@Parameter(name = "userType", description = "用户类型", example = "2", required = true),
- @Parameter(name = "socialType", description = "社交平台的类型", example = "1", required = true),
+ @Parameter(name = "type", description = "社交平台的类型", example = "1", required = true),
@Parameter(name = "code", description = "授权码", required = true, example = "tudou"),
@Parameter(name = "state", description = "state", required = true, example = "coke")
})
- CommonResult getSocialUser(@RequestParam("userType") Integer userType,
- @RequestParam("socialType") Integer socialType,
- @RequestParam("code") String code,
- @RequestParam("state") String state);
+ CommonResult getBindUserId(@RequestParam("userType") Integer userType,
+ @RequestParam("type") Integer type,
+ @RequestParam("code") String code,
+ @RequestParam("state") String state);
}
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java
index 357a73fe1..f41bf0fef 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java
@@ -3,36 +3,48 @@ package cn.iocoder.yudao.module.system.api.social.dto;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-
-@Schema(description = "RPC 服务 - 取消绑定社交用户 Request DTO")
+/**
+ * 取消绑定社交用户 Request DTO
+ *
+ * @author 芋道源码
+ */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SocialUserBindReqDTO {
- @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ /**
+ * 用户编号
+ */
@NotNull(message = "用户编号不能为空")
private Long userId;
- @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ /**
+ * 用户类型
+ */
@InEnum(UserTypeEnum.class)
@NotNull(message = "用户类型不能为空")
private Integer userType;
- @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ /**
+ * 社交平台的类型
+ */
@InEnum(SocialTypeEnum.class)
@NotNull(message = "社交平台的类型不能为空")
- private Integer socialType;
- @Schema(description = "授权码", requiredMode = Schema.RequiredMode.REQUIRED, example = "zsw")
+ private Integer type;
+ /**
+ * 授权码
+ */
@NotEmpty(message = "授权码不能为空")
private String code;
- @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "qtw")
+ /**
+ * state
+ */
@NotEmpty(message = "state 不能为空")
private String state;
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java
index a77d0362d..066536f4a 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java
@@ -3,30 +3,41 @@ package cn.iocoder.yudao.module.system.api.social.dto;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
-@Schema(description = "RPC 服务 - 取消绑定社交用户 Request DTO")
+/**
+ * 社交绑定 Request DTO,使用 code 授权码
+ *
+ * @author 芋道源码
+ */
@Data
public class SocialUserUnbindReqDTO {
- @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ /**
+ * 用户编号
+ */
@NotNull(message = "用户编号不能为空")
private Long userId;
- @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ /**
+ * 用户类型
+ */
@InEnum(UserTypeEnum.class)
@NotNull(message = "用户类型不能为空")
private Integer userType;
- @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ /**
+ * 社交平台的类型
+ */
@InEnum(SocialTypeEnum.class)
@NotNull(message = "社交平台的类型不能为空")
- private Integer socialType;
- @Schema(description = "社交平台的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "zsw")
- @NotEmpty(message = "社交平台的 openid 不能为空")
- private String openid;
+ private Integer type;
+
+ /**
+ * 社交平台的 unionId
+ */
+ @NotEmpty(message = "社交平台的 unionId 不能为空")
+ private String unionId;
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
index 241cff87e..606e7bff8 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
@@ -1,13 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.auth;
-import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.framework.security.config.SecurityProperties;
-import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*;
import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
@@ -18,27 +15,27 @@ import cn.iocoder.yudao.module.system.service.auth.AdminAuthService;
import cn.iocoder.yudao.module.system.service.permission.MenuService;
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.permission.RoleService;
-import cn.iocoder.yudao.module.system.service.social.SocialClientService;
+import cn.iocoder.yudao.module.system.service.social.SocialUserService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
-import java.util.Collections;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
import java.util.List;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.obtainAuthorization;
@Tag(name = "管理后台 - 认证")
@RestController
@@ -58,7 +55,7 @@ public class AuthController {
@Resource
private PermissionService permissionService;
@Resource
- private SocialClientService socialClientService;
+ private SocialUserService socialUserService;
@Resource
private SecurityProperties securityProperties;
@@ -76,8 +73,7 @@ public class AuthController {
@Operation(summary = "登出系统")
@OperateLog(enable = false) // 避免 Post 请求被记录操作日志
public CommonResult logout(HttpServletRequest request) {
- String token = SecurityFrameworkUtils.obtainAuthorization(request,
- securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
+ String token = obtainAuthorization(request, securityProperties.getTokenHeader());
if (StrUtil.isNotBlank(token)) {
authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType());
}
@@ -104,9 +100,6 @@ public class AuthController {
// 1.2 获得角色列表
Set roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId());
- if (CollUtil.isEmpty(roleIds)) {
- return success(AuthConvert.INSTANCE.convert(user, Collections.emptyList(), Collections.emptyList()));
- }
List roles = roleService.getRoleList(roleIds);
roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色
@@ -149,8 +142,7 @@ public class AuthController {
})
public CommonResult socialLogin(@RequestParam("type") Integer type,
@RequestParam("redirectUri") String redirectUri) {
- return success(socialClientService.getAuthorizeUrl(
- type, UserTypeEnum.ADMIN.getValue(), redirectUri));
+ return CommonResult.success(socialUserService.getAuthorizeUrl(type, redirectUri));
}
@PostMapping("/social-login")
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java
index e5730d285..e66ccec66 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java
@@ -2,13 +2,12 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import jakarta.validation.constraints.NotEmpty;
-
@Schema(description = "管理后台 - 短信验证码的登录 Request VO")
@Data
@NoArgsConstructor
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java
index b2c4455a0..e975e7d76 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java
@@ -4,14 +4,13 @@ import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 发送手机验证码 Request VO")
@Data
@NoArgsConstructor
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java
index da2247008..b0c2dac66 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java
@@ -3,14 +3,13 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 社交绑定登录 Request VO,使用 code 授权码 + 账号密码")
@Data
@NoArgsConstructor
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java
index 7bf5b5150..2dcee6e0e 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java
@@ -9,12 +9,12 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
import java.util.Comparator;
import java.util.List;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java
index cc3f098ae..8293a939b 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java
@@ -2,27 +2,23 @@ package cn.iocoder.yudao.module.system.controller.admin.dept;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostRespVO;
-import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSaveReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSimpleRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.*;
+import cn.iocoder.yudao.module.system.convert.dept.PostConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.service.dept.PostService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.Valid;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
@@ -43,16 +39,16 @@ public class PostController {
@PostMapping("/create")
@Operation(summary = "创建岗位")
@PreAuthorize("@ss.hasPermission('system:post:create')")
- public CommonResult createPost(@Valid @RequestBody PostSaveReqVO createReqVO) {
- Long postId = postService.createPost(createReqVO);
+ public CommonResult createPost(@Valid @RequestBody PostCreateReqVO reqVO) {
+ Long postId = postService.createPost(reqVO);
return success(postId);
}
@PutMapping("/update")
@Operation(summary = "修改岗位")
@PreAuthorize("@ss.hasPermission('system:post:update')")
- public CommonResult updatePost(@Valid @RequestBody PostSaveReqVO updateReqVO) {
- postService.updatePost(updateReqVO);
+ public CommonResult updatePost(@Valid @RequestBody PostUpdateReqVO reqVO) {
+ postService.updatePost(reqVO);
return success(true);
}
@@ -69,38 +65,35 @@ public class PostController {
@Parameter(name = "id", description = "岗位编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:post:query')")
public CommonResult getPost(@RequestParam("id") Long id) {
- PostDO post = postService.getPost(id);
- return success(BeanUtils.toBean(post, PostRespVO.class));
+ return success(PostConvert.INSTANCE.convert(postService.getPost(id)));
}
@GetMapping("/list-all-simple")
- @Operation(summary = "获取岗位全列表", description = "只包含被开启的岗位,主要用于前端的下拉选项")
+ @Operation(summary = "获取岗位精简信息列表", description = "只包含被开启的岗位,主要用于前端的下拉选项")
public CommonResult> getSimplePostList() {
// 获得岗位列表,只要开启状态的
List list = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus()));
// 排序后,返回给前端
list.sort(Comparator.comparing(PostDO::getSort));
- return success(BeanUtils.toBean(list, PostSimpleRespVO.class));
+ return success(PostConvert.INSTANCE.convertList02(list));
}
@GetMapping("/page")
@Operation(summary = "获得岗位分页列表")
@PreAuthorize("@ss.hasPermission('system:post:query')")
- public CommonResult> getPostPage(@Validated PostPageReqVO pageReqVO) {
- PageResult pageResult = postService.getPostPage(pageReqVO);
- return success(BeanUtils.toBean(pageResult, PostRespVO.class));
+ public CommonResult> getPostPage(@Validated PostPageReqVO reqVO) {
+ return success(PostConvert.INSTANCE.convertPage(postService.getPostPage(reqVO)));
}
@GetMapping("/export")
@Operation(summary = "岗位管理")
@PreAuthorize("@ss.hasPermission('system:post:export')")
@OperateLog(type = EXPORT)
- public void export(HttpServletResponse response, @Validated PostPageReqVO reqVO) throws IOException {
- reqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
- List list = postService.getPostPage(reqVO).getList();
+ public void export(HttpServletResponse response, @Validated PostExportReqVO reqVO) throws IOException {
+ List posts = postService.getPostList(reqVO);
+ List data = PostConvert.INSTANCE.convertList03(posts);
// 输出
- ExcelUtils.write(response, "岗位数据.xls", "岗位列表", PostRespVO.class,
- BeanUtils.toBean(list, PostRespVO.class));
+ ExcelUtils.write(response, "岗位数据.xls", "岗位列表", PostExcelVO.class, data);
}
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptUpdateReqVO.java
index 26ddf541a..927f36482 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptUpdateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 部门更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java
index 91f69e545..427a1b57e 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java
@@ -1,24 +1,21 @@
package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post;
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
+import lombok.Data;
-@Schema(description = "管理后台 - 岗位创建/修改 Request VO")
+/**
+ * 岗位 Base VO,提供给添加、修改、详细的子 VO 使用
+ * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+ */
@Data
-public class PostSaveReqVO {
+public class PostBaseVO {
- @Schema(description = "岗位编号", example = "1024")
- private Long id;
-
- @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆")
+ @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主")
@NotBlank(message = "岗位名称不能为空")
- @Size(max = 50, message = "岗位名称长度不能超过 50 个字符")
+ @Size(max = 50, message = "岗位名称长度不能超过50个字符")
private String name;
@Schema(description = "岗位编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@@ -30,11 +27,10 @@ public class PostSaveReqVO {
@NotNull(message = "显示顺序不能为空")
private Integer sort;
- @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
- @InEnum(CommonStatusEnum.class)
+ @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer status;
@Schema(description = "备注", example = "快乐的备注")
private String remark;
-}
\ No newline at end of file
+}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostUpdateReqVO.java
new file mode 100644
index 000000000..dbebfdbc0
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostUpdateReqVO.java
@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Schema(description = "管理后台 - 岗位更新 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PostUpdateReqVO extends PostBaseVO {
+
+ @Schema(description = "岗位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @NotNull(message = "岗位编号不能为空")
+ private Long id;
+
+}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java
index e7a12daa1..406a797fd 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java
@@ -1,9 +1,8 @@
package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.Size;
+import lombok.Data;
@Schema(description = "管理后台 - 字典类型导出 Request VO")
@Data
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java
index 4b1e2c5c4..65a76a2c9 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java
@@ -2,11 +2,10 @@ package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.Size;
-
@Schema(description = "管理后台 - 字典类型分页列表 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java
index 91acc3674..4c718a7f7 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 字典数据更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java
index 4a25a545f..2277d6907 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 字典类型创建 Request VO")
@Data
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java
index 440fa08e8..32365c1df 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java
@@ -2,11 +2,11 @@ package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
-import jakarta.validation.constraints.Size;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java
index 2134a80a6..1a167b3ec 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 字典类型更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeUpdateReqVO.java
index e36aa75bb..15e2023db 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 错误码更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/account/MailAccountUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/account/MailAccountUpdateReqVO.java
index 08bbed430..12ab21267 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/account/MailAccountUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/account/MailAccountUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.mail.vo.account;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 邮箱账号修改 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java
index b76b7ffcc..c23407fa8 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java
@@ -1,10 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.mail.vo.template;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
import java.util.Map;
@Schema(description = "管理后台 - 邮件发送 Req VO")
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateUpdateReqVO.java
index bb7c518e7..9eb320a71 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.mail.vo.template;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 邮件模版修改 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeUpdateReqVO.java
index ff95f28f6..42f24e7e0 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeUpdateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.notice.vo;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 岗位公告更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java
index 39114abe1..9dcdc68a1 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java
@@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.system.controller.admin.notify;
-import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.*;
@@ -11,13 +10,12 @@ import cn.iocoder.yudao.module.system.service.notify.NotifyTemplateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 站内信模版")
@@ -77,13 +75,8 @@ public class NotifyTemplateController {
@Operation(summary = "发送站内信")
@PreAuthorize("@ss.hasPermission('system:notify-template:send-notify')")
public CommonResult sendNotify(@Valid @RequestBody NotifyTemplateSendReqVO sendReqVO) {
- if (UserTypeEnum.MEMBER.getValue().equals(sendReqVO.getUserType())) {
- return success(notifySendService.sendSingleNotifyToMember(sendReqVO.getUserId(),
- sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams()));
- } else {
- return success(notifySendService.sendSingleNotifyToAdmin(sendReqVO.getUserId(),
- sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams()));
- }
+ return success(notifySendService.sendSingleNotifyToAdmin(sendReqVO.getUserId(),
+ sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams()));
}
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/client/OAuth2ClientUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/client/OAuth2ClientUpdateReqVO.java
index 45e2d4a2a..913dc04ae 100755
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/client/OAuth2ClientUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/client/OAuth2ClientUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.client;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - OAuth2 客户端更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java
index e51ab2076..8900bd547 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java
@@ -1,14 +1,13 @@
package cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
-import jakarta.validation.constraints.Email;
-import jakarta.validation.constraints.Size;
-
@Schema(description = "管理后台 - OAuth2 更新用户基本信息 Request VO")
@Data
@NoArgsConstructor
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java
index ed61a9148..541884425 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 菜单更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java
index ec6881312..cf0a23fab 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.util.Collections;
import java.util.Set;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java
index cd04c5b28..6dbbe330e 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.util.Collections;
import java.util.Set;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java
index 3da3cb825..5506bdf68 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 角色更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sensitiveword/vo/SensitiveWordUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sensitiveword/vo/SensitiveWordUpdateReqVO.java
index 01f910e74..508763278 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sensitiveword/vo/SensitiveWordUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sensitiveword/vo/SensitiveWordUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 敏感词更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelUpdateReqVO.java
index a1b0cfb18..f64ceef2a 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 短信渠道更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java
index 12a36fdff..f16211231 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.util.Map;
@Schema(description = "管理后台 - 短信模板的发送 Request VO")
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateUpdateReqVO.java
index d775e8288..294ec7c9c 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateUpdateReqVO.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 短信模板更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java
index bc4d26edb..265dac47b 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java
@@ -2,25 +2,17 @@ package cn.iocoder.yudao.module.system.controller.admin.socail;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.SocialUserBindReqVO;
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.SocialUserUnbindReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserRespVO;
import cn.iocoder.yudao.module.system.convert.social.SocialUserConvert;
-import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.service.social.SocialUserService;
import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 社交用户")
@@ -46,23 +38,4 @@ public class SocialUserController {
return CommonResult.success(true);
}
- // ==================== 社交用户 CRUD ====================
-
- @GetMapping("/get")
- @Operation(summary = "获得社交用户")
- @Parameter(name = "id", description = "编号", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('system:social-user:query')")
- public CommonResult getSocialUser(@RequestParam("id") Long id) {
- SocialUserDO socialUser = socialUserService.getSocialUser(id);
- return success(SocialUserConvert.INSTANCE.convert(socialUser));
- }
-
- @GetMapping("/page")
- @Operation(summary = "获得社交用户分页")
- @PreAuthorize("@ss.hasPermission('system:social-user:query')")
- public CommonResult> getSocialUserPage(@Valid SocialUserPageReqVO pageVO) {
- PageResult pageResult = socialUserService.getSocialUserPage(pageVO);
- return success(SocialUserConvert.INSTANCE.convertPage(pageResult));
- }
-
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java
index 404ac4801..72e03e793 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java
@@ -11,13 +11,13 @@ import cn.iocoder.yudao.module.system.service.tenant.TenantService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
import java.io.IOException;
import java.util.List;
@@ -37,17 +37,8 @@ public class TenantController {
@Operation(summary = "使用租户名,获得租户编号", description = "登录界面,根据用户的租户名,获得租户编号")
@Parameter(name = "name", description = "租户名", required = true, example = "1024")
public CommonResult getTenantIdByName(@RequestParam("name") String name) {
- TenantDO tenant = tenantService.getTenantByName(name);
- return success(tenant != null ? tenant.getId() : null);
- }
-
- @GetMapping("/get-by-website")
- @PermitAll
- @Operation(summary = "使用域名,获得租户信息", description = "登录界面,根据用户的域名,获得租户信息")
- @Parameter(name = "website", description = "域名", required = true, example = "www.iocoder.cn")
- public CommonResult getTenantByWebsite(@RequestParam("website") String website) {
- TenantDO tenant = tenantService.getTenantByWebsite(website);
- return success(TenantConvert.INSTANCE.convert03(tenant));
+ TenantDO tenantDO = tenantService.getTenantByName(name);
+ return success(tenantDO != null ? tenantDO.getId() : null);
}
@PostMapping("/create")
@@ -103,4 +94,5 @@ public class TenantController {
ExcelUtils.write(response, "租户.xls", "数据", TenantExcelVO.class, datas);
}
+
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java
index 56117312b..f97c84329 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java
@@ -1,9 +1,8 @@
package cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
@Schema(description = "管理后台 - 租户套餐精简 Response VO")
@Data
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantBaseVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantBaseVO.java
index 2cb3e4f7c..84c1b0482 100755
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantBaseVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantBaseVO.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
-import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
@@ -29,7 +29,7 @@ public class TenantBaseVO {
private Integer status;
@Schema(description = "绑定域名", example = "https://www.iocoder.cn")
- private String website;
+ private String domain;
@Schema(description = "租户套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "租户套餐编号不能为空")
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java
index cfe37f620..539cc5875 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.user.vo.profile;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
-import jakarta.validation.constraints.NotEmpty;
-
@Schema(description = "管理后台 - 用户个人中心更新密码 Request VO")
@Data
public class UserProfileUpdatePasswordReqVO {
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java
index 99f5e1ffb..11537b403 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java
@@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.system.controller.admin.user.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
-import jakarta.validation.constraints.NotEmpty;
-
@Schema(description = "管理后台 - 用户创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java
index 5fc9b8df4..fe6229358 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.user.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.NotNull;
-
@Schema(description = "管理后台 - 用户更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java
index 2d55e4498..3460fa09b 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java
@@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.system.mq.consumer.mail;
import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
import cn.iocoder.yudao.module.system.service.mail.MailSendService;
+import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
-import jakarta.annotation.Resource;
+import java.util.function.Consumer;
/**
* 针对 {@link MailSendMessage} 的消费者
@@ -16,15 +15,14 @@ import jakarta.annotation.Resource;
*/
@Component
@Slf4j
-public class MailSendConsumer {
+public class MailSendConsumer implements Consumer {
@Resource
private MailSendService mailSendService;
- @EventListener
- @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
- public void onMessage(MailSendMessage message) {
- log.info("[onMessage][消息内容({})]", message);
+ @Override
+ public void accept(MailSendMessage message) {
+ log.info("[accept][消息内容({})]", message);
mailSendService.doSendMail(message);
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java
index f1d9602aa..2a0421d34 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java
@@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms;
import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
import cn.iocoder.yudao.module.system.service.sms.SmsSendService;
+import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
-import jakarta.annotation.Resource;
+import java.util.function.Consumer;
/**
* 针对 {@link SmsSendMessage} 的消费者
@@ -16,16 +15,14 @@ import jakarta.annotation.Resource;
*/
@Component
@Slf4j
-public class SmsSendConsumer {
+public class SmsSendConsumer implements Consumer {
@Resource
private SmsSendService smsSendService;
- @EventListener
- @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
- public void onMessage(SmsSendMessage message) {
- log.info("[onMessage][消息内容({})]", message);
+ @Override
+ public void accept(SmsSendMessage message) {
+ log.info("[accept][消息内容({})]", message);
smsSendService.doSendSms(message);
}
-
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
index aae67de0d..e27d4d077 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
@@ -9,7 +9,6 @@ import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
-import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*;
import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
@@ -27,12 +26,12 @@ import com.google.common.annotations.VisibleForTesting;
import com.xingyuv.captcha.model.common.ResponseModel;
import com.xingyuv.captcha.model.vo.CaptchaVO;
import com.xingyuv.captcha.service.CaptchaService;
+import jakarta.annotation.Resource;
+import jakarta.validation.Validator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import jakarta.annotation.Resource;
-import jakarta.validation.Validator;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -85,7 +84,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
}
// 校验是否禁用
- if (CommonStatusEnum.isDisable(user.getStatus())) {
+ if (ObjectUtil.notEqual(user.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.USER_DISABLED);
throw exception(AUTH_LOGIN_USER_DISABLED);
}
@@ -156,14 +155,14 @@ public class AdminAuthServiceImpl implements AdminAuthService {
@Override
public AuthLoginRespVO socialLogin(AuthSocialLoginReqVO reqVO) {
// 使用 code 授权码,进行登录。然后,获得到绑定的用户编号
- SocialUserRespDTO socialUser = socialUserService.getSocialUser(UserTypeEnum.ADMIN.getValue(), reqVO.getType(),
+ Long userId = socialUserService.getBindUserId(UserTypeEnum.ADMIN.getValue(), reqVO.getType(),
reqVO.getCode(), reqVO.getState());
- if (socialUser == null) {
+ if (userId == null) {
throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
}
// 获得用户
- AdminUserDO user = userService.getUser(socialUser.getUserId());
+ AdminUserDO user = userService.getUser(userId);
if (user == null) {
throw exception(USER_NOT_EXISTS);
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java
index 6ecf4b2a2..79f80f015 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.service.sms;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO;
@@ -8,10 +9,10 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsLogMapper;
import cn.iocoder.yudao.module.system.enums.sms.SmsReceiveStatusEnum;
import cn.iocoder.yudao.module.system.enums.sms.SmsSendStatusEnum;
+import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
-import jakarta.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@@ -54,12 +55,13 @@ public class SmsLogServiceImpl implements SmsLogService {
}
@Override
- public void updateSmsSendResult(Long id, Boolean success,
+ public void updateSmsSendResult(Long id, Integer sendCode, String sendMsg,
String apiSendCode, String apiSendMsg,
String apiRequestId, String apiSerialNo) {
- SmsSendStatusEnum sendStatus = success ? SmsSendStatusEnum.SUCCESS : SmsSendStatusEnum.FAILURE;
- smsLogMapper.updateById(SmsLogDO.builder().id(id)
- .sendStatus(sendStatus.getStatus()).sendTime(LocalDateTime.now())
+ SmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ?
+ SmsSendStatusEnum.SUCCESS : SmsSendStatusEnum.FAILURE;
+ smsLogMapper.updateById(SmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus())
+ .sendTime(LocalDateTime.now()).sendCode(sendCode).sendMsg(sendMsg)
.apiSendCode(apiSendCode).apiSendMsg(apiSendMsg)
.apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build());
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java
index b05d1302e..c402eec6a 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.system.service.sms;
import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.core.KeyValue;
@@ -9,6 +8,7 @@ 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.SmsCommonResult;
import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO;
import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO;
@@ -19,10 +19,9 @@ import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer;
import cn.iocoder.yudao.module.system.service.member.MemberService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.google.common.annotations.VisibleForTesting;
-import lombok.extern.slf4j.Slf4j;
+import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
-import jakarta.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -36,7 +35,6 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
* @author 芋道源码
*/
@Service
-@Slf4j
public class SmsSendServiceImpl implements SmsSendService {
@Resource
@@ -160,17 +158,11 @@ public class SmsSendServiceImpl implements SmsSendService {
SmsClient smsClient = smsChannelService.getSmsClient(message.getChannelId());
Assert.notNull(smsClient, "短信客户端({}) 不存在", message.getChannelId());
// 发送短信
- try {
- SmsSendRespDTO sendResponse = smsClient.sendSms(message.getLogId(), message.getMobile(),
- message.getApiTemplateId(), message.getTemplateParams());
- smsLogService.updateSmsSendResult(message.getLogId(), sendResponse.getSuccess(),
- sendResponse.getApiCode(), sendResponse.getApiMsg(),
- sendResponse.getApiRequestId(), sendResponse.getSerialNo());
- } catch (Throwable ex) {
- log.error("[doSendSms][发送短信异常,日志编号({})]", message.getLogId(), ex);
- smsLogService.updateSmsSendResult(message.getLogId(), false,
- "EXCEPTION", ExceptionUtil.getRootCauseMessage(ex), null, null);
- }
+ SmsCommonResult sendResult = smsClient.sendSms(message.getLogId(), message.getMobile(),
+ message.getApiTemplateId(), message.getTemplateParams());
+ smsLogService.updateSmsSendResult(message.getLogId(), sendResult.getCode(), sendResult.getMsg(),
+ sendResult.getApiCode(), sendResult.getApiMsg(), sendResult.getApiRequestId(),
+ sendResult.getData() != null ? sendResult.getData().getSerialNo() : null);
}
@Override
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java
index f7a376e40..3a0b1ec83 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java
@@ -6,8 +6,8 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla
import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
-
import jakarta.validation.Valid;
+
import java.util.List;
import java.util.Map;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
index c840f19d1..93f1f0184 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
@@ -1,14 +1,12 @@
package cn.iocoder.yudao.module.system.service.social;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
-import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
-import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
-
import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
+
import java.util.List;
/**
@@ -18,10 +16,31 @@ import java.util.List;
*/
public interface SocialUserService {
+ /**
+ * 获得社交平台的授权 URL
+ *
+ * @param type 社交平台的类型 {@link SocialTypeEnum}
+ * @param redirectUri 重定向 URL
+ * @return 社交平台的授权 URL
+ */
+ String getAuthorizeUrl(Integer type, String redirectUri);
+
+ /**
+ * 授权获得对应的社交用户
+ * 如果授权失败,则会抛出 {@link ServiceException} 异常
+ *
+ * @param type 社交平台的类型 {@link SocialTypeEnum}
+ * @param code 授权码
+ * @param state state
+ * @return 授权用户
+ */
+ @NotNull
+ SocialUserDO authSocialUser(Integer type, String code, String state);
+
/**
* 获得指定用户的社交用户列表
*
- * @param userId 用户编号
+ * @param userId 用户编号
* @param userType 用户类型
* @return 社交用户列表
*/
@@ -31,49 +50,29 @@ public interface SocialUserService {
* 绑定社交用户
*
* @param reqDTO 绑定信息
- * @return 社交用户 openid
*/
- String bindSocialUser(@Valid SocialUserBindReqDTO reqDTO);
+ void bindSocialUser(@Valid SocialUserBindReqDTO reqDTO);
/**
* 取消绑定社交用户
*
* @param userId 用户编号
* @param userType 全局用户类型
- * @param socialType 社交平台的类型 {@link SocialTypeEnum}
+ * @param type 社交平台的类型 {@link SocialTypeEnum}
* @param openid 社交平台的 openid
*/
- void unbindSocialUser(Long userId, Integer userType, Integer socialType, String openid);
+ void unbindSocialUser(Long userId, Integer userType, Integer type, String openid);
/**
- * 获得社交用户
- *
+ * 获得社交用户的绑定用户编号
+ * 注意,返回的是 MemberUser 或者 AdminUser 的 id 编号!
* 在认证信息不正确的情况下,也会抛出 {@link ServiceException} 业务异常
*
* @param userType 用户类型
- * @param socialType 社交平台的类型
+ * @param type 社交平台的类型
* @param code 授权码
* @param state state
- * @return 社交用户
+ * @return 绑定用户编号
*/
- SocialUserRespDTO getSocialUser(Integer userType, Integer socialType, String code, String state);
-
- // ==================== 社交用户 CRUD ====================
-
- /**
- * 获得社交用户
- *
- * @param id 编号
- * @return 社交用户
- */
- SocialUserDO getSocialUser(Long id);
-
- /**
- * 获得社交用户分页
- *
- * @param pageReqVO 分页查询
- * @return 社交用户分页
- */
- PageResult getSocialUserPage(SocialUserPageReqVO pageReqVO);
-
+ Long getBindUserId(Integer userType, Integer type, String code, String state);
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
index 321d4e2ac..493710aae 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
@@ -2,32 +2,32 @@ package cn.iocoder.yudao.module.system.service.social;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
-import cn.iocoder.yudao.framework.common.exception.ServiceException;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
+import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
-import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
-import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper;
import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import com.xingyuv.jushauth.model.AuthCallback;
+import com.xingyuv.jushauth.model.AuthResponse;
import com.xingyuv.jushauth.model.AuthUser;
+import com.xingyuv.jushauth.request.AuthRequest;
+import com.xingyuv.jushauth.utils.AuthStateUtils;
+import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
-import jakarta.annotation.Resource;
-import jakarta.validation.constraints.NotNull;
import java.util.Collections;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.AUTH_THIRD_LOGIN_NOT_BIND;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
/**
* 社交用户 Service 实现类
@@ -39,13 +39,51 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USE
@Slf4j
public class SocialUserServiceImpl implements SocialUserService {
+ @Resource// 由于自定义了 YudaoAuthRequestFactory 无法覆盖默认的 AuthRequestFactory,所以只能注入它
+ private YudaoAuthRequestFactory yudaoAuthRequestFactory;
+
@Resource
private SocialUserBindMapper socialUserBindMapper;
@Resource
private SocialUserMapper socialUserMapper;
- @Resource
- private SocialClientService socialClientService;
+ @Override
+ public String getAuthorizeUrl(Integer type, String redirectUri) {
+ // 获得对应的 AuthRequest 实现
+ AuthRequest authRequest = yudaoAuthRequestFactory.get(SocialTypeEnum.valueOfType(type).getSource());
+ // 生成跳转地址
+ String authorizeUri = authRequest.authorize(AuthStateUtils.createState());
+ return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri);
+ }
+
+ @Override
+ public SocialUserDO authSocialUser(Integer type, String code, String state) {
+ // 优先从 DB 中获取,因为 code 有且可以使用一次。
+ // 在社交登录时,当未绑定 User 时,需要绑定登录,此时需要 code 使用两次
+ SocialUserDO socialUser = socialUserMapper.selectByTypeAndCodeAnState(type, code, state);
+ if (socialUser != null) {
+ return socialUser;
+ }
+
+ // 请求获取
+ AuthUser authUser = getAuthUser(type, code, state);
+ Assert.notNull(authUser, "三方用户不能为空");
+
+ // 保存到 DB 中
+ socialUser = socialUserMapper.selectByTypeAndOpenid(type, authUser.getUuid());
+ if (socialUser == null) {
+ socialUser = new SocialUserDO();
+ }
+ socialUser.setType(type).setCode(code).setState(state) // 需要保存 code + state 字段,保证后续可查询
+ .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken())))
+ .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo()));
+ if (socialUser.getId() == null) {
+ socialUserMapper.insert(socialUser);
+ } else {
+ socialUserMapper.updateById(socialUser);
+ }
+ return socialUser;
+ }
@Override
public List getSocialUserList(Long userId, Integer userType) {
@@ -60,10 +98,9 @@ public class SocialUserServiceImpl implements SocialUserService {
@Override
@Transactional
- public String bindSocialUser(SocialUserBindReqDTO reqDTO) {
+ public void bindSocialUser(SocialUserBindReqDTO reqDTO) {
// 获得社交用户
- SocialUserDO socialUser = authSocialUser(reqDTO.getSocialType(), reqDTO.getUserType(),
- reqDTO.getCode(), reqDTO.getState());
+ SocialUserDO socialUser = authSocialUser(reqDTO.getType(), reqDTO.getCode(), reqDTO.getState());
Assert.notNull(socialUser, "社交用户不能为空");
// 社交用户可能之前绑定过别的用户,需要进行解绑
@@ -78,13 +115,12 @@ public class SocialUserServiceImpl implements SocialUserService {
.userId(reqDTO.getUserId()).userType(reqDTO.getUserType())
.socialUserId(socialUser.getId()).socialType(socialUser.getType()).build();
socialUserBindMapper.insert(socialUserBind);
- return socialUser.getOpenid();
}
@Override
- public void unbindSocialUser(Long userId, Integer userType, Integer socialType, String openid) {
+ public void unbindSocialUser(Long userId, Integer userType, Integer type, String openid) {
// 获得 openid 对应的 SocialUserDO 社交用户
- SocialUserDO socialUser = socialUserMapper.selectByTypeAndOpenid(socialType, openid);
+ SocialUserDO socialUser = socialUserMapper.selectByTypeAndOpenid(type, openid);
if (socialUser == null) {
throw exception(SOCIAL_USER_NOT_FOUND);
}
@@ -94,9 +130,9 @@ public class SocialUserServiceImpl implements SocialUserService {
}
@Override
- public SocialUserRespDTO getSocialUser(Integer userType, Integer socialType, String code, String state) {
+ public Long getBindUserId(Integer userType, Integer type, String code, String state) {
// 获得社交用户
- SocialUserDO socialUser = authSocialUser(socialType, userType, code, state);
+ SocialUserDO socialUser = authSocialUser(type, code, state);
Assert.notNull(socialUser, "社交用户不能为空");
// 如果未绑定的社交用户,则无法自动登录,进行报错
@@ -105,59 +141,27 @@ public class SocialUserServiceImpl implements SocialUserService {
if (socialUserBind == null) {
throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
}
- return new SocialUserRespDTO(socialUser.getOpenid(), socialUserBind.getUserId());
+ return socialUserBind.getUserId();
}
- // TODO 芋艿:调整下单测
/**
- * 授权获得对应的社交用户
- * 如果授权失败,则会抛出 {@link ServiceException} 异常
+ * 请求社交平台,获得授权的用户
*
- * @param socialType 社交平台的类型 {@link SocialTypeEnum}
- * @param userType 用户类型
- * @param code 授权码
- * @param state state
- * @return 授权用户
+ * @param type 社交平台的类型
+ * @param code 授权码
+ * @param state 授权 state
+ * @return 授权的用户
*/
- @NotNull
- public SocialUserDO authSocialUser(Integer socialType, Integer userType, String code, String state) {
- // 优先从 DB 中获取,因为 code 有且可以使用一次。
- // 在社交登录时,当未绑定 User 时,需要绑定登录,此时需要 code 使用两次
- SocialUserDO socialUser = socialUserMapper.selectByTypeAndCodeAnState(socialType, code, state);
- if (socialUser != null) {
- return socialUser;
+ private AuthUser getAuthUser(Integer type, String code, String state) {
+ AuthRequest authRequest = yudaoAuthRequestFactory.get(SocialTypeEnum.valueOfType(type).getSource());
+ AuthCallback authCallback = AuthCallback.builder().code(code).state(state).build();
+ AuthResponse> authResponse = authRequest.login(authCallback);
+ log.info("[getAuthUser][请求社交平台 type({}) request({}) response({})]", type,
+ toJsonString(authCallback), toJsonString(authResponse));
+ if (!authResponse.ok()) {
+ throw exception(SOCIAL_USER_AUTH_FAILURE, authResponse.getMsg());
}
-
- // 请求获取
- AuthUser authUser = socialClientService.getAuthUser(socialType, userType, code, state);
- Assert.notNull(authUser, "三方用户不能为空");
-
- // 保存到 DB 中
- socialUser = socialUserMapper.selectByTypeAndOpenid(socialType, authUser.getUuid());
- if (socialUser == null) {
- socialUser = new SocialUserDO();
- }
- socialUser.setType(socialType).setCode(code).setState(state) // 需要保存 code + state 字段,保证后续可查询
- .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken())))
- .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo()));
- if (socialUser.getId() == null) {
- socialUserMapper.insert(socialUser);
- } else {
- socialUserMapper.updateById(socialUser);
- }
- return socialUser;
- }
-
- // ==================== 社交用户 CRUD ====================
-
- @Override
- public SocialUserDO getSocialUser(Long id) {
- return socialUserMapper.selectById(id);
- }
-
- @Override
- public PageResult getSocialUserPage(SocialUserPageReqVO pageReqVO) {
- return socialUserMapper.selectPage(pageReqVO);
+ return (AuthUser) authResponse.getData();
}
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java
index 8c463c6f0..71d617b97 100644
--- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java
+++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java
@@ -8,10 +8,11 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqV
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
+import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum;
+import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
-import jakarta.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -40,7 +41,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
public void testCreateDept() {
// 准备参数
DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class, o -> {
- o.setParentId(DeptDO.PARENT_ID_ROOT);
+ o.setParentId(DeptIdEnum.ROOT.getId());
o.setStatus(randomCommonStatus());
});
@@ -61,7 +62,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
// 准备参数
DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> {
// 设置更新的 ID
- o.setParentId(DeptDO.PARENT_ID_ROOT);
+ o.setParentId(DeptIdEnum.ROOT.getId());
o.setId(dbDeptDO.getId());
o.setStatus(randomCommonStatus());
});
diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java
index a8b1db401..7df58a848 100644
--- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java
+++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.system.service.social;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
+import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
-import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper;
@@ -14,16 +14,17 @@ import com.xingyuv.jushauth.model.AuthCallback;
import com.xingyuv.jushauth.model.AuthResponse;
import com.xingyuv.jushauth.model.AuthUser;
import com.xingyuv.jushauth.request.AuthRequest;
-import com.xingyuv.justauth.AuthRequestFactory;
-import org.junit.jupiter.api.Disabled;
+import com.xingyuv.jushauth.utils.AuthStateUtils;
+import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
-import jakarta.annotation.Resource;
import java.util.List;
-import static cn.hutool.core.util.RandomUtil.*;
+import static cn.hutool.core.util.RandomUtil.randomLong;
+import static cn.hutool.core.util.RandomUtil.randomString;
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
@@ -34,7 +35,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;
@Import(SocialUserServiceImpl.class)
-@Disabled // TODO 芋艿:后续统一修复
public class SocialUserServiceImplTest extends BaseDbUnitTest {
@Resource
@@ -46,42 +46,40 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
private SocialUserBindMapper socialUserBindMapper;
@MockBean
- private AuthRequestFactory authRequestFactory;
+ private YudaoAuthRequestFactory authRequestFactory;
- // TODO 芋艿:后续统一修复
-// @Test
-// public void testGetAuthorizeUrl() {
-// try (MockedStatic authStateUtilsMock = mockStatic(AuthStateUtils.class)) {
-// // 准备参数
-// Integer type = SocialTypeEnum.WECHAT_MP.getType();
-// String redirectUri = "sss";
-// // mock 获得对应的 AuthRequest 实现
-// AuthRequest authRequest = mock(AuthRequest.class);
-// when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest);
-// // mock 方法
-// authStateUtilsMock.when(AuthStateUtils::createState).thenReturn("aoteman");
-// when(authRequest.authorize(eq("aoteman"))).thenReturn("https://www.iocoder.cn?redirect_uri=yyy");
-//
-// // 调用
-// String url = socialUserService.getAuthorizeUrl(type, redirectUri);
-// // 断言
-// assertEquals("https://www.iocoder.cn?redirect_uri=sss", url);
-// }
-// }
+ @Test
+ public void testGetAuthorizeUrl() {
+ try (MockedStatic authStateUtilsMock = mockStatic(AuthStateUtils.class)) {
+ // 准备参数
+ Integer type = SocialTypeEnum.WECHAT_MP.getType();
+ String redirectUri = "sss";
+ // mock 获得对应的 AuthRequest 实现
+ AuthRequest authRequest = mock(AuthRequest.class);
+ when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest);
+ // mock 方法
+ authStateUtilsMock.when(AuthStateUtils::createState).thenReturn("aoteman");
+ when(authRequest.authorize(eq("aoteman"))).thenReturn("https://www.iocoder.cn?redirect_uri=yyy");
+
+ // 调用
+ String url = socialUserService.getAuthorizeUrl(type, redirectUri);
+ // 断言
+ assertEquals("https://www.iocoder.cn?redirect_uri=sss", url);
+ }
+ }
@Test
public void testAuthSocialUser_exists() {
// 准备参数
- Integer socialType = SocialTypeEnum.GITEE.getType();
- Integer userType = randomEle(SocialTypeEnum.values()).getType();
+ Integer type = SocialTypeEnum.GITEE.getType();
String code = "tudou";
String state = "yuanma";
// mock 方法
- SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(socialType).setCode(code).setState(state);
+ SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(type).setCode(code).setState(state);
socialUserMapper.insert(socialUser);
// 调用
- SocialUserDO result = socialUserService.authSocialUser(socialType, userType, code, state);
+ SocialUserDO result = socialUserService.authSocialUser(type, code, state);
// 断言
assertPojoEquals(socialUser, result);
}
@@ -89,8 +87,7 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
@Test
public void testAuthSocialUser_authFailure() {
// 准备参数
- Integer socialType = SocialTypeEnum.GITEE.getType();
- Integer userType = randomEle(SocialTypeEnum.values()).getType();
+ Integer type = SocialTypeEnum.GITEE.getType();
// mock 方法
AuthRequest authRequest = mock(AuthRequest.class);
when(authRequestFactory.get(anyString())).thenReturn(authRequest);
@@ -99,15 +96,14 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
// 调用并断言
assertServiceException(
- () -> socialUserService.authSocialUser(socialType, userType, randomString(10), randomString(10)),
+ () -> socialUserService.authSocialUser(type, randomString(10), randomString(10)),
SOCIAL_USER_AUTH_FAILURE, "模拟失败");
}
@Test
public void testAuthSocialUser_insert() {
// 准备参数
- Integer socialType = SocialTypeEnum.GITEE.getType();
- Integer userType = randomEle(SocialTypeEnum.values()).getType();
+ Integer type = SocialTypeEnum.GITEE.getType();
String code = "tudou";
String state = "yuanma";
// mock 方法
@@ -118,9 +114,9 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
when(authRequest.login(any(AuthCallback.class))).thenReturn(authResponse);
// 调用
- SocialUserDO result = socialUserService.authSocialUser(socialType, userType, code, state);
+ SocialUserDO result = socialUserService.authSocialUser(type, code, state);
// 断言
- assertBindSocialUser(socialType, result, authResponse.getData());
+ assertBindSocialUser(type, result, authResponse.getData());
assertEquals(code, result.getCode());
assertEquals(state, result.getState());
}
@@ -128,12 +124,11 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
@Test
public void testAuthSocialUser_update() {
// 准备参数
- Integer socialType = SocialTypeEnum.GITEE.getType();
- Integer userType = randomEle(SocialTypeEnum.values()).getType();
+ Integer type = SocialTypeEnum.GITEE.getType();
String code = "tudou";
String state = "yuanma";
// mock 数据
- socialUserMapper.insert(randomPojo(SocialUserDO.class).setType(socialType).setOpenid("test_openid"));
+ socialUserMapper.insert(randomPojo(SocialUserDO.class).setType(type).setOpenid("test_openid"));
// mock 方法
AuthRequest authRequest = mock(AuthRequest.class);
when(authRequestFactory.get(eq(SocialTypeEnum.GITEE.getSource()))).thenReturn(authRequest);
@@ -143,9 +138,9 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
when(authRequest.login(any(AuthCallback.class))).thenReturn(authResponse);
// 调用
- SocialUserDO result = socialUserService.authSocialUser(socialType, userType, code, state);
+ SocialUserDO result = socialUserService.authSocialUser(type, code, state);
// 断言
- assertBindSocialUser(socialType, result, authResponse.getData());
+ assertBindSocialUser(type, result, authResponse.getData());
assertEquals(code, result.getCode());
assertEquals(state, result.getState());
}
@@ -187,9 +182,9 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
// 准备参数
SocialUserBindReqDTO reqDTO = new SocialUserBindReqDTO()
.setUserId(1L).setUserType(UserTypeEnum.ADMIN.getValue())
- .setSocialType(SocialTypeEnum.GITEE.getType()).setCode("test_code").setState("test_state");
+ .setType(SocialTypeEnum.GITEE.getType()).setCode("test_code").setState("test_state");
// mock 数据:获得社交用户
- SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(reqDTO.getSocialType())
+ SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(reqDTO.getType())
.setCode(reqDTO.getCode()).setState(reqDTO.getState());
socialUserMapper.insert(socialUser);
// mock 数据:用户可能之前已经绑定过该社交类型
@@ -200,11 +195,10 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
.setSocialType(SocialTypeEnum.GITEE.getType()).setSocialUserId(socialUser.getId()));
// 调用
- String openid = socialUserService.bindSocialUser(reqDTO);
+ socialUserService.bindSocialUser(reqDTO);
// 断言
List socialUserBinds = socialUserBindMapper.selectList();
assertEquals(1, socialUserBinds.size());
- assertEquals(socialUser.getOpenid(), openid);
}
@Test
@@ -238,26 +232,25 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
}
@Test
- public void testGetSocialUser() {
+ public void testGetBindUserId() {
// 准备参数
Integer userType = UserTypeEnum.ADMIN.getValue();
Integer type = SocialTypeEnum.GITEE.getType();
String code = "tudou";
String state = "yuanma";
// mock 社交用户
- SocialUserDO socialUserDO = randomPojo(SocialUserDO.class).setType(type).setCode(code).setState(state);
- socialUserMapper.insert(socialUserDO);
+ SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(type).setCode(code).setState(state);
+ socialUserMapper.insert(socialUser);
// mock 社交用户的绑定
Long userId = randomLong();
SocialUserBindDO socialUserBind = randomPojo(SocialUserBindDO.class).setUserType(userType).setUserId(userId)
- .setSocialType(type).setSocialUserId(socialUserDO.getId());
+ .setSocialType(type).setSocialUserId(socialUser.getId());
socialUserBindMapper.insert(socialUserBind);
// 调用
- SocialUserRespDTO socialUser = socialUserService.getSocialUser(userType, type, code, state);
+ Long result = socialUserService.getBindUserId(userType, type, code, state);
// 断言
- assertEquals(userId, socialUser.getUserId());
- assertEquals(socialUserDO.getOpenid(), socialUser.getOpenid());
+ assertEquals(userId, result);
}
}