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;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessStandardComplianceCheckDetail;
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
@@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
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="termContent" column="term_content" 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="description" column="description" jdbcType="VARCHAR"/>
<result property="material" column="material" jdbcType="VARCHAR"/>
<result property="valuationTime" column="valuation_time" jdbcType="TIMESTAMP"/>
<result property="correctionSolution" column="correction_solution" jdbcType="VARCHAR"/>
<result property="unsatisfyRequire" column="unsatisfy_require" jdbcType="VARCHAR"/>
<result property="correctionCycle" column="correction_cycle" jdbcType="VARCHAR"/>
<result property="unsatisfiedRequire" column="unsatisfied_require" jdbcType="VARCHAR"/>
<result property="correctionPeriod" column="correction_period" jdbcType="VARCHAR"/>
<result property="correctionCost" column="correction_cost" jdbcType="VARCHAR"/>
<result property="commonality" column="commonality" jdbcType="VARCHAR"/>
<result property="commonalityCost" column="commonality_cost" jdbcType="VARCHAR"/>
@@ -32,15 +32,72 @@
<result property="designEngineer" column="design_engineer" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,create_by,create_time,
update_by,update_time,org_code,
process_instance_id,term_number,term_content,
model,model_state,result,
description,material,valuation_time,
correction_solution,unsatisfy_require,correction_cycle,
correction_cost,commonality,commonality_cost,
remark,auth_dept,main_check_user,
design_engineer
</sql>
<insert id="batchInsert" parameterType="java.util.Collection">
INSERT INTO process_standard_compliance_check_detail (
id,
create_by,
create_time,
update_by,
update_time,
org_code,
process_instance_id,
term_number,
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>
@@ -3,6 +3,7 @@ package com.jero.modules.activiti.process.standardComplianceCheck.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.jero.common.api.CommonAPI;
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.SplitExcelVO;
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.service.IProcessStandardComplianceCheckDetailService;
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
@@ -137,6 +139,8 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
private ProcessApprovalRecordService approvalRecordService;
@Resource
private ProcessAllService paService;
@Resource
private ProcessStandardComplianceCheckDetailMapper sccDetailMapper;
@Value("${jero.path.exportExcelTempPath}")
private String exportExcelTempPath;
@@ -371,7 +375,9 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
List<ProcessStandardComplianceCheckDetail> distributeDetailList = detailInfoList.parallelStream()
.filter(e -> StrUtil.isNotBlank(e.getDesignEngineer()))
.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();
// 去重找到所有设计师
@@ -385,9 +391,15 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
distributeDetailList.parallelStream().forEach(detail -> {
String[] engineers = detail.getDesignEngineer().split(",");
for (String engineer : engineers) {
ProcessStandardComplianceCheckDetail newDetail = BeanCopyUtils.
copyBean(detail, ProcessStandardComplianceCheckDetail.class);
newDetail.setId(null);
ProcessStandardComplianceCheckDetail newDetail = new ProcessStandardComplianceCheckDetail();
newDetail.setId(IdWorker.getIdStr());
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.setBatchId(batchId);
needAddDetailInfoQueue.add(newDetail);
@@ -395,7 +407,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
});
// 先删后增
sccDetailService.removeByIds(ids);
sccDetailService.saveBatch(needAddDetailInfoQueue, needAddDetailInfoQueue.size());
sccDetailMapper.batchInsert(needAddDetailInfoQueue);
runtimeService.setVariable(processInstanceId, DESIGNER_LIST, designEngineerList);
runtimeService.setVariable(processInstanceId, BATCH_ID, batchId);
userMap.put(DESIGNER_LIST, String.join(",", designEngineerList));