sgj
2026-03-02 06f4d2f5cc46ffa9402dcb4e6bec08fbab2bcfa6
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package com.fzzy.igds.app.v1.service.impl;
 
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fzzy.common.constant.RespCodeEnum;
import com.fzzy.igds.app.v1.constant.PhoneConstant;
import com.fzzy.igds.app.v1.data.AuthUser;
import com.fzzy.igds.app.v1.data.ParamOrder;
import com.fzzy.igds.app.v1.data.PhoneRequest;
import com.fzzy.igds.app.v1.data.PhoneResponse;
import com.fzzy.igds.app.v1.mapper.PhoneMapper;
import com.fzzy.igds.app.v1.service.PhoneService;
import com.fzzy.igds.app.v1.util.PhoneRespUtil;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.data.BaseResp;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.work.data.WorkNode;
import com.fzzy.work.data.WorkStatus;
import com.fzzy.work.domain.WorkOrder;
import com.fzzy.work.domain.WorkOrderConf;
import com.fzzy.work.domain.WorkOrderProcess;
import com.fzzy.work.mapper.WorkOrderMapper;
import com.fzzy.work.service.WorkOrderConfService;
import com.fzzy.work.service.WorkOrderProcessService;
import com.fzzy.work.service.WorkOrderService;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.Date;
 
/**
 * @Author: YYC
 * @Description: 工单管理-工单审核
 * @DateTime: 2026-1-12 14:43
 **/
@Service
public class ServiceImpl5102 implements PhoneService {
 
    @Resource
    private WorkOrderService orderService;
    @Resource
    private WorkOrderConfService confService;
    @Resource
    private WorkOrderProcessService orderProcessService;
 
 
    @Override
    public String getInterfaceId() {
        return PhoneConstant.API_PHONE_5102;
    }
 
    @Override
    public PhoneResponse<Object> execute(PhoneRequest<JSONObject> req, AuthUser authUser) throws Exception {
        //转化对象
        ParamOrder param = JSONObject.parseObject(req.getData().toString(), ParamOrder.class);
        if (null == param) {
            return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "参数有误,请重试!!");
        }
        //参数验证
        if (StringUtils.isEmpty(param.getDeptId())) {
            return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "参数有误,请重试!!");
        }
        //获取工单
        WorkOrder work = orderService.selectById(param.getOrderId());
        if (null == work) return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "当前工单已不存在");
 
        if (work.getStatus().equals(WorkStatus.STATUS_50.getCode())
                || work.getStatus().equals(WorkStatus.STATUS_60.getCode())) {
            return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "当前工单已处理,请刷新页面重试!!");
        }
        WorkOrderProcess process = new WorkOrderProcess();
        BeanUtils.copyProperties(param, process);
        //判断是不是指定处理人
        if (StringUtils.isNotEmpty(work.getAssigneeId())) {
            if (!work.getAssigneeId().equals(authUser.getUsername())) {
                return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "当前工单已分配其他人处理,请勿处理");
            }
        }
 
        String curNode = process.getNode();
        //获取处理人
        if (!curNode.equals(work.getNode())) {
            return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "当前工单已被处理,请刷新页面重试!!");
        }
 
        //获取配置信息
        WorkOrderConf conf = confService.selectById(work.getConfId());
        if (null == conf) PhoneRespUtil.error(RespCodeEnum.CODE_1111, "当前工单未配置流程");
 
 
        //添加记录
        process.setId(ContextUtil.UUID());
        process.setCreateTime(new Date());
        process.setOrderId(work.getId());
        process.setAssigneeName(authUser.getCname());
        process.setAssigneeId(authUser.getUsername());
 
        WorkNode nextNode = this.getNextNode(work.getNode(), conf);
 
        //通过操作
        if ("pass".equals(param.getStatus())) {
            process.setAction("通过");
            process.setNode(work.getNode());
            //结束判断,如果是结束节点,则结束工单
            if (WorkNode.NODE_END.getCode().equals(nextNode.getCode())) {
                work.setStatus(WorkStatus.STATUS_50.getCode());
                work.setAssigneeName(process.getAssigneeName());
                work.setAssigneeId(process.getAssigneeId());
                work.setNode(nextNode.getCode());
                orderService.complete(work);
            } else {
                work.setNode(nextNode.getCode());
                work.setStatus(WorkStatus.STATUS_30.getCode());
                orderService.updateData(work);
            }
 
            //增加审批记录
            orderProcessService.addData(process, WorkNode.NODE_END.equals(nextNode));
            return PhoneRespUtil.success(RespCodeEnum.CODE_0000.getCode(), req);
        }
 
        //拒绝操作
        if ("refuse".equals(param.getStatus())) {
            process.setAction("拒绝");
            process.setNode(work.getNode());
 
            work.setStatus(WorkStatus.STATUS_60.getCode());
 
            orderService.complete(work);
 
            //增加审批记录
            orderProcessService.addData(process, true);
 
            return PhoneRespUtil.success(RespCodeEnum.CODE_0000.getCode(), req);
        }
 
        return PhoneRespUtil.success(RespCodeEnum.CODE_0000.getCode(), req);
    }
 
 
    /**
     * 根据当前节点获取下一个节点
     *
     * @param curNode
     * @param conf
     * @return
     */
    private WorkNode getNextNode(String curNode, WorkOrderConf conf) {
 
        if (null == conf) return WorkNode.NODE_END;
 
        if (WorkNode.NODE_START.getCode().equals(curNode)) {
            if (Constant.YN_Y.equals(conf.getNodeVal1())) return WorkNode.NODE1;
            if (Constant.YN_Y.equals(conf.getNodeVal2())) return WorkNode.NODE2;
            if (Constant.YN_Y.equals(conf.getNodeVal3())) return WorkNode.NODE3;
        }
 
        if (WorkNode.NODE1.getCode().equals(curNode)) {
            if (Constant.YN_Y.equals(conf.getNodeVal2())) return WorkNode.NODE2;
            if (Constant.YN_Y.equals(conf.getNodeVal3())) return WorkNode.NODE3;
        }
 
        if (WorkNode.NODE2.getCode().equals(curNode)) {
            if (Constant.YN_Y.equals(conf.getNodeVal3())) return WorkNode.NODE3;
        }
 
        return WorkNode.NODE_END;
    }
}