pref: 企标授权部门历史数据修复接口性能提升
This commit is contained in:
+4
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+8
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+24
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-3
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user