package com.fzzy.work.service;
|
|
import com.fzzy.igds.constant.Constant;
|
import com.fzzy.igds.data.BaseResp;
|
import com.fzzy.igds.domain.InoutNoticeIn;
|
import com.fzzy.igds.domain.InoutNoticeOut;
|
import com.fzzy.igds.utils.ContextUtil;
|
import com.fzzy.work.data.WorkStatus;
|
import com.fzzy.work.data.WorkBizType;
|
import com.fzzy.work.data.WorkNode;
|
import com.fzzy.work.domain.WorkOrder;
|
import com.fzzy.work.domain.WorkOrderConf;
|
import com.fzzy.work.domain.WorkOrderProcess;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
|
/**
|
* @Desc: 工单业务接口
|
* @Author: Andy.jia
|
* @Date: 2026/1/15
|
*/
|
@Slf4j
|
@Service
|
public class BizWorkService {
|
@Resource
|
private WorkOrderConfService confService;
|
@Resource
|
private WorkOrderService orderService;
|
@Resource
|
private WorkOrderProcessService orderProcessService;
|
|
|
/**
|
* 获取流程配置信息
|
* @param deptId 库区ID
|
* @param type 业务类型
|
* @return 配置信息
|
*/
|
public WorkOrderConf getConfByDeptId(String deptId, WorkBizType type) {
|
return confService.getByDeptId(deptId, type);
|
}
|
|
/**
|
*
|
* 根据出入库通知单启动审批工单
|
* @param data 出入库工单数据
|
* @return 响应结果
|
*/
|
public BaseResp startByNoticeIn(InoutNoticeIn data, WorkOrderConf conf) {
|
|
if (null == conf) conf = confService.getByDeptId(data.getDeptId(), WorkBizType.TYPE_10);
|
|
if (Constant.YN_N.equals(conf.getValTag())) return BaseResp.error("流程未启用");
|
|
//创建工单
|
WorkOrder work = new WorkOrder();
|
work.setId(ContextUtil.generateOrderId("RKD"));
|
work.setBizType(WorkBizType.TYPE_10.getCode());
|
work.setBusinessId(data.getId());
|
work.setBankId(data.getBankId());
|
work.setBusinessUrl("com.fzzy.igds.InoutNoticeIn-Detail.d");
|
work.setCreateTime(new Date());
|
work.setDeptId(data.getDeptId());
|
work.setCompanyId(data.getCompanyId());
|
work.setUpdateTime(new Date());
|
work.setTitle("入库通知单审批");
|
work.setConfId(conf.getId());
|
work.setStatus(WorkStatus.STATUS_30.getCode());
|
work.setReceiveTime(new Date());
|
|
String nextNode = this.getNextNode(WorkNode.NODE_START.getCode(), conf).getCode();
|
work.setNode(nextNode);
|
orderService.addData(work);
|
|
//添加记录
|
WorkOrderProcess process = new WorkOrderProcess();
|
process.setId(ContextUtil.UUID());
|
process.setAction("提交");
|
process.setCreateTime(new Date());
|
process.setOrderId(work.getId());
|
process.setAssigneeName(work.getCreateBy());
|
process.setAssigneeId(work.getCreateById());
|
process.setNode(WorkNode.NODE_START.getCode());
|
orderProcessService.addData(process, false);
|
|
return BaseResp.success();
|
}
|
|
/**
|
*
|
* 根据出出库通知单启动审批工单
|
* @param data 出入库工单数据
|
* @return 响应结果
|
*/
|
public BaseResp startByNoticeOut(InoutNoticeOut data, WorkOrderConf conf) {
|
if (null == conf) conf = confService.getByDeptId(data.getDeptId(), WorkBizType.TYPE_20);
|
|
if (Constant.YN_N.equals(conf.getValTag())) return BaseResp.error("流程未启用");
|
|
//创建工单
|
WorkOrder work = new WorkOrder();
|
work.setId(ContextUtil.generateOrderId("CKD"));
|
work.setBizType(WorkBizType.TYPE_20.getCode());
|
work.setBusinessId(data.getId());
|
work.setBankId(data.getBankId());
|
work.setBusinessUrl("com.fzzy.igds.InoutNoticeOut-Detail.d");
|
work.setCreateTime(new Date());
|
work.setDeptId(data.getDeptId());
|
work.setCompanyId(data.getCompanyId());
|
work.setUpdateTime(new Date());
|
work.setTitle("出库通知单审批");
|
work.setConfId(conf.getId());
|
work.setStatus(WorkStatus.STATUS_30.getCode());
|
work.setReceiveTime(new Date());
|
|
String nextNode = this.getNextNode(WorkNode.NODE_START.getCode(), conf).getCode();
|
work.setNode(nextNode);
|
orderService.addData(work);
|
|
//添加记录
|
WorkOrderProcess process = new WorkOrderProcess();
|
process.setId(ContextUtil.UUID());
|
process.setAction("提交");
|
process.setCreateTime(new Date());
|
process.setOrderId(work.getId());
|
process.setAssigneeName(work.getCreateBy());
|
process.setAssigneeId(work.getCreateById());
|
process.setNode(WorkNode.NODE_START.getCode());
|
orderProcessService.addData(process, false);
|
|
return BaseResp.success();
|
}
|
|
/**
|
* 根据当前节点获取下一个节点
|
* @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;
|
}
|
|
/**
|
* 获取待处理工单
|
* @return 处理结果
|
*/
|
public BaseResp todoByProcess(WorkOrderProcess process) {
|
|
String action = process.getAction();
|
if (StringUtils.isEmpty(action)) {
|
return BaseResp.error("没有识别到处理动作,请重新尝试");
|
}
|
|
log.info("-----工单处理-----{}", process);
|
//获取工单
|
WorkOrder work = orderService.selectById(process.getOrderId());
|
if (null == work) return BaseResp.error("当前工单已不存在");
|
|
if (work.getStatus().equals(WorkStatus.STATUS_50.getCode())
|
|| work.getStatus().equals(WorkStatus.STATUS_60.getCode())) {
|
return BaseResp.error("当前工单已处理,请刷新页面重试!!");
|
}
|
|
|
//判断是不是指定处理人
|
SysUser user = ContextUtil.getLoginUser();
|
if (StringUtils.isNotEmpty(work.getAssigneeId())) {
|
if (!work.getAssigneeId().equals(user.getLoginName())) {
|
return BaseResp.error("当前工单已分配其他人处理,请勿处理");
|
}
|
}
|
|
String curNode = process.getNode();
|
//获取处理人
|
if (!curNode.equals(work.getNode())) {
|
return BaseResp.error("当前工单已被处理,请刷新页面重试!!");
|
}
|
|
//获取配置信息
|
WorkOrderConf conf = confService.selectById(work.getConfId());
|
if (null == conf) return BaseResp.error("当前工单未配置流程");
|
|
|
//添加记录
|
process.setId(ContextUtil.UUID());
|
process.setCreateTime(new Date());
|
process.setOrderId(work.getId());
|
process.setAssigneeName(user.getUserName());
|
process.setAssigneeId(user.getLoginName());
|
|
WorkNode nextNode = this.getNextNode(work.getNode(), conf);
|
|
log.info("工单审批:{},当前节点:{},下一节点:{}", work.getTitle(), work.getNode(), nextNode);
|
|
//通过操作
|
if ("pass".equals(action)) {
|
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);
|
}
|
|
//增加审批记录
|
orderProcessService.addData(process, WorkNode.NODE_END.equals(nextNode));
|
return BaseResp.success();
|
}
|
|
//拒绝操作
|
if ("refuse".equals(action)) {
|
process.setAction("拒绝");
|
process.setNode(WorkNode.NODE_END.getCode());
|
|
work.setStatus(WorkStatus.STATUS_60.getCode());
|
|
orderService.complete(work);
|
//增加审批记录
|
orderProcessService.addData(process, true);
|
|
return BaseResp.success();
|
}
|
|
//转交或者指派操作
|
if ("transfer".equals(action)) {
|
|
if (StringUtils.isEmpty(process.getAssigneeName())) {
|
return BaseResp.error("请选择处理人");
|
}
|
|
process.setAction("转交/指派");
|
process.setNode(work.getNode());
|
String info = user.getUserName() + "转交给" + process.getAssigneeName() + "处理,处理建议:" + process.getRemark();
|
process.setRemark(info);
|
//更新处理人
|
work.setAssigneeId(process.getAssigneeId());
|
work.setAssigneeName(process.getAssigneeName());
|
|
orderService.updateData(work);
|
|
orderProcessService.addData(process, false);
|
return BaseResp.success();
|
}
|
|
return BaseResp.error("系统没有识别到操作动作,未执行相关流程审批");
|
}
|
}
|