feat: 外标授权部门刷数据接口

This commit is contained in:
2024-04-11 08:27:51 +08:00
parent 7adce6c119
commit e227a12404
5 changed files with 127 additions and 0 deletions
@@ -200,4 +200,21 @@ public class OldSystemController {
oldSystemService.dataFileFix(response);
}
@GetMapping("/fbDataFix")
@AutoLog(value = "老法规系统-海外标准数据修复")
@ApiOperation(value="老法规系统-海外标准数据修复", notes="老法规系统-海外标准数据修复")
@ApiOperationSupport(order = 16)
public void fbDataFix(HttpServletResponse response) {
oldSystemService.fbDataFix(response);
}
@GetMapping("/fbAuthDeptDataFix")
@AutoLog(value = "老法规系统-外标授权部门数据修复")
@ApiOperation(value="老法规系统-外标授权部门数据修复", notes="老法规系统-外标授权部门数据修复")
@ApiOperationSupport(order = 100)
public Result<?> fbAuthDeptDataFix() {
return Result.OK(oldSystemDeptRelationService.fbAuthDeptDataFix());
}
}
@@ -23,4 +23,6 @@ public interface OldSystemDepartRelationService extends IService<OldSystemDepart
void importDepartRelationData(MultipartFile file, HttpServletResponse response);
String esAuthDeptDataFix();
String fbAuthDeptDataFix();
}
@@ -119,4 +119,10 @@ public interface OldSystemService {
* @param response
*/
void dataFileFix(HttpServletResponse response);
/**
* 海外标准数据修复
* @param response
*/
void fbDataFix(HttpServletResponse response);
}
@@ -19,7 +19,9 @@ import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthDeptServic
import com.jero.modules.laws.oldSystem.entity.OldSystemDepartRelation;
import com.jero.modules.laws.oldSystem.service.OldSystemDepartRelationService;
import com.jero.modules.laws.oldSystem.mapper.OldSystemDepartRelationMapper;
import com.jero.modules.laws.standard.entity.LawsOverseasStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
import com.jero.modules.system.entity.SysDepart;
import com.jero.modules.system.service.ISysDepartService;
import lombok.Cleanup;
@@ -79,6 +81,9 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
@Resource
private EnterpriseStandardAuthDeptMapper esAdMapper;
@Resource
private ILawsOverseasStandardService fbService;
@Override
public void importDepartRelationData(MultipartFile file, HttpServletResponse response) {
List<OldSystemDepartRelation> errImportList = new ArrayList<>();
@@ -255,6 +260,71 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
return "修复完成,共修复数据" + distinctData.size() + "";
}
@Override
public String fbAuthDeptDataFix() {
List<EnterpriseStandardAuthDept> needSaveAllData = new ArrayList<>();
// 获取所有没有被删除的部门
LambdaQueryWrapper<SysDepart> departWrapper = new LambdaQueryWrapper<>();
departWrapper.eq(SysDepart::getDelFlag, YesOrNoEnum.NO.getValue());
List<SysDepartTreeModel> departListTree = departService.queryTreeList();
// 找到所有外标
List<LawsOverseasStandard> fbList = fbService.list();
List<String> allFbIdList = fbList.stream().map(LawsOverseasStandard::getId).collect(Collectors.toList());
// 找到所有已有授权部门权限
LambdaQueryWrapper<EnterpriseStandardAuthDept> esAdWrapper = new LambdaQueryWrapper<>();
esAdWrapper.in(!allFbIdList.isEmpty(), EnterpriseStandardAuthDept::getStandardId, allFbIdList);
esAdWrapper.isNull(EnterpriseStandardAuthDept::getAuthExpireDate);
List<EnterpriseStandardAuthDept> adList = esAdService.list(esAdWrapper);
Map<String, List<EnterpriseStandardAuthDept>> esAdMap = adList.stream()
.collect(Collectors.groupingBy(EnterpriseStandardAuthDept::getStandardId));
List<String> fbIdList = adList.stream()
.map(EnterpriseStandardAuthDept::getStandardId).distinct().collect(Collectors.toList());
// 找到所有授权部门不为空的企标
List<LawsOverseasStandard> lawsOverseasStandards = fbService.listByIds(fbIdList);
// 遍历企标数据的现有授权部门
for (LawsOverseasStandard fb : lawsOverseasStandards) {
String curStandardId = fb.getId();
Set<String> authDeptIdList = esAdMap.get(fb.getId()).stream()
.map(EnterpriseStandardAuthDept::getAuthDept)
.collect(Collectors.toSet());
// 创建一个部门Id Set 根据现有授权部门的部门Id找到所有子部门Id
Set<String> childDeptIdSet = new HashSet<>();
// 根据现有授权部门的部门Id找到所有子部门Id
for (String authDeptId : authDeptIdList) {
List<String> childDeptIdList = this.queryChildDeptIdList(authDeptId, departListTree);
if (childDeptIdList.isEmpty()) {
continue;
}
childDeptIdSet.addAll(childDeptIdList);
}
// 根据authDeptIdList去重
childDeptIdSet.removeAll(authDeptIdList);
// 构造需要保存的数据
for (String childDeptId : childDeptIdSet) {
EnterpriseStandardAuthDept esAd = new EnterpriseStandardAuthDept();
esAd.setId(IdWorker.getIdStr());
esAd.setStandardId(curStandardId);
esAd.setAuthDept(childDeptId);
needSaveAllData.add(esAd);
}
if (childDeptIdSet.isEmpty()) {
log.info("外标编号为{}的企标没有需要修复的数据", fb.getStandardNumber());
} else {
log.info("外标编号为{}的企标需要修复的数据条数为:{}", fb.getStandardNumber(), childDeptIdSet.size());
}
}
if (needSaveAllData.isEmpty()) {
return "没有需要修复的数据";
}
// 根据standardId和authDept去重
List<EnterpriseStandardAuthDept> distinctData = needSaveAllData.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(o -> o.getStandardId() + ";" + o.getAuthDept()))), ArrayList::new));
log.info("需要保存的数据条数为:{}", distinctData.size());
esAdService.batchInsertWithTransaction(needSaveAllData, 5000);
return "修复完成,共修复数据" + distinctData.size() + "";
}
// 递归查询所有子部门Id
private List<String> queryChildDeptIdList(String parentId, List<SysDepartTreeModel> departListTree) {
List<String> childDeptIdList = new ArrayList<>();
@@ -71,6 +71,9 @@ import java.util.stream.Collectors;
@Transactional(rollbackFor = JeroBootException.class)
public class OldSystemServiceImpl implements OldSystemService {
@Resource
private ILawsTreeNodeService lawsTreeNodeService;
@Resource
private LawsEnterpriseStandardMapper esMapper;
@@ -449,6 +452,35 @@ public class OldSystemServiceImpl implements OldSystemService {
}
}
@Override
public void fbDataFix(HttpServletResponse response) {
LambdaQueryWrapper<LawsTreeNode> treeNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
treeNodeLambdaQueryWrapper.eq(LawsTreeNode::getNodeName, "引进标准");
treeNodeLambdaQueryWrapper.eq(LawsTreeNode::getModuleCode, TableNameEnum.FOREIGN_REGULATIONS.getValue());
LawsTreeNode node = lawsTreeNodeService.getOne(treeNodeLambdaQueryWrapper);
// 获取引进标准的id
LambdaQueryWrapper<LawsNodeRelation> nodeRelationLambdaQueryWrapper = new LambdaQueryWrapper<>();
nodeRelationLambdaQueryWrapper.eq(LawsNodeRelation::getNodeId, node.getId());
List<LawsNodeRelation> fbList = lawsNodeRelationService.list(nodeRelationLambdaQueryWrapper);
List<String> fbIdList = fbList.stream().map(LawsNodeRelation::getUniqueRelationFlag).collect(Collectors.toList());
// 给外标添加汽车研究总院的权限
LambdaQueryWrapper<SysDepart> departLambdaQueryWrapper = new LambdaQueryWrapper<>();
departLambdaQueryWrapper.eq(SysDepart::getDepartName, "汽车研究总院");
SysDepart depart = departService.getOne(departLambdaQueryWrapper);
List<EnterpriseStandardAuthDept> esAdList = new ArrayList<>();
for (String fbId : fbIdList) {
EnterpriseStandardAuthDept ad = new EnterpriseStandardAuthDept();
ad.setAuthDept(depart.getId());
ad.setStandardId(fbId);
esAdList.add(ad);
log.info("新增海外标准id为{}的权限", fbId);
}
if (!esAdList.isEmpty()) {
log.info("共新增{}条权限数据", esAdList.size());
esAuthDeptService.saveBatch(esAdList);
}
}
private void oldSysFBDataFileDocPath(List<OldSystemImportDTO> allDatalist, List<OldSystemImportDTO> errImportList) {
List<OldSystemImportDTO> fbDatalist = allDatalist.stream().filter(o -> o.getBzfl().contains("ISO") ||
o.getBzfl().contains("引进") ||