From 8e13ad7fc29c84e0c294b2ae6ae72219665b970f Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Mon, 4 Nov 2024 15:58:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(bpm):=20=E6=B7=BB=E5=8A=A0=20OA=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E7=BB=8F=E8=B4=B9=E7=94=B3=E8=AF=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 BpmOAFinanceController 控制器,实现活动经费申请的创建和查询功能 - 新增 BpmOAFinanceCreateReqVO 和 BpmOAFinanceRespVO 数据传输对象 - 新增 BpmOAFinanceDO 数据对象和对应的 Mapper - 新增 BpmOAFinanceService 接口及其实现类,处理活动经费申请的业务逻辑 - 新增 BpmOAFinanceResultListener 监听器,处理流程实例结果事件 --- .../module/bpm/enums/ErrorCodeConstants.java | 1 + .../admin/oa/BpmOAFinanceController.java | 60 ++++++++++ .../vo/finance/BpmOAFinanceCreateReqVO.java | 64 +++++++++++ .../oa/vo/finance/BpmOAFinanceRespVO.java | 59 ++++++++++ .../admin/oa/vo/finance/CostDetail.java | 15 +++ .../bpm/dal/dataobject/oa/BpmOAFinanceDO.java | 95 ++++++++++++++++ .../bpm/dal/mysql/oa/BpmOAFinanceMapper.java | 9 ++ .../bpm/service/oa/BpmOAFinanceService.java | 37 ++++++ .../service/oa/BpmOAFinanceServiceImpl.java | 105 ++++++++++++++++++ .../listener/BpmOAFinanceResultListener.java | 31 ++++++ 10 files changed, 476 insertions(+) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/CostDetail.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAFinanceMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAFinanceResultListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java index f8522b7f..93983878 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java @@ -42,6 +42,7 @@ public interface ErrorCodeConstants { ErrorCode OA_BUSINESS_CARD_NOT_EXISTS = new ErrorCode(1_009_001_116, "名片定制申请不存在"); ErrorCode OA_HIRE_NOT_EXISTS = new ErrorCode(1_009_001_117, "招聘申请不存在"); ErrorCode OA_BUSINESS_HOSPITALITY_NOT_EXISTS = new ErrorCode(1_009_001_118, "商务招待申请不存在"); + ErrorCode OA_FINANCE_NOT_EXISTS = new ErrorCode(1_009_001_119, "活动经费申请不存在"); // ========== 流程模型 1-009-002-000 ========== ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1_009_002_000, "已经存在流程标识为【{}】的流程"); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java new file mode 100644 index 00000000..3506c58e --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance.BpmOAFinanceCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance.BpmOAFinanceRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAFinanceDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAFinanceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * OA 活动经费申请 Controller + * + * @author 符溶馨 + */ +@Tag(name = "管理后台 - OA 活动经费") +@RestController +@RequestMapping("/bpm/oa/finance") +@Validated +public class BpmOAFinanceController { + + @Resource + private BpmOAFinanceService financeService; + + @PostMapping("/create") + @Operation(summary = "创建活动经费申请") + public CommonResult createFinance(@Valid @RequestBody BpmOAFinanceCreateReqVO createReqVO) { + + return success(financeService.createFinance(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得活动经费申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getFinance(@RequestParam("id") Long id) { + + BpmOAFinanceDO finance = financeService.getFinance(id); + + return success(BeanUtils.toBean(finance, BpmOAFinanceRespVO.class)); + } + + @GetMapping("/getByProcessInstanceId") + @Operation(summary = "获得活动经费申请") + @Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024") + public CommonResult getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) { + + BpmOAFinanceDO finance = financeService.getByProcessInstanceId(processInstanceId); + return success(BeanUtils.toBean(finance, BpmOAFinanceRespVO.class)); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java new file mode 100644 index 00000000..736b9548 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 活动经费申请 创建 Request VO + * + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 活动经费申请创建 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOAFinanceCreateReqVO { + + @Schema(description = "活动主题", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动主题不能为空") + private String title; + + @Schema(description = "活动说明", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动说明不能为空") + private String reason; + + @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动开始时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime startTime; + + @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动结束时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; + + @Schema(description = "活动地址", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动地址不能为空") + private String address; + + @Schema(description = "活动费用预算", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动费用预算不能为空") + private Integer costBudget; + + @Schema(description = "费用明细") + private List costDetails; + + @Schema(description = "流程实例编号") + private String processInstanceId; + + @Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer result; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java new file mode 100644 index 00000000..3d4411bb --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 活动经费申请 请求Request VO + * + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 活动经费申请 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAFinanceRespVO extends BpmOABaseRespVO { + + @Schema(description = "活动主题", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动主题不能为空") + private String title; + + @Schema(description = "活动说明", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动说明不能为空") + private String reason; + + @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动开始时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime startTime; + + @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动结束时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; + + @Schema(description = "活动地址", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动地址不能为空") + private String address; + + @Schema(description = "活动费用预算", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动费用预算不能为空") + private Integer costBudget; + + @Schema(description = "费用明细") + private List costDetails; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/CostDetail.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/CostDetail.java new file mode 100644 index 00000000..42ec320d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/CostDetail.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "活动费用明细 VO") +@Data +public class CostDetail { + + @Schema(description = "项目名称") + private String name; + + @Schema(description = "费用") + private Integer cost; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java new file mode 100644 index 00000000..ad47a0d7 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance.CostDetail; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * OA 活动经费申请 DO + * @author 符溶馨 + */ +@TableName(value ="bpm_oa_finance", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOAFinanceDO extends BaseDO { + + /** + * 活动经费申请表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + + /** + * 活动主题 + */ + private String title; + + /** + * 活动说明 + */ + private String reason; + + /** + * 活动开始时间 + */ + private LocalDateTime startTime; + + /** + * 活动结束时间 + */ + private LocalDateTime endTime; + + /** + * 活动地址 + */ + private String address; + + /** + * 活动费用预算 + */ + private Integer costBudget; + + /** + * 活动费用明细 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List costDetails; + + /** + * 申请的结果 + * 枚举 {@link BpmProcessInstanceResultEnum} + * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 + */ + private Integer result; + + /** + * 对应的流程编号 + * 关联 ProcessInstance 的 id 属性 + */ + private String processInstanceId; + + /** + * 附件基本信息 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List fileItems ; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAFinanceMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAFinanceMapper.java new file mode 100644 index 00000000..7a4fdd93 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAFinanceMapper.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.bpm.dal.mysql.oa; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAFinanceDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BpmOAFinanceMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceService.java new file mode 100644 index 00000000..fd99c24f --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceService.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance.BpmOAFinanceCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAFinanceDO; + +public interface BpmOAFinanceService { + + /** + * 创建外出申请 + * @param loginUserId 登录用户ID + * @param createReqVO 创建信息 + * @return 外出申请ID + */ + Long createFinance(Long loginUserId, BpmOAFinanceCreateReqVO createReqVO); + + /** + * 更新外出申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateFinanceResult(String processInstanceId, Long id, Integer result); + + /** + * 获得外出申请 + * @param processInstanceId 流程实例编号 + * @return 外出申请 + */ + BpmOAFinanceDO getByProcessInstanceId(String processInstanceId); + + /** + * 获得外出申请 + * @param id 外出申请ID + * @return 外出申请 + */ + BpmOAFinanceDO getFinance(Long id); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceServiceImpl.java new file mode 100644 index 00000000..ca56a3d4 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAFinanceServiceImpl.java @@ -0,0 +1,105 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance.BpmOAFinanceCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAFinanceDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAFinanceMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_FINANCE_NOT_EXISTS; + +/** + * OA 外出申请 Service 实现类 + * + * @author 符溶馨 + + */ +@Service +@Validated +public class BpmOAFinanceServiceImpl extends BpmOABaseService implements BpmOAFinanceService{ + + /** + * OA 外出对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_finance_2"; + + @Resource + private BpmOAFinanceMapper financeMapper; + + @Resource + private BpmProcessInstanceService processInstanceService; + + @Resource + private BpmHistoryProcessInstanceService historyProcessInstanceService; + + @Override + public Long createFinance(Long userId, BpmOAFinanceCreateReqVO createReqVO) { + + //插入OA 活动经费申请 + BpmOAFinanceDO finance = BeanUtils.toBean(createReqVO, BpmOAFinanceDO.class) + .setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + financeMapper.insert(finance) ; + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceService.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(finance.getId()))); + + // 将工作流的编号,更新到 OA 活动经费单中 + financeMapper.updateById(new BpmOAFinanceDO().setId(finance.getId()).setProcessInstanceId(processInstanceId)); + + // 判断是否为重新发起的流程 + if (createReqVO.getProcessInstanceId() != null && createReqVO.getResult() == 3) { + + historyProcessInstanceService.createHistoryProcessInstance(processInstanceId, createReqVO.getProcessInstanceId()); + } + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return finance.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateFinanceResult(String processInstanceId, Long id, Integer result) { + + validateLeaveExists(id); + financeMapper.updateById(new BpmOAFinanceDO().setId(id).setResult(result)); + } + + @Override + public BpmOAFinanceDO getByProcessInstanceId(String processInstanceId) { + + return financeMapper.selectOne(BpmOAFinanceDO::getProcessInstanceId, processInstanceId); + } + + @Override + public BpmOAFinanceDO getFinance(Long id) { + return financeMapper.selectById(id); + } + + private void validateLeaveExists(Long id) { + if (financeMapper.selectById(id) == null) { + throw exception(OA_FINANCE_NOT_EXISTS); + } + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAFinanceResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAFinanceResultListener.java new file mode 100644 index 00000000..dc4babf8 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAFinanceResultListener.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.bpm.service.oa.listener; + +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAFinanceService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAFinanceServiceImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * OA 活动经费申请单的结果的监听器实现类 + * + * @author 符溶馨 + */ +@Component +public class BpmOAFinanceResultListener extends BpmProcessInstanceResultEventListener { + + @Resource + private BpmOAFinanceService financeService; + + @Override + protected String getProcessDefinitionKey() { + return BpmOAFinanceServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceResultEvent event) { + financeService.updateFinanceResult(event.getId(), Long.parseLong(event.getBusinessKey()), event.getResult()); + } +}