From 1e91616950289d31cc7380edef5291ab180c70bb Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Fri, 1 Aug 2025 15:58:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(qms):=20=E9=9B=86=E6=88=90=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E5=B9=B6=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在不合格评审中集成工作流功能,添加流程实例ID等字段 - 实现文件上传功能,支持多文件上传并保存到OSS - 优化不合格评审的审批流程,增加任务完成接口 - 不合格品评审新增主管审批接口 --- ruoyi-modules/hwmom-dms/pom.xml | 2 +- ruoyi-modules/hwmom-qms/pom.xml | 24 +++++ .../qms/controller/QcPDAController.java | 69 ++++++++++++++ .../QcUnqualifiedReviewController.java | 43 ++++++--- .../qms/domain/QcUnqualifiedReview.java | 23 ++++- .../qms/domain/bo/QcInspectionMainBo.java | 5 + .../qms/domain/bo/QcUnqualifiedReviewBo.java | 30 ++++-- .../qms/domain/vo/QcUnqualifiedReviewVo.java | 28 ++++-- .../service/IQcUnqualifiedReviewService.java | 10 ++ .../impl/QcInspectionMainServiceImpl.java | 3 +- .../qms/service/impl/QcPDAServiceImpl.java | 93 +++++++++++++++---- .../impl/QcUnqualifiedReviewServiceImpl.java | 70 +++++++++++--- 12 files changed, 338 insertions(+), 62 deletions(-) diff --git a/ruoyi-modules/hwmom-dms/pom.xml b/ruoyi-modules/hwmom-dms/pom.xml index 3fbe86ca..b1245b6a 100644 --- a/ruoyi-modules/hwmom-dms/pom.xml +++ b/ruoyi-modules/hwmom-dms/pom.xml @@ -186,7 +186,7 @@ 2.2.2 compile - + org.dromara ruoyi-common-bus diff --git a/ruoyi-modules/hwmom-qms/pom.xml b/ruoyi-modules/hwmom-qms/pom.xml index fd70a1c0..3c4c5024 100644 --- a/ruoyi-modules/hwmom-qms/pom.xml +++ b/ruoyi-modules/hwmom-qms/pom.xml @@ -117,6 +117,7 @@ 2.2.2 compile + @@ -128,6 +129,29 @@ + + org.dromara + hwmom-api-workflow + 2.2.2 + compile + + + + org.dromara + ruoyi-common-bus + + + + + + com.alibaba + transmittable-thread-local + 2.14.4 + + + diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java index cb5885bd..ad0534d3 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java @@ -5,7 +5,9 @@ import com.alibaba.fastjson2.JSONObject; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.domain.R; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.pda.api.model.bo.GenerateInspectionTaskBo; @@ -18,10 +20,14 @@ import org.dromara.qms.domain.vo.QcInspectionResultVo; import org.dromara.qms.domain.vo.QcUnqualifiedRecordVo; import org.dromara.qms.domain.vo.QcUnqualifiedReviewVo; import org.dromara.qms.service.*; +import org.dromara.resource.api.RemoteFileService; +import org.dromara.resource.api.domain.RemoteFile; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.ArrayList; import java.util.List; @@ -57,6 +63,66 @@ public class QcPDAController { //PDA业务Service private final IQcPDAService qcPDAService; + @DubboReference + private final RemoteFileService remoteFileService; + + + /** + * 处理文件上传的函数 + * + * @param files 多部分文件列表 + * @return 上传文件的URL列表 + */ + private List handleFileUploads(List files) { + // 创建一个存储上传文件URL的列表 + List fileUrls = new ArrayList<>(); + List ossIds = new ArrayList<>(); + // 判断文件列表是否为空 + if (files != null) { + // 遍历每个文件 + for (MultipartFile file : files) { + // 获取原始文件名 + String originalFilename = file.getOriginalFilename(); + // 获取文件类型 + String contentType = file.getContentType(); + byte[] fileBytes; + try { + // 获取文件字节内容 + fileBytes = file.getBytes(); + } catch (IOException e) { + // 记录错误日志并抛出服务异常 + log.error("获取文件字节失败: {}", originalFilename, e); + throw new ServiceException("文件获取失败,请重试。"); + } + + try { + // 调用远程文件服务的上传方法 + RemoteFile sysFile = remoteFileService.upload(originalFilename, originalFilename, contentType, fileBytes); + // 判断上传结果是否成功 + if (sysFile != null && sysFile.getUrl() != null) { + // 将文件URL添加到列表中 + fileUrls.add(sysFile.getUrl()); + ossIds.add(sysFile.getOssId()); + } else { + // 记录警告日志 + log.warn("文件上传成功但未返回URL或返回数据为空: {}", originalFilename); + } + } catch (ServiceException e) { + // 记录服务异常日志并抛出新的服务异常 + log.error("文件上传服务异常: {}", originalFilename, e); + throw new ServiceException("文件上传服务异常:" + e.getMessage()); + } catch (Exception e) { + // 记录未知错误日志并抛出新的服务异常 + log.error("文件上传过程中发生未知错误: {}", originalFilename, e); + throw new ServiceException("文件上传过程中发生未知错误,请联系管理员。"); + } + } + } + // 返回上传文件的URL列表 + return ossIds; + } + + /** * 验证评审结果是否有效 * 实现评审结果的五种处置方式验证:流转、报废、让步接收、返工、退货 @@ -96,7 +162,10 @@ public class QcPDAController { @PostMapping("/submitInspection") public R submitInspection(String json, List checkItemFiles) { + // 处理文件上传 + List ossIds = handleFileUploads(checkItemFiles); QcInspectionMainBo bo= JSONObject.parseObject(json, QcInspectionMainBo.class); + bo.setOssIds(ossIds); Boolean result = qcPDAService.submitInspection(bo); if (result != null && result) { return R.ok(true); diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java index dd4051aa..3bad29b5 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java @@ -1,26 +1,28 @@ package org.dromara.qms.controller; -import java.util.List; -import java.util.ArrayList; -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.qms.domain.vo.QcUnqualifiedReviewVo; -import org.dromara.qms.domain.bo.QcUnqualifiedReviewBo; -import org.dromara.qms.service.IQcUnqualifiedReviewService; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.qms.domain.bo.QcUnqualifiedReviewBo; +import org.dromara.qms.domain.vo.QcUnqualifiedReviewVo; +import org.dromara.qms.service.IQcUnqualifiedReviewService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; /** * 不合格品待评审 @@ -126,4 +128,15 @@ public class QcUnqualifiedReviewController extends BaseController { List list = qcUnqualifiedReviewService.queryList(bo); return R.ok(list); } + + /** + * 主管审批 + * @param bo + * @return + */ + @PostMapping("/completeTask") + public R completeTask(@Validated(EditGroup.class) @RequestBody QcUnqualifiedReviewBo bo) { + return R.ok(qcUnqualifiedReviewService.completeTask(bo)); + } + } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java index 8cccc3c6..8298ae37 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java @@ -1,14 +1,13 @@ package org.dromara.qms.domain; -import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; -import java.math.BigDecimal; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.tenant.core.TenantEntity; import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; /** * 不合格品待评审对象 qc_unqualified_review @@ -146,4 +145,20 @@ public class QcUnqualifiedReview extends TenantEntity { */ @TableField(exist = false) private String typeName; + + /** + * 工作流实例ID + */ + private Long processInstanceId; + +// /** +// * 工作流状态(draft草稿、waiting待审核、finish完成、termination终止、back退回、cancel撤销) +// */ +// private String processStatus; +// +// /** +// * 当前任务ID +// */ +// private Long currentTaskId; + } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcInspectionMainBo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcInspectionMainBo.java index 16bc4a33..366ad07b 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcInspectionMainBo.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcInspectionMainBo.java @@ -172,4 +172,9 @@ public class QcInspectionMainBo extends BaseEntity { */ private List results; + /** + * 文件ID列表 + */ + List ossIds; + } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java index c5ad09ce..8260eca2 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java @@ -1,17 +1,13 @@ package org.dromara.qms.domain.bo; -import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.qms.domain.QcUnqualifiedReview; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.qms.domain.QcUnqualifiedReview; + import java.math.BigDecimal; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; /** * 不合格品待评审业务对象 qc_unqualified_review @@ -138,4 +134,24 @@ public class QcUnqualifiedReviewBo extends BaseEntity { * 检测类型名称 */ private String typeName; + + + /** + * 工作流实例ID + */ + private Long processInstanceId; + + +// /** +// * 工作流状态(draft草稿、waiting待审核、finish完成、termination终止、back退回、cancel撤销) +// */ +// private String processStatus; +// +// +// /** +// * 当前任务ID +// */ +// private Long currentTaskId; + + } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java index 61a0f597..e4f7d5ff 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java @@ -1,18 +1,16 @@ package org.dromara.qms.domain.vo; -import java.math.BigDecimal; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.qms.domain.QcUnqualifiedReview; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.qms.domain.QcUnqualifiedReview; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @@ -169,4 +167,22 @@ public class QcUnqualifiedReviewVo implements Serializable { * 检测类型名称 */ private String typeName; + + + + /** + * 工作流实例ID + */ + private Long processInstanceId; + +// /** +// * 工作流状态(draft草稿、waiting待审核、finish完成、termination终止、back退回、cancel撤销) +// */ +// private String processStatus; +// +// /** +// * 当前任务ID +// */ +// private Long currentTaskId; + } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcUnqualifiedReviewService.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcUnqualifiedReviewService.java index dd30252c..66098253 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcUnqualifiedReviewService.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcUnqualifiedReviewService.java @@ -66,4 +66,14 @@ public interface IQcUnqualifiedReviewService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + /** + * 完成审批任务 + * + * @param request 请求参数 + * @return 是否完成成功 + */ + Boolean completeTask(QcUnqualifiedReviewBo bo); + } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcInspectionMainServiceImpl.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcInspectionMainServiceImpl.java index dba33ddb..9867f449 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcInspectionMainServiceImpl.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcInspectionMainServiceImpl.java @@ -104,8 +104,9 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService { // .eq(bo.getResult() != null, QcInspectionMain::getResult, bo.getResult()) .eq(StringUtils.isNotBlank(bo.getResult()), QcInspectionMain::getResult, bo.getResult()) .eq(StringUtils.isNotBlank(bo.getWorkshop()), QcInspectionMain::getWorkshop, bo.getWorkshop()) -// .eq(bo.getInspectionType() != null, QcInspectionMain::getInspectionType, bo.getInspectionType()) + .eq(bo.getInspectionType() != null, QcInspectionMain::getInspectionType, bo.getInspectionType()) // .eq(bo.getStatus() != null, QcInspectionMain::getStatus, bo.getStatus()) + .eq(StringUtils.isNotBlank(bo.getQcInspectionType()), QcInspectionType::getQcInspectionType, bo.getQcInspectionType()) .eq(StringUtils.isNotBlank(bo.getStatus()), QcInspectionMain::getStatus, bo.getStatus()) .eq(StringUtils.isNotBlank(bo.getInspector()), QcInspectionMain::getInspector, bo.getInspector()) diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java index 1b5b3fdf..9a568006 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java @@ -1,38 +1,33 @@ package org.dromara.qms.service.impl; +import com.alibaba.ttl.TtlRunnable; +import io.seata.spring.annotation.GlobalTransactional; import lombok.RequiredArgsConstructor; - +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.core.utils.uuid.IdUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.pda.api.RemotePdaMesApiService; import org.dromara.pda.api.model.ProdQmsPlanDetail; import org.dromara.pda.api.model.bo.GenerateInspectionTaskBo; -import org.dromara.qms.domain.bo.QcInspectionResultBo; -import org.dromara.qms.domain.bo.QcInspectionTemplateBo; -import org.dromara.qms.domain.bo.QcTemplateItemBo; +import org.dromara.qms.domain.bo.*; import org.dromara.qms.domain.vo.*; import org.dromara.qms.service.*; import org.dromara.system.api.RemoteCodeRuleService; +import org.dromara.workflow.api.RemoteWorkflowService; +import org.dromara.workflow.api.domain.RemoteCompleteTask; +import org.dromara.workflow.api.domain.RemoteStartProcess; +import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; -import org.dromara.qms.domain.bo.QcInspectionMainBo; -import org.dromara.common.core.domain.R; import org.springframework.transaction.annotation.Transactional; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.qms.domain.bo.QcUnqualifiedReviewBo; -import org.dromara.qms.domain.bo.QcUnqualifiedRecordBo; -import org.dromara.common.core.utils.MapstructUtils; import java.math.BigDecimal; -import java.util.Date; - -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.concurrent.CompletableFuture; /** * PDA接口Service业务层处理 @@ -40,11 +35,13 @@ import java.util.UUID; * @author YinQ * @date 2025-07-24 */ +@Slf4j @RequiredArgsConstructor @Service @DubboService public class QcPDAServiceImpl implements IQcPDAService { + private final IQcInspectionMainService qcInspectionMainService; //质检结果子表 @@ -59,12 +56,19 @@ public class QcPDAServiceImpl implements IQcPDAService { //不合格记录子表 private final IQcUnqualifiedRecordService qcUnqualifiedRecordService; + private final IQcInspectionMainFileRelationService qcInspectionMainFileRelationService; + @DubboReference private final RemotePdaMesApiService remotePdaMesApiService; @DubboReference private final RemoteCodeRuleService remoteCodeRuleService; + //WARM-FLOW工作流 + @DubboReference(timeout = 30000) + private final RemoteWorkflowService remoteWorkflowService; + private static final String UNQUALIFIED_REVIEW_FLOW_CODE = "unqualified_review"; + /** * 通过planDetailId和processId生成质检任务 @@ -145,6 +149,17 @@ public class QcPDAServiceImpl implements IQcPDAService { @Override @Transactional(rollbackFor = Exception.class) public Boolean submitInspection(QcInspectionMainBo bo) { + + // 保存文件 + List ossIds = bo.getOssIds(); + for (Long ossId : ossIds){ + QcInspectionMainFileRelationBo relation = new QcInspectionMainFileRelationBo(); + relation.setInspectionId(bo.getInspectionId()); + relation.setOssId(ossId); + qcInspectionMainFileRelationService.insertByBo(relation); + } + + // 根据传入的检验ID查询主记录信息 Long inspectionId = bo.getInspectionId(); Date nowDate = DateUtils.getNowDate(); @@ -303,6 +318,7 @@ public class QcPDAServiceImpl implements IQcPDAService { * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public Boolean handleUnqualified(String dispositionType, Long[] reviewIds) { for (Long reviewId : reviewIds) { QcUnqualifiedReviewVo reviewVo = qcUnqualifiedReviewService.queryById(reviewId); @@ -312,13 +328,58 @@ public class QcPDAServiceImpl implements IQcPDAService { if (StringUtils.isNotEmpty(reviewVo.getReviewResult()) ) { throw new ServiceException("此不合格评审单已评审"); } + + //集成工作流 + RemoteStartProcess startProcess = new RemoteStartProcess(); + startProcess.setBusinessId(String.valueOf(reviewId)); + startProcess.setFlowCode(UNQUALIFIED_REVIEW_FLOW_CODE); + RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess); + Long processInstanceId = remoteStartProcessReturn.getProcessInstanceId(); + Long taskId = remoteStartProcessReturn.getTaskId(); + + // 更新数据 QcUnqualifiedReviewBo reviewBo = new QcUnqualifiedReviewBo(); reviewBo.setReviewId(reviewId); reviewBo.setReviewResult(dispositionType); reviewBo.setReviewer(LoginHelper.getUsername()); reviewBo.setReviewStartTime(new Date()); + reviewBo.setProcessInstanceId(processInstanceId);// 流程实例ID qcUnqualifiedReviewService.updateByBo(reviewBo); - //集成工作流 + + //异步推动流程 + final Long finalTaskId = taskId; + CompletableFuture.runAsync(TtlRunnable.get(() -> { + RemoteCompleteTask completeTask = new RemoteCompleteTask(); + completeTask.setTaskId(finalTaskId); + completeTask.setMessage("启动不合格评审,处置类型: " + dispositionType); + + // 设置消息类型 + List messageTypes = new ArrayList<>(); + messageTypes.add("1"); // 站内信 + completeTask.setMessageType(messageTypes); + + // 设置流程变量 + Map variables = new HashMap<>(); + variables.put("reviewResult", dispositionType); + completeTask.setVariables(variables); + + remoteWorkflowService.completeTask(completeTask); + })); +// RemoteCompleteTask completeTask = new RemoteCompleteTask(); +// completeTask.setTaskId(finalTaskId); +// completeTask.setMessage("启动不合格评审,处置类型: " + dispositionType); +// +// // 设置消息类型 +// List messageTypes = new ArrayList<>(); +// messageTypes.add("1"); // 站内信 +// completeTask.setMessageType(messageTypes); +// +// // 设置流程变量 +// Map variables = new HashMap<>(); +// variables.put("reviewResult", dispositionType); +// completeTask.setVariables(variables); +// +// remoteWorkflowService.completeTask(completeTask); } return true; } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java index 553f6985..c95c3c1b 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java @@ -1,27 +1,31 @@ package org.dromara.qms.service.impl; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import io.seata.spring.annotation.GlobalTransactional; import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.ObjectUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.qms.domain.QcInspectionMain; -import org.dromara.qms.domain.QcInspectionTemplate; import org.dromara.qms.domain.QcInspectionType; -import org.springframework.stereotype.Service; +import org.dromara.qms.domain.QcUnqualifiedReview; import org.dromara.qms.domain.bo.QcUnqualifiedReviewBo; import org.dromara.qms.domain.vo.QcUnqualifiedReviewVo; -import org.dromara.qms.domain.QcUnqualifiedReview; import org.dromara.qms.mapper.QcUnqualifiedReviewMapper; +import org.dromara.qms.service.IQcInspectionTypeService; import org.dromara.qms.service.IQcUnqualifiedReviewService; +import org.dromara.workflow.api.RemoteWorkflowService; +import org.dromara.workflow.api.domain.RemoteCompleteTask; +import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 不合格品待评审Service业务层处理 @@ -35,6 +39,12 @@ public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewServi private final QcUnqualifiedReviewMapper baseMapper; + private final IQcInspectionTypeService inspectionTypeService; + + //WARM-FLOW工作流 + @DubboReference(timeout = 30000) + private final RemoteWorkflowService remoteWorkflowService; + /** * 查询不合格品待评审 * @@ -43,7 +53,11 @@ public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewServi */ @Override public QcUnqualifiedReviewVo queryById(Long reviewId) { - return baseMapper.selectVoById(reviewId); + QcUnqualifiedReviewVo qcUnqualifiedReviewVo = baseMapper.selectVoById(reviewId); + //获取检测类型 + String typeName = inspectionTypeService.queryById(qcUnqualifiedReviewVo.getInspectionType()).getTypeName(); + qcUnqualifiedReviewVo.setTypeName(typeName); + return qcUnqualifiedReviewVo; } /** @@ -167,4 +181,36 @@ public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewServi } return baseMapper.deleteByIds(ids) > 0; } + + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public Boolean completeTask(QcUnqualifiedReviewBo bo) { + QcUnqualifiedReview review = baseMapper.selectById(bo.getReviewId()); + if (review == null) { + throw new ServiceException("不合格品待评审不存在"); + } + if (ObjectUtils.isNotEmpty(review.getReviewEndTime())){ + throw new ServiceException("该任务已处理完成"); + } + Long currentTaskIdByInstanceId = remoteWorkflowService.getCurrentTaskIdByInstanceId(review.getProcessInstanceId()); + if (currentTaskIdByInstanceId == null) { + throw new ServiceException("任务不存在"); + } + + review.setReviewer(LoginHelper.getUsername()); + review.setReviewerId(LoginHelper.getUserId()); + review.setReviewEndTime(new Date()); + + /* 工作流 */ + RemoteCompleteTask completeTask = new RemoteCompleteTask(); + completeTask.setTaskId(currentTaskIdByInstanceId); + // 设置消息类型 + List messageTypes = new ArrayList<>(); + messageTypes.add("1"); // 站内信 + completeTask.setMessageType(messageTypes); + completeTask.setMessage("审批通过 " ); + remoteWorkflowService.completeTask(completeTask); + + return baseMapper.updateById(review) > 0; + } }