From 0a8e1c73ecfcf42400e7c39f8603256a04fb3c21 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Tue, 4 Mar 2025 21:26:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(bpm):=20=E6=B7=BB=E5=8A=A0=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E5=BC=80=E6=94=AF=E7=94=B3=E8=AF=B7=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增生产开支申请分页接口和相关 VO 类 - 实现生产开支申请分页查询逻辑 - 添加分页查询所需的 SQL 映射文件 - 优化费用类型变量处理,支持多值 -调整薪资付款流程的部门判断逻辑 --- .../admin/oa/BpmOAExpensesController.java | 11 ++++ .../vo/expenses/BpmOAExpensesPageReqVO.java | 33 ++++++++++ .../vo/expenses/BpmOAExpensesPageRespVO.java | 61 +++++++++++++++++++ .../bpm/dal/mysql/oa/BpmOAExpensesMapper.java | 7 +++ .../impl/BpmTaskFactoryLeaderScript.java | 27 ++++---- .../bpm/service/oa/BpmOAExpensesService.java | 10 +++ .../service/oa/BpmOAExpensesServiceImpl.java | 14 +++++ .../mapper/oa/BpmOAExpensesMapper.xml | 60 ++++++++++++++++++ 8 files changed, 212 insertions(+), 11 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java index 1a7e9374..5d10528f 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java @@ -1,7 +1,10 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService; @@ -59,4 +62,12 @@ public class BpmOAExpensesController { return success(respVO); } + + @GetMapping("/page") + @Operation(summary = "获得生产开支申请分页") + public CommonResult> getExpensesPage(BpmOAExpensesPageReqVO pageReqVO) { + + PageResult respVO = expensesService.getExpensesPage(pageReqVO); + return success(respVO); + } } \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java new file mode 100644 index 00000000..1c39c2d4 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 开支日报分页 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class BpmOAExpensesPageReqVO extends PageParam { + + @Schema(description = "申请人用户编号", example = "1") + private Long userId; + + @Schema(description = "所属工厂编号", example = "1") + private Long factoryId; + + @Schema(description = "费用类型 | 字典值参照bpm_oa_expenses_type") + private Integer type; + + @Schema(description = "费用板块 | 1叉车 2打包 3搬运 4运输") + private Integer costSection; + + @Schema(description = "审批通过时间") + private LocalDateTime[] endTime; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java new file mode 100644 index 00000000..141f6047 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses; + +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 java.math.BigDecimal; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 生产开支 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAExpensesPageRespVO extends BpmOABaseRespVO { + + @Schema(description = "申请人用户编号") + private Long userId; + + @Schema(description = "申请人用户名称") + private String userName; + + @Schema(description = "收款人信息编号") + private Long bankId; + + @Schema(description = "收款人名称") + private String payeeName; + + @Schema(description = "银行卡号") + private String bankNo; + + @Schema(description = "开户行名称") + private String bankName; + + @Schema(description = "报销总金额") + private BigDecimal totalMoney; + + @Schema(description = "费用申请主键") + private Long expensesId; + + @Schema(description = "费用类型 | 字典值参照bpm_oa_expenses_type") + private Integer type; + + @Schema(description = "费用板块 | 1叉车 2打包 3搬运 4运输") + private Integer costSection; + + @Schema(description = "费用产生部门") + private Long deptId; + + @Schema(description = "费用产生部门名称") + private String deptName; + + @Schema(description = "支出金额") + private BigDecimal amount; + + @Schema(description = "费用明细") + private String detail; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java index 7290a4ee..b52cb8c9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java @@ -1,9 +1,16 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.oa; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; @Mapper public interface BpmOAExpensesMapper extends BaseMapperX { + + IPage selectExpensesPage(@Param("page") IPage page, + @Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java index 44656920..eda3fd69 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java @@ -4,15 +4,15 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOALoanService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOASalaryService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; -import cn.iocoder.yudao.module.system.api.user.AdminUserApi; -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.context.annotation.Lazy; @@ -31,9 +31,6 @@ import static java.util.Collections.emptySet; @Component public class BpmTaskFactoryLeaderScript extends BpmTaskAssignLeaderAbstractScript { - @Resource - private AdminUserApi userApi; - @Resource private DeptApi deptApi; @@ -53,6 +50,10 @@ public class BpmTaskFactoryLeaderScript extends BpmTaskAssignLeaderAbstractScrip @Lazy // 解决循环依赖 private BpmOALoanService loanService; + @Resource + @Lazy + private BpmOASalaryService salaryService; + @Override public Set calculateTaskCandidateUsers(DelegateExecution execution) { // 获得发起人 @@ -87,14 +88,18 @@ public class BpmTaskFactoryLeaderScript extends BpmTaskAssignLeaderAbstractScrip } break; case "oa_salary_2": - // 获取发起人的部门信息 - AdminUserRespDTO userRespDTO = userApi.getUser(Long.valueOf(processInstance.getStartUserId())).getCheckedData(); - DeptRespDTO deptRespDTO = deptApi.getDept(userRespDTO.getDeptId()).getCheckedData(); + // 根据流程实例ID 取到薪资付款流程表单 + BpmOASalaryDO salaryDO = salaryService.getByProcessInstanceId(processInstance.getProcessInstanceId()); + if (salaryDO != null) { - // 判断是否是属于工厂部门 - if (deptRespDTO.getFactoryId() != null) { - dept = deptApi.getDept(deptRespDTO.getParentId()).getCheckedData(); + // 获取申请部门信息 + DeptRespDTO deptRespDTO = deptApi.getDept(salaryDO.getCompanyDeptId()).getCheckedData(); + // 判断是否是属于工厂部门 + if (deptRespDTO != null && deptRespDTO.getFactoryId() != null) { + dept = deptApi.getDept(deptRespDTO.getParentId()).getCheckedData(); + } } + break; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java index d2527379..fb2c4152 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.bpm.service.oa; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO; @@ -57,4 +60,11 @@ public interface BpmOAExpensesService { * @return 开支对象 */ BpmOAExpensesRespVO convertExpenses(BpmOAExpensesDO expenses); + + /** + * 获得生产开支申请分页 + * @param pageReqVO 分页信息 + * @return 分页结果 + */ + PageResult getExpensesPage(BpmOAExpensesPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java index 4b108bfd..39f2ea95 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java @@ -1,10 +1,14 @@ package cn.iocoder.yudao.module.bpm.service.oa; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; 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.expenses.BpmOAExpensesCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAExpensesConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; @@ -18,6 +22,7 @@ import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,6 +32,7 @@ import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; @@ -82,6 +88,8 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE // 发起 BPM 流程 Map processInstanceVariables = new HashMap<>(); + String type = bpmOAExpensesItemDOS.stream().map(item -> item.getType().toString()).collect(Collectors.joining(",")); + processInstanceVariables.put("type", type); String processInstanceId = processInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(expenses.getId()))).getCheckedData(); @@ -163,4 +171,10 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE return BpmOAExpensesConvert.INSTANCE.convert1(expenses, expensesItemDOs, deptMap, bankRespDTO); } + + @Override + public PageResult getExpensesPage(BpmOAExpensesPageReqVO pageReqVO) { + IPage page = expensesMapper.selectExpensesPage(MyBatisUtils.buildPage(pageReqVO) ,pageReqVO); + return new PageResult<>(page.getRecords(), page.getTotal()); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml new file mode 100644 index 00000000..1fa05326 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml @@ -0,0 +1,60 @@ + + + + + + + +