approval-detail-before-full.png
approval-detail-before.png
approval-detail-v2.jpeg
contract-approve-detail.png
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/attach/BpmBusinessAttachController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,72 @@ package cn.iocoder.yudao.module.bpm.controller.admin.attach; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachSaveReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmBusinessAttachDO; import cn.iocoder.yudao.module.bpm.service.attach.BpmBusinessAttachService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管çåå° - BPM ä¸å¡éä»¶é ç½®") @RestController @RequestMapping("/bpm/business-attach") @Validated public class BpmBusinessAttachController { @Resource private BpmBusinessAttachService businessAttachService; @PostMapping("/create") @Operation(summary = "å建ä¸å¡éä»¶é ç½®") @PreAuthorize("@ss.hasPermission('bpm:business-attach:create')") public CommonResult<Long> createBusinessAttach(@Valid @RequestBody BpmBusinessAttachSaveReqVO createReqVO) { return success(businessAttachService.createBusinessAttach(createReqVO)); } @PutMapping("/update") @Operation(summary = "æ´æ°ä¸å¡éä»¶é ç½®") @PreAuthorize("@ss.hasPermission('bpm:business-attach:update')") public CommonResult<Boolean> updateBusinessAttach(@Valid @RequestBody BpmBusinessAttachSaveReqVO updateReqVO) { businessAttachService.updateBusinessAttach(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "å é¤ä¸å¡éä»¶é ç½®") @Parameter(name = "id", description = "ç¼å·", required = true) @PreAuthorize("@ss.hasPermission('bpm:business-attach:delete')") public CommonResult<Boolean> deleteBusinessAttach(@RequestParam("id") Long id) { businessAttachService.deleteBusinessAttach(id); return success(true); } @GetMapping("/get") @Operation(summary = "è·å¾ä¸å¡éä»¶é ç½®") @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('bpm:business-attach:query')") public CommonResult<BpmBusinessAttachRespVO> getBusinessAttach(@RequestParam("id") Long id) { BpmBusinessAttachDO attach = businessAttachService.getBusinessAttach(id); return success(BeanUtils.toBean(attach, BpmBusinessAttachRespVO.class)); } @GetMapping("/page") @Operation(summary = "è·å¾ä¸å¡éä»¶é ç½®å页") @PreAuthorize("@ss.hasPermission('bpm:business-attach:query')") public CommonResult<PageResult<BpmBusinessAttachRespVO>> getBusinessAttachPage(@Valid BpmBusinessAttachPageReqVO pageReqVO) { PageResult<BpmBusinessAttachDO> pageResult = businessAttachService.getBusinessAttachPage(pageReqVO); return success(BeanUtils.toBean(pageResult, BpmBusinessAttachRespVO.class)); } } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/attach/vo/attach/BpmBusinessAttachPageReqVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @Schema(description = "管çåå° - BPM ä¸å¡éä»¶é ç½®å页 Request VO") @Data public class BpmBusinessAttachPageReqVO extends PageParam { @Schema(description = "æµç¨å®ä¹ç Key", example = "purchase_approve") private String processDefinitionKey; @Schema(description = "ä¸å¡ç±»åï¼ä¾å¦ erp_purchase_order", example = "erp_purchase_order") private String businessType; @Schema(description = "ä¸å¡è¯¦æ ç»ä»¶è·¯å¾ï¼ä¾å¦ /erp/purchase/order/detail/index.vue") private String componentPath; @Schema(description = "ç¶æï¼åè§ CommonStatusEnum æä¸¾", example = "1") @InEnum(CommonStatusEnum.class) private Integer status; @Schema(description = "å建æ¶é´") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/attach/vo/attach/BpmBusinessAttachRespVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; @Schema(description = "管çåå° - BPM ä¸å¡éä»¶é ç½® Response VO") @Data public class BpmBusinessAttachRespVO { @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long id; @Schema(description = "æµç¨å®ä¹ç Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "purchase_approve") private String processDefinitionKey; @Schema(description = "ä¸å¡ç±»åï¼ä¾å¦ erp_purchase_order", example = "erp_purchase_order") private String businessType; @Schema(description = "ä¸å¡è¯¦æ ç»ä»¶è·¯å¾ï¼ä¾å¦ /erp/purchase/order/detail/index.vue", requiredMode = Schema.RequiredMode.REQUIRED) private String componentPath; @Schema(description = "ç¶æï¼åè§ CommonStatusEnum æä¸¾", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Integer status; @Schema(description = "夿³¨", example = "éè´è®¢å审æ¹å±ç¤ºéè´è®¢å详æ ") private String remark; @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime createTime; } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/attach/vo/attach/BpmBusinessAttachSaveReqVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; @Schema(description = "管çåå° - BPM ä¸å¡éä»¶é ç½®æ°å¢/ä¿®æ¹ Request VO") @Data public class BpmBusinessAttachSaveReqVO { @Schema(description = "ç¼å·", example = "1024") private Long id; @Schema(description = "æµç¨å®ä¹ç Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "purchase_approve") @NotEmpty(message = "æµç¨å®ä¹ç Key ä¸è½ä¸ºç©º") private String processDefinitionKey; @Schema(description = "ä¸å¡ç±»åï¼ä¾å¦ erp_purchase_order", example = "erp_purchase_order") private String businessType; @Schema(description = "ä¸å¡è¯¦æ ç»ä»¶è·¯å¾ï¼ä¾å¦ /erp/purchase/order/detail/index.vue", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "ä¸å¡è¯¦æ ç»ä»¶è·¯å¾ä¸è½ä¸ºç©º") private String componentPath; @Schema(description = "ç¶æï¼åè§ CommonStatusEnum æä¸¾", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "ç¶æä¸è½ä¸ºç©º") @InEnum(CommonStatusEnum.class) private Integer status; @Schema(description = "夿³¨", example = "éè´è®¢å审æ¹å±ç¤ºéè´è®¢å详æ ") private String remark; } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java
@@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; import cn.iocoder.yudao.module.bpm.service.attach.BpmBusinessAttachService; import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; @@ -56,6 +57,8 @@ private BpmProcessDefinitionService processDefinitionService; @Resource private BpmCategoryService categoryService; @Resource private BpmBusinessAttachService businessAttachService; @Resource private AdminUserApi adminUserApi; @@ -217,10 +220,16 @@ List<HistoricTaskInstance> tasks = taskService.getFinishedTaskListByProcessInstanceIdWithoutCancel(processInstanceId); Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( convertSet(tasks, item -> Long.valueOf(item.getAssignee()))); return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePrintData(historicProcessInstance, BpmProcessPrintDataRespVO printData = BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePrintData( historicProcessInstance, processDefinitionService.getProcessDefinitionInfo(historicProcessInstance.getProcessDefinitionId()), tasks, userMap, new UserSimpleBaseVO().setNickname(startUser.getNickname()).setDeptName(dept.getName()))); new UserSimpleBaseVO().setNickname(startUser.getNickname()).setDeptName(dept.getName())); // å¡«å ä¸å¡éä»¶é ç½®ï¼å®ç°æå°èªå¨å±ç¤ºå¤é¨ä¸å¡ä¿¡æ¯ businessAttachService.fillBusinessForm(printData.getProcessInstance().getProcessDefinition(), processDefinitionService.getProcessDefinition(historicProcessInstance.getProcessDefinitionId()).getKey(), historicProcessInstance.getBusinessKey()); return success(printData); } } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmBusinessAttachDO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * BPM ä¸å¡éä»¶é ç½® DO * * ç¨äºå»ºç«ãæµç¨å®ä¹ Key -> ä¸å¡è¯¦æ ç»ä»¶ãçæ å°ï¼å®ç°å®¡æ¹è¯¦æ èªå¨å±ç¤ºå¤é¨ä¸å¡ä¿¡æ¯ * * @author è¶ çº§ç®¡çå */ @TableName("bpm_business_attach") @KeySequence("bpm_business_attach_seq") // ç¨äº OracleãPostgreSQLãKingbaseãDB2ãH2 æ°æ®åºç主é®èªå¢ãå¦ææ¯ MySQL çæ°æ®åºï¼å¯ä¸åã @Data @Builder @NoArgsConstructor @AllArgsConstructor public class BpmBusinessAttachDO extends BaseDO { /** * ç¼å· */ @TableId private Long id; /** * æµç¨å®ä¹ç Key */ private String processDefinitionKey; /** * ä¸å¡ç±»åï¼ä¾å¦ erp_purchase_order */ private String businessType; /** * ä¸å¡è¯¦æ ç»ä»¶è·¯å¾ï¼ä¾å¦ /erp/purchase/order/detail/index.vue */ private String componentPath; /** * ç¶æ * * æä¸¾ {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} */ private Integer status; /** * 夿³¨ */ private String remark; } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/attach/BpmBusinessAttachMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.attach; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachPageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmBusinessAttachDO; import org.apache.ibatis.annotations.Mapper; /** * BPM ä¸å¡éä»¶é ç½® Mapper * * @author è¶ çº§ç®¡çå */ @Mapper public interface BpmBusinessAttachMapper extends BaseMapperX<BpmBusinessAttachDO> { default PageResult<BpmBusinessAttachDO> selectPage(BpmBusinessAttachPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX<BpmBusinessAttachDO>() .likeIfPresent(BpmBusinessAttachDO::getProcessDefinitionKey, reqVO.getProcessDefinitionKey()) .likeIfPresent(BpmBusinessAttachDO::getBusinessType, reqVO.getBusinessType()) .likeIfPresent(BpmBusinessAttachDO::getComponentPath, reqVO.getComponentPath()) .eqIfPresent(BpmBusinessAttachDO::getStatus, reqVO.getStatus()) .betweenIfPresent(BpmBusinessAttachDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(BpmBusinessAttachDO::getId)); } default BpmBusinessAttachDO selectByProcessDefinitionKey(String processDefinitionKey) { return selectOne(BpmBusinessAttachDO::getProcessDefinitionKey, processDefinitionKey); } } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
@@ -89,4 +89,8 @@ // ========== BPM æµç¨è¡¨è¾¾å¼ 1-009-014-000 ========== ErrorCode PROCESS_EXPRESSION_NOT_EXISTS = new ErrorCode(1_009_014_000, "æµç¨è¡¨è¾¾å¼ä¸åå¨"); // ========== BPM ä¸å¡éä»¶é ç½® 1-009-015-000 ========== ErrorCode BUSINESS_ATTACH_NOT_EXISTS = new ErrorCode(1_009_015_000, "ä¸å¡éä»¶é ç½®ä¸åå¨"); ErrorCode BUSINESS_ATTACH_PROCESS_DEFINITION_KEY_DUPLICATE = new ErrorCode(1_009_015_001, "æµç¨å®ä¹ç Key({})å·²åå¨"); } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/attach/BpmBusinessAttachService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,75 @@ package cn.iocoder.yudao.module.bpm.service.attach; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachSaveReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmBusinessAttachDO; import jakarta.validation.Valid; /** * BPM ä¸å¡éä»¶é ç½® Service æ¥å£ * * @author è¶ çº§ç®¡çå */ public interface BpmBusinessAttachService { /** * å建ä¸å¡éä»¶é ç½® * * @param createReqVO åå»ºä¿¡æ¯ * @return ç¼å· */ Long createBusinessAttach(@Valid BpmBusinessAttachSaveReqVO createReqVO); /** * æ´æ°ä¸å¡éä»¶é ç½® * * @param updateReqVO æ´æ°ä¿¡æ¯ */ void updateBusinessAttach(@Valid BpmBusinessAttachSaveReqVO updateReqVO); /** * å é¤ä¸å¡éä»¶é ç½® * * @param id ç¼å· */ void deleteBusinessAttach(Long id); /** * è·å¾ä¸å¡éä»¶é ç½® * * @param id ç¼å· * @return ä¸å¡éä»¶é ç½® */ BpmBusinessAttachDO getBusinessAttach(Long id); /** * è·å¾ä¸å¡éä»¶é ç½®å页 * * @param pageReqVO å页æ¥è¯¢ * @return ä¸å¡éä»¶é ç½®å页 */ PageResult<BpmBusinessAttachDO> getBusinessAttachPage(BpmBusinessAttachPageReqVO pageReqVO); /** * è·å¾ä¸å¡éä»¶é ç½®ï¼åºäºæµç¨å®ä¹ Key * * @param processDefinitionKey æµç¨å®ä¹ Key * @return ä¸å¡éä»¶é ç½® */ BpmBusinessAttachDO getBusinessAttachByProcessDefinitionKey(String processDefinitionKey); /** * å¡«å ä¸å¡è¡¨åä¿¡æ¯å°æµç¨å®ä¹ Response * * è¥è¯¥æµç¨å®ä¹é ç½®äºä¸å¡éä»¶ï¼ä¸å·²å¯ç¨ãå½åæ¯ NORMAL æµç¨è¡¨åãåå¨ä¸å¡ä¸»é®ï¼ï¼ * åå° formType è¦ç为 CUSTOM å¹¶æ³¨å ¥ä¸å¡è¯¦æ ç»ä»¶è·¯å¾ï¼å®ç°å®¡æ¹è¯¦æ èªå¨å±ç¤ºä¸å¡ä¿¡æ¯ * * @param definitionResp æµç¨å®ä¹ Response * @param processDefinitionKey æµç¨å®ä¹ Key * @param businessKey ä¸å¡çå¯ä¸æ è¯ï¼æªåèµ·æ¶ä¸º nullï¼ */ void fillBusinessForm(BpmProcessDefinitionRespVO definitionResp, String processDefinitionKey, String businessKey); } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/attach/BpmBusinessAttachServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,119 @@ package cn.iocoder.yudao.module.bpm.service.attach; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.attach.vo.attach.BpmBusinessAttachSaveReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmBusinessAttachDO; import cn.iocoder.yudao.module.bpm.dal.mysql.attach.BpmBusinessAttachMapper; import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.BUSINESS_ATTACH_NOT_EXISTS; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.BUSINESS_ATTACH_PROCESS_DEFINITION_KEY_DUPLICATE; /** * BPM ä¸å¡éä»¶é ç½® Service å®ç°ç±» * * @author è¶ çº§ç®¡çå */ @Service @Validated public class BpmBusinessAttachServiceImpl implements BpmBusinessAttachService { @Resource private BpmBusinessAttachMapper businessAttachMapper; @Override public Long createBusinessAttach(BpmBusinessAttachSaveReqVO createReqVO) { // æ ¡éªæµç¨å®ä¹ Key å¯ä¸ validateProcessDefinitionKeyUnique(createReqVO); // æå ¥ BpmBusinessAttachDO attach = BeanUtils.toBean(createReqVO, BpmBusinessAttachDO.class); businessAttachMapper.insert(attach); return attach.getId(); } @Override public void updateBusinessAttach(BpmBusinessAttachSaveReqVO updateReqVO) { // æ ¡éªåå¨ validateBusinessAttachExists(updateReqVO.getId()); // æ ¡éªæµç¨å®ä¹ Key å¯ä¸ validateProcessDefinitionKeyUnique(updateReqVO); // æ´æ° BpmBusinessAttachDO updateObj = BeanUtils.toBean(updateReqVO, BpmBusinessAttachDO.class); businessAttachMapper.updateById(updateObj); } private void validateProcessDefinitionKeyUnique(BpmBusinessAttachSaveReqVO reqVO) { BpmBusinessAttachDO attach = businessAttachMapper.selectByProcessDefinitionKey(reqVO.getProcessDefinitionKey()); if (attach == null || ObjUtil.equal(attach.getId(), reqVO.getId())) { return; } throw exception(BUSINESS_ATTACH_PROCESS_DEFINITION_KEY_DUPLICATE, reqVO.getProcessDefinitionKey()); } @Override public void deleteBusinessAttach(Long id) { // æ ¡éªåå¨ validateBusinessAttachExists(id); // å é¤ businessAttachMapper.deleteById(id); } private BpmBusinessAttachDO validateBusinessAttachExists(Long id) { BpmBusinessAttachDO attach = businessAttachMapper.selectById(id); if (attach == null) { throw exception(BUSINESS_ATTACH_NOT_EXISTS); } return attach; } @Override public BpmBusinessAttachDO getBusinessAttach(Long id) { return businessAttachMapper.selectById(id); } @Override public PageResult<BpmBusinessAttachDO> getBusinessAttachPage(BpmBusinessAttachPageReqVO pageReqVO) { return businessAttachMapper.selectPage(pageReqVO); } @Override public BpmBusinessAttachDO getBusinessAttachByProcessDefinitionKey(String processDefinitionKey) { return businessAttachMapper.selectByProcessDefinitionKey(processDefinitionKey); } @Override public void fillBusinessForm(BpmProcessDefinitionRespVO definitionResp, String processDefinitionKey, String businessKey) { // æªåèµ· / æ ä¸å¡ä¸»é®ï¼ä¸æ³¨å ¥ if (definitionResp == null || StrUtil.isBlank(businessKey)) { return; } // é NORMAL æµç¨è¡¨åï¼å·²æå¨é ç½® CUSTOMï¼ï¼ä¸è¦ç if (!Objects.equals(definitionResp.getFormType(), BpmModelFormTypeEnum.NORMAL.getType())) { return; } // æªå½ä¸é ç½® / é 置被ç¦ç¨ï¼ä¿æåæ · BpmBusinessAttachDO attach = getBusinessAttachByProcessDefinitionKey(processDefinitionKey); if (attach == null || !Objects.equals(attach.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { return; } // è¦ç为 CUSTOMï¼æ³¨å ¥ä¸å¡è¯¦æ ç»ä»¶è·¯å¾ definitionResp.setFormType(BpmModelFormTypeEnum.CUSTOM.getType()); definitionResp.setFormCustomViewPath(attach.getComponentPath()); // æ¸ ç©ºæ®é表ååæ®µï¼è¯¦æ 页 CUSTOM 忝ä¸è¯»ï¼æå°é¡µæ formFields.length == 0 å¤ææ¸²æä¸å¡ç»ä»¶ definitionResp.setFormFields(null); definitionResp.setFormConf(null); } } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
@@ -37,6 +37,7 @@ import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils; import cn.iocoder.yudao.module.bpm.service.attach.BpmBusinessAttachService; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; @@ -123,6 +124,9 @@ @Resource private BpmProcessIdRedisDAO processIdRedisDAO; @Resource private BpmBusinessAttachService businessAttachService; // ========== Query æ¥è¯¢ç¸å ³æ¹æ³ ========== @@ -389,9 +393,14 @@ Map<String, String> formFieldsPermission = getFormFieldsPermission(bpmnModel, reqVO.getActivityId(), taskId); // 3. æ¼æ¥æ°æ® return BpmProcessInstanceConvert.INSTANCE.buildApprovalDetail(bpmnModel, processDefinition, processDefinitionInfo, processInstance, BpmApprovalDetailRespVO detailRespVO = BpmProcessInstanceConvert.INSTANCE.buildApprovalDetail(bpmnModel, processDefinition, processDefinitionInfo, processInstance, processInstanceStatus, approveNodes, todoTask, formFieldsPermission, userMap, deptMap); // 4. å¡«å ä¸å¡éä»¶é ç½®ï¼å®ç°å®¡æ¹è¯¦æ èªå¨å±ç¤ºå¤é¨ä¸å¡ä¿¡æ¯ businessAttachService.fillBusinessForm(detailRespVO.getProcessDefinition(), processDefinition.getKey(), processInstance != null ? processInstance.getBusinessKey() : null); return detailRespVO; } /**