大件运输联网系统后端代码
guoshilong
2022-12-21 dc60071d490879633da257052fcbc24b2e71f3b2
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
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.modules.applicationDelay.service.impl;
 
import lombok.AllArgsConstructor;
import org.flowable.engine.TaskService;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.flow.business.service.IFlowService;
import org.springblade.flow.core.constant.ProcessConstant;
import org.springblade.flow.core.entity.BladeFlow;
import org.springblade.flow.core.utils.FlowUtil;
import org.springblade.flow.core.utils.TaskUtil;
import org.springblade.flow.demo.leave.entity.ProcessLeave;
import org.springblade.modules.applicationDelay.entity.ApplicationDelayEntity;
import org.springblade.modules.applicationDelay.vo.ApplicationDelayVO;
import org.springblade.modules.applicationDelay.mapper.ApplicationDelayMapper;
import org.springblade.modules.applicationDelay.service.IApplicationDelayService;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Map;
 
/**
 * 延期申请表 服务实现类
 *
 * @author BladeX
 * @since 2022-12-13
 */
@Service
@AllArgsConstructor
public class ApplicationDelayServiceImpl extends BaseServiceImpl<ApplicationDelayMapper, ApplicationDelayEntity> implements IApplicationDelayService {
    private final IFlowService flowService;
    private final TaskService taskService;
 
    @Override
    public IPage<ApplicationDelayVO> selectApplicationDelayPage(IPage<ApplicationDelayVO> page, ApplicationDelayVO applicationDelay) {
        return page.setRecords(baseMapper.selectApplicationDelayPage(page, applicationDelay));
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean startProcess(ApplicationDelayVO applicationDelayEntity) {
        String businessTable = FlowUtil.getBusinessTable(ProcessConstant.DELAY_AUDIT);
        if (Func.isEmpty(applicationDelayEntity.getId())) {
            // 保存leave
            save(applicationDelayEntity);
            // 启动流程
            Kv variables = Kv.create()
                .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName());
            BladeFlow flow = flowService.startProcessInstanceById(applicationDelayEntity.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(applicationDelayEntity.getId())), variables);
            if (Func.isNotEmpty(flow)) {
                log.debug("流程已启动,流程ID:" + flow.getProcessInstanceId());
                // 返回流程id写入leave
                applicationDelayEntity.setProcessInstanceId(flow.getProcessInstanceId());
                updateById(applicationDelayEntity);
            } else {
                throw new ServiceException("开启流程失败");
            }
        } else {
 
            updateById(applicationDelayEntity);
        }
        return true;
    }
 
    @Override
    public Boolean completeTask(BladeFlow flow) {
        String taskId = flow.getTaskId();
        String processInstanceId = flow.getProcessInstanceId();
        String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
        // 增加评论
        if (StringUtil.isNoneBlank(processInstanceId, comment)) {
            taskService.addComment(taskId, processInstanceId, comment);
        }
        // 创建变量
        Map<String, Object> variables = flow.getVariables();
        if (variables == null) {
            variables = Kv.create();
        }
        variables.put(ProcessConstant.PASS_KEY, flow.isPass());
        // 完成任务
        taskService.complete(taskId, variables);
        return true;
    }
 
}