refactor(bpm): 重构资产申领流程,优化数据处理逻辑

重构了资产申领的业务逻辑,调整了数据处理方式。具体变更包括:

- 移除了不必要的`Receive`类,将其重命名为`BpmOAAssetClaimItemSaveVO`,以更清晰地表示其用途。
- 在`BpmOAAssetClaimController`中,改用`BpmOAAssetClaimItemDO`来处理明细数据。- 在`BpmOAAssetClaimRespVO`中,将`receive`字段的类型从`List<ReceiveRespVO>`更改为`List<BpmOAAssetClaimItemDO>`,以统一数据对象。
- 在`BpmOAAssetClaimServiceImpl`中,实现了明细数据的同步插入逻辑,并优化了资产接收的处理逻辑。

这些变更简化了代码结构,优化了数据流的处理,提升了代码可维护性和业务逻辑的清晰度。
This commit is contained in:
furongxin 2024-09-28 22:59:42 +08:00
parent 61f0fe509b
commit 811c5b3509
5 changed files with 46 additions and 41 deletions

View File

@ -4,12 +4,11 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.BpmOAAssetClaimCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.BpmOAAssetClaimCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.BpmOAAssetClaimRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.BpmOAAssetClaimRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.Receive;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.ReceiveRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAAssetClaimDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAAssetClaimDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAAssetClaimItemDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAAssetClaimItemService;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAAssetClaimService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAAssetClaimService;
import cn.iocoder.yudao.module.system.api.assets.AssetsTypeApi; import cn.iocoder.yudao.module.system.api.assets.AssetsTypeApi;
import cn.iocoder.yudao.module.system.api.assets.dto.AssetsTypeDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -18,14 +17,9 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - OA 资金申领") @Tag(name = "管理后台 - OA 资金申领")
@ -38,7 +32,7 @@ public class BpmOAAssetClaimController {
private BpmOAAssetClaimService assetClaimService; private BpmOAAssetClaimService assetClaimService;
@Resource @Resource
private AssetsTypeApi assetsTypeApi; private BpmOAAssetClaimItemService itemService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建请求申请") @Operation(summary = "创建请求申请")
@ -54,16 +48,11 @@ public class BpmOAAssetClaimController {
BpmOAAssetClaimDO assetClaimDO = assetClaimService.getAssetClaim(id); BpmOAAssetClaimDO assetClaimDO = assetClaimService.getAssetClaim(id);
List<AssetsTypeDTO> assetsTypeDTO = assetsTypeApi.getList(convertList(assetClaimDO.getReceive(), Receive::getAssetsTypeId)).getCheckedData(); // 获取明细数据
Map<Long, String> assetsTypeNameMap = convertMap(assetsTypeDTO, AssetsTypeDTO::getId, AssetsTypeDTO::getName); List<BpmOAAssetClaimItemDO> itemDOS = itemService.getAssetClaimItem(id);
List<ReceiveRespVO> respVOS = assetClaimDO.getReceive().stream()
.map(item -> BeanUtils.toBean(item, ReceiveRespVO.class)
.setAssetsTypeName(assetsTypeNameMap.get(item.getAssetsTypeId())))
.collect(Collectors.toList());
return success(BeanUtils.toBean(assetClaimDO, BpmOAAssetClaimRespVO.class) return success(BeanUtils.toBean(assetClaimDO, BpmOAAssetClaimRespVO.class)
.setReceive(respVOS)); .setReceive(itemDOS));
} }
@GetMapping("/getByProcessInstanceId") @GetMapping("/getByProcessInstanceId")
@ -73,15 +62,10 @@ public class BpmOAAssetClaimController {
BpmOAAssetClaimDO assetClaimDO = assetClaimService.getByProcessInstanceId(processInstanceId); BpmOAAssetClaimDO assetClaimDO = assetClaimService.getByProcessInstanceId(processInstanceId);
List<AssetsTypeDTO> assetsTypeDTO = assetsTypeApi.getList(convertList(assetClaimDO.getReceive(), Receive::getAssetsTypeId)).getCheckedData(); // 获取明细数据
Map<Long, String> assetsTypeNameMap = convertMap(assetsTypeDTO, AssetsTypeDTO::getId, AssetsTypeDTO::getName); List<BpmOAAssetClaimItemDO> itemDOS = itemService.getAssetClaimItem(assetClaimDO.getId());
List<ReceiveRespVO> respVOS = assetClaimDO.getReceive().stream()
.map(item -> BeanUtils.toBean(item, ReceiveRespVO.class)
.setAssetsTypeName(assetsTypeNameMap.get(item.getAssetsTypeId())))
.collect(Collectors.toList());
return success(BeanUtils.toBean(assetClaimDO, BpmOAAssetClaimRespVO.class) return success(BeanUtils.toBean(assetClaimDO, BpmOAAssetClaimRespVO.class)
.setReceive(respVOS)); .setReceive(itemDOS));
} }
} }

View File

@ -1,20 +1,35 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim; package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 资产申领明细VO") @Schema(description = "管理后台 - 资产申领明细VO")
@Data @Data
public class Receive { public class BpmOAAssetClaimItemSaveVO {
@Schema(description = "资产申领编号")
private Long assetClaimId;
@Schema(description = "资产类型编号") @Schema(description = "资产类型编号")
@NotNull(message = "资产类型不能为空")
private Long assetsTypeId; private Long assetsTypeId;
@Schema(description = "资产类型名称")
private String assetsTypeName;
@Schema(description = "业务类型") @Schema(description = "业务类型")
private Integer businessType; private Integer businessType;
@Schema(description = "资产编号")
private String assetsNo;
@Schema(description = "资产名称")
private String assetsName;
@Schema(description = "数量") @Schema(description = "数量")
@NotNull(message = "数量不能为空")
private Integer num; private Integer num;
@Schema(description = "使用单位") @Schema(description = "使用单位")

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAAssetClaimItemDO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -19,7 +20,7 @@ import java.util.List;
public class BpmOAAssetClaimRespVO extends BpmOABaseRespVO { public class BpmOAAssetClaimRespVO extends BpmOABaseRespVO {
@Schema(description = "申领明细") @Schema(description = "申领明细")
private List<ReceiveRespVO> receive; private List<BpmOAAssetClaimItemDO> receive;
@Schema(description = "申请原因") @Schema(description = "申请原因")
private String reason; private String reason;

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.Receive;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@ -38,12 +37,6 @@ public class BpmOAAssetClaimDO extends BaseDO {
*/ */
private Long userId; private Long userId;
/**
* 申领明细
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<Receive> receive;
/** /**
* 申请事由 * 申请事由
*/ */

View File

@ -4,16 +4,15 @@ import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 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.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.BpmOAAssetClaimCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.BpmOAAssetClaimCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.Receive; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.assetClaim.BpmOAAssetClaimItemSaveVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAAssetClaimDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAAssetClaimDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAAssetClaimItemDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAAssetClaimMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAAssetClaimMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; 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.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.system.api.assetreceive.AssetReceiveApi; import cn.iocoder.yudao.module.system.api.assetreceive.AssetReceiveApi;
import cn.iocoder.yudao.module.system.api.assetreceive.dto.AssetReceiveSaveDTO; import cn.iocoder.yudao.module.system.api.assetreceive.dto.AssetReceiveSaveDTO;
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.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
@ -47,6 +46,9 @@ public class BpmOAAssetClaimServiceImpl extends BpmOABaseService implements BpmO
@Resource @Resource
private BpmOAAssetClaimMapper assetClaimMapper; private BpmOAAssetClaimMapper assetClaimMapper;
@Resource
private BpmOAAssetClaimItemService itemService;
@Resource @Resource
private BpmProcessInstanceService processInstanceService; private BpmProcessInstanceService processInstanceService;
@ -67,6 +69,10 @@ public class BpmOAAssetClaimServiceImpl extends BpmOABaseService implements BpmO
.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
assetClaimMapper.insert(assetClaim); assetClaimMapper.insert(assetClaim);
// 同步插入明细数据
createReqVO.getReceive().forEach(item -> item.setAssetClaimId(assetClaim.getId()));
itemService.createAssetClaimItem(createReqVO.getReceive());
// 发起 BPM 流程 // 发起 BPM 流程
Map<String, Object> processInstanceVariables = new HashMap<>(); Map<String, Object> processInstanceVariables = new HashMap<>();
String processInstanceId = processInstanceService.createProcessInstance(userId, String processInstanceId = processInstanceService.createProcessInstance(userId,
@ -87,6 +93,7 @@ public class BpmOAAssetClaimServiceImpl extends BpmOABaseService implements BpmO
if (fileItems != null && !fileItems.isEmpty()) { if (fileItems != null && !fileItems.isEmpty()) {
uploadBpmFileProcessInstanceId(processInstanceId, fileItems); uploadBpmFileProcessInstanceId(processInstanceId, fileItems);
} }
return assetClaim.getId(); return assetClaim.getId();
} }
@ -107,6 +114,8 @@ public class BpmOAAssetClaimServiceImpl extends BpmOABaseService implements BpmO
public void updateAssetClaimResult(String processInstanceId, Long id, Integer result) { public void updateAssetClaimResult(String processInstanceId, Long id, Integer result) {
BpmOAAssetClaimDO assetClaim = validateLeaveExists(id); BpmOAAssetClaimDO assetClaim = validateLeaveExists(id);
// 获取明细数据
List<BpmOAAssetClaimItemDO> itemDOs = itemService.getAssetClaimItem(id);
// 获取用户信息 // 获取用户信息
AdminUserRespDTO userRespDTO = userApi.getUser(assetClaim.getUserId()).getCheckedData(); AdminUserRespDTO userRespDTO = userApi.getUser(assetClaim.getUserId()).getCheckedData();
@ -119,13 +128,16 @@ public class BpmOAAssetClaimServiceImpl extends BpmOABaseService implements BpmO
if (instance.isEnded()) { if (instance.isEnded()) {
List<AssetReceiveSaveDTO> receiveDTOs = new ArrayList<>(); List<AssetReceiveSaveDTO> receiveDTOs = new ArrayList<>();
for (Receive receive : assetClaim.getReceive()) { for (BpmOAAssetClaimItemDO itemDO : itemDOs) {
receiveDTOs.add(new AssetReceiveSaveDTO() receiveDTOs.add(new AssetReceiveSaveDTO()
.setUserId(assetClaim.getUserId()) .setUserId(assetClaim.getUserId())
.setDeptId(userRespDTO.getDeptId()) .setDeptId(userRespDTO.getDeptId())
.setAssetsTypeId(receive.getAssetsTypeId()) .setAssetsTypeId(itemDO.getAssetsTypeId())
.setNum(receive.getNum()) .setAssetsTypeName(itemDO.getAssetsTypeName())
.setAssetsNo(itemDO.getAssetsNo())
.setAssetsName(itemDO.getAssetsName())
.setNum(itemDO.getNum())
.setApplyDate(assetClaim.getCreateTime().toLocalDate()) .setApplyDate(assetClaim.getCreateTime().toLocalDate())
.setStatus(0)); .setStatus(0));
} }