提交 0104f256 authored 作者: hzh's avatar hzh

订单审批功能实现

上级 b82c61a8
package org.dromara.workflow.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.workflow.domain.bo.OrderApproveBo;
import org.dromara.workflow.domain.vo.OrderApproveVo;
import org.dromara.workflow.service.IOrderApproveService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 订单审批
* 前端访问路由地址为:/workflow/orderApprove
*
* @author hzh
* @date 2025-06-12
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/orderApprove")
public class OrderApproveController extends BaseController {
private final IOrderApproveService orderApproveService;
/**
* 查询订单审批列表
*/
@SaCheckPermission("workflow:orderApprove:list")
@GetMapping("/list")
public TableDataInfo<OrderApproveVo> list(OrderApproveBo bo, PageQuery pageQuery) {
return orderApproveService.queryPageList(bo, pageQuery);
}
/**
* 获取订单审批详细信息
*
* @param id 主键
*/
@SaCheckPermission("workflow:orderApprove:query")
@GetMapping("/{id}")
public R<OrderApproveVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(orderApproveService.queryById(id));
}
/**
* 新增订单审批
*/
@SaCheckPermission("workflow:orderApprove:add")
@Log(title = "订单审批", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<OrderApproveVo> add(@Validated(AddGroup.class) @RequestBody OrderApproveBo bo) {
return R.ok(orderApproveService.insert(bo));
}
}
package org.dromara.workflow.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 订单审批对象 srv_order_approve
*
* @author hzh
* @date 2025-06-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("srv_order_approve")
public class OrderApprove extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 职工id
*/
private Long staffId;
/**
* 申请人类型
*/
private String applyType;
/**
* 是否需要审批
*/
private Long deptApprove;
/**
* 授权人用户id
*/
private Long authId;
/**
* 订单id
*/
private Long orderId;
/**
* 订单类型
*/
private String orderType;
/**
* 下单时间
*/
private Date orderTime;
/**
* 订单失效时间
*/
private Date expireTime;
/**
* 订单信息
*/
private String info;
/**
* 状态
*/
private String status;
}
package org.dromara.workflow.domain.bo;
import org.dromara.workflow.domain.OrderApprove;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 订单审批业务对象 srv_order_approve
*
* @author hzh
* @date 2025-06-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OrderApprove.class, reverseConvertGenerate = false)
public class OrderApproveBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 职工id
*/
@NotNull(message = "职工id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long staffId;
/**
* 申请人类型
*/
@NotBlank(message = "申请人类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String applyType;
/**
* 是否需要审批
*/
@NotNull(message = "是否需要审批不能为空", groups = { AddGroup.class, EditGroup.class })
private Long deptApprove;
/**
* 授权人用户id
*/
@NotNull(message = "授权人用户id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long authId;
/**
* 订单id
*/
@NotNull(message = "订单id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long orderId;
/**
* 订单类型
*/
@NotBlank(message = "订单类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String orderType;
/**
* 下单时间
*/
@NotNull(message = "下单时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date orderTime;
/**
* 订单失效时间
*/
@NotNull(message = "订单失效时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date expireTime;
/**
* 订单信息
*/
@NotBlank(message = "订单信息不能为空", groups = { AddGroup.class, EditGroup.class })
private String info;
/**
* 状态
*/
@NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String status;
}
package org.dromara.workflow.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.workflow.domain.OrderApprove;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 订单审批视图对象 srv_order_approve
*
* @author hzh
* @date 2025-06-12
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OrderApprove.class)
public class OrderApproveVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long id;
/**
* 职工id
*/
@ExcelProperty(value = "职工id")
private Long staffId;
/**
* 申请人类型
*/
@ExcelProperty(value = "申请人类型")
private String applyType;
/**
* 是否需要审批
*/
@ExcelProperty(value = "是否需要审批")
private Long deptApprove;
/**
* 授权人用户id
*/
@ExcelProperty(value = "授权人用户id")
private Long authId;
/**
* 订单id
*/
@ExcelProperty(value = "订单id")
private Long orderId;
/**
* 订单类型
*/
@ExcelProperty(value = "订单类型")
private String orderType;
/**
* 下单时间
*/
@ExcelProperty(value = "下单时间")
private Date orderTime;
/**
* 订单失效时间
*/
@ExcelProperty(value = "订单失效时间")
private Date expireTime;
/**
* 订单信息
*/
@ExcelProperty(value = "订单信息")
private String info;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
}
package org.dromara.workflow.mapper;
import org.dromara.workflow.domain.OrderApprove;
import org.dromara.workflow.domain.vo.OrderApproveVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 订单审批Mapper接口
*
* @author hzh
* @date 2025-06-12
*/
public interface OrderApproveMapper extends BaseMapperPlus<OrderApprove, OrderApproveVo> {
}
package org.dromara.workflow.service;
import org.dromara.common.mybatis.service.IBaseService;
import org.dromara.workflow.domain.OrderApprove;
import org.dromara.workflow.domain.bo.OrderApproveBo;
import org.dromara.workflow.domain.vo.OrderApproveVo;
/**
* 订单审批Service接口
*
* @author hzh
* @date 2025-06-12
*/
public interface IOrderApproveService extends IBaseService<OrderApproveVo, OrderApproveBo, OrderApprove>{
/**
* 新增
* @param bo bo
* @return 数据
*/
OrderApproveVo insert(OrderApproveBo bo);
}
...@@ -165,7 +165,6 @@ public class FileApproveServiceImpl extends AbstractBaseService<FileApproveVo, F ...@@ -165,7 +165,6 @@ public class FileApproveServiceImpl extends AbstractBaseService<FileApproveVo, F
} }
} }
// private String
/** /**
* 执行办理任务监听 * 执行办理任务监听
......
package org.dromara.workflow.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.service.AbstractBaseService;
import org.dromara.workflow.api.domain.RemoteWorkflowService;
import org.dromara.workflow.api.domain.event.ProcessEvent;
import org.dromara.workflow.api.domain.event.ProcessTaskEvent;
import org.dromara.workflow.domain.OrderApprove;
import org.dromara.workflow.domain.bo.OrderApproveBo;
import org.dromara.workflow.domain.vo.OrderApproveVo;
import org.dromara.workflow.mapper.OrderApproveMapper;
import org.dromara.workflow.service.IOrderApproveService;
import org.dromara.workflow.utils.QueryUtils;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 订单审批Service业务层处理
*
* @author hzh
* @date 2025-06-12
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class OrderApproveServiceImpl extends AbstractBaseService<OrderApproveVo, OrderApproveBo, OrderApprove> implements IOrderApproveService {
private final OrderApproveMapper baseMapper;
@DubboReference
private final RemoteWorkflowService workflowService;
@Override
public BaseMapperPlus<OrderApprove, OrderApproveVo> mapper() {
return baseMapper;
}
@Override
public LambdaQueryWrapper<OrderApprove> buildQueryWrapper(OrderApproveBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OrderApprove> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getStaffId() != null, OrderApprove::getStaffId, bo.getStaffId());
lqw.eq(StringUtils.isNotBlank(bo.getApplyType()), OrderApprove::getApplyType, bo.getApplyType());
lqw.eq(bo.getDeptApprove() != null, OrderApprove::getDeptApprove, bo.getDeptApprove());
lqw.eq(bo.getAuthId() != null, OrderApprove::getAuthId, bo.getAuthId());
lqw.eq(bo.getOrderId() != null, OrderApprove::getOrderId, bo.getOrderId());
lqw.eq(StringUtils.isNotBlank(bo.getOrderType()), OrderApprove::getOrderType, bo.getOrderType());
lqw.eq(bo.getOrderTime() != null, OrderApprove::getOrderTime, bo.getOrderTime());
lqw.eq(bo.getExpireTime() != null, OrderApprove::getExpireTime, bo.getExpireTime());
lqw.eq(StringUtils.isNotBlank(bo.getInfo()), OrderApprove::getInfo, bo.getInfo());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OrderApprove::getStatus, bo.getStatus());
return lqw;
}
@Override
public OrderApproveVo insert(OrderApproveBo bo) {
OrderApprove add = MapstructUtils.convert(bo, OrderApprove.class);
if (StringUtils.isBlank(add.getStatus())) {
add.setStatus(BusinessStatusEnum.DRAFT.getStatus());
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return MapstructUtils.convert(add, OrderApproveVo.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
List<String> idList = StreamUtils.toList(ids, String::valueOf);
workflowService.deleteRunAndHisInstance(idList);
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 总体流程监听(例如: 提交 退回 撤销 终止 作废等)
* 正常使用只需#processEvent.key=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processEvent 参数
*/
@EventListener(condition = "#processEvent.key.startsWith('biz_order_approve')")
public void processHandler(ProcessEvent processEvent) {
log.info("当前任务执行了{}", processEvent.toString());
OrderApprove fa = baseMapper.selectById(Long.valueOf(processEvent.getBusinessKey()));
fa.setStatus(processEvent.getStatus());
if (processEvent.isSubmit()) {
fa.setStatus(BusinessStatusEnum.WAITING.getStatus());
}
baseMapper.updateById(fa);
}
/**
* 执行办理任务监听
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.key=='leave1'")进行判断
* 在方法中判断流程节点key
* if ("xxx".equals(processTaskEvent.getTaskDefinitionKey())) {
* //执行业务逻辑
* }
*
* @param processTaskEvent 参数
*/
@EventListener(condition = "#processTaskEvent.key.startsWith('biz_order_approve')")
public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
String[] ids = QueryUtils.getTaskDefinitionKeyListByBusinessKey(processTaskEvent.getBusinessKey()).toArray(new String[0]);
if (StringUtils.equalsAny(processTaskEvent.getTaskDefinitionKey(), ids)) {
log.info("当前任务执行了{}", processTaskEvent);
OrderApprove fa = baseMapper.selectById(Long.valueOf(processTaskEvent.getBusinessKey()));
fa.setStatus(BusinessStatusEnum.WAITING.getStatus());
baseMapper.updateById(fa);
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.workflow.mapper.OrderApproveMapper">
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论