feat(REQ-1980): 新增通过id批量删除名单接口

This commit is contained in:
chenwenjian 2023-12-26 15:47:18 +08:00
parent e85bacd350
commit c0bae49ed3
6 changed files with 145 additions and 6 deletions

View File

@ -8,6 +8,7 @@ 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;
@ -15,6 +16,7 @@ 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;
@ -31,6 +33,7 @@ public interface BlackAndWhiteListApi {
/**
* 创建黑名单或白名单
*
* @param req 包含type,module,params三个字段
* @return 记录id
*/
@ -39,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 黑白名单记录列表
*/
@ -55,6 +69,7 @@ public interface BlackAndWhiteListApi {
/**
* 判断指定模块指定参数记录是否在黑名单或白名单中
*
* @param req 包含type,module,params三个字段
* @return 若记录存在则返回true否则返回false
*/
@ -64,12 +79,9 @@ public interface BlackAndWhiteListApi {
/**
* 通过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);
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

@ -52,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);
@ -68,5 +73,4 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi {
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

@ -29,4 +29,5 @@ public interface BlackAndWhiteListService {
BlackAndWhiteListExcelImportResp importBlackAndWhiteListExcel(ListTypeEnum type, String module, String url, MultipartFile file);
Boolean deleteByIds(List<Long> ids);
}

View File

@ -25,8 +25,10 @@ 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;
/**
@ -127,6 +129,21 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
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数据
*

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);
});
}
}