From 424d9e1d8718fa5140ab09876d40df707c5c7a29 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 14 Sep 2024 17:02:33 +0800 Subject: [PATCH] =?UTF-8?q?commit=20message:```=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BB=A5=E6=94=AF=E6=8C=81=E8=B4=A2=E5=8A=A1=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 引入新的薪资付款申请模块,包括必要的Java类和接口,以支持薪资付款申请的创建、处理和管理。此次更新涉及数据库模型、数据访问层、服务层及对应的控制器。薪资付款申请模块旨在通过系统化流程提高财务流程的效率和准确性。 ``` --- .../oa/vo/salary/BpmOASalaryCreateReqVO.java | 52 +++++++++++ .../admin/oa/vo/salary/BpmOASalaryRespVO.java | 47 ++++++++++ .../bpm/convert/oa/BpmOASalaryConvert.java | 22 +++++ .../bpm/dal/dataobject/oa/BpmOASalaryDO.java | 82 +++++++++++++++++ .../bpm/dal/dataobject/oa/BpmOASealDO.java | 2 - .../bpm/dal/mysql/oa/BpmOaSalaryMapper.java | 9 ++ .../bpm/service/oa/BpmOASalaryService.java | 46 ++++++++++ .../service/oa/BpmOASalaryServiceImpl.java | 88 +++++++++++++++++++ 8 files changed, 346 insertions(+), 2 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASalaryConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaSalaryMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java new file mode 100644 index 00000000..d96b67ba --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary; + +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.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + +/** + * 薪资付款申请 创建 Request VO + * + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 薪资付款申请创建 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOASalaryCreateReqVO { + + @Schema(description = "申请原因", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "申请原因不能为空") + private String reason; + + @Schema(description = "付款公司", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "付款公司不能为空") + private Long companyDeptId; + + @Schema(description = "付款总额", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "付款总额不能为空") + private BigDecimal paymentTotal; + + @Schema(description = "支付对象") + private String paymentRecipient; + + @Schema(description = "流程实例编号") + private String processInstanceId; + + @Schema(description = "状态-参见 bpm_process_instance_result 枚举") + private Integer result; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "附件不能为空") + 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/salary/BpmOASalaryRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java new file mode 100644 index 00000000..b221f362 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary; + +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.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 薪资付款申请 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOASalaryRespVO extends BpmOABaseRespVO { + + @Schema(description = "申请原因") + private String reason; + + @Schema(description = "付款公司") + private Long companyDeptId; + + @Schema(description = "付款总额") + private BigDecimal paymentTotal; + + @Schema(description = "支付对象") + private String paymentRecipient; + + @Schema(description = "流程实例编号") + private String processInstanceId; + + @Schema(description = "状态-参见 bpm_process_instance_result 枚举") + private Integer result; + + @Schema(description = "上传文件") + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASalaryConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASalaryConvert.java new file mode 100644 index 00000000..57fd2abe --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASalaryConvert.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.bpm.convert.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 用章申请 Convert + * + * @author 符溶馨 + */ +@Mapper +public interface BpmOASalaryConvert { + + BpmOASalaryConvert INSTANCE = Mappers.getMapper(BpmOASalaryConvert.class); + + BpmOASalaryDO convert(BpmOASalaryCreateReqVO bean); + + BpmOASalaryRespVO convert(BpmOASalaryDO bean); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java new file mode 100644 index 00000000..404311ad --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java @@ -0,0 +1,82 @@ +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.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.math.BigDecimal; +import java.util.List; + +/** + * OA 用章申请 DO + * + * @author 符溶馨 + */ +@TableName(value ="bpm_oa_salary", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOASalaryDO extends BaseDO { + + /** + * 出差表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + * + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + + /** + * 申请事由 + */ + private String reason; + + /** + * 付款公司 + */ + private Long companyDeptId; + + /** + * 付款总额 + */ + private BigDecimal paymentTotal; + + /** + * 支付对象 + */ + private String paymentRecipient; + + /** + * 薪资付款申请的结果 + * + * 枚举 {@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/dataobject/oa/BpmOASealDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASealDO.java index 8e4680e7..cb217e1f 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASealDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASealDO.java @@ -73,7 +73,6 @@ public class BpmOASealDO extends BaseDO { /** * 用章的结果 - * * 枚举 {@link BpmProcessInstanceResultEnum} * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 */ @@ -81,7 +80,6 @@ public class BpmOASealDO extends BaseDO { /** * 对应的流程编号 - * * 关联 ProcessInstance 的 id 属性 */ private String processInstanceId; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaSalaryMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaSalaryMapper.java new file mode 100644 index 00000000..adb53a3d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaSalaryMapper.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.BpmOASalaryDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BpmOaSalaryMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryService.java new file mode 100644 index 00000000..a2f25bb7 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryService.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; + +import javax.validation.Valid; + +/** + * 薪资付款申请 Service 接口 + * + * @author 符溶馨 + */ +public interface BpmOASalaryService { + + /** + * 创建用章申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSalary(Long userId, @Valid BpmOASalaryCreateReqVO createReqVO); + + /** + * 更新用章申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateSalaryResult(Long id, Integer result); + + /** + * 获得用章申请 + * + * @param id 编号 + * @return 用章申请 + */ + BpmOASalaryDO getSalary(Long id); + + /** + * 获得指定的用章申请 + * @param processInstanceId 流程实例编号 + * @return 用章申请 + */ + BpmOASalaryDO getByProcessInstanceId(String processInstanceId); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java new file mode 100644 index 00000000..3094e878 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java @@ -0,0 +1,88 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryCreateReqVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOASalaryConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOaSalaryMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * OA 薪资付款申请 Service 实现类 + * + * @author 符溶馨 + */ +@Service +@Validated +public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASalaryService{ + + /** + * OA 薪资付款对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_salary_2"; + + @Resource + private BpmOaSalaryMapper salaryMapper; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Resource + private BpmHistoryProcessInstanceService historyProcessInstanceService; + + @Override + public Long createSalary(Long userId, BpmOASalaryCreateReqVO createReqVO) { + + //插入OA 薪资付款申请 + BpmOASalaryDO salary = BpmOASalaryConvert.INSTANCE.convert(createReqVO).setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + salaryMapper.insert(salary) ; + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(salary.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 用章单中 + salaryMapper.updateById(new BpmOASalaryDO().setId(salary.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 salary.getId(); + } + + @Override + public void updateSalaryResult(Long id, Integer result) { + + } + + @Override + public BpmOASalaryDO getSalary(Long id) { + return null; + } + + @Override + public BpmOASalaryDO getByProcessInstanceId(String processInstanceId) { + return null; + } +}