字典api接口定义

This commit is contained in:
chenwenjian 2023-09-07 16:29:59 +08:00
parent b13411f625
commit 93bb94b023
20 changed files with 517 additions and 279 deletions

View File

@ -1,57 +0,0 @@
package cn.axzo.tyr.client;
import cn.axzo.framework.domain.page.PageQO;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.framework.domain.web.ApiException;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.TyrApi;
import cn.axzo.tyr.client.model.NewUserReq;
import cn.axzo.tyr.client.model.QueryUserReq;
import cn.axzo.tyr.client.model.UpdateUserReq;
import cn.axzo.tyr.client.model.UserRes;
import cn.azxo.framework.common.model.CommonResponse;
import lombok.RequiredArgsConstructor;
import javax.validation.Valid;
/**
* @Author: liyong.tian
* @Date: 2022/9/17
* @Description:
*/
@RequiredArgsConstructor
public class TyrClient {
private final TyrApi api;
/**
* 老项目迁移使用
*/
public UserRes createUser(@Valid NewUserReq req) {
CommonResponse<UserRes> apiResult = api.createUser(req);
if (apiResult.getCode() == 200) {
return apiResult.getData();
}
throw new RuntimeException(apiResult.getMsg());
}
/**
* 新项目使用
*/
public UserRes updateUser(Long id, @Valid UpdateUserReq req) {
ApiResult<UserRes> apiResult = api.updateUser(id, req);
if (apiResult.isSuccess()) {
return apiResult.getData();
}
throw new ApiException(apiResult.getRespCode());
}
public PageResp<UserRes> fetchUsers(QueryUserReq req, PageQO page) {
ApiPageResult<UserRes> apiPageResult = api.fetchUsers(req.toQueryMap(), page);
if (apiPageResult.isSuccess()) {
return apiPageResult.toPage();
}
throw new ApiException(apiPageResult.getRespCode());
}
}

View File

@ -1,10 +1,6 @@
package cn.axzo.tyr.client.config;
import cn.axzo.tyr.client.TyrClient;
import cn.axzo.tyr.client.feign.TyrApi;
import cn.axzo.tyr.client.feign.TyrFallbackFactory;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
@ -16,13 +12,4 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class TyrClientAutoConfiguration {
@Bean
public TyrFallbackFactory tyrFallbackFactory() {
return new TyrFallbackFactory();
}
@Bean
public TyrClient tyrClient(TyrApi tyrApi) {
return new TyrClient(tyrApi);
}
}

View File

@ -0,0 +1,79 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.dict.request.*;
import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp;
import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* @author chenwenjian
* @date 2023/9/6 15:33
* @description 企业字典api
* @modifiedBy
* @version: 1.0
*/
@FeignClient(name = "tyr", url = "http://tyr:8080")
public interface BasicDictApi {
/**
* 通过workspace和type获取字典节点列表
*
* @param req 包含workspace和type两个字段
* @return
*/
@PostMapping("api/dict/get-by-type")
ApiResult<List<BasicDictNodeResp>> getDictByType(@RequestBody BasicDictNodeReq req);
/**
* 获取字典树树形结构无需自行组装
*
* @param req 当不进行筛选时不传
* @return
*/
@PostMapping("api/dict/get-tree")
ApiResult<List<BasicDictTreeResp>> getBasicDictTree(@RequestBody BasicDictQueryReq req);
/**
* 获取字典树所有节点列表结构需自行组装成树
*
* @param req
* @return
*/
@PostMapping("api/dict/node-list")
ApiResult<List<BasicDictNodeResp>> getBasicDictNodeList(@RequestBody BasicDictQueryReq req);
/**
* 添加字典
*
* @param req 其中name同一个父级节点名称不能重复codeMap全局唯一
* @return
*/
@PostMapping("api/dict/create")
ApiResult<Long> create(@RequestBody @Validated BasicDictCreateReq req);
/**
* 编辑字典
*
* @param req
* @return
*/
@PostMapping("api/dict/update")
ApiResult<Boolean> update(@RequestBody @Validated BasicDictUpdateReq req);
/**
* 更新字典状态
*
* @param req
* @return
*/
@PostMapping("/update-status")
ApiResult<Boolean> updateStatus(@RequestBody @Validated BasicDictUpdateStatusReq req);
}

View File

@ -1,33 +0,0 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.page.PageQO;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.NewUserReq;
import cn.axzo.tyr.client.model.UpdateUserReq;
import cn.axzo.tyr.client.model.UserRes;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
/**
* @Author: liyong.tian
* @Date: 2022/9/17
* @Description:
*/
@FeignClient(name = "tyr", url = "http://localhost:8899", fallbackFactory = TyrFallbackFactory.class)
public interface TyrApi {
@PostMapping(value = "/api/v1/users", consumes = APPLICATION_JSON_VALUE)
CommonResponse<UserRes> createUser(@RequestBody NewUserReq req);
@PutMapping(value = "/api/v2/users/{id}", consumes = APPLICATION_JSON_VALUE)
ApiResult<UserRes> updateUser(@PathVariable("id") Long id, @RequestBody UpdateUserReq req);
@GetMapping(value = "/api/v2/users")
ApiPageResult<UserRes> fetchUsers(@RequestParam Map<String, Object> query, PageQO page);
}

View File

@ -1,52 +0,0 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.client.feign.FeignFallback;
import cn.axzo.framework.domain.page.PageQO;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.NewUserReq;
import cn.axzo.tyr.client.model.UpdateUserReq;
import cn.axzo.tyr.client.model.UserRes;
import cn.azxo.framework.common.model.CommonResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/**
* @Author: liyong.tian
* @Date: 2022/9/17
* @Description:
*/
@Slf4j
@RequiredArgsConstructor
public class TyrApiFallback implements TyrApi {
private final FeignFallback fallback;
/**
* 老项目迁移使用
* @param req
* @return
*/
@Override
public CommonResponse<UserRes> createUser(NewUserReq req) {
log.error("[tyr-api] createUser fallback", fallback.getCause());
return CommonResponse.error("创建用户失败");
}
/**
* 新项目推荐使用
*/
@Override
public ApiResult<UserRes> updateUser(Long id, UpdateUserReq req) {
log.error("[tyr-api] updateUser fallback", fallback.getCause());
return fallback.resp();
}
@Override
public ApiPageResult<UserRes> fetchUsers(Map<String, Object> query, PageQO page) {
log.error("[tyr-api] fetchUsers fallback", fallback.getCause());
return fallback.pageResp();
}
}

View File

@ -1,19 +0,0 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.client.feign.FeignFallback;
import cn.axzo.framework.domain.web.code.IRespCode;
import cn.axzo.framework.domain.web.code.RespCode;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
@Component
public class TyrFallbackFactory implements FallbackFactory<TyrApiFallback> {
// TODO: 2022/11/3 100-调整为具体的项目编号XXX-调整为项目名
private final IRespCode respCode = new RespCode("100" + "91001", "XXX服务不可用");
@Override
public TyrApiFallback create(Throwable cause) {
return new TyrApiFallback(new FeignFallback(cause, respCode));
}
}

View File

@ -1,29 +0,0 @@
package cn.axzo.tyr.client.model;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @Author: liyong.tian
* @Date: 2022/9/2
* @Description:
*/
@Data
public class NewUserReq {
@NotBlank(message = "名称不能为空")
private String name;
@NotNull
private Integer sex;
private Integer age;
private String phone;
private String email;
private String address;
}

View File

@ -1,22 +0,0 @@
package cn.axzo.tyr.client.model;
import cn.axzo.framework.context.client.IQueryMap;
import cn.axzo.framework.context.client.QueryMap;
import lombok.Data;
@Data
public class QueryUserReq implements IQueryMap {
private Long id;
private String name;
private String phone;
private String email;
@Override
public void append(QueryMap.Builder builder) {
builder.put("id", id).put("name", name).put("phone", phone).put("email", email);
}
}

View File

@ -1,19 +0,0 @@
package cn.axzo.tyr.client.model;
import lombok.Data;
@Data
public class UpdateUserReq {
private String name;
private Integer sex;
private Integer age;
private String phone;
private String email;
private String address;
}

View File

@ -1,21 +0,0 @@
package cn.axzo.tyr.client.model;
import lombok.Data;
@Data
public class UserRes {
private Long id;
private String name;
private Integer sex;
private Integer age;
private String phone;
private String email;
private String address;
}

View File

@ -0,0 +1,47 @@
package cn.axzo.tyr.client.model.dict.request;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* @author chenwenjian
* @date 2023/9/6 14:44
* @description 添加字典请求入参
* @modifiedBy
* @version: 1.0
*/
@Data
public class BasicDictCreateReq {
/**
* 工作台类型"ent", "proj", "oms"
*/
@NotBlank(message = "工作台类型不能为空")
private String workspaceType;
/**
* 类型"ouType", "terminal"
*/
private String type;
/**
* 所属上级节点id
*/
private Long parentId;
/**
* 字典名称
*/
@NotBlank(message = "字典名称不能为空")
@Length(max = 35, message = "字典名称长度不能超过35字符")
private String name;
/**
* 编码code
*/
@NotBlank(message = "code不能为空")
private String code;
}

View File

@ -0,0 +1,29 @@
package cn.axzo.tyr.client.model.dict.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author chenwenjian
* @date 2023/9/6 15:46
* @description
* @modifiedBy
* @version: 1.0
*/
@Data
public class BasicDictNodeReq {
/**
* 工作台类型
*/
@NotBlank(message = "工作台类型不能为空")
private String workspaceType;
/**
* 类型
*/
@NotBlank(message = "类型不能为空")
private String type;
}

View File

@ -0,0 +1,30 @@
package cn.axzo.tyr.client.model.dict.request;
import lombok.Data;
/**
* @author chenwenjian
* @date 2023/9/6 14:02
* @description 获取企业字典树请求入参
* @modifiedBy
* @version: 1.0
*/
@Data
public class BasicDictQueryReq {
/**
* 字典名称
*/
private String name;
/**
* 字典code
*/
private String code;
/**
* 状态
*/
private Boolean status;
}

View File

@ -0,0 +1,27 @@
package cn.axzo.tyr.client.model.dict.request;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* @author chenwenjian
* @date 2023/9/6 15:00
* @description 编辑请求入参
* @modifiedBy
* @version: 1.0
*/
@Data
public class BasicDictUpdateReq {
private Long id;
/**
* 字典名称
*/
@NotBlank(message = "字典名称不能为空")
@Length(max = 35, message = "字典名称长度不能超过35字符")
private String name;
}

View File

@ -0,0 +1,29 @@
package cn.axzo.tyr.client.model.dict.request;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author chenwenjian
* @date 2023/9/6 15:04
* @description 状态更改请求入参
* @modifiedBy
* @version: 1.0
*/
@Data
public class BasicDictUpdateStatusReq {
/**
* 节点id
*/
@NotNull(message = "节点id不能为空")
private Long id;
/**
* 状态true启用false禁用
*/
@NotNull(message = "状态不能为空")
private Boolean status;
}

View File

@ -0,0 +1,181 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.axzo.yoke</groupId>
<artifactId>yoke</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>yoke-server</artifactId>
<packaging>jar</packaging>
<name>yoke-server</name>
<properties>
<org.projectlombok.version>1.18.16</org.projectlombok.version>
<org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.axzo.framework</groupId>
<artifactId>axzo-web-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.framework</groupId>
<artifactId>axzo-auth-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.framework</groupId>
<artifactId>axzo-logger-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.maokai</groupId>
<artifactId>maokai-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.mns</groupId>
<artifactId>mns-http-api</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.basics</groupId>
<artifactId>basics-profiles-api</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.apollo</groupId>
<artifactId>apollo-workspace-api</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.third</groupId>
<artifactId>third-party-api</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.thrones</groupId>
<artifactId>thrones-client</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.basics</groupId>
<artifactId>basics-auth-api</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.trade</groupId>
<artifactId>trade-dingtalk</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.trade</groupId>
<artifactId>trade-data-security-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.pokonyan</groupId>
<artifactId>pokonyan</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.outman</groupId>
<artifactId>outman-http-api</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.pudge</groupId>
<artifactId>pudge-api</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.msgcenter</groupId>
<artifactId>msgcenter-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.pluto</groupId>
<artifactId>pluto-api</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.nanopart</groupId>
<artifactId>black-list-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dingtalk</artifactId>
<version>2.0.14</version>
</dependency>
</dependencies>
<build>
<finalName>yoke</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</path>
<!-- This is needed when using Lombok 1.18.16 and above -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</path>
<!-- Mapstruct should follow the lombok path(s) -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,48 @@
package cn.axzo.tyr.client.model.dict.response;
import lombok.Data;
/**
* @author chenwenjian
* @date 2023/9/6 15:39
* @description
* @modifiedBy
* @version: 1.0
*/
@Data
public class BasicDictNodeResp {
private Long id;
private Long parentId;
/**
* 工作台类型"ent", "proj", "oms"
*/
private String workspaceType;
/**
* 类型"ouType", "terminal"
*/
private String type;
/**
* 字典名称
*/
private String name;
/**
* 字典code
*/
private String code;
/**
* 状态
*/
private Boolean status;
/**
* 路径
*/
private String path;
}

View File

@ -0,0 +1,39 @@
package cn.axzo.tyr.client.model.dict.response;
import lombok.Data;
import java.util.List;
/**
* @author chenwenjian
* @date 2023/9/6 14:08
* @description
* @modifiedBy
* @version: 1.0
*/
@Data
public class BasicDictTreeResp {
private Long id;
/**
* 字典名称
*/
private String name;
/**
* 字典code
*/
private String code;
/**
* 状态
*/
private Boolean status;
/**
* 当前节点下子节点
*/
private List<BasicDictTreeResp> children;
}

View File

@ -0,0 +1,8 @@
/**
* @author chenwenjian
* @date 2023/9/6 15:37
* @description
* @modifiedBy
* @version: 1.0
*/
package cn.axzo.tyr.client.model.enums;

View File

@ -1,14 +0,0 @@
package cn.axzo.maven.archetype.client;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* Unit test for simple App.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {
}