package org.springblade.mdm.flow.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.task.api.Task; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.mdm.flow.entity.ApproveRecord; import org.springblade.mdm.flow.mapper.ApproveRecordMapper; import org.springblade.mdm.flow.vo.ApproveRecordVO; import org.springblade.mdm.program.entity.ProcessProgRef; import org.springblade.mdm.program.service.ProcessProgRefService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.List; /** * 审批记录,用于查询执行轨迹 * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class ApproveRecordService extends BizServiceImpl { private final ProcessProgRefService processProgRefService; private final FlowCommonService flowCommonService; public List listByNcProgramId(Long ncProgramId) { return this.getBaseMapper().listByNcProgramId(ncProgramId); } public void saveApproveRecords(Task task, String processInstanceId, String operateResult, String comment) { String processDefinitionKey = flowCommonService.getDefinitionKey(processInstanceId); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProcessProgRef::getProcessInstanceId, processInstanceId); List refList = processProgRefService.list(queryWrapper); if(!refList.isEmpty()) { for (ProcessProgRef refObj : refList) { ApproveRecord rec = new ApproveRecord(); rec.setTaskName(task.getName()); rec.setComment(comment==null? StringUtils.EMPTY:comment); rec.setNcProgramId(refObj.getNcProgramId()); rec.setOperateResult(operateResult);//审批结果 rec.setOperateTime(DateUtil.now()); rec.setProcessInstanceId(processInstanceId); rec.setProcessDefinitionKey(processDefinitionKey); rec.setUserId(AuthUtil.getUserId()); rec.setUserNickname(AuthUtil.getNickName()); save(rec); } //检查ncprogram为null的数据 updateApproveRecords(processInstanceId,refList); }else{ //如果还没有关联的程序数据,则插入一个programId为null的 ApproveRecord rec = new ApproveRecord(); rec.setTaskName(task.getName()); rec.setTaskDefinitionId(task.getTaskDefinitionId()); rec.setComment(comment==null? StringUtils.EMPTY:comment); rec.setProcessInstanceId(processInstanceId); rec.setProcessDefinitionKey(processDefinitionKey); rec.setOperateResult(operateResult); rec.setOperateTime(DateUtil.now()); rec.setNcProgramId(null);//空的程序id rec.setUserId(AuthUtil.getUserId()); rec.setUserNickname(AuthUtil.getNickName()); save(rec); } } /** * 更新以前无文件时候的数据。 * @param processInstanceId */ void updateApproveRecords(String processInstanceId,List refList) { if(refList.isEmpty()) { return; } List records = this.lambdaQuery().isNull(ApproveRecord::getNcProgramId).eq(ApproveRecord::getProcessInstanceId, processInstanceId).list(); if(records.isEmpty()) { return; } for(ApproveRecord record:records) { for(int j=0;j< refList.size();j++) { ProcessProgRef refObj = refList.get(j); ApproveRecord record2 = new ApproveRecord(); BeanUtils.copyProperties(record, record2); record2.setNcProgramId(refObj.getNcProgramId()); if(j>0){//后续数据需要新增数据 record2.setId(null); save(record2); }else{//第一条是更新原纪录 updateById(record2); } } } } }