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.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* @author ThinkBook
* @description 针对表【laws_enterprise_standard_auth_dept】的数据库操作Mapper
@@ -11,6 +13,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface EnterpriseStandardAuthDeptMapper extends BaseMapper<EnterpriseStandardAuthDept> {
int batchInsert(List<EnterpriseStandardAuthDept> list);
}
@@ -21,4 +21,12 @@
update_by,update_time,org_code,
standard_id,authDept
</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>
@@ -4,6 +4,8 @@ import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.laws.standard.entity.LawsStandardTempPermission;
import java.util.List;
/**
* @author ThinkBook
* @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> {
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.sys.utils.UserUtils;
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.transaction.annotation.Transactional;
@@ -37,6 +40,9 @@ public class EnterpriseStandardAuthDeptServiceImpl extends ServiceImpl<Enterpris
@Resource
private EnterpriseStandardAuthUserServiceImpl authUserService;
@Resource
private SqlSessionFactory sqlSessionFactory;
@Override
public void saveTempPermission(LawsStandardTempPermission lawsStandardTempPermission) {
List<String> standardIdList = lawsStandardTempPermission.getStandardIdList();
@@ -61,6 +67,24 @@ public class EnterpriseStandardAuthDeptServiceImpl extends ServiceImpl<Enterpris
}
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.ApiSupport;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.laws.oldSystem.service.OldSystemDepartRelationService;
import com.jero.modules.laws.oldSystem.service.OldSystemService;
@@ -152,10 +153,10 @@ public class OldSystemController {
}
@GetMapping("/esAuthDeptDataFix")
@AutoLog(value = "老法规系统-企标授权部门数据修复")
@ApiOperation(value="老法规系统-企标授权部门数据修复", notes="老法规系统-企标授权部门数据修复", produces = "application/octet-stream")
@ApiOperation(value="老法规系统-企标授权部门数据修复", notes="老法规系统-企标授权部门数据修复")
@ApiOperationSupport(order = 100)
public void esAuthDeptDataFix() {
oldSystemDeptRelationService.esAuthDeptDataFix();
public Result<?> esAuthDeptDataFix() {
return Result.OK(oldSystemDeptRelationService.esAuthDeptDataFix());
}
}
@@ -22,5 +22,5 @@ public interface OldSystemDepartRelationService extends IService<OldSystemDepart
*/
void importDepartRelationData(MultipartFile file, HttpServletResponse response);
void esAuthDeptDataFix();
String esAuthDeptDataFix();
}
@@ -1,6 +1,7 @@
package com.jero.modules.laws.oldSystem.service.impl;
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.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.CommonConstant;
@@ -194,7 +195,7 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
@Override
public void esAuthDeptDataFix() {
public String esAuthDeptDataFix() {
List<EnterpriseStandardAuthDept> needSaveAllData = new ArrayList<>();
// 获取所有没有被删除的部门
LambdaQueryWrapper<SysDepart> departWrapper = new LambdaQueryWrapper<>();
@@ -231,6 +232,7 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
// 构造需要保存的数据
for (String childDeptId : childDeptIdSet) {
EnterpriseStandardAuthDept esAd = new EnterpriseStandardAuthDept();
esAd.setId(IdWorker.getIdStr());
esAd.setStandardId(curStandardId);
esAd.setAuthDept(childDeptId);
needSaveAllData.add(esAd);
@@ -242,14 +244,15 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl<OldSystemDep
}
}
if (needSaveAllData.isEmpty()) {
return;
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.saveBatch(needSaveAllData, distinctData.size());
esAdService.batchInsertWithTransaction(needSaveAllData, 5000);
return "修复完成,共修复数据" + distinctData.size() + "";
}
// 递归查询所有子部门Id