|
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<ApproveRecordMapper, ApproveRecord> {
|
private final ProcessProgRefService processProgRefService;
|
private final FlowCommonService flowCommonService;
|
public List<ApproveRecordVO> 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<ProcessProgRef> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(ProcessProgRef::getProcessInstanceId, processInstanceId);
|
List<ProcessProgRef> 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<ProcessProgRef> refList) {
|
|
if(refList.isEmpty()) {
|
return;
|
}
|
List<ApproveRecord> 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);
|
}
|
}
|
|
}
|
|
}
|
}
|