diff --git a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java index ddbd4897..4cf979bb 100644 --- a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java +++ b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java @@ -42,6 +42,7 @@ public interface IBusinessProcessClient { String GET_CURRENT_NODES = API_PREFIX + "/getCurrentNodes"; String GET_PROCESS_INFO = API_PREFIX + "/getProcessInfo"; String RESOLVE_BY_FORM_INSTANCE_ID = API_PREFIX + "/resolveByFormInstanceId"; + String MARK_PROCESS_FINISHED = API_PREFIX + "/markProcessFinished"; /** * 提交业务流程 @@ -137,4 +138,15 @@ public interface IBusinessProcessClient { */ @GetMapping(RESOLVE_BY_FORM_INSTANCE_ID) FR resolveByFormInstanceId(@RequestParam("formInstanceId") Long formInstanceId); + + /** + * 公开页流程结束时标记业务流程通过/驳回并完结 + * + * @param processInstanceId 流程实例id + * @param approved true=通过 false=驳回 + * @return 是否更新成功 + */ + @PostMapping(MARK_PROCESS_FINISHED) + FR markProcessFinished(@RequestParam("processInstanceId") String processInstanceId, + @RequestParam("approved") boolean approved); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java b/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java index cc94ba25..6319b680 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java @@ -102,4 +102,12 @@ public class BusinessProcessClient implements IBusinessProcessClient { public FR resolveByFormInstanceId(@RequestParam("formInstanceId") Long formInstanceId) { return FR.data(businessProcessService.resolveByFormInstanceId(formInstanceId)); } + + @PreAuth(AuthConstant.PERMIT_ALL) + @PostMapping(MARK_PROCESS_FINISHED) + @Override + public FR markProcessFinished(@RequestParam("processInstanceId") String processInstanceId, + @RequestParam("approved") boolean approved) { + return FR.data(businessProcessService.markProcessFinished(processInstanceId, approved)); + } } diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java index 866f9341..36b15ce0 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java @@ -58,6 +58,15 @@ public interface IBusinessProcessService extends IService { */ MkFormBindVO resolveByFormInstanceId(Long formInstanceId); + /** + * 公开页流程结束时标记业务流程通过/驳回并完结 + * + * @param processInstanceId 流程实例id + * @param approved true=通过 false=驳回 + * @return 是否更新成功 + */ + boolean markProcessFinished(String processInstanceId, boolean approved); + /** * 获取流程当前节点详情 * diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java index 81a7178a..5bd9fe2b 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java @@ -62,13 +62,14 @@ public interface IMkFormBindService extends IService { MkFormBindVO resolveByFormInstanceId(Long formInstanceId); /** - * 解析或生成表单实例id:无当前绑定则新建;当前流程已审批通过则新建;否则复用 + * 解析或生成表单实例id:无当前绑定则新建;强制新建/当前流程已通过或已完结则新建;否则复用 * - * @param bizType 业务类型 - * @param bizId 业务主键 + * @param bizType 业务类型 + * @param bizId 业务主键 + * @param forceNew 是否强制生成新表单实例(审核通过后再次提交) * @return 本次应使用的表单实例id */ - Long resolveOrCreateFormInstanceId(String bizType, Long bizId); + Long resolveOrCreateFormInstanceId(String bizType, Long bizId, boolean forceNew); /** * 回写流程实例id到当前绑定 diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java index 5cba67dc..d111d805 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java @@ -140,7 +140,8 @@ public class BusinessProcessServiceImpl extends ServiceImpl map)) { + return false; + } + Object status = map.get("fdProcessStatus"); + return status != null && "30".equals(String.valueOf(status)); + } + /** * MK getProcessInfo 是否返回有效数据 */ @@ -345,6 +362,30 @@ public class BusinessProcessServiceImpl extends ServiceImpl getCurrentNodes(String processInstanceId, String loginName) { if (StringUtils.isBlank(processInstanceId)) { @@ -619,6 +660,7 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() .eq(BusinessProcess::getBizId, bizId) + .orderByDesc(BusinessProcess::getUpdateTime) .last("limit 1") ); AssertUtils.notNull(businessProcess, "业务流程不存在"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java index 21fee54d..2e9c4346 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java @@ -109,7 +109,7 @@ public class MkFormBindServiceImpl extends ServiceImpl markResult = businessProcessClient.markProcessFinished(processId, approved); + log.info("公开页标记业务流程完结 bizType={} processId={} approved={} result={}", + bizType, processId, approved, JSON.toJSONString(markResult)); + } catch (Exception markException) { + log.error("公开页标记业务流程完结失败 bizType={} processId={} approved={}", + bizType, processId, approved, markException); + } } catch (NumberFormatException e) { log.warn("流程{}但业务id格式不正确 bizType={} id={}", action, bizType, bizIdText); } catch (Exception e) { diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java index c9384dd8..1c7aa6ae 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java @@ -143,6 +143,13 @@ public class CustomerArchivePublicProcessService { } else { customerArchiveService.rejectFromProcess(customerId, processorName); } + try { + FR markResult = businessProcessClient.markProcessFinished(processId, approved); + log.info("客商公开页标记业务流程完结 processId={} approved={} result={}", + processId, approved, JSON.toJSONString(markResult)); + } catch (Exception markException) { + log.error("客商公开页标记业务流程完结失败 processId={} approved={}", processId, approved, markException); + } } catch (NumberFormatException e) { log.warn("流程{}但客商id格式不正确:{}", action, customerIdText); } catch (Exception e) { diff --git a/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/pojo/dto/MKProcessCreateDTO.java b/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/pojo/dto/MKProcessCreateDTO.java index f757191d..d902ed2c 100644 --- a/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/pojo/dto/MKProcessCreateDTO.java +++ b/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/pojo/dto/MKProcessCreateDTO.java @@ -55,4 +55,9 @@ public class MKProcessCreateDTO implements Serializable { */ @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String bizType; + /** + * 强制生成新表单实例(审核通过后再次提交),仅 ERP 内部使用,不传给 MK + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Boolean forceNewFormInstance; }