yangys
2025-08-02 de19116f884445318620e8436c5b1fbf829c00b5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
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);
 
        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);
    }
 
 
    public void saveApproveRecordsOld(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);
                }
            }
 
        }
 
    }
}