From 64baec0471452513127ba88da5bc734e7f2f6423 Mon Sep 17 00:00:00 2001 From: Echo <4759156@qq.com> Date: Mon, 30 Jun 2025 17:24:55 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=94=A8=E8=A1=A5=E5=BD=95=E9=99=84?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/attachment/BpmOAAttachmentReqVO.java | 35 ++++++++++++++ .../task/BpmProcessInstanceController.java | 47 +++++++++++++++++++ .../service/oa/BpmOAAttachmentService.java | 18 +++++++ .../oa/BpmOAAttachmentServiceImpl.java | 47 +++++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/attachment/BpmOAAttachmentReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/attachment/BpmOAAttachmentReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/attachment/BpmOAAttachmentReqVO.java new file mode 100644 index 00000000..777bc59e --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/attachment/BpmOAAttachmentReqVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.attachment; + +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 javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 功能描述 补充附件请求类 + * + * @author: yj + * @date: 2025年06月26日 14:41 + */ +@Schema(description = "管理后台 - 补充附件 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOAAttachmentReqVO { + + @Schema(description = "流程业务ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "流程业务ID") + private Long processBusinessId ; + + @Schema(description = "流程类型", requiredMode = Schema.RequiredMode.REQUIRED) + private String processType; + + @Schema(description = "上传文件(包括历史的附件)", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; + +} + diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java index ef4ae150..3289e526 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java @@ -1,18 +1,30 @@ package cn.iocoder.yudao.module.bpm.controller.admin.task; +import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.BpmOALeaveController; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.attachment.BpmOAAttachmentReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmProcessInstancePrintDataReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmProcessInstancePrintDataRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAPetitionDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASealDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAPetitionMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAReimbursementMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOASealMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAAttachmentService; 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.user.AdminUserApi; @@ -22,14 +34,19 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -189,4 +206,34 @@ public class BpmProcessInstanceController { return success(processInstanceService.getOAReportPrintData(reqVO)); } + private final Map entityTypeMap = new ConcurrentHashMap<>(); + + @PostConstruct + public void init() { + // 注册支持的实体类型 + entityTypeMap.put("leave", new ArrayList>(Arrays.asList(BpmOALeaveDO.class, BpmOALeaveMapper.class))); + entityTypeMap.put("petition", new ArrayList>(Arrays.asList(BpmOAPetitionDO.class, BpmOAPetitionMapper.class))); + entityTypeMap.put("reimbursement", new ArrayList>(Arrays.asList(BpmOAReimbursementDO.class, BpmOAReimbursementMapper.class))); + entityTypeMap.put("seal", new ArrayList>(Arrays.asList(BpmOASealDO.class, BpmOASealMapper.class))); + + } + + @Resource + private BpmOAAttachmentService bpmOAAttachmentService; + @PostMapping("/uploadAttachment") + public CommonResult uploadAttachment(@Valid @RequestBody BpmOAAttachmentReqVO reqVO) { + // 解析实体类型 + List> entityClazzs = resolveEntityType(reqVO.getProcessType()); + // 调用通用服务 + bpmOAAttachmentService.updateAttachment(entityClazzs, reqVO.getProcessBusinessId(), reqVO.getFileItems()); + return success("附件更新成功"); + } + + private List> resolveEntityType(String typeName) { + List> entityClazzs = entityTypeMap.get(typeName); + if (entityClazzs == null) { + throw new ServiceException(500, "不支持的流程类型"); + } + return entityClazzs; + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentService.java new file mode 100644 index 00000000..eef030cc --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentService.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; + +import java.util.List; + +public interface BpmOAAttachmentService { + + /** + * 更新业务实体的附件信息 + * @param entityClazzs 业务实体 + * @param entityId 业务ID + * @param fileItems 附件数据 + */ + void updateAttachment(List> entityClazzs, Long entityId, List fileItems); + + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentServiceImpl.java new file mode 100644 index 00000000..429c8169 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAAttachmentServiceImpl.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.hutool.extra.spring.SpringUtil; +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import liquibase.pro.packaged.T; +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.impl.persistence.entity.EntityManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.lang.reflect.Method; +import java.util.List; + +@Service +@Validated +@Slf4j +public class BpmOAAttachmentServiceImpl implements BpmOAAttachmentService { + + /** + * 更新业务实体的附件信息 + * @param entityClazzs 业务实体 + * @param entityId 业务ID + * @param fileItems 附件数据 + */ + public void updateAttachment(List> entityClazzs, Long entityId, List fileItems) { + try { + // 1. 获取实体, 赋值实体类 + Class doClass = entityClazzs.get(0) ; + Object entity = doClass.getDeclaredConstructor().newInstance(); + Method setIdMethod = doClass.getMethod("setId", Long.class) ; + setIdMethod.invoke(entity, entityId); + Method setFileItems = doClass.getMethod("setFileItems", List.class) ; + setFileItems.invoke(entity, fileItems); + //获取MyBatist的操作类实体 + Class mapperClass = entityClazzs.get(1) ; + BaseMapper mapper = (BaseMapper) SpringUtil.getBean(mapperClass); + mapper.updateById(entity); + } catch (Exception e) { + log.error(e.getMessage()); + throw new ServiceException(500, "系统异常,请联系管理员"); + } + } +}