perf: scc流程分发性能

This commit is contained in:
2024-08-14 13:42:33 +08:00
parent f1a7605441
commit 3067d03a38
3 changed files with 93 additions and 20 deletions
@@ -1,7 +1,10 @@
package com.jero.modules.activiti.process.standardComplianceCheck.mapper; package com.jero.modules.activiti.process.standardComplianceCheck.mapper;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessStandardComplianceCheckDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessStandardComplianceCheckDetail;
import org.apache.ibatis.annotations.Param;
import java.util.Queue;
/** /**
* @author ThinkBook * @author ThinkBook
@@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface ProcessStandardComplianceCheckDetailMapper extends BaseMapper<ProcessStandardComplianceCheckDetail> { public interface ProcessStandardComplianceCheckDetailMapper extends BaseMapper<ProcessStandardComplianceCheckDetail> {
void batchInsert(@Param("queue") Queue<ProcessStandardComplianceCheckDetail> needAddDetailInfoQueue);
} }
@@ -15,14 +15,14 @@
<result property="termNumber" column="term_number" jdbcType="VARCHAR"/> <result property="termNumber" column="term_number" jdbcType="VARCHAR"/>
<result property="termContent" column="term_content" jdbcType="VARCHAR"/> <result property="termContent" column="term_content" jdbcType="VARCHAR"/>
<result property="model" column="model" jdbcType="VARCHAR"/> <result property="model" column="model" jdbcType="VARCHAR"/>
<result property="modelState" column="model_state" jdbcType="VARCHAR"/> <result property="modelStatus" column="model_status" jdbcType="VARCHAR"/>
<result property="result" column="result" jdbcType="VARCHAR"/> <result property="result" column="result" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/> <result property="description" column="description" jdbcType="VARCHAR"/>
<result property="material" column="material" jdbcType="VARCHAR"/> <result property="material" column="material" jdbcType="VARCHAR"/>
<result property="valuationTime" column="valuation_time" jdbcType="TIMESTAMP"/> <result property="valuationTime" column="valuation_time" jdbcType="TIMESTAMP"/>
<result property="correctionSolution" column="correction_solution" jdbcType="VARCHAR"/> <result property="correctionSolution" column="correction_solution" jdbcType="VARCHAR"/>
<result property="unsatisfyRequire" column="unsatisfy_require" jdbcType="VARCHAR"/> <result property="unsatisfiedRequire" column="unsatisfied_require" jdbcType="VARCHAR"/>
<result property="correctionCycle" column="correction_cycle" jdbcType="VARCHAR"/> <result property="correctionPeriod" column="correction_period" jdbcType="VARCHAR"/>
<result property="correctionCost" column="correction_cost" jdbcType="VARCHAR"/> <result property="correctionCost" column="correction_cost" jdbcType="VARCHAR"/>
<result property="commonality" column="commonality" jdbcType="VARCHAR"/> <result property="commonality" column="commonality" jdbcType="VARCHAR"/>
<result property="commonalityCost" column="commonality_cost" jdbcType="VARCHAR"/> <result property="commonalityCost" column="commonality_cost" jdbcType="VARCHAR"/>
@@ -32,15 +32,72 @@
<result property="designEngineer" column="design_engineer" jdbcType="VARCHAR"/> <result property="designEngineer" column="design_engineer" jdbcType="VARCHAR"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <insert id="batchInsert" parameterType="java.util.Collection">
id,create_by,create_time, INSERT INTO process_standard_compliance_check_detail (
update_by,update_time,org_code, id,
process_instance_id,term_number,term_content, create_by,
model,model_state,result, create_time,
description,material,valuation_time, update_by,
correction_solution,unsatisfy_require,correction_cycle, update_time,
correction_cost,commonality,commonality_cost, org_code,
remark,auth_dept,main_check_user, process_instance_id,
design_engineer term_number,
</sql> term_title,
term_content,
model,
model_status,
assessor,
result,
description,
material,
valuation_time,
correction_solution,
unsatisfied_require,
correction_period,
correction_cost,
commonality,
commonality_cost,
remark,
auth_dept,
main_check_user,
design_engineer,
check_id,
batch_id
)
VALUES
<foreach collection="queue" item="item" separator=",">
(
#{item.id},
#{item.createBy},
#{item.createTime},
#{item.updateBy},
#{item.updateTime},
#{item.orgCode},
#{item.processInstanceId},
#{item.termNumber},
#{item.termTitle},
#{item.termContent},
#{item.model},
#{item.modelStatus},
#{item.assessor},
#{item.result},
#{item.description},
#{item.material},
#{item.valuationTime},
#{item.correctionSolution},
#{item.unsatisfiedRequire},
#{item.correctionPeriod},
#{item.correctionCost},
#{item.commonality},
#{item.commonalityCost},
#{item.remark},
#{item.authDept},
#{item.mainCheckUser},
#{item.designEngineer},
#{item.checkId},
#{item.batchId}
)
</foreach>
</insert>
</mapper> </mapper>
@@ -3,6 +3,7 @@ package com.jero.modules.activiti.process.standardComplianceCheck.service.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.CommonAPI; import com.jero.common.api.CommonAPI;
import com.jero.common.api.vo.ResultCommon; import com.jero.common.api.vo.ResultCommon;
@@ -35,6 +36,7 @@ import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.Model
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ProcessSccVO; import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ProcessSccVO;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.SplitExcelVO; import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.SplitExcelVO;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.WithoutDistributeExcelTemplate; import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.WithoutDistributeExcelTemplate;
import com.jero.modules.activiti.process.standardComplianceCheck.mapper.ProcessStandardComplianceCheckDetailMapper;
import com.jero.modules.activiti.process.standardComplianceCheck.mapper.ProcessStandardComplianceCheckMapper; import com.jero.modules.activiti.process.standardComplianceCheck.mapper.ProcessStandardComplianceCheckMapper;
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckDetailService; import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckDetailService;
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService; import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
@@ -137,6 +139,8 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
private ProcessApprovalRecordService approvalRecordService; private ProcessApprovalRecordService approvalRecordService;
@Resource @Resource
private ProcessAllService paService; private ProcessAllService paService;
@Resource
private ProcessStandardComplianceCheckDetailMapper sccDetailMapper;
@Value("${jero.path.exportExcelTempPath}") @Value("${jero.path.exportExcelTempPath}")
private String exportExcelTempPath; private String exportExcelTempPath;
@@ -371,7 +375,9 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
List<ProcessStandardComplianceCheckDetail> distributeDetailList = detailInfoList.parallelStream() List<ProcessStandardComplianceCheckDetail> distributeDetailList = detailInfoList.parallelStream()
.filter(e -> StrUtil.isNotBlank(e.getDesignEngineer())) .filter(e -> StrUtil.isNotBlank(e.getDesignEngineer()))
.collect(Collectors.toList()); .collect(Collectors.toList());
List<String> ids = distributeDetailList.parallelStream().map(ProcessStandardComplianceCheckDetail::getId).collect(Collectors.toList()); List<String> ids = distributeDetailList.parallelStream()
.map(ProcessStandardComplianceCheckDetail::getId)
.collect(Collectors.toList());
// 分发需要设置未分发数据条数 // 分发需要设置未分发数据条数
unallocatedQuantity = detailInfoList.size() - distributeDetailList.size(); unallocatedQuantity = detailInfoList.size() - distributeDetailList.size();
// 去重找到所有设计师 // 去重找到所有设计师
@@ -385,9 +391,15 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
distributeDetailList.parallelStream().forEach(detail -> { distributeDetailList.parallelStream().forEach(detail -> {
String[] engineers = detail.getDesignEngineer().split(","); String[] engineers = detail.getDesignEngineer().split(",");
for (String engineer : engineers) { for (String engineer : engineers) {
ProcessStandardComplianceCheckDetail newDetail = BeanCopyUtils. ProcessStandardComplianceCheckDetail newDetail = new ProcessStandardComplianceCheckDetail();
copyBean(detail, ProcessStandardComplianceCheckDetail.class); newDetail.setId(IdWorker.getIdStr());
newDetail.setId(null); newDetail.setProcessInstanceId(processInstanceId);
newDetail.setTermNumber(detail.getTermNumber());
newDetail.setTermTitle(detail.getTermTitle());
newDetail.setTermContent(detail.getTermContent());
newDetail.setModel(detail.getModel());
newDetail.setModelStatus(detail.getModelStatus());
newDetail.setCheckId(detail.getCheckId());
newDetail.setDesignEngineer(engineer); newDetail.setDesignEngineer(engineer);
newDetail.setBatchId(batchId); newDetail.setBatchId(batchId);
needAddDetailInfoQueue.add(newDetail); needAddDetailInfoQueue.add(newDetail);
@@ -395,7 +407,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
}); });
// 先删后增 // 先删后增
sccDetailService.removeByIds(ids); sccDetailService.removeByIds(ids);
sccDetailService.saveBatch(needAddDetailInfoQueue, needAddDetailInfoQueue.size()); sccDetailMapper.batchInsert(needAddDetailInfoQueue);
runtimeService.setVariable(processInstanceId, DESIGNER_LIST, designEngineerList); runtimeService.setVariable(processInstanceId, DESIGNER_LIST, designEngineerList);
runtimeService.setVariable(processInstanceId, BATCH_ID, batchId); runtimeService.setVariable(processInstanceId, BATCH_ID, batchId);
userMap.put(DESIGNER_LIST, String.join(",", designEngineerList)); userMap.put(DESIGNER_LIST, String.join(",", designEngineerList));