Merge branch 'feature/REQ-1980' into 'master'
Feature/req 1980 See merge request universal/infrastructure/backend/nanopart!2
This commit is contained in:
commit
105506e35c
67
README.md
67
README.md
@ -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": "备注"
|
||||
}
|
||||
~~~
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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-register”,”attendance-pass“
|
||||
*/
|
||||
@NotBlank(message = "module名不能为空")
|
||||
private String module;
|
||||
|
||||
/**
|
||||
* 黑白名单类型,0-黑名单,1-白名单
|
||||
*/
|
||||
@NotNull(message = "名单类型不能为空")
|
||||
private ListTypeEnum type;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package cn.axzo.nanopart.api;
|
||||
|
||||
/**
|
||||
* @author chenwenjian
|
||||
* @version 1.0
|
||||
* @date 2023/12/22 15:17
|
||||
*/
|
||||
public class BlackAndWhiteListApiTest {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
|
||||
@ -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);
|
||||
});
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
7
pom.xml
7
pom.xml
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user