Merge branch 'feature/REQ-1980' into 'master'

Feature/req 1980

See merge request universal/infrastructure/backend/nanopart!2
This commit is contained in:
金海洋 2023-12-27 10:12:58 +00:00
commit 105506e35c
12 changed files with 522 additions and 12 deletions

View File

@ -17,3 +17,70 @@
-Dspring.redis.password=Kjgnj93JKj3je
-DCUSTOM_ENV=test
-Dserver.port=8080
# 各模块结构
## all-login 登录白名单
~~~json
{
"phone": "手机号"
}
~~~
## attendance-pass 考勤黑名单
~~~json
{
"name": "姓名",
"phone": "手机号",
"idNumber": "身份证号"
}
~~~
## gxjg-blackuser-worker 产业工人黑名单
~~~json
{
"userName": "姓名",
"userIdCard": "身份证号",
"userPhone": "联系电话",
"blackReasonName": "拉黑原因",
"teamLeaderName": "拉黑时班组管理人员",
"projectName": "拉黑时所在项目",
"blacklistTime": "拉黑时间",
"remark": "备注"
}
~~~
## gxjg-blackuser-teamleader 班组管理人员黑名单
~~~json
{
"userName": "姓名",
"userIdCard": "身份证号",
"userPhone": "联系电话",
"blackReasonName": "拉黑原因",
"projectName": "拉黑时所在项目",
"blacklistTime": "拉黑时间",
"remark": "备注"
}
~~~
## gxjg-blackuser-employee 项目管理人员黑名单
~~~json
{
"userName": "姓名",
"userIdCard": "身份证号",
"userPhone": "联系电话",
"projectName": "拉黑时所在项目",
"blacklistTime": "拉黑时间",
"remark": "备注"
}
~~~
## gxjg-blackcompany 企业黑名单
~~~json
{
"companyName": "企业名称",
"companyUscc": "统一社会信用代码",
"legalName": "企业法人",
"projectName": "参建项目名称",
"projectCompanyPartName": "拉黑时参建类型",
"blackReasonName": "拉黑原因",
"blacklistTime": "拉黑时间",
"remark": "备注"
}
~~~

View File

@ -1,13 +1,24 @@
package cn.axzo.nanopart.api;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListExcelImportReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
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;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.util.List;
/**
@ -22,6 +33,7 @@ public interface BlackAndWhiteListApi {
/**
* 创建黑名单或白名单
*
* @param req 包含type,module,params三个字段
* @return 记录id
*/
@ -30,14 +42,25 @@ public interface BlackAndWhiteListApi {
/**
* 删除黑名单或白名单
*
* @param req 包含type,module,params三个字段
* @return void
*/
@PostMapping("api/black-white-list/delete")
ApiResult<Void> delete(@RequestBody @Validated BlackAndWhiteListReq req);
/**
* 批量删除黑名单或白名单
*
* @param ids 黑白名单id列表
* @return true-删除成功false-删除失败
*/
@GetMapping("/api/black-white-list/delete-by-id")
ApiResult<Boolean> deleteByIds(@RequestParam(value = "ids") @NotEmpty(message = "id不能为空") List<Long> ids);
/**
* 查询黑名单或白名单
*
* @param req 包含type,module,params三个字段
* @return 黑白名单记录列表
*/
@ -46,10 +69,19 @@ public interface BlackAndWhiteListApi {
/**
* 判断指定模块指定参数记录是否在黑名单或白名单中
*
* @param req 包含type,module,params三个字段
* @return 若记录存在则返回true否则返回false
*/
@PostMapping("api/black-white-list/is-in")
ApiResult<Boolean> isInBlackOrWhiteList(@RequestBody @Validated BlackAndWhiteListReq req);
/**
* 通过excel导入黑白名单
*
* @return 导入结果
*/
@PostMapping("api/black-white-list/import")
ApiResult<BlackAndWhiteListExcelImportResp> importBlackAndWhiteListExcel(@RequestParam(value = "type") @NotNull(message = "名单类型不能为空") ListTypeEnum type,
@RequestParam(value = "module") @NotBlank(message = "模块不能为空") String module, @RequestParam(value = "url", required = false) String url, @RequestPart(value = "file") MultipartFile file);
}

View File

@ -0,0 +1,47 @@
package cn.axzo.nanopart.api.request;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 黑白名单excel导入入参
*
* @author chenwenjian
* @version 1.0
* @date 2023/12/22 15:37
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BlackAndWhiteListExcelImportReq {
/**
* excel文件地址url和file二选一若有url则忽略file
*/
private String url;
/**
* excel文件url和file二选一若有url则忽略file
*/
private MultipartFile file;
/**
* 业务模块名cms-registerattendance-pass
*/
@NotBlank(message = "module名不能为空")
private String module;
/**
* 黑白名单类型0-黑名单1-白名单
*/
@NotNull(message = "名单类型不能为空")
private ListTypeEnum type;
}

View File

@ -0,0 +1,31 @@
package cn.axzo.nanopart.api.response;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;
/**
* 黑白名单导入返回结果
*
* @author chenwenjian
* @version 1.0
* @date 2023/12/21 18:48
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BlackAndWhiteListExcelImportResp {
/**
* 导入结果true表示导入成功false表示导入失败
*/
private Boolean result;
/**
* 只有result导入失败的行号和错误信息key为行号value为错误信息
*/
private Map<Long, String> errorMap;
}

View File

@ -0,0 +1,12 @@
package cn.axzo.nanopart.api;
/**
* @author chenwenjian
* @version 1.0
* @date 2023/12/22 15:17
*/
public class BlackAndWhiteListApiTest {
}

View File

@ -3,13 +3,30 @@ package cn.axzo.nanopart.server.controller;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.BlackAndWhiteListApi;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListExcelImportReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import cn.axzo.nanopart.server.service.BlackAndWhiteListService;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Select;
import org.json.JSONObject;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author chenwenjian
@ -18,11 +35,13 @@ import java.util.List;
* @modifiedBy
* @version: 1.0`
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class BlackAndWhiteListController implements BlackAndWhiteListApi {
private final BlackAndWhiteListService blackAndWhiteListService;
@Override
public ApiResult<Long> create(BlackAndWhiteListReq req) {
return blackAndWhiteListService.create(req);
@ -33,6 +52,11 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi {
return blackAndWhiteListService.delete(req);
}
@Override
public ApiResult<Boolean> deleteByIds(List<Long> ids) {
return ApiResult.ok(blackAndWhiteListService.deleteByIds(ids));
}
@Override
public ApiResult<List<BlackAndWhiteListResp>> detail(BlackAndWhiteListReq req) {
return blackAndWhiteListService.detail(req);
@ -42,4 +66,11 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi {
public ApiResult<Boolean> isInBlackOrWhiteList(BlackAndWhiteListReq req) {
return blackAndWhiteListService.isInBlackOrWhiteList(req);
}
@Override
public ApiResult<BlackAndWhiteListExcelImportResp> importBlackAndWhiteListExcel(ListTypeEnum type, String module, String url, MultipartFile file) {
log.info("导入Excel数据参数type={}, module={}, url={}, file={}", type, module, url, file);
return ApiResult.ok(blackAndWhiteListService.importBlackAndWhiteListExcel(type, module, url, file));
}
}

View File

@ -17,6 +17,7 @@ import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author chenwenjian
@ -75,4 +76,11 @@ public class BlackAndWhiteListRepository extends ServiceImpl<BlackAndWhiteListMa
}
});
}
public Boolean deleteByIds(Set<Long> idSet) {
return lambdaUpdate()
.in(SaasBlackWhiteList::getId, idSet)
.set(SaasBlackWhiteList::getIsDelete, 1)
.update();
}
}

View File

@ -1,8 +1,11 @@
package cn.axzo.nanopart.server.service;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -24,4 +27,7 @@ public interface BlackAndWhiteListService {
ApiResult<Boolean> isInBlackOrWhiteList(BlackAndWhiteListReq req);
BlackAndWhiteListExcelImportResp importBlackAndWhiteListExcel(ListTypeEnum type, String module, String url, MultipartFile file);
Boolean deleteByIds(List<Long> ids);
}

View File

@ -5,16 +5,31 @@ import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import cn.axzo.nanopart.server.dao.repository.BlackAndWhiteListRepository;
import cn.axzo.nanopart.server.service.BlackAndWhiteListService;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author chenwenjian
@ -32,6 +47,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
/**
* 新增一条黑白名单记录
*
* @param req 包含type,module和param三个字段
* @return 记录id
*/
@ -39,12 +55,12 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
public ApiResult<Long> create(BlackAndWhiteListReq req) {
// 黑白名单创建互斥,若存在于黑名单中则不允许存在于白名单中反之亦然
BlackAndWhiteListReq reverseReq = BeanMapper.copyBean(req, BlackAndWhiteListReq.class, (req1, req2) -> req2.setType((req1.getType().equals(ListTypeEnum.BLACK_LIST)) ? ListTypeEnum.WHITE_LIST : ListTypeEnum.BLACK_LIST));
if (isInBlackOrWhiteList(reverseReq).getData()){
throw new ServiceException("该记录已存在于"+reverseReq.getType().getDescription()+"中,不能创建对应"+req.getType().getDescription());
if (isInBlackOrWhiteList(reverseReq).getData()) {
throw new ServiceException("该记录已存在于" + reverseReq.getType().getDescription() + "中,不能创建对应" + req.getType().getDescription());
}
// 同类型名单内唯一性校验
if (isInBlackOrWhiteList(req).getData()){
throw new ServiceException("该记录已存在于"+req.getType().getDescription()+"");
if (isInBlackOrWhiteList(req).getData()) {
throw new ServiceException("该记录已存在于" + req.getType().getDescription() + "");
}
return ApiResult.ok(blackAndWhiteListRepository.create(req));
}
@ -62,6 +78,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
/**
* 查询指定条件的所有黑白名单记录
*
* @param req 包含type,module和param三个字段
* @return 记录列表
*/
@ -74,6 +91,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
/**
* 判断是否存在指定条件的黑白名单记录
*
* @param req 包含type,module和param三个字段
* @return 记录存在返回true否则返回false
*/
@ -82,4 +100,148 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
List<SaasBlackWhiteList> blackWhiteLists = blackAndWhiteListRepository.detail(req);
return ApiResult.ok(CollectionUtil.isNotEmpty(blackWhiteLists));
}
/**
* 导入黑白名单Excel文件
*
* @param type 名单类型
* @param module 模块
* @param url 文件url如果为空则从文件流中读取
* @param file 文件流
*/
@Override
public BlackAndWhiteListExcelImportResp importBlackAndWhiteListExcel(ListTypeEnum type, String module, String url, MultipartFile file) {
InputStream inputStream = null;
BlackAndWhiteListExcelImportResp importResp = new BlackAndWhiteListExcelImportResp();
// 获取文件
try {
inputStream = file.getInputStream();
if (StringUtils.hasText(url)) {
inputStream = new URL(url).openStream();
}
} catch (IOException e) {
throw new ServiceException("文件读取异常");
}
// 使用EasyExcel解析文件
List<Map<String, Object>> excelData = readExcel(inputStream, importResp);
// 将数据写入数据库
importResp.setResult(writeDataToDatabase(excelData, module, type.getValue()));
return importResp;
}
/**
* 批量删除黑白名单记录
*
* @param ids 记录id列表
* @return true-删除成功false-删除失败
*/
@Override
public Boolean deleteByIds(List<Long> ids) {
if (CollectionUtil.isNotEmpty(ids)) {
Set<Long> idSet = new HashSet<>(ids);
return blackAndWhiteListRepository.deleteByIds(idSet);
}
return true;
}
/**
* 使用EasyExcel读取Excel数据
*
* @param inputStream
* @param importResp
* @return
*/
public List<Map<String, Object>> readExcel(InputStream inputStream, BlackAndWhiteListExcelImportResp importResp) {
// 存储读取的每一行数据
List<Map<String, Object>> dataList = new ArrayList<>();
// 使用EasyExcel读取数据
EasyExcel.read(inputStream, new AnalysisEventListener<Map<Integer, String>>() {
// 表头
private Map<Integer, String> header;
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
log.info("表头信息:{}", headMap);
header = headMap;
}
/**
* 读取每一行数据
* @param rowData 每一行数据
* @param context 上下文
*/
@Override
public void invoke(Map<Integer, String> rowData, AnalysisContext context) {
try {
log.info("第{}行数据:{}", context.readRowHolder().getRowIndex(), rowData);
Map<String, Object> dataMap = new HashMap<>();
for (Map.Entry<Integer, String> entry : rowData.entrySet()) {
int columnIndex = entry.getKey();
String columnName = header.get(columnIndex);
dataMap.put(columnName, entry.getValue());
}
dataList.add(dataMap);
} catch (Exception e) {
HashMap<Long, String> errorMap = new HashMap<>();
errorMap.put(Long.valueOf(context.readRowHolder().getRowIndex()), e.getMessage());
importResp.setErrorMap(errorMap);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 解析完成后的操作
try {
inputStream.close();
} catch (IOException e) {
throw new ServiceException("资源关闭失败");
}
}
}).autoTrim(true).ignoreEmptyRow(true).sheet().doRead();
return dataList;
}
/**
* 将数据转换为JSON对象
*
* @param dataList
* @return
*/
private List<com.alibaba.fastjson.JSONObject> convertExcelDataToJson(List<Map<String, Object>> dataList) {
List<com.alibaba.fastjson.JSONObject> jsonList = new ArrayList<>();
// 遍历数据列表
for (Map<String, Object> dataMap : dataList) {
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
// 构造JSON对象
for (Map.Entry<String, Object> entry : dataMap.entrySet()) {
String columnName = entry.getKey();
Object columnValue = entry.getValue();
jsonObject.put(columnName, columnValue);
}
jsonList.add(jsonObject);
}
return jsonList;
}
/**
* 将数据写入数据库
*
* @param dataList param参数
* @param module 模块
* @return 写入结果
*/
private Boolean writeDataToDatabase(List<Map<String, Object>> dataList, String module, Integer type) {
List<SaasBlackWhiteList> list = dataList.stream().map(map -> {
SaasBlackWhiteList blackWhiteList = new SaasBlackWhiteList();
blackWhiteList.setType(type);
blackWhiteList.setModule(module);
blackWhiteList.setParam(map);
return blackWhiteList;
}).collect(Collectors.toList());
return blackAndWhiteListRepository.saveBatch(list);
}
}

View File

@ -19,11 +19,21 @@
<module>black-list-service</module>
</modules>
<!-- <dependencies>-->
<!-- <dependency>-->
<!-- <groupId>cn.axzo.infra</groupId>-->
<!-- <artifactId>axzo-bom</artifactId>-->
<!-- <version>2.0.0-SNAPSHOT</version>-->
<!-- </dependency>-->
<!-- </dependencies>-->
<dependencies>
<!-- poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- EasyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -1,15 +1,34 @@
package cn.axzo.nanopart;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.BlackAndWhiteListApi;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.extern.slf4j.Slf4j;
import okhttp3.RequestBody;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* @author chenwenjian
@ -18,12 +37,17 @@ import java.util.List;
* @modifiedBy
* @version: 1.0
*/
@Slf4j
@SpringBootTest
public class NanopartApplicationTests {
private final String[] envs ={"dev", "test", "pre", "prod"};
@Resource
private BlackAndWhiteListApi blackAndWhiteListApi;
private
@Test
void contextLoad(){
BlackAndWhiteListReq blackAndWhiteListReq = new BlackAndWhiteListReq();
@ -35,4 +59,77 @@ public class NanopartApplicationTests {
ApiResult<List<BlackAndWhiteListResp>> detail = blackAndWhiteListApi.detail(blackAndWhiteListReq);
System.out.println(detail.getData().toString());
}
@Test
void batchAdd(){
// 指定环境和文件路径
String env = "test";
String type = "BLACK_LIST";
// String filePath = "C:\\Users\\admin\\Desktop\\企业黑名单.xlsx";
// String module = "gxjg-blackcompany";
String filePath = "C:\\Users\\admin\\Desktop\\产业工人黑名单.xlsx";
String module = "gxjg-blackuser-worker";
HashMap<String, String> envMap = new HashMap<>();
envMap.put("dev", "https://dev-app.axzo.cn/");
envMap.put("test", "https://test-api.axzo.cn/");
envMap.put("pre", "https://pre-api.axzo.cn/");
envMap.put("prod", "https://api.axzo.cn/");
// 存储读取的每一行数据
List<Map<String, Object>> dataList = new ArrayList<>();
// 使用EasyExcel读取数据
EasyExcel.read(filePath, new AnalysisEventListener<Map<Integer, String>>() {
// 表头
private Map<Integer, String> header;
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
log.info("表头信息:{}", headMap);
header = headMap;
}
/**
* 读取每一行数据
* @param rowData 每一行数据
* @param context 上下文
*/
@Override
public void invoke(Map<Integer, String> rowData, AnalysisContext context) {
log.info("第{}行数据:{}", context.readRowHolder().getRowIndex(), rowData);
Map<String, Object> dataMap = new HashMap<>();
for (Map.Entry<Integer, String> entry : rowData.entrySet()) {
int columnIndex = entry.getKey();
String columnName = header.get(columnIndex);
dataMap.put(columnName, entry.getValue());
}
dataList.add(dataMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 解析完成后的操作
}
}).autoTrim(true).ignoreEmptyRow(true).sheet().doRead();
// 发送请求
dataList.stream().map(map -> {
HashMap<String, Object> body = new HashMap<>();
body.put("module", module);
body.put("type", type);
body.put("param", map);
return JSONUtil.toJsonStr(body);
}).forEach(body -> {
// 构建参数
String result = HttpRequest.post(envMap.get(env) + SpringUtil.getApplicationName() + "/api/black-white-list/create")
.body(body, "application/json")
.execute().body();
log.info("请求结果:{}", result);
});
}
}

View File

@ -22,6 +22,8 @@
<axzo-dependencies.version>2.0.0-SNAPSHOT</axzo-dependencies.version>
<lombok.version>1.18.22</lombok.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
<poi.version>5.2.2</poi.version>
<easyexcel.version>3.3.3</easyexcel.version>
</properties>
<modules>
@ -57,6 +59,11 @@
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
</dependencies>
<build>