pref: 企标授权部门历史数据修复接口性能提升

This commit is contained in:
2024-01-05 13:29:44 +08:00
parent 47a48ad1ed
commit 6de5378536
7 changed files with 51 additions and 7 deletions
@@ -3,6 +3,8 @@ package com.jero.modules.laws.enterprise.mapper;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/** /**
* @author ThinkBook * @author ThinkBook
* @description 针对表【laws_enterprise_standard_auth_dept】的数据库操作Mapper * @description 针对表【laws_enterprise_standard_auth_dept】的数据库操作Mapper
@@ -11,6 +13,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface EnterpriseStandardAuthDeptMapper extends BaseMapper<EnterpriseStandardAuthDept> { public interface EnterpriseStandardAuthDeptMapper extends BaseMapper<EnterpriseStandardAuthDept> {
int batchInsert(List<EnterpriseStandardAuthDept> list);
} }
@@ -21,4 +21,12 @@
update_by,update_time,org_code, update_by,update_time,org_code,
standard_id,authDept standard_id,authDept
</sql> </sql>
<insert id="batchInsert">
INSERT INTO laws_enterprise_standard_auth_dept (id, standard_id, auth_dept)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.standardId}, #{item.authDept})
</foreach>
</insert>
</mapper> </mapper>
@@ -4,6 +4,8 @@ import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.laws.standard.entity.LawsStandardTempPermission; import com.jero.modules.laws.standard.entity.LawsStandardTempPermission;
import java.util.List;
/** /**
* @author ThinkBook * @author ThinkBook
* @description 针对表【laws_enterprise_standard_auth_dept】的数据库操作Service * @description 针对表【laws_enterprise_standard_auth_dept】的数据库操作Service
@@ -12,4 +14,6 @@ import com.jero.modules.laws.standard.entity.LawsStandardTempPermission;
public interface EnterpriseStandardAuthDeptService extends IService<EnterpriseStandardAuthDept> { public interface EnterpriseStandardAuthDeptService extends IService<EnterpriseStandardAuthDept> {
void saveTempPermission(LawsStandardTempPermission lawsStandardTempPermission); void saveTempPermission(LawsStandardTempPermission lawsStandardTempPermission);
void batchInsertWithTransaction(List<EnterpriseStandardAuthDept> list, int batchSize);
} }
@@ -12,6 +12,9 @@ import com.jero.modules.laws.standard.entity.LawsStandardTempPermission;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.utils.UserUtils; import com.jero.modules.sys.utils.UserUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -37,6 +40,9 @@ public class EnterpriseStandardAuthDeptServiceImpl extends ServiceImpl<Enterpris
@Resource @Resource
private EnterpriseStandardAuthUserServiceImpl authUserService; private EnterpriseStandardAuthUserServiceImpl authUserService;
@Resource
private SqlSessionFactory sqlSessionFactory;
@Override @Override
public void saveTempPermission(LawsStandardTempPermission lawsStandardTempPermission) { public void saveTempPermission(LawsStandardTempPermission lawsStandardTempPermission) {
List<String> standardIdList = lawsStandardTempPermission.getStandardIdList(); List<String> standardIdList = lawsStandardTempPermission.getStandardIdList();
@@ -61,6 +67,24 @@ public class EnterpriseStandardAuthDeptServiceImpl extends ServiceImpl<Enterpris
} }
saveBatch(esAuthDepts); saveBatch(esAuthDepts);
} }
@Override
public void batchInsertWithTransaction(List<EnterpriseStandardAuthDept> list, int batchSize) {
try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
EnterpriseStandardAuthDeptMapper batchMapper = sqlSession.getMapper(EnterpriseStandardAuthDeptMapper.class);
for (int i = 0; i < list.size(); i += batchSize) {
int end = Math.min(i + batchSize, list.size());
List<EnterpriseStandardAuthDept> batchList = list.subList(i, end);
batchMapper.batchInsert(batchList);
sqlSession.commit(); // 提交每个批次
}
} catch (Exception e) {
// 处理异常,根据需要记录日志或抛出
log.error("批量插入失败", e);
}
}
} }
@@ -2,6 +2,7 @@ package com.jero.modules.laws.oldSystem.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.laws.oldSystem.service.OldSystemDepartRelationService; import com.jero.modules.laws.oldSystem.service.OldSystemDepartRelationService;
import com.jero.modules.laws.oldSystem.service.OldSystemService; import com.jero.modules.laws.oldSystem.service.OldSystemService;
@@ -152,10 +153,10 @@ public class OldSystemController {
} }
@GetMapping("/esAuthDeptDataFix") @GetMapping("/esAuthDeptDataFix")
@AutoLog(value = "老法规系统-企标授权部门数据修复") @AutoLog(value = "老法规系统-企标授权部门数据修复")
@ApiOperation(value="老法规系统-企标授权部门数据修复", notes="老法规系统-企标授权部门数据修复", produces = "application/octet-stream") @ApiOperation(value="老法规系统-企标授权部门数据修复", notes="老法规系统-企标授权部门数据修复")
@ApiOperationSupport(order = 100) @ApiOperationSupport(order = 100)
public void esAuthDeptDataFix() { public Result<?> esAuthDeptDataFix() {
oldSystemDeptRelationService.esAuthDeptDataFix(); return Result.OK(oldSystemDeptRelationService.esAuthDeptDataFix());
} }
} }
@@ -22,5 +22,5 @@ public interface OldSystemDepartRelationService extends IService<OldSystemDepart
*/ */
void importDepartRelationData(MultipartFile file, HttpServletResponse response); void importDepartRelationData(MultipartFile file, HttpServletResponse response);
void esAuthDeptDataFix(); String esAuthDeptDataFix();
} }
@@ -1,6 +1,7 @@
package com.jero.modules.laws.oldSystem.service.impl; package com.jero.modules.laws.oldSystem.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.ResultCommon; import com.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.CommonConstant; import com.jero.common.constant.CommonConstant;
@@ -194,7 +195,7 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
@Override @Override
public void esAuthDeptDataFix() { public String esAuthDeptDataFix() {
List<EnterpriseStandardAuthDept> needSaveAllData = new ArrayList<>(); List<EnterpriseStandardAuthDept> needSaveAllData = new ArrayList<>();
// 获取所有没有被删除的部门 // 获取所有没有被删除的部门
LambdaQueryWrapper<SysDepart> departWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysDepart> departWrapper = new LambdaQueryWrapper<>();
@@ -231,6 +232,7 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
// 构造需要保存的数据 // 构造需要保存的数据
for (String childDeptId : childDeptIdSet) { for (String childDeptId : childDeptIdSet) {
EnterpriseStandardAuthDept esAd = new EnterpriseStandardAuthDept(); EnterpriseStandardAuthDept esAd = new EnterpriseStandardAuthDept();
esAd.setId(IdWorker.getIdStr());
esAd.setStandardId(curStandardId); esAd.setStandardId(curStandardId);
esAd.setAuthDept(childDeptId); esAd.setAuthDept(childDeptId);
needSaveAllData.add(esAd); needSaveAllData.add(esAd);
@@ -242,14 +244,15 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
} }
} }
if (needSaveAllData.isEmpty()) { if (needSaveAllData.isEmpty()) {
return; return "没有需要修复的数据";
} }
// 根据standardId和authDept去重 // 根据standardId和authDept去重
List<EnterpriseStandardAuthDept> distinctData = needSaveAllData.stream() List<EnterpriseStandardAuthDept> distinctData = needSaveAllData.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> .collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(o -> o.getStandardId() + ";" + o.getAuthDept()))), ArrayList::new)); new TreeSet<>(Comparator.comparing(o -> o.getStandardId() + ";" + o.getAuthDept()))), ArrayList::new));
log.info("需要保存的数据条数为:{}", distinctData.size()); log.info("需要保存的数据条数为:{}", distinctData.size());
esAdService.saveBatch(needSaveAllData, distinctData.size()); esAdService.batchInsertWithTransaction(needSaveAllData, 5000);
return "修复完成,共修复数据" + distinctData.size() + "条";
} }
// 递归查询所有子部门Id // 递归查询所有子部门Id