From c18eaae2bead88394c2bbbc9bac2e764944872a5 Mon Sep 17 00:00:00 2001 From: YBP Date: Tue, 31 Mar 2026 18:13:02 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/OnlyOfficeController.java | 14 +- .../onlyOffice/service/OnlyOfficeService.java | 3 + .../service/OnlyOfficeServiceImpl.java | 135 +++++++++++------- .../recordapply/RecordApplyServiceImpl.java | 17 ++- 4 files changed, 113 insertions(+), 56 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java index a645fea9..49dd0a46 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java @@ -6,6 +6,7 @@ import com.zt.plat.framework.business.controller.AbstractFileUploadController; import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; import com.zt.plat.framework.common.enums.UserTypeEnum; import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore; import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.tenant.core.aop.TenantIgnore; @@ -17,8 +18,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.annotation.security.PermitAll; import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -32,7 +33,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @RestController @RequestMapping("/qms/common/only-office") @Validated -//@DeptDataPermissionIgnore(enable = "true") +@DeptDataPermissionIgnore(enable = "true") @FileUploadController(source = "qms.only-office", codeKey = "data.fileUploadBusinessCode") public class OnlyOfficeController extends AbstractFileUploadController implements BusinessControllerMarker { @@ -53,6 +54,15 @@ public class OnlyOfficeController extends AbstractFileUploadController implement return success(onlyOfficeService.getEditorConfig(id)); } + @GetMapping("/file-content") + @Operation(summary = "获取文档文件内容") + @PermitAll + public void getFileContent(@RequestParam("fileId") Long fileId, + @RequestParam("token") String token, + HttpServletResponse response) { + onlyOfficeService.getDocFileContent(fileId, token, response); + } + @PostMapping("/callback") @Operation(summary = "OnlyOffice 回调接口") @PermitAll diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeService.java index efedabf0..677355b9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeService.java @@ -1,8 +1,11 @@ package com.zt.plat.module.qms.resource.record.controller.admin.onlyOffice.service; import com.zt.plat.module.qms.resource.record.controller.admin.onlyOffice.controller.vo.OnlyOfficeEditorConfigRespVO; +import jakarta.servlet.http.HttpServletResponse; public interface OnlyOfficeService { OnlyOfficeEditorConfigRespVO getEditorConfig(Long id); + + void getDocFileContent(Long fileId, String token, HttpServletResponse response); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java index c30fb72d..71c72efd 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java @@ -11,11 +11,14 @@ import com.zt.plat.module.qms.resource.record.controller.admin.onlyOffice.contro import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.io.OutputStream; + import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.infra.enums.ErrorCodeConstants.DOC_NOT_EXISTS; @@ -90,51 +93,10 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ @Override public OnlyOfficeEditorConfigRespVO getEditorConfig(Long id) { -// DocFileDO doc = docFileMapper.selectById(id); -// if (doc == null) { -// throw exception(DOC_NOT_EXISTS); -// } + Long userId = SecurityFrameworkUtils.getLoginUserId(); OnlyOfficeEditorConfigRespVO resp = new OnlyOfficeEditorConfigRespVO(); -// // 根据文件类型动态设置文档类型 -// String documentType = getDocumentType(doc.getFileType()); -// resp.setDocumentType(documentType); -// -// DocEditorConfigRespVO.DocumentConfig document = new DocEditorConfigRespVO.DocumentConfig(); -// document.setFileType(doc.getFileType()); -// -// // 关键修复:使用基于文档版本的稳定key策略 -// // 只有当文档内容真正发生版本变更时,key才会改变 -// String documentKey; -// if (doc.getLatestVersionId() != null) { -// // 使用文档ID + 最新版本ID,确保同一版本在编辑期间key保持不变 -// documentKey = doc.getId() + "_v" + doc.getLatestVersionId(); -// } else { -// // 如果没有版本信息,使用文档ID + 创建时间(不会变化) -// documentKey = doc.getId() + "_init_" + doc.getCreateTime().toEpochSecond(java.time.ZoneOffset.UTC); -// } -// -// document.setKey(documentKey); -// document.setTitle(doc.getTitle()); -// -// log.info("生成文档key: docId={}, key={}, latestVersionId={}, userId={}", -// doc.getId(), documentKey, doc.getLatestVersionId(), userId); -// -// // 使用新的接口生成文件 URL -// String fileUrl = ""; -// if (doc.getFileId() != null) { -// // 生成文件访问的JWT token -// String fileToken = generateFileToken(doc.getFileId()); -// -// // 生成通过新接口访问文件的URL,包含JWT token -// fileUrl = StrUtil.removeSuffix(onlyOfficeCallbackBaseUrl, "/") + "/admin-api/infra/doc-file/file-content?fileId=" + doc.getFileId(); -// if (StrUtil.isNotBlank(fileToken)) { -// fileUrl += "&token=" + fileToken; -// } -// } -// document.setUrl(fileUrl); - CommonResult file = fileApi.getFile(id); log.info("file:{}",file); if (file.getData() == null) throw exception(DOC_NOT_EXISTS); @@ -152,16 +114,7 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ // 关键修复:使用基于文档版本的稳定key策略 // 只有当文档内容真正发生版本变更时,key才会改变 - String documentKey; - // TODO -// if (doc.getLatestVersionId() != null) { -// // 使用文档ID + 最新版本ID,确保同一版本在编辑期间key保持不变 -// documentKey = doc.getId() + "_v" + doc.getLatestVersionId(); -// } else { -// // 如果没有版本信息,使用文档ID + 创建时间(不会变化) -// documentKey = doc.getId() + "_init_" + doc.getCreateTime().toEpochSecond(java.time.ZoneOffset.UTC); -// } -// +// String documentKey = id + "_v" + data.getUpdateTime(); // document.setKey(documentKey); document.setTitle(fileName); @@ -244,6 +197,84 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ } return resp; } + @Override + public void getDocFileContent(Long fileId, String token, HttpServletResponse response) { + try { + // 验证JWT token + if (StrUtil.isBlank(token)) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + return; + } + + // 验证JWT签名和有效性 + if (StrUtil.isNotBlank(onlyOfficeJwtSecret)) { + try { + JWT jwt = JWT.of(token).setKey(onlyOfficeJwtSecret.getBytes()); + if (!jwt.verify()) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + return; + } + + // 验证token中的fileId是否匹配 + Object tokenFileId = jwt.getPayload("fileId"); + if (tokenFileId == null || !fileId.equals(Long.valueOf(tokenFileId.toString()))) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + return; + } + + // 验证token是否过期(可选,如果token中包含过期时间) + Object expTime = jwt.getPayload("exp"); + if (expTime != null) { + long expTimestamp = Long.parseLong(expTime.toString()); + if (System.currentTimeMillis() / 1000 > expTimestamp) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + return; + } + } + } catch (Exception e) { + log.warn("JWT验证失败: token={}", token, e); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + return; + } + } + + // 获取文件信息 + CommonResult fileInfo = fileApi.getFileInfo(fileId); + FileRespDTO file = fileInfo.getData(); + if (file == null) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + + // 获取文件内容 + byte[] content = file.getContent(); + if (content == null) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + + // 设置响应头 + response.setContentType(file.getType() != null ? file.getType() : "application/octet-stream"); +// response.setContentLength(content.length); + response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); + // 添加跨域头,允许 OnlyOffice 访问 + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + // 写入响应 + try (OutputStream os = response.getOutputStream()) { + os.write(content); + os.flush(); + } + } catch (Exception e) { + log.error("获取文档文件内容失败: fileId={}", fileId, e); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } + } public String getFileSuffix(String fileName){ //从文件名中最后一个点截取,例:1111.111.222.docx,截取 docx diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java index 530e3b74..ed5be635 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java @@ -299,6 +299,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn for (RecordApplyDetailSaveReqVO item : detailList) { RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); recordApplyDetailDO.setApplyId(recordApplyDO.getId()); + recordApplyDetailDO.setTargetId(SecurityFrameworkUtils.getLoginUserId()); + recordApplyDetailDO.setTargetType(RecordConstants.TargetType.USER); + recordApplyDetailDO.setTargetName(SecurityFrameworkUtils.getLoginUserNickname()); recordApplyDetailDO.setDocumentId(item.getDocumentId()); recordApplyDetailDO.setIsModify(item.getIsModify()); recordApplyDetailDO.setModifyCause(item.getModifyCause()); @@ -328,6 +331,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn List detailDOList = BeanUtils.toBean(detailList, RecordApplyDetailDO.class); for (RecordApplyDetailDO item : detailDOList) { item.setApplyId(recordApplyDO.getId()); + item.setTargetId(SecurityFrameworkUtils.getLoginUserId()); + item.setTargetType(RecordConstants.TargetType.USER); + item.setTargetName(SecurityFrameworkUtils.getLoginUserNickname()); detailSaveReqVOList.add(item); } return detailSaveReqVOList; @@ -343,6 +349,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn recordApplyDetailDO.setIsModify(item.getIsModify()); recordApplyDetailDO.setModifyCause(item.getModifyCause()); recordApplyDetailDO.setFormData(item.getFormData()); + recordApplyDetailDO.setTargetId(SecurityFrameworkUtils.getLoginUserId()); + recordApplyDetailDO.setTargetType(RecordConstants.TargetType.USER); + recordApplyDetailDO.setTargetName(SecurityFrameworkUtils.getLoginUserNickname()); detailSaveReqVOList.add(recordApplyDetailDO); } return detailSaveReqVOList; @@ -702,12 +711,15 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn Long documentId = applyDetailDO.getDocumentId(); detailDO.setDocumentId(documentId); detailDO.setIsModify(1); + detailDO.setTargetId(applyDetailDO.getTargetId()); + detailDO.setTargetType(applyDetailDO.getTargetType()); + detailDO.setTargetName(applyDetailDO.getTargetName()); detailDO.setModifyCause(applyDetailDO.getModifyCause()); - detailDO.setApplyStartDate(LocalDateTime.now()); +// detailDO.setApplyStartDate(LocalDateTime.now()); String formData = applyDetailDO.getFormData(); JSONObject formDataJson = JSONObject.parseObject(formData); // 把documentId 存到 formDataJson 中key = id 的里面 - formDataJson.put("id", documentId); + formDataJson.put("id", documentId.toString()); // detailDO.setFormData(formDataJson.toJSONString()); detailDOList.add(detailDO); // 创建更改申请 @@ -717,6 +729,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn recordApplyRespVO.setApplyContent(applyDetailDO.getModifyCause()); // 修改原因 recordApplyRespVO.setFormData(formDataJson.toJSONString()); recordApplyRespVO.setDetailList(detailDOList); + recordApplyRespVO.setApplyStartDate(LocalDateTime.now()); createApplyData(recordApplyRespVO); } From bef89bd4f38605b67f2ba1364bb422fd263622d2 Mon Sep 17 00:00:00 2001 From: wxr Date: Wed, 1 Apr 2026 13:52:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8C=89=E6=A3=80=E6=B5=8B=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleEntrustUnStandardProjectController.java | 23 +- .../admin/SampleTaskAssignController.java | 24 ++ ...essSampleEntrustRegistrationPageReqVO.java | 3 + ...sinessSampleEntrustRegistrationRespVO.java | 3 + ...essSampleEntrustRegistrationSaveReqVO.java | 3 + ...stUnStandardProjectAssayDeptSaveReqVO.java | 14 + ...eEntrustUnStandardProjectExtendRespVO.java | 46 +++ ...mpleEntrustUnStandardProjectPageReqVO.java | 33 ++ ...sSampleEntrustUnStandardProjectRespVO.java | 7 + ...mpleEntrustUnStandardProjectSaveReqVO.java | 7 +- .../vo/BusinessSubSamplePageReqVO.java | 12 + .../controller/vo/BusinessSubSampleReqVO.java | 12 + .../vo/BusinessSubSampleRespVO.java | 12 + .../vo/BusinessSubSampleSaveReqVO.java | 12 + .../BusinessSampleEntrustRegistrationDO.java | 5 + ...inessSampleEntrustUnStandardProjectDO.java | 10 + .../dal/dataobject/BusinessSubSampleDO.java | 20 ++ .../BusinessSampleEntrustProjectMapper.java | 5 + ...sinessSampleEntrustRegistrationMapper.java | 1 + ...sSampleEntrustUnStandardProjectMapper.java | 80 +++++ .../dal/mapper/BusinessSubSampleMapper.java | 12 + .../SampleTaskAssignProjectMethodParam.java | 23 ++ .../SampleTaskAssignProjectNoMethodParam.java | 23 ++ .../sample/entrust/SampleEntrustCheckCmp.java | 3 +- .../entrust/SampleEntrustContextInitCmp.java | 92 +++-- .../entrust/SampleEntrustCreateDataCmp.java | 23 +- .../SampleEntrustGenSampleDataCmp.java | 22 +- ...mpleEntrustUnStandardGenSampleDataCmp.java | 335 ++++++++++++++++++ .../entrust/SampleEntrustUpdateDataCmp.java | 3 +- .../SampleTaskAssignManualTypeCmp.java | 67 +--- .../SampleTaskAssignProjectMethodCmp.java | 21 ++ .../SampleTaskAssignProjectNoMethodCmp.java | 22 ++ .../liteflow/slot/SampleEntrustContext.java | 36 +- .../slot/SampleTaskAssignTypeEnum.java | 6 +- ...SampleEntrustUnStandardProjectService.java | 20 ++ ...leEntrustUnStandardProjectServiceImpl.java | 77 ++++ .../bus/service/SampleEntrustServiceImpl.java | 29 +- .../bus/service/SampleTaskAssignService.java | 16 + .../service/SampleTaskAssignServiceImpl.java | 42 +++ .../admin/ConfigAssayMethodController.java | 17 +- .../vo/ConfigAssayMethodExtendRespVO.java | 16 +- .../controller/vo/ConfigAssayMethodReqVO.java | 2 + .../ConfigAssayMethodProjectMapper.java | 18 + .../dal/mapper/ConfigEntrustSourceMapper.java | 6 + .../admin/DictionaryProjectController.java | 7 + .../dal/mapper/DictionaryProjectMapper.java | 16 + .../dic/service/DictionaryProjectService.java | 7 + .../service/DictionaryProjectServiceImpl.java | 5 + .../OtherDictionaryProjectExtendRespVO.java | 21 ++ .../mapper/OtherDictionaryProjectMapper.java | 14 + ...ThirdpartyXntSampleEntrustServiceImpl.java | 75 ++++ 51 files changed, 1270 insertions(+), 138 deletions(-) create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectExtendRespVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/param/SampleTaskAssignProjectMethodParam.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/param/SampleTaskAssignProjectNoMethodParam.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUnStandardGenSampleDataCmp.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/controller/vo/OtherDictionaryProjectExtendRespVO.java diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java index 790c4f5d..73ec2f73 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java @@ -10,7 +10,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; -import jakarta.validation.constraints.*; import jakarta.validation.*; import jakarta.servlet.http.*; import java.util.*; @@ -92,6 +91,28 @@ public class BusinessSampleEntrustUnStandardProjectController implements Busines PageResult pageResult = businessSampleEntrustUnStandardProjectService.getBusinessSampleEntrustUnStandardProjectPage(pageReqVO); return success(BeanUtils.toBean(pageResult, BusinessSampleEntrustUnStandardProjectRespVO.class)); } + + @GetMapping("/list") + @Operation(summary = "获得委检登记样品检测项目表(无标准)列表") + public CommonResult> getBusinessSampleEntrustUnStandardProjectList(BusinessSampleEntrustUnStandardProjectPageReqVO reqVO) { + List list = businessSampleEntrustUnStandardProjectService.getBusinessSampleEntrustUnStandardProjectList(reqVO); + return success(list); + } + + @GetMapping("/listByBusinessBaseSampleId") + @Operation(summary = "获得委检登记样品检测项目表(无标准)分页") + //@PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-un-standard-project:query')") + public CommonResult> listByBusinessBaseSampleId(@RequestParam("businessBaseSampleId") Long businessBaseSampleId) { + List listResult = businessSampleEntrustUnStandardProjectService.listByBusinessBaseSampleId(businessBaseSampleId); + return success(listResult); + } + + @PostMapping("/saveAssayDept") + @Operation(summary = "保存指派的分析部门") + public CommonResult saveAssayDept(@RequestBody BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO reqVO) { + businessSampleEntrustUnStandardProjectService.saveAssayDept(reqVO); + return success("成功"); + } @GetMapping("/export-excel") @Operation(summary = "导出委检登记样品检测项目表(无标准) Excel") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleTaskAssignController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleTaskAssignController.java index d1e4edcc..27195929 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleTaskAssignController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleTaskAssignController.java @@ -22,6 +22,8 @@ import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualTypeParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignMethodParam; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectMethodParam; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectNoMethodParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignSampleParam; import com.zt.plat.module.qms.business.bus.service.SampleTaskAssignService; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; @@ -116,6 +118,28 @@ public class SampleTaskAssignController implements BusinessControllerMarker { sampleTaskAssignService.manualTypeAssign(param); return success("成功"); } + + /** + * 按检测项目分配(已有方法) + * @param param + * @return + */ + @PostMapping("/projectMethodAssign") + public CommonResult projectMethodAssign(@RequestBody SampleTaskAssignProjectMethodParam param) { + sampleTaskAssignService.projectMethodAssign(param); + return success("成功"); + } + + /** + * 按检测项目分配(无方法) + * @param param + * @return + */ + @PostMapping("/projectNoMethodAssign") + public CommonResult projectNoMethodAssign(@RequestBody SampleTaskAssignProjectNoMethodParam param) { + sampleTaskAssignService.projectNoMethodAssign(param); + return success("成功"); + } /** * 按样品分配 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationPageReqVO.java index a5dc0886..3d30180d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationPageReqVO.java @@ -106,6 +106,9 @@ public class BusinessSampleEntrustRegistrationPageReqVO extends PageParam { @Schema(description = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择") private String assayMethod; + @Schema(description = "是否物料检测标准登记,0-否,1-是") + private Integer isMaterialAssayStandard; + @Schema(description = "登记状态,in_progress-登记中、submit-已提交", example = "1") private String registrationStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationRespVO.java index 918b195f..3299e4c7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationRespVO.java @@ -137,6 +137,9 @@ public class BusinessSampleEntrustRegistrationRespVO { @ExcelProperty("检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择") private String assayMethod; + @Schema(description = "是否物料检测标准登记,0-否,1-是") + private Integer isMaterialAssayStandard; + @Schema(description = "登记状态,in_progress-登记中、submit-已提交", example = "1") @ExcelProperty("登记状态,in_progress-登记中、submit-已提交") private String registrationStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSaveReqVO.java index 93378ce8..6bd903ee 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSaveReqVO.java @@ -118,6 +118,9 @@ public class BusinessSampleEntrustRegistrationSaveReqVO { @NotEmpty(message = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择不能为空") private String assayMethod; + @Schema(description = "是否物料检测标准登记,0-否,1-是") + private Integer isMaterialAssayStandard; + @Schema(description = "登记状态,in_progress-登记中、submit-已提交", example = "1") private String registrationStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO.java new file mode 100644 index 00000000..546329a2 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO.java @@ -0,0 +1,14 @@ +package com.zt.plat.module.qms.business.bus.controller.vo; + + +import java.util.List; + +import lombok.Data; + +@Data +public class BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO { + + private BusinessSubSampleSaveReqVO subSampleReqVO; + + private List reqList; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectExtendRespVO.java new file mode 100644 index 00000000..3255ef3f --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectExtendRespVO.java @@ -0,0 +1,46 @@ +package com.zt.plat.module.qms.business.bus.controller.vo; + +import java.time.LocalDateTime; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * BusinessSampleEntrustUnStandardProjectExtendRespVO + */ +@Data +public class BusinessSampleEntrustUnStandardProjectExtendRespVO extends BusinessSampleEntrustUnStandardProjectRespVO { + + @Schema(description = "检验委托登记ID") + private Long businessSampleEntrustRegistrationId; + + @Schema(description = "主样业务ID") + private Long businessBaseSampleId; + + @Schema(description = "子样配置id") + private Long configSubSampleId; + + @Schema(description = "样品名称") + private String sampleName; + + @Schema(description = "样品编号") + private String sampleCode; + + @Schema(description = "分析编号") + private String sampleAssayCode; + + @Schema(description = "样品流程节点KEY", requiredMode = Schema.RequiredMode.REQUIRED) + private String sampleFlowNodeKey; + + @Schema(description = "样品流程节点时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime sampleFlowNodeTime; + + @Schema(description = "检测项名称") + private String dictionaryProjectName; + + @Schema(description = "检测项简称") + private String dictionaryProjectSimpleName; + + @Schema(description = "检测项显示名") + private String dictionaryProjectShowName; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectPageReqVO.java index 6ea0bc69..c21ccafa 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectPageReqVO.java @@ -22,6 +22,9 @@ public class BusinessSampleEntrustUnStandardProjectPageReqVO extends PageParam { @Schema(description = "分析部门名称", example = "赵六") private String assayDepartmentName; + @Schema(description = "分样子样ID", example = "30545") + private Long businessSubSampleId; + @Schema(description = "检测任务ID", example = "978") private Long businessAssayTaskDataId; @@ -37,6 +40,9 @@ public class BusinessSampleEntrustUnStandardProjectPageReqVO extends PageParam { @Schema(description = "检测项目ID,字典表:【T_DIC_PRJ】", example = "17192") private Long dictionaryProjectId; + @Schema(description = "用途,ingredient-配料、report-报出、ingredient_report-配料及报出") + private String usage; + @Schema(description = "是否启用,1-启用,0-不启用") private Integer isEnabled; @@ -53,4 +59,31 @@ public class BusinessSampleEntrustUnStandardProjectPageReqVO extends PageParam { @Schema(description = "备注") private String remark; + //=======扩展字段 + + @Schema(description = "样品流程节点时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] sampleFlowNodeTime; + + @Schema(description = "检测项目字典id列表") + private List dictionaryProjectIdList; + + @Schema(description = "收样时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] sampleReceiveTime; + + @Schema(description = "样品编号") + private String sampleCode; + + @Schema(description = "样品名称") + private String sampleName; + + @Schema(description = "分析编号") + private String sampleAssayCode; + + @Schema(description = "归库编号") + private String sampleReturnCode; + + @Schema(description = "样品状态") + private String sampleStatus; } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectRespVO.java index 9ed74922..350bc1c5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectRespVO.java @@ -28,6 +28,9 @@ public class BusinessSampleEntrustUnStandardProjectRespVO { @ExcelProperty("分析部门名称") private String assayDepartmentName; + @Schema(description = "分样子样ID", example = "30545") + private Long businessSubSampleId; + @Schema(description = "检测任务ID", example = "978") @ExcelProperty("检测任务ID") private Long businessAssayTaskDataId; @@ -48,6 +51,10 @@ public class BusinessSampleEntrustUnStandardProjectRespVO { @ExcelProperty("检测项目ID,字典表:【T_DIC_PRJ】") private Long dictionaryProjectId; + @Schema(description = "用途,ingredient-配料、report-报出、ingredient_report-配料及报出") + @ExcelProperty("用途,ingredient-配料、report-报出、ingredient_report-配料及报出") + private String usage; + @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("是否启用,1-启用,0-不启用") private Integer isEnabled; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectSaveReqVO.java index d62681a3..cf25d068 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSampleEntrustUnStandardProjectSaveReqVO.java @@ -22,6 +22,9 @@ public class BusinessSampleEntrustUnStandardProjectSaveReqVO { @Schema(description = "分析部门名称", example = "赵六") private String assayDepartmentName; + @Schema(description = "分样子样ID", example = "30545") + private Long businessSubSampleId; + @Schema(description = "检测任务ID", example = "978") private Long businessAssayTaskDataId; @@ -38,8 +41,10 @@ public class BusinessSampleEntrustUnStandardProjectSaveReqVO { @NotNull(message = "检测项目ID,字典表:【T_DIC_PRJ】不能为空") private Long dictionaryProjectId; + @Schema(description = "用途,ingredient-配料、report-报出、ingredient_report-配料及报出") + private String usage; + @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "是否启用,1-启用,0-不启用不能为空") private Integer isEnabled; @Schema(description = "所属部门") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSamplePageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSamplePageReqVO.java index 64ae2253..6c0ba620 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSamplePageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSamplePageReqVO.java @@ -35,6 +35,12 @@ public class BusinessSubSamplePageReqVO extends PageParam { @Schema(description = "组ID,如果是委托创建的,则组ID和样品分样ID一致", example = "16918") private String groupId; + @Schema(description = "批次编号,西南铜的产品批号") + private String batchCode; + + @Schema(description = "双杯样标识,针对双杯样标记") + private String dualFlag; + @Schema(description = "样品名称", example = "张三") private String sampleName; @@ -72,6 +78,12 @@ public class BusinessSubSamplePageReqVO extends PageParam { @Schema(description = "下一步样品流程节点名称") private String nextSampleFlowNode; + @Schema(description = "是否物料检测标准登记,0-否,1-是") + private Integer isMaterialAssayStandard; + + @Schema(description = "分析级别") + private Integer assayLevel; + @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", example = "1") private String sampleStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleReqVO.java index a4bc808a..dbcf979f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleReqVO.java @@ -35,6 +35,12 @@ public class BusinessSubSampleReqVO { @Schema(description = "组ID,如果是委托创建的,则组ID和样品分样ID一致", example = "16918") private String groupId; + @Schema(description = "批次编号,西南铜的产品批号") + private String batchCode; + + @Schema(description = "双杯样标识,针对双杯样标记") + private String dualFlag; + @Schema(description = "样品名称", example = "张三") private String sampleName; @@ -72,6 +78,12 @@ public class BusinessSubSampleReqVO { @Schema(description = "下一步样品流程节点名称") private String nextSampleFlowNode; + @Schema(description = "是否物料检测标准登记,0-否,1-是") + private Integer isMaterialAssayStandard; + + @Schema(description = "分析级别") + private Integer assayLevel; + @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", example = "1") private String sampleStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleRespVO.java index 44a0c2b0..48325a67 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleRespVO.java @@ -46,6 +46,12 @@ public class BusinessSubSampleRespVO { @ExcelProperty("组ID,如果是委托创建的,则组ID和样品分样ID一致") private String groupId; + @Schema(description = "批次编号,西南铜的产品批号") + private String batchCode; + + @Schema(description = "双杯样标识,针对双杯样标记") + private String dualFlag; + @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") @ExcelProperty("样品名称") private String sampleName; @@ -93,6 +99,12 @@ public class BusinessSubSampleRespVO { @ExcelProperty("下一步样品流程节点名称") private String nextSampleFlowNode; + @Schema(description = "是否物料检测标准登记,0-否,1-是") + private Integer isMaterialAssayStandard; + + @Schema(description = "分析级别") + private Integer assayLevel; + @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelProperty("样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废") private String sampleStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleSaveReqVO.java index a7c851d1..b6b6ad4a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubSampleSaveReqVO.java @@ -41,6 +41,12 @@ public class BusinessSubSampleSaveReqVO { @Schema(description = "组ID,如果是委托创建的,则组ID和样品分样ID一致", example = "16918") private String groupId; + @Schema(description = "批次编号,西南铜的产品批号") + private String batchCode; + + @Schema(description = "双杯样标识,针对双杯样标记") + private String dualFlag; + @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") // @NotEmpty(message = "样品名称不能为空") private String sampleName; @@ -84,6 +90,12 @@ public class BusinessSubSampleSaveReqVO { // @NotEmpty(message = "下一步样品流程节点名称不能为空") private String nextSampleFlowNode; + @Schema(description = "是否物料检测标准登记,0-否,1-是") + private Integer isMaterialAssayStandard; + + @Schema(description = "分析级别") + private Integer assayLevel; + @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") // @NotEmpty(message = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废不能为空") private String sampleStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustRegistrationDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustRegistrationDO.java index c0d67a27..f4d3ddbd 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustRegistrationDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustRegistrationDO.java @@ -187,6 +187,11 @@ public class BusinessSampleEntrustRegistrationDO extends BusinessBaseDO { @TableField("ASY_MTHD") private String assayMethod; /** + * 是否物料检测标准登记,0-否,1-是 + */ + @TableField("IS_MTRL_ASY_STD") + private Integer isMaterialAssayStandard; + /** * 登记状态,in_progress-登记中、submit-已提交 */ @TableField("REG_STS") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustUnStandardProjectDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustUnStandardProjectDO.java index be7352d8..2bb9f113 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustUnStandardProjectDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustUnStandardProjectDO.java @@ -47,6 +47,11 @@ public class BusinessSampleEntrustUnStandardProjectDO extends BusinessBaseDO { @TableField("ASY_DEPT_NAME") private String assayDepartmentName; /** + * 分样子样ID + */ + @TableField("BSN_SB_SMP_ID") + private Long businessSubSampleId; + /** * 检测任务ID */ @TableField("BSN_ASY_TSK_DAT_ID") @@ -72,6 +77,11 @@ public class BusinessSampleEntrustUnStandardProjectDO extends BusinessBaseDO { @TableField("DIC_PRJ_ID") private Long dictionaryProjectId; /** + * 用途,ingredient-配料、report-报出、ingredient_report-配料及报出 + */ + @TableField("USG") + private String usage; + /** * 是否启用,1-启用,0-不启用 */ @TableField("IS_ENBD") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSubSampleDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSubSampleDO.java index ad971861..fa17a3e3 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSubSampleDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessSubSampleDO.java @@ -73,6 +73,16 @@ public class BusinessSubSampleDO extends BusinessBaseDO { @TableField("GRP_ID") private String groupId; /** + * 批次编号,西南铜的产品批号 + */ + @TableField("BAT_CD") + private String batchCode; + /** + * 双杯样标识,针对双杯样标记 + */ + @TableField("DUAL_FLG") + private String dualFlag; + /** * 样品名称 */ @TableField("SMP_NAME") @@ -133,6 +143,16 @@ public class BusinessSubSampleDO extends BusinessBaseDO { @TableField("NXT_SMP_FLW_NDE") private String nextSampleFlowNode; /** + * 是否物料检测标准登记,0-否,1-是 + */ + @TableField("IS_MTRL_ASY_STD") + private Integer isMaterialAssayStandard; + /** + * 分析级别 + */ + @TableField("ASY_LVL") + private Integer assayLevel; + /** * 样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废 */ @TableField("SMP_STS") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustProjectMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustProjectMapper.java index 3d983ab7..594977e2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustProjectMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustProjectMapper.java @@ -45,6 +45,11 @@ public interface BusinessSampleEntrustProjectMapper extends BaseMapperX selectByBusinessSampleEntrustDetailIds(List businessSampleEntrustDetailIdList) { + return selectList(new LambdaQueryWrapperX() + .in(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, businessSampleEntrustDetailIdList)); + } /** * 物理批量删除删除 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustRegistrationMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustRegistrationMapper.java index 2c2e0b49..4e2de623 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustRegistrationMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSampleEntrustRegistrationMapper.java @@ -58,6 +58,7 @@ public interface BusinessSampleEntrustRegistrationMapper extends BaseMapperX selectList(BusinessSampleEntrustUnStandardProjectPageReqVO reqVO) { + MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapperX() + .leftJoin(BusinessSampleEntrustDetailDO.class, BusinessSampleEntrustDetailDO::getId, BusinessSampleEntrustUnStandardProjectDO::getBusinessSampleEntrustDetailId) + .leftJoin(BusinessSubSampleDO.class, BusinessSubSampleDO::getId, BusinessSampleEntrustUnStandardProjectDO::getBusinessSubSampleId) + .leftJoin(BusinessSubSampleAnalysisGroupDO.class, on -> on + .eq(BusinessSubSampleAnalysisGroupDO::getBusinessSubSampleId, BusinessSampleEntrustUnStandardProjectDO::getBusinessSubSampleId) + .eq(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, BusinessSampleEntrustUnStandardProjectDO::getAssayDepartmentId)) + .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessSampleEntrustUnStandardProjectDO::getDictionaryProjectId) + .selectAll(BusinessSampleEntrustUnStandardProjectDO.class) + .selectAs(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, BusinessSampleEntrustUnStandardProjectExtendRespVO::getBusinessSampleEntrustRegistrationId) + .selectAs(BusinessSampleEntrustDetailDO::getBusinessBaseSampleId, BusinessSampleEntrustUnStandardProjectExtendRespVO::getBusinessBaseSampleId) + .selectAs(DictionaryProjectDO::getName, BusinessSampleEntrustUnStandardProjectExtendRespVO::getDictionaryProjectName) + .selectAs(DictionaryProjectDO::getSimpleName, BusinessSampleEntrustUnStandardProjectExtendRespVO::getDictionaryProjectSimpleName) + .selectAs(DictionaryProjectDO::getShowName, BusinessSampleEntrustUnStandardProjectExtendRespVO::getDictionaryProjectShowName) + .selectAs(BusinessSubSampleDO::getSampleName, BusinessSampleEntrustUnStandardProjectExtendRespVO::getSampleName) + .selectAs(BusinessSubSampleDO::getSampleCode, BusinessSampleEntrustUnStandardProjectExtendRespVO::getSampleCode) + .selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessSampleEntrustUnStandardProjectExtendRespVO::getSampleAssayCode) + .selectAs(BusinessSubSampleDO::getConfigSubSampleId, BusinessSampleEntrustUnStandardProjectExtendRespVO::getConfigSubSampleId) + .selectAs(BusinessSubSampleDO::getSampleFlowNodeKey, BusinessSampleEntrustUnStandardProjectExtendRespVO::getSampleFlowNodeKey) + .selectAs(BusinessSubSampleDO::getSampleFlowNodeTime, BusinessSampleEntrustUnStandardProjectExtendRespVO::getSampleFlowNodeTime); + + if (ObjectUtil.isNotEmpty(reqVO.getAssayDepartmentId())) { + mpjLambdaWrapper.eq(BusinessSampleEntrustUnStandardProjectDO::getAssayDepartmentId, reqVO.getAssayDepartmentId()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleName())) { + mpjLambdaWrapper.like(BusinessSubSampleDO::getSampleName, reqVO.getSampleName()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleAssayCode())) { + mpjLambdaWrapper.like(BusinessSubSampleDO::getSampleAssayCode, reqVO.getSampleAssayCode()); + } + if (ObjectUtil.isNotEmpty(reqVO.getSampleFlowNodeTime()) && ObjectUtil.isNotEmpty(reqVO.getSampleFlowNodeTime()[0]) && ObjectUtil.isNotEmpty(reqVO.getSampleFlowNodeTime()[1])) { + mpjLambdaWrapper.between(BusinessSubSampleDO::getSampleFlowNodeTime, reqVO.getSampleFlowNodeTime()[0], reqVO.getSampleFlowNodeTime()[1]); + } + + if (ObjectUtil.isAllNotEmpty(reqVO.getDictionaryProjectIdList()) && !ArrayUtil.isEmpty(reqVO.getDictionaryProjectIdList())) { + mpjLambdaWrapper.in(BusinessSampleEntrustUnStandardProjectDO::getDictionaryProjectId, reqVO.getDictionaryProjectIdList()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleStatus())) { + mpjLambdaWrapper.eq(BusinessSubSampleAnalysisGroupDO::getSampleStatus, reqVO.getSampleStatus()); + } + mpjLambdaWrapper.orderByAsc(BusinessSubSampleDO::getSampleFlowNodeTime); + return selectJoinList(BusinessSampleEntrustUnStandardProjectExtendRespVO.class, mpjLambdaWrapper); + } + + default List selectByBusinessSampleEntrustDetailIds(List businessSampleEntrustDetailIdList) { + return selectList(new LambdaQueryWrapperX() + .in(BusinessSampleEntrustUnStandardProjectDO::getBusinessSampleEntrustDetailId, businessSampleEntrustDetailIdList)); + } + + + default List selectByBusinessBaseSampleId(Long businessBaseSampleId) { + return selectJoinList(BusinessSampleEntrustUnStandardProjectExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(BusinessSampleEntrustDetailDO.class, BusinessSampleEntrustDetailDO::getId, BusinessSampleEntrustUnStandardProjectDO::getBusinessSampleEntrustDetailId) + .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessSampleEntrustUnStandardProjectDO::getDictionaryProjectId) + .selectAll(BusinessSampleEntrustUnStandardProjectDO.class) + .selectAs(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, BusinessSampleEntrustUnStandardProjectExtendRespVO::getBusinessSampleEntrustRegistrationId) + .selectAs(BusinessSampleEntrustDetailDO::getBusinessBaseSampleId, BusinessSampleEntrustUnStandardProjectExtendRespVO::getBusinessBaseSampleId) + .selectAs(DictionaryProjectDO::getName, BusinessSampleEntrustUnStandardProjectExtendRespVO::getDictionaryProjectName) + .selectAs(DictionaryProjectDO::getSimpleName, BusinessSampleEntrustUnStandardProjectExtendRespVO::getDictionaryProjectSimpleName) + .selectAs(DictionaryProjectDO::getShowName, BusinessSampleEntrustUnStandardProjectExtendRespVO::getDictionaryProjectShowName) + .eq(BusinessSampleEntrustDetailDO::getBusinessBaseSampleId, businessBaseSampleId) + .orderByAsc(BusinessSampleEntrustUnStandardProjectDO::getId) + ); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleMapper.java index a55f629d..1137a8ef 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleMapper.java @@ -54,6 +54,8 @@ public interface BusinessSubSampleMapper extends BaseMapperX assignAssayUserList; + + /** 分析方法id **/ + private Long configAssayMethodId; + + /** 检测项目数据id列表 **/ + private List assayProjectDataIdList; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/param/SampleTaskAssignProjectNoMethodParam.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/param/SampleTaskAssignProjectNoMethodParam.java new file mode 100644 index 00000000..414b1248 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/param/SampleTaskAssignProjectNoMethodParam.java @@ -0,0 +1,23 @@ +package com.zt.plat.module.qms.business.bus.liteflow.param; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 按检测项目指派(无方法) + */ +@Data +@Accessors(chain = true) +public class SampleTaskAssignProjectNoMethodParam { + + /** 分析人员 **/ + private List assignAssayUserList; + + /** 分析方法id **/ + private Long configAssayMethodId; + + /** 样品委托无标准的检测项目id列表 **/ + private List sampleEntrustUnStandardProjectIdList; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCheckCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCheckCmp.java index 94005503..2c0795a1 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCheckCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCheckCmp.java @@ -26,7 +26,8 @@ public class SampleEntrustCheckCmp extends NodeComponent { if (sampleEntrustRegistration.getConfigEntrustSourceId() == null) { throw new ServiceException(1_032_100_000, "委托来源id不允许为空"); } - ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId()); +// ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId()); + ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSource(); if (configEntrustSource == null) { throw new ServiceException(1_032_100_000, "委托来源id不正确"); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustContextInitCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustContextInitCmp.java index ee45f951..dc1b076c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustContextInitCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustContextInitCmp.java @@ -21,6 +21,7 @@ import com.zt.plat.framework.tenant.core.context.TenantContextHolder; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustUnStandardProjectDO; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustDetail; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustDetailProject; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustParam; @@ -28,14 +29,16 @@ import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext; import com.zt.plat.module.qms.business.config.controller.vo.MaterialAssayStandardDetailRespVO; import com.zt.plat.module.qms.business.config.dal.dataobject.BaseSampleDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO; -import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardDO; -import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO; import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardMethodDO; import com.zt.plat.module.qms.business.config.dal.mapper.BaseSampleMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigEntrustSourceMapper; import com.zt.plat.module.qms.business.config.dal.mapper.MaterialAssayStandardDetailMapper; import com.zt.plat.module.qms.business.config.dal.mapper.MaterialAssayStandardMapper; import com.zt.plat.module.qms.business.config.dal.mapper.MaterialAssayStandardMethodMapper; +import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; +import com.zt.plat.module.qms.business.dic.dal.mapper.DictionaryProjectMapper; +import com.zt.plat.module.qms.enums.QmsCommonConstant; + import jakarta.annotation.Resource; /** @@ -46,7 +49,10 @@ public class SampleEntrustContextInitCmp extends NodeComponent { @Resource private BaseSampleMapper baseSampleMapper; - + + @Resource + private DictionaryProjectMapper dictionaryProjectMapper; + @Resource private ConfigEntrustSourceMapper configEntrustSourceMapper; @@ -70,6 +76,12 @@ public class SampleEntrustContextInitCmp extends NodeComponent { //当前登录用户昵称 String nickName = SecurityFrameworkUtils.getLoginUserNickname(); + //委托来源配置 + ConfigEntrustSourceDO configEntrustSourceDO = null; + + //是否使用物料分析标准 + Boolean isUseMaterialAssayStandard = true; + //获取样品委托参数 SampleEntrustParam sampleEntrustParam = this.getRequestData(); @@ -88,10 +100,14 @@ public class SampleEntrustContextInitCmp extends NodeComponent { //样品提交时是否送样 sampleEntrustContext.setIsSendSample(sampleEntrustParam.getIsSendSample()); + //检测项目字典 + List dictionaryProjectList = dictionaryProjectMapper.selectList(); + sampleEntrustContext.setDictionaryProjectList(dictionaryProjectList); + //委托登记明细 List detailList = sampleEntrustParam.getSampleEntrustDetailList(); -// List materialAssayStandardDetailIdList = detailList.stream().flatMap(m -> m.getSampleEntrustDetailProjectList().stream()).map(m -> m.getMaterialAssayStandardDetailId()).distinct().collect(Collectors.toList()); + //物料分析标准项目id列表 List materialAssayStandardDetailIdList = detailList.stream() .filter(Objects::nonNull) // 过滤 outer null .map(m -> m.getSampleEntrustDetailProjectList()) @@ -103,26 +119,20 @@ public class SampleEntrustContextInitCmp extends NodeComponent { .distinct() .collect(Collectors.toList()); - //委托来源配置 - List configEntrustSourceList = configEntrustSourceMapper.selectList(); - sampleEntrustContext.setConfigEntrustSourceList(configEntrustSourceList); - - //物料检验标准项 -// List materialAssayStandardDetailList = materialAssayStandardDetailMapper.selectList(); - List materialAssayStandardDetailList = materialAssayStandardDetailMapper.selectExtendByIds(materialAssayStandardDetailIdList); - sampleEntrustContext.setMaterialAssayStandardDetailList(materialAssayStandardDetailList); - - List materialAssayStandardIdList = materialAssayStandardDetailList.stream().map(m -> m.getMaterialAssayStandardId()).distinct().collect(Collectors.toList()); + //如果物料分析标准项目id列表不为空,则当前分析的为标准分析样品 + if (CollUtil.isNotEmpty(materialAssayStandardDetailIdList)) { + isUseMaterialAssayStandard = Boolean.TRUE; + //物料检验标准项 + List materialAssayStandardDetailList = materialAssayStandardDetailMapper.selectExtendByIds(materialAssayStandardDetailIdList); + sampleEntrustContext.setMaterialAssayStandardDetailList(materialAssayStandardDetailList); - //物料检验标准 -// List materialAssayStandardList = materialAssayStandardMapper.selectList(); - List materialAssayStandardList = materialAssayStandardMapper.selectByIds(materialAssayStandardIdList); - sampleEntrustContext.setMaterialAssayStandardList(materialAssayStandardList); - - //物料检验标准方法 -// List materialAssayStandardMethodList = materialAssayStandardMethodMapper.selectList(); - List materialAssayStandardMethodList = materialAssayStandardMethodMapper.selectByMaterialAssayStandardDetailIds(materialAssayStandardDetailIdList); - sampleEntrustContext.setMaterialAssayStandardMethodList(materialAssayStandardMethodList); + //物料检验标准方法 + List materialAssayStandardMethodList = materialAssayStandardMethodMapper.selectByMaterialAssayStandardDetailIds(materialAssayStandardDetailIdList); + sampleEntrustContext.setMaterialAssayStandardMethodList(materialAssayStandardMethodList); + } else { + isUseMaterialAssayStandard = Boolean.FALSE; + } + sampleEntrustContext.setIsUseMaterialAssayStandard(isUseMaterialAssayStandard); //委托登记 BusinessSampleEntrustRegistrationDO sampleEntrustRegistration = BeanUtil.copyProperties(sampleEntrustParam, BusinessSampleEntrustRegistrationDO.class); @@ -138,17 +148,29 @@ public class SampleEntrustContextInitCmp extends NodeComponent { //委托来源的id为空 if (sampleEntrustParam.getConfigEntrustSourceId() == null && StringUtils.isNotBlank(sampleEntrustParam.getConfigEntrustSourceKey()) && StringUtils.isNotBlank(sampleEntrustParam.getEntrustType())) { - ConfigEntrustSourceDO configEntrustSourceDO = configEntrustSourceList.stream().filter(f -> f.getKey().equals(sampleEntrustParam.getConfigEntrustSourceKey()) && f.getEntrustType().equals(sampleEntrustParam.getEntrustType())).findFirst().orElse(null); + configEntrustSourceDO = configEntrustSourceMapper.selectBySourceKeyAndEntrustType(sampleEntrustParam.getConfigEntrustSourceKey(), sampleEntrustParam.getEntrustType()); if (configEntrustSourceDO == null) { throw new ServiceException(1_032_100_000, "样品委托来源不正确"); } sampleEntrustRegistration.setConfigEntrustSourceId(configEntrustSourceDO.getId()); + } else { + configEntrustSourceDO = configEntrustSourceMapper.selectById(sampleEntrustParam.getConfigEntrustSourceId()); + if (configEntrustSourceDO == null) { + throw new ServiceException(1_032_100_000, "样品委托来源不正确"); + } + } + sampleEntrustContext.setConfigEntrustSource(configEntrustSourceDO); + + //设置登记是否使用物料分析标准 + if (isUseMaterialAssayStandard) { + sampleEntrustRegistration.setIsMaterialAssayStandard(QmsCommonConstant.YES); + } else { + sampleEntrustRegistration.setIsMaterialAssayStandard(QmsCommonConstant.NO); } //赋值委托来源id sampleEntrustContext.setSampleEntrustRegistration(sampleEntrustRegistration); - - + //样品大类id列表 List baseSampleIdList = detailList.stream().map(m -> m.getBaseSampleId()).distinct().collect(Collectors.toList()); List baseSampleDOList = baseSampleMapper.selectByIds(baseSampleIdList); @@ -156,6 +178,7 @@ public class SampleEntrustContextInitCmp extends NodeComponent { //委托登记样品明细的检测项目明细 List sampleEntrustProjectList = new ArrayList<>(); + List sampleEntrustUnStandardProjectList = new ArrayList<>(); int sort = 1; for (SampleEntrustDetail sampleEntrustDetail : detailList) { if (sampleEntrustDetail.getId() == null) { @@ -175,8 +198,14 @@ public class SampleEntrustContextInitCmp extends NodeComponent { List assayProjectList = new ArrayList<>(); List projectList = sampleEntrustDetail.getSampleEntrustDetailProjectList(); for (SampleEntrustDetailProject sampleEntrustDetailProject : projectList) { - MaterialAssayStandardDetailRespVO materialAssayStandardDetail = materialAssayStandardDetailList.stream().filter(f -> sampleEntrustDetailProject.getMaterialAssayStandardDetailId().equals(f.getId())).findFirst().orElse(null); - assayProjectList.add(materialAssayStandardDetail.getDictionaryProjectShowName()); + if (isUseMaterialAssayStandard) { + MaterialAssayStandardDetailRespVO materialAssayStandardDetail = sampleEntrustContext.getMaterialAssayStandardDetailById(sampleEntrustDetailProject.getMaterialAssayStandardDetailId()); + assayProjectList.add(materialAssayStandardDetail.getDictionaryProjectShowName()); + } else { + DictionaryProjectDO dictionaryProjectDO = sampleEntrustContext.getDictionaryProjectById(sampleEntrustDetailProject.getDictionaryProjectId()); + assayProjectList.add(dictionaryProjectDO.getShowName()); + } + //判定委托明细id是否为空 if (sampleEntrustDetailProject.getBusinessSampleEntrustDetailId() == null) { sampleEntrustDetailProject.setBusinessSampleEntrustDetailId(sampleEntrustDetail.getId()); } @@ -184,9 +213,14 @@ public class SampleEntrustContextInitCmp extends NodeComponent { if (StringUtils.isBlank(sampleEntrustDetail.getAssayProject())) { sampleEntrustDetail.setAssayProject(CollUtil.join(assayProjectList, ",")); } - sampleEntrustProjectList.addAll(BeanUtil.copyToList(projectList, BusinessSampleEntrustProjectDO.class)); + if (isUseMaterialAssayStandard) { + sampleEntrustProjectList.addAll(BeanUtil.copyToList(projectList, BusinessSampleEntrustProjectDO.class)); + } else { + sampleEntrustUnStandardProjectList.addAll(BeanUtil.copyToList(projectList, BusinessSampleEntrustUnStandardProjectDO.class)); + } } sampleEntrustContext.setSampleEntrustProjectList(sampleEntrustProjectList); + sampleEntrustContext.setSampleEntrustUnStandardProjectList(sampleEntrustUnStandardProjectList); //委托登记样品明细 List sampleEntrustDetailList = BeanUtil.copyToList(detailList, BusinessSampleEntrustDetailDO.class); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCreateDataCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCreateDataCmp.java index 774424a2..f3c0386e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCreateDataCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCreateDataCmp.java @@ -20,16 +20,17 @@ import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustD import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustFileDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustUnStandardProjectDO; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleAssayResultMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustFileMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustProjectMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustUnStandardProjectMapper; import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext; import com.zt.plat.module.qms.business.config.controller.vo.MaterialAssayStandardDetailRespVO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTemplateDO; -import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportTemplateMapper; import com.zt.plat.module.qms.core.code.SequenceUtil; import com.zt.plat.module.qms.enums.QmsCommonConstant; @@ -57,6 +58,9 @@ public class SampleEntrustCreateDataCmp extends NodeComponent { @Resource private BusinessSampleEntrustProjectMapper businessSampleEntrustProjectMapper; + @Resource + private BusinessSampleEntrustUnStandardProjectMapper businessSampleEntrustUnStandardProjectMapper; + @Resource private BusinessSampleAssayResultMapper businessSampleAssayResultMapper; @@ -75,7 +79,7 @@ public class SampleEntrustCreateDataCmp extends NodeComponent { } //获取委托来源配置 - ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId()); + ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSource(); ConfigReportTemplateDO configReportTemplate = configReportTemplateMapper.selectLatestConfigReportTemplateByKey(configEntrustSource.getConfigReportTemplateKey()); String entrustNumber = null; @@ -150,12 +154,15 @@ public class SampleEntrustCreateDataCmp extends NodeComponent { businessSampleEntrustDetail.setSampleCode(businessSampleEntrustDetail.getEntrustSampleCode());//样品编号与来样编号一致 } } - + List sampleEntrustProjectList = sampleEntrustContext.getSampleEntrustProjectList(); - for (BusinessSampleEntrustProjectDO businessSampleEntrustProject : sampleEntrustProjectList) { - MaterialAssayStandardDetailRespVO materialAssayStandardDetail = sampleEntrustContext.getMaterialAssayStandardDetailById(businessSampleEntrustProject.getMaterialAssayStandardDetailId()); - businessSampleEntrustProject.setDictionaryProjectId(materialAssayStandardDetail.getDictionaryProjectId()); + if (sampleEntrustContext.getIsUseMaterialAssayStandard()) {//如果是使用标准分析 + for (BusinessSampleEntrustProjectDO businessSampleEntrustProject : sampleEntrustProjectList) { + MaterialAssayStandardDetailRespVO materialAssayStandardDetail = sampleEntrustContext.getMaterialAssayStandardDetailById(businessSampleEntrustProject.getMaterialAssayStandardDetailId()); + businessSampleEntrustProject.setDictionaryProjectId(materialAssayStandardDetail.getDictionaryProjectId()); + } } + List sampleEntrustUnStandardProjectList = sampleEntrustContext.getSampleEntrustUnStandardProjectList(); //保存样品委托登记 businessSampleEntrustRegistrationMapper.insert(sampleEntrustRegistration); @@ -169,6 +176,10 @@ public class SampleEntrustCreateDataCmp extends NodeComponent { if (CollUtil.isNotEmpty(sampleEntrustProjectList)) { businessSampleEntrustProjectMapper.insertBatch(sampleEntrustProjectList); } + //保存检测检测项目 非标准 + if (CollUtil.isNotEmpty(sampleEntrustUnStandardProjectList)) { + businessSampleEntrustUnStandardProjectMapper.insertBatch(sampleEntrustUnStandardProjectList); + } //保存上传附件 if (CollUtil.isNotEmpty(businessSampleEntrustFileDOList)) { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java index 0a813011..739582a7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java @@ -85,7 +85,6 @@ import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMethodMa import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleParentMapper; import com.zt.plat.module.qms.business.config.dal.mapper.MaterialAssayStandardMethodMapper; import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; -import com.zt.plat.module.qms.business.dic.dal.mapper.DictionaryProjectMapper; import com.zt.plat.module.qms.common.data.dal.dataobject.DataTemplateDO; import com.zt.plat.module.qms.common.data.dal.mapper.DataTemplateMapper; import com.zt.plat.module.qms.core.code.SequenceUtil; @@ -187,9 +186,6 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { @Resource private BusinessAssayParameterDataMapper businessAssayParameterDataMapper; - @Resource - private DictionaryProjectMapper dictionaryProjectMapper; - @Resource private ConfigSampleFlowMapper configSampleFlowMapper; @@ -230,7 +226,6 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { List baseSampleIdList = sampleEntrustDetailList.stream().map(m -> m.getBaseSampleId()).distinct().collect(Collectors.toList()); //样品大类列表 -// List baseSampleList = baseSampleMapper.selectByIds(baseSampleIdList); List baseSampleList = sampleEntrustContext.getBaseSampleList(); //主样配置 @@ -253,7 +248,7 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { //分析方法检测项目参数配置 List configAssayMethodProjectParameterList = configAssayMethodProjectParameterMapper.selectByConfigAssayMethodIds(configAssayMethodIdList); //检测项目字典 - List dictionaryProjectList = dictionaryProjectMapper.selectList(); + List dictionaryProjectList = sampleEntrustContext.getDictionaryProjectList(); //主样报表配置 List configSampleReportList = configSampleReportMapper.selectByConfigBaseSampleIds(configBaseSampleIdList); @@ -425,6 +420,9 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { businessSubSampleDO.setBusinessSubParentSampleId(businessSubParentSampleDO.getId()); businessSubSampleDO.setConfigSubSampleId(configSubSample.getId()); businessSubSampleDO.setDictionaryBusinessId(configSubSample.getDictionaryBusinessId()); + businessSubSampleDO.setGroupId(businessSampleEntrustDetailDO.getEntrustGroupCode()); + businessSubSampleDO.setBatchCode(businessSampleEntrustDetailDO.getEntrustBatchCode()); + businessSubSampleDO.setDualFlag(businessSampleEntrustDetailDO.getEntrustDualFlag()); businessSubSampleDO.setSampleName(businessBaseSampleDO.getSampleName()); businessSubSampleDO.setSampleCode(businessBaseSampleDO.getSampleCode()); businessSubSampleDO.setSampleAssayCode(businessBaseSampleDO.getSampleCode()); @@ -435,6 +433,8 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { businessSubSampleDO.setSampleFlowNodeKey(sampleFlowNodeSub.getNodeKey()); businessSubSampleDO.setSampleFlowNodeTime(currentDateTime); businessSubSampleDO.setNextSampleFlowNode(sampleFlowNodeSub.getNextFlowNodeName()); + businessSubSampleDO.setIsMaterialAssayStandard(sampleEntrustRegistration.getIsMaterialAssayStandard()); + businessSubSampleDO.setAssayLevel(businessSampleEntrustDetailDO.getAssayLevel()); businessSubSampleDO.setRemark(sampleEntrustRegistrationJsonObject.getString("sampleCategory"));//子样备注设置样品类型 businessSubSampleDOList.add(businessSubSampleDO); @@ -778,7 +778,8 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { } //处理委托登记下的分析部门及部门明细数据 - ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId()); +// ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId()); + ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSource(); if (QmsCommonConstant.YES.equals(configEntrustSource.getIsGenerateDocument())) {//根据配置,只有配置了需要编制部门报告的数据才生成 List businessSampleEntrustDepartmentDOList = new ArrayList<>(); List businessSampleEntrustDepartmentDetailDOList = new ArrayList<>(); @@ -1159,4 +1160,11 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { } } + + @Override + public boolean isAccess() { + log.debug("标准执行生成样品"); + SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class); + return sampleEntrustContext.getIsUseMaterialAssayStandard();//标准的执行 + } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUnStandardGenSampleDataCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUnStandardGenSampleDataCmp.java new file mode 100644 index 00000000..15f8bf15 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUnStandardGenSampleDataCmp.java @@ -0,0 +1,335 @@ +package com.zt.plat.module.qms.business.bus.liteflow.sample.entrust; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.StringUtils; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayReportDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayReportDataMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessBaseSampleMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleAssayResultMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubParentSampleMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleFlowInfo; +import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext; +import com.zt.plat.module.qms.business.config.dal.dataobject.BaseSampleDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigBaseSampleDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSampleFlowDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSampleReportDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleParentDO; +import com.zt.plat.module.qms.business.config.dal.mapper.BaseSampleMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigBaseSampleMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSampleFlowMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSampleReportMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleParentMapper; +import com.zt.plat.module.qms.core.code.SequenceUtil; +import com.zt.plat.module.qms.core.sampleflow.SampleFlowDefinition; +import com.zt.plat.module.qms.core.sampleflow.SampleFlowNode; +import com.zt.plat.module.qms.enums.QmsCommonConstant; + +import cn.hutool.core.collection.CollUtil; +import jakarta.annotation.Resource; + +/** + * SampleEntrustUnStandardGenSampleDataCmp + * 非标分析样品生成 + */ +@LiteflowComponent(id = "sampleEntrustUnStandardGenSampleDataCmp", name = "非标样品委托生成系统样品数据") +public class SampleEntrustUnStandardGenSampleDataCmp extends NodeComponent { + + @Resource + private SequenceUtil sequenceUtil; + + @Resource + private BaseSampleMapper baseSampleMapper; + + @Resource + private BusinessSampleEntrustRegistrationMapper businessSampleEntrustRegistrationMapper; + + @Resource + private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper; + + @Resource + private BusinessSampleAssayResultMapper businessSampleAssayResultMapper; + + @Resource + private ConfigBaseSampleMapper configBaseSampleMapper; + + @Resource + private BusinessBaseSampleMapper businessBaseSampleMapper; + + @Resource + private ConfigSubSampleParentMapper configSubSampleParentMapper; + + @Resource + private BusinessSubParentSampleMapper businessSubParentSampleMapper; + + @Resource + private ConfigSubSampleMapper configSubSampleMapper; + + @Resource + private BusinessSubSampleMapper businessSubSampleMapper; + + @Resource + private ConfigSampleFlowMapper configSampleFlowMapper; + + @Resource + private BusinessAssayReportDataMapper businessAssayReportDataMapper; + + @Resource + private ConfigSampleReportMapper configSampleReportMapper; + + @Override + public void process() throws Exception { + //获取样品委托上下文 + SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class); + + //当前登录用户 + String loginRealname = sampleEntrustContext.getLoginRealname(); + + LocalDateTime currentDateTime = sampleEntrustContext.getCurrentDateTime(); + //样品委托登记 + BusinessSampleEntrustRegistrationDO sampleEntrustRegistration = sampleEntrustContext.getSampleEntrustRegistration(); + //扩展信息 + String sampleEntrustRegistrationExtInfo = sampleEntrustRegistration.getExternalInfomation(); + JSONObject sampleEntrustRegistrationJsonObject = new JSONObject(); + if (StringUtils.isNotBlank(sampleEntrustRegistrationExtInfo)) { + sampleEntrustRegistrationJsonObject = JSON.parseObject(sampleEntrustRegistrationExtInfo); + } + + //样品委托登记明细 + List sampleEntrustDetailList = sampleEntrustContext.getSampleEntrustDetailList(); + //样品来样品位 + List sampleAssayResultList = sampleEntrustContext.getSampleAssayResultList(); + + List baseSampleIdList = sampleEntrustDetailList.stream().map(m -> m.getBaseSampleId()).distinct().collect(Collectors.toList()); + + //样品大类列表 + List baseSampleList = sampleEntrustContext.getBaseSampleList(); + + //主样配置 + List configBaseSampleList = configBaseSampleMapper.selectByBaseSampleIds(baseSampleIdList); + List configBaseSampleIdList = configBaseSampleList.stream().map(m -> m.getId()).collect(Collectors.toList()); + //分样配置 + List configSubSampleParentList = configSubSampleParentMapper.selectByBaseSampleIds(baseSampleIdList); + //子样配置 + List configSubSampleList = configSubSampleMapper.selectByBaseSampleIds(baseSampleIdList); + + //主样报表配置 + List configSampleReportList = configSampleReportMapper.selectByConfigBaseSampleIds(configBaseSampleIdList); + + //样品流程配置 + List configSampleFlowKeyList = new ArrayList<>(); + List configBaseSampleFlowKeyList = configBaseSampleList.stream().map(m -> m.getFlowKey()).distinct().collect(Collectors.toList()); + configSampleFlowKeyList.addAll(configBaseSampleFlowKeyList); + List configSubSampleFlowKeyList = configSubSampleList.stream().map(m -> m.getFlowKey()).distinct().collect(Collectors.toList()); + configSampleFlowKeyList.addAll(configSubSampleFlowKeyList); + List configSampleFlowList = configSampleFlowMapper.selectLatestConfigSampleFlowListByKeys(configSampleFlowKeyList); + + //主样 + List businessBaseSampleDOList = new ArrayList<>(); + //分样 + List businessSubParentSampleDOList = new ArrayList<>(); + //分样子样 + List businessSubSampleDOList = new ArrayList<>(); + //分析报表数据 + List businessAssayReportDataDOList = new ArrayList<>(); + + //子样流转信息列表 + List sampleFlowInfoList = new ArrayList<>(); + + //委托明细排序 + List sampleEntrustDetailListSort = sampleEntrustDetailList.stream().sorted(Comparator.comparingInt(BusinessSampleEntrustDetailDO::getSort)).collect(Collectors.toList()); + //主样 + BusinessBaseSampleDO businessBaseSampleDO = null; + for (BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO : sampleEntrustDetailListSort) {//委托样品明细 + + //样品大类 + BaseSampleDO baseSampleDO = baseSampleList.stream().filter(f -> f.getId().equals(businessSampleEntrustDetailDO.getBaseSampleId())).findFirst().orElse(null); + + //获取到主样配置 + ConfigBaseSampleDO currConfigBaseSample = configBaseSampleList.stream().filter(f -> businessSampleEntrustDetailDO.getBaseSampleId().equals(f.getBaseSampleId())).findFirst().orElse(null); + //获取分样配置列表 + List currConfigSubSampleParentList = configSubSampleParentList.stream().filter(f -> f.getConfigBaseSampleId().equals(currConfigBaseSample.getId())).collect(Collectors.toList()); + + + //主样流程 + ConfigSampleFlowDO configSampleFlowBase = configSampleFlowList.stream().filter(f -> f.getKey().equals(currConfigBaseSample.getFlowKey())).findFirst().orElse(null); + //样品流程定义 + SampleFlowDefinition sampleFlowDefinitionBase = JSON.parseObject(configSampleFlowBase.getContent(), SampleFlowDefinition.class); + List flowNodeBaseList = sampleFlowDefinitionBase.getFlowNodeList().stream().sorted(Comparator.comparing(SampleFlowNode::getSort)).collect(Collectors.toList()); + SampleFlowNode sampleFlowNodeBase = flowNodeBaseList.get(0); + + //=======================主样========================== + businessBaseSampleDO = new BusinessBaseSampleDO(); + businessBaseSampleDO.setId(IdWorker.getId()); + //设置配置id + businessBaseSampleDO.setConfigBaseSampleId(currConfigBaseSample.getId()); + //样品名称为委托登记来的样品名称 + businessBaseSampleDO.setSampleName(businessSampleEntrustDetailDO.getSampleName()); + //样品大类名称 + businessBaseSampleDO.setBaseSampleName(baseSampleDO.getName()); + //样品类型字典与委托一致 + businessBaseSampleDO.setDictionaryBusinessId(businessSampleEntrustDetailDO.getSampleTypeDictionaryBusinessId()); + //生成样品编号 + String sampleCode = businessSampleEntrustDetailDO.getEntrustSampleCode();//默认取来样编号 + if (StringUtils.isNotBlank(businessSampleEntrustDetailDO.getSampleCode())) {//如果已经提前生成, + sampleCode = businessSampleEntrustDetailDO.getSampleCode(); + } else if (StringUtils.isNotBlank(currConfigBaseSample.getCodeRule())) {//如果配置了样品编号生成规则,则以生成规则为准 + sampleCode = sequenceUtil.genCode(currConfigBaseSample.getCodeRule()); + } + businessBaseSampleDO.setSampleCode(sampleCode); + //样品生成时间为当前时间 + businessBaseSampleDO.setSampleTime(currentDateTime); + //样品状态正常 + businessBaseSampleDO.setSampleStatus(QmsCommonConstant.NORMAL); + //主样流程配置id + businessBaseSampleDO.setConfigSampleFlowId(configSampleFlowBase.getId()); + //主样当前流程节点key + businessBaseSampleDO.setSampleFlowNodeKey(sampleFlowNodeBase.getNodeKey()); + //主样当前流程节点时间 + businessBaseSampleDO.setSampleFlowNodeTime(currentDateTime); + //操作人 + businessBaseSampleDO.setOperator(loginRealname); + + //添加到列表 + businessBaseSampleDOList.add(businessBaseSampleDO); + + //=======================报表========================== + List configSampleReportDOList = configSampleReportList.stream().filter(f -> f.getConfigBaseSampleId().equals(currConfigBaseSample.getId())).collect(Collectors.toList()); + for (ConfigSampleReportDO configSampleReport : configSampleReportDOList) { + BusinessAssayReportDataDO businessAssayReportDataDO = new BusinessAssayReportDataDO(); + businessAssayReportDataDO.setBusinessBaseSampleId(businessBaseSampleDO.getId()); + businessAssayReportDataDO.setDataSource(configSampleReport.getDataSource()); + businessAssayReportDataDO.setConfigReportTypeId(configSampleReport.getConfigReportTypeId()); + businessAssayReportDataDO.setConfigSampleReportId(configSampleReport.getId()); + businessAssayReportDataDO.setSampleCode(businessBaseSampleDO.getSampleCode()); + + businessAssayReportDataDOList.add(businessAssayReportDataDO); + } + //=====================委托明细====================== + //设置主样id + businessSampleEntrustDetailDO.setBusinessBaseSampleId(businessBaseSampleDO.getId()); + //设置主样编号 + businessSampleEntrustDetailDO.setSampleCode(businessBaseSampleDO.getSampleCode()); + + //=======================分样========================= + for (ConfigSubSampleParentDO currConfigSubSampleParent : currConfigSubSampleParentList) { + BusinessSubParentSampleDO businessSubParentSampleDO = new BusinessSubParentSampleDO(); + businessSubParentSampleDO.setId(IdWorker.getId()); + businessSubParentSampleDO.setDictionaryBusinessId(currConfigSubSampleParent.getDictionaryBusinessId()); + businessSubParentSampleDO.setBusinessBaseSampleId(businessBaseSampleDO.getId()); + businessSubParentSampleDO.setConfigSubSampleParentId(currConfigSubSampleParent.getId()); + businessSubParentSampleDO.setSampleName(businessBaseSampleDO.getSampleName()); + businessSubParentSampleDO.setSampleCode(businessBaseSampleDO.getSampleCode()); + businessSubParentSampleDO.setSubSampleCode(businessBaseSampleDO.getSampleCode()); + businessSubParentSampleDO.setSampleStatus(QmsCommonConstant.NORMAL); + businessSubParentSampleDOList.add(businessSubParentSampleDO); + + + //=======================子样======================= + //获取子样配置列表 + List currConfigSubSampleList = configSubSampleList.stream().filter(f -> f.getConfigBaseSampleId().equals(currConfigBaseSample.getId())).collect(Collectors.toList()); + for (ConfigSubSampleDO currConfigSubSample : currConfigSubSampleList) { + + ConfigSampleFlowDO configSampleFlowSub = configSampleFlowList.stream().filter(f -> f.getKey().equals(currConfigSubSample.getFlowKey())).findFirst().orElse(null); + //样品流程定义 + SampleFlowDefinition sampleFlowDefinitionSub = JSON.parseObject(configSampleFlowSub.getContent(), SampleFlowDefinition.class); + List flowNodeSubList = sampleFlowDefinitionSub.getFlowNodeList().stream().sorted(Comparator.comparing(SampleFlowNode::getSort)).collect(Collectors.toList()); + SampleFlowNode sampleFlowNodeSub = flowNodeSubList.get(0); + + BusinessSubSampleDO businessSubSampleDO = new BusinessSubSampleDO(); + businessSubSampleDO.setId(IdWorker.getId()); + businessSubSampleDO.setBusinessBaseSampleId(businessBaseSampleDO.getId()); + businessSubSampleDO.setBusinessSubParentSampleId(businessSubParentSampleDO.getId()); + businessSubSampleDO.setConfigSubSampleId(currConfigSubSample.getId()); + businessSubSampleDO.setDictionaryBusinessId(currConfigSubSample.getDictionaryBusinessId()); + businessSubSampleDO.setGroupId(businessSampleEntrustDetailDO.getEntrustGroupCode()); + businessSubSampleDO.setBatchCode(businessSampleEntrustDetailDO.getEntrustBatchCode()); + businessSubSampleDO.setDualFlag(businessSampleEntrustDetailDO.getEntrustDualFlag()); + businessSubSampleDO.setSampleName(businessBaseSampleDO.getSampleName()); + businessSubSampleDO.setSampleCode(businessBaseSampleDO.getSampleCode()); + businessSubSampleDO.setSampleAssayCode(businessBaseSampleDO.getSampleCode()); + businessSubSampleDO.setSampleReturnCode(businessBaseSampleDO.getSampleCode()); + businessSubSampleDO.setIsWeighing(businessSampleEntrustDetailDO.getIsWeighing()); + businessSubSampleDO.setSampleStatus(QmsCommonConstant.NORMAL); + businessSubSampleDO.setConfigSampleFlowId(configSampleFlowSub.getId()); + businessSubSampleDO.setSampleFlowNodeKey(sampleFlowNodeSub.getNodeKey()); + businessSubSampleDO.setSampleFlowNodeTime(currentDateTime); + businessSubSampleDO.setNextSampleFlowNode(sampleFlowNodeSub.getNextFlowNodeName()); + businessSubSampleDO.setIsMaterialAssayStandard(sampleEntrustRegistration.getIsMaterialAssayStandard()); + businessSubSampleDO.setAssayLevel(businessSampleEntrustDetailDO.getAssayLevel()); + businessSubSampleDO.setRemark(sampleEntrustRegistrationJsonObject.getString("sampleCategory"));//子样备注设置样品类型 + + businessSubSampleDOList.add(businessSubSampleDO); + + + //子样样品流转信息 + SampleFlowInfo sampleFlowInfo = new SampleFlowInfo(); + sampleFlowInfo.setId(businessSubSampleDO.getId()); + sampleFlowInfo.setSampleName(businessSubSampleDO.getSampleName()); + sampleFlowInfo.setSampleCode(businessSubSampleDO.getSampleCode()); + sampleFlowInfo.setIsWeighing(businessSubSampleDO.getIsWeighing()); + sampleFlowInfo.setSampleWeight(businessSubSampleDO.getLastSampleWeight()); + + sampleFlowInfoList.add(sampleFlowInfo); + } + + } + + } + + sampleEntrustRegistration.setRegistrationStatus(QmsCommonConstant.SUBMITTED); + sampleEntrustRegistration.setAssayStatus(QmsCommonConstant.UNCHECKED); + sampleEntrustRegistration.setDataStatus(QmsCommonConstant.UNRETURNED); + + sampleEntrustContext.setSampleFlowInfoList(sampleFlowInfoList); + + businessSampleEntrustRegistrationMapper.updateById(sampleEntrustRegistration); + if (CollUtil.isNotEmpty(sampleEntrustDetailList)) { + businessSampleEntrustDetailMapper.updateBatch(sampleEntrustDetailList); + } + if (CollUtil.isNotEmpty(sampleAssayResultList)) { + businessSampleAssayResultMapper.updateBatch(sampleAssayResultList); + } + if (CollUtil.isNotEmpty(businessBaseSampleDOList)) { + businessBaseSampleMapper.insertBatch(businessBaseSampleDOList); + } + if (CollUtil.isNotEmpty(businessSubParentSampleDOList)) { + businessSubParentSampleMapper.insertBatch(businessSubParentSampleDOList); + } + if (CollUtil.isNotEmpty(businessSubSampleDOList)) { + businessSubSampleMapper.insertBatch(businessSubSampleDOList); + } + if (CollUtil.isNotEmpty(businessAssayReportDataDOList)) { + businessAssayReportDataMapper.insertBatch(businessAssayReportDataDOList); + } + } + + @Override + public boolean isAccess() { + SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class); + return !sampleEntrustContext.getIsUseMaterialAssayStandard();//非标准的执行 + } + + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUpdateDataCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUpdateDataCmp.java index b489f892..f1bb57f4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUpdateDataCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUpdateDataCmp.java @@ -29,7 +29,6 @@ import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegis import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext; import com.zt.plat.module.qms.business.config.controller.vo.MaterialAssayStandardDetailRespVO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO; -import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO; import com.zt.plat.module.qms.enums.QmsCommonConstant; import jakarta.annotation.Resource; @@ -69,7 +68,7 @@ public class SampleEntrustUpdateDataCmp extends NodeComponent { } //获取委托来源配置 - ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId()); + ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSource(); if (StringUtils.isNotBlank(configEntrustSource.getCodeField()) && extJsonObject != null) {//如果委托单号来源于字段,则重新获取更新下 String entrustNumber = extJsonObject.getString(configEntrustSource.getCodeField()); sampleEntrustRegistration.setEntrustNumber(entrustNumber); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignManualTypeCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignManualTypeCmp.java index dc31836f..651e7ab7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignManualTypeCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignManualTypeCmp.java @@ -194,72 +194,7 @@ public class SampleTaskAssignManualTypeCmp extends NodeComponent { businessAssayTaskDetailList.add(businessAssayTaskDetailDO); } - - /** - - //根据分配 - BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectAssignInProgressByAssayUserAndAssignUser(dictionaryBusinessId, assignAssayUser.getRealName(), loginRealname); - if (businessAssayTaskDO == null) { - String taskNo = sequenceUtil.genCode(configAssayMethod.getCodeRule()); - - businessAssayTaskDO = new BusinessAssayTaskDO(); - businessAssayTaskDO.setId(IdWorker.getId()); - businessAssayTaskDO.setTaskNo(taskNo); -// businessAssayTaskDO.setTaskName(configAssayMethod.getName()); - businessAssayTaskDO.setTaskName(dictionaryBusinessDO.getName()); - businessAssayTaskDO.setAssayOperator(assignAssayUser.getRealName()); - businessAssayTaskDO.setAssayOperatorId(assignAssayUser.getUserId()); - businessAssayTaskDO.setConfigAssayMethodId(configAssayMethod.getId());//以第一个样品的分析方法做为主的分析方法id,后续代码改动量少 - businessAssayTaskDO.setDictionaryBusinessId(configAssayMethod.getDictionaryBusinessId()); - businessAssayTaskDO.setDictionaryBusinessKey(configAssayMethod.getDictionaryBusinessKey()); - businessAssayTaskDO.setTaskSourceType(QmsCommonConstant.TASK_ASSIGN); - businessAssayTaskDO.setConfigReportTemplateId(configReportTemplate.getId()); - businessAssayTaskDO.setConfigReportTemplateKey(configReportTemplate.getKey()); - businessAssayTaskDO.setIsIngredients(configAssayMethod.getIsIngredients()); - businessAssayTaskDO.setIngredientsStatus("initial"); - - businessAssayTaskDO.setTaskAssignOperator(loginRealname); - businessAssayTaskDO.setTaskAssignOperatorId(loginUser.getId()); - businessAssayTaskDO.setTaskAssignTime(currentDateTime); - businessAssayTaskDO.setTaskAssignStatus(QmsCommonConstant.IN_PROGRESS); - businessAssayTaskDO.setTaskAssayStatus(QmsCommonConstant.NOT_START); - businessAssayTaskDO.setFinishStatus(QmsCommonConstant.NOT_START); - businessAssayTaskDO.setFlowStatus(QmsCommonConstant.NOT_START); - - saveBusinessAssayTaskList.add(businessAssayTaskDO); - } else { - updateBusinessAssayTaskList.add(businessAssayTaskDO); - } - - BusinessAssayTaskDetailDO businessAssayTaskDetailDO = null; - List valList = businessAssayTaskDataList.stream().filter(f -> currConfigAssayMethodIdList.contains(f.getConfigAssayMethodId())).collect(Collectors.toList()); - - int sort = 1; - for (BusinessAssayTaskDataDO val : valList) { - val.setIsAssignTasked(QmsCommonConstant.YES); - val.setAssignTaskTime(currentDateTime); - val.setAssayOperator(assignAssayUser.getRealName()); - val.setAssayOperatorId(assignAssayUser.getUserId()); - val.setBusinessAssayTaskId(businessAssayTaskDO.getId()); - - BusinessSubSampleDO businessSubSampleDO = sampleTaskAssignContext.getBusinessSubSampleById(val.getBusinessSubSampleId()); - - businessAssayTaskDetailDO = new BusinessAssayTaskDetailDO(); - businessAssayTaskDetailDO.setBusinessAssayTaskDataId(val.getId()); - businessAssayTaskDetailDO.setBusinessAssayTaskId(businessAssayTaskDO.getId()); - businessAssayTaskDetailDO.setTaskNo(businessAssayTaskDO.getTaskNo()); - businessAssayTaskDetailDO.setSampleId(val.getBusinessSubSampleId()); - businessAssayTaskDetailDO.setSampleCode(businessSubSampleDO.getSampleAssayCode()); - businessAssayTaskDetailDO.setSampleName(businessSubSampleDO.getSampleName()); - businessAssayTaskDetailDO.setDataSourceType(QmsCommonConstant.NORMAL); - businessAssayTaskDetailDO.setSortNo(sort); - sort++; - - - businessAssayTaskDetailList.add(businessAssayTaskDetailDO); - } - **/ - + } // 【可选优化】重新整理明细的排序号 (SortNo),确保每个任务单内的明细是 1, 2, 3... // 因为上面的循环是交叉写入的,可能导致同一个 taskId 的 sortNo 不连续 (如 1, 1, 2, 2...) 如果多个用户交替 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java new file mode 100644 index 00000000..f98fd4f6 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java @@ -0,0 +1,21 @@ +package com.zt.plat.module.qms.business.bus.liteflow.sample.taskassign; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; +import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignContext; +import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignTypeEnum; + +@LiteflowComponent(id = "sampleTaskAssignProjectMethodCmp", name = "手动分配(按检测项目已指定方法分配)") +public class SampleTaskAssignProjectMethodCmp extends NodeComponent { + + @Override + public void process() throws Exception { + + } + + @Override + public boolean isAccess() { + SampleTaskAssignContext sampleTaskAssignContext = this.getContextBean(SampleTaskAssignContext.class); + return sampleTaskAssignContext.getSampleTaskAssignType().equals(SampleTaskAssignTypeEnum.PROJECT_METHOD); + } +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java new file mode 100644 index 00000000..bf80aed5 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java @@ -0,0 +1,22 @@ +package com.zt.plat.module.qms.business.bus.liteflow.sample.taskassign; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; +import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignContext; +import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignTypeEnum; + +@LiteflowComponent(id = "sampleTaskAssignProjectNoMethodCmp", name = "手动分配(按检测项目未指定方法分配)") +public class SampleTaskAssignProjectNoMethodCmp extends NodeComponent { + + @Override + public void process() throws Exception { + + } + + + @Override + public boolean isAccess() { + SampleTaskAssignContext sampleTaskAssignContext = this.getContextBean(SampleTaskAssignContext.class); + return sampleTaskAssignContext.getSampleTaskAssignType().equals(SampleTaskAssignTypeEnum.PROJECT_NO_METHOD); + } +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleEntrustContext.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleEntrustContext.java index 9ffb1123..e22ff968 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleEntrustContext.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleEntrustContext.java @@ -10,13 +10,14 @@ import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleAssayRes import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustUnStandardProjectDO; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleFlowInfo; import com.zt.plat.module.qms.business.config.controller.vo.MaterialAssayStandardDetailRespVO; import com.zt.plat.module.qms.business.config.dal.dataobject.BaseSampleDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO; -import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardDO; -import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO; import com.zt.plat.module.qms.business.config.dal.dataobject.MaterialAssayStandardMethodDO; +import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; + import lombok.Data; import lombok.experimental.Accessors; @@ -45,6 +46,9 @@ public class SampleEntrustContext { /** 样品大类 **/ List baseSampleList; + /** 是否使用物料分析标准 **/ + private Boolean isUseMaterialAssayStandard = true; + public BaseSampleDO getBaseSampleById(Long id) { BaseSampleDO baseSampleDO = null; if (CollUtil.isNotEmpty(this.baseSampleList)) { @@ -53,25 +57,25 @@ public class SampleEntrustContext { return baseSampleDO; } - /** 委托来源配置列表 **/ - private List configEntrustSourceList; + /** 委托来源 **/ + private ConfigEntrustSourceDO configEntrustSource; + + /** 检测项目字典列表 **/ + private List dictionaryProjectList; /** - * 根据id获取委托来源配置 - * @param id 委托来源配置id + * 根据id获取检测项目字典 + * @param id * @return */ - public ConfigEntrustSourceDO getConfigEntrustSourceById(Long id) { - ConfigEntrustSourceDO configEntrustSource = null; - if (CollUtil.isNotEmpty(this.configEntrustSourceList)) { - configEntrustSource = this.configEntrustSourceList.stream().filter(f -> id.equals(f.getId())).findFirst().orElse(null); + public DictionaryProjectDO getDictionaryProjectById(Long id) { + DictionaryProjectDO dictionaryProjectDO = null; + if (CollUtil.isNotEmpty(this.dictionaryProjectList)) { + dictionaryProjectDO = this.dictionaryProjectList.stream().filter(f -> id.equals(f.getId())).findFirst().orElse(null); } - return configEntrustSource; + return dictionaryProjectDO; } - /** 物料检测标准列表 **/ - private List materialAssayStandardList; - /** 物料检测标准检测项目列表 **/ private List materialAssayStandardDetailList; @@ -104,7 +108,6 @@ public class SampleEntrustContext { return materialAssayStandardMethodList; } - /** 委托登记单 **/ private BusinessSampleEntrustRegistrationDO sampleEntrustRegistration; @@ -114,6 +117,9 @@ public class SampleEntrustContext { /** 委托登记样品检测项目明细 **/ private List sampleEntrustProjectList; + /** 委托登记样品检测项目明细(非标准) **/ + private List sampleEntrustUnStandardProjectList; + /** 样品委托来样品位 **/ private List sampleAssayResultList; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignTypeEnum.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignTypeEnum.java index 5a1ac95c..6151c678 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignTypeEnum.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignTypeEnum.java @@ -9,6 +9,10 @@ public enum SampleTaskAssignTypeEnum { //手动指派 MANUAL, //手动分析方法类型 - MANUAL_TYPE + MANUAL_TYPE, + //按检测项目已有方法指派 + PROJECT_METHOD, + //按检测项目未配置方法指派 + PROJECT_NO_METHOD, } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectService.java index 979a0be2..7ca70359 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectService.java @@ -59,4 +59,24 @@ public interface BusinessSampleEntrustUnStandardProjectService { */ PageResult getBusinessSampleEntrustUnStandardProjectPage(BusinessSampleEntrustUnStandardProjectPageReqVO pageReqVO); + /** + * 获得委检登记样品检测项目表(无标准)列表 + * @param reqVO + * @return + */ + List getBusinessSampleEntrustUnStandardProjectList(BusinessSampleEntrustUnStandardProjectPageReqVO reqVO); + + /** + * 根据主样id查询非标准的检测项目列表 + * @param businessBaseSampleId + * @return + */ + List listByBusinessBaseSampleId(Long businessBaseSampleId); + + /** + * 保存分析部门 + * @param reqVO + */ + void saveAssayDept(BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO reqVO); + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectServiceImpl.java index f4550540..26cb18ca 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessSampleEntrustUnStandardProjectServiceImpl.java @@ -7,12 +7,16 @@ import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageParam; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustUnStandardProjectDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleAnalysisGroupDO; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustUnStandardProjectMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleAnalysisGroupMapper; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList; @@ -30,6 +34,9 @@ public class BusinessSampleEntrustUnStandardProjectServiceImpl implements Busine @Resource private BusinessSampleEntrustUnStandardProjectMapper businessSampleEntrustUnStandardProjectMapper; + + @Resource + private BusinessSubSampleAnalysisGroupMapper businessSubSampleAnalysisGroupMapper; @Override public BusinessSampleEntrustUnStandardProjectRespVO createBusinessSampleEntrustUnStandardProject(BusinessSampleEntrustUnStandardProjectSaveReqVO createReqVO) { @@ -88,4 +95,74 @@ public class BusinessSampleEntrustUnStandardProjectServiceImpl implements Busine return businessSampleEntrustUnStandardProjectMapper.selectPage(pageReqVO); } + @Override + public List getBusinessSampleEntrustUnStandardProjectList( + BusinessSampleEntrustUnStandardProjectPageReqVO reqVO) { + return businessSampleEntrustUnStandardProjectMapper.selectList(reqVO); + } + + @Override + public List listByBusinessBaseSampleId(Long businessBaseSampleId) { + return businessSampleEntrustUnStandardProjectMapper.selectByBusinessBaseSampleId(businessBaseSampleId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveAssayDept(BusinessSampleEntrustUnStandardProjectAssayDeptSaveReqVO reqVO) { + List reqList = reqVO.getReqList(); + BusinessSubSampleSaveReqVO subSampleReqVO = reqVO.getSubSampleReqVO(); + + List saveList = new ArrayList<>(); + List updateList = new ArrayList<>(); + List saveAnalysisGroupDOList = new ArrayList<>(); + + //查询旧的分析部门 + List oldAnalysisGroupDOList = businessSubSampleAnalysisGroupMapper.selectByBusinessSubSampleId(subSampleReqVO.getId()); + //过滤出分析部门 + HashMap assayDepartmentMap = reqList.stream().collect(Collectors.toMap( + BusinessSampleEntrustUnStandardProjectSaveReqVO::getAssayDepartmentId, + BusinessSampleEntrustUnStandardProjectSaveReqVO::getAssayDepartmentName, + (first, second) -> first, // 保留第一个,丢弃后面的 + HashMap::new)); + for (Map.Entry entry : assayDepartmentMap.entrySet()) { + Long assayDepartmentId = entry.getKey(); + String assayDepartmentName = entry.getValue(); + + BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO = new BusinessSubSampleAnalysisGroupDO(); + + businessSubSampleAnalysisGroupDO.setBusinessBaseSampleId(subSampleReqVO.getBusinessBaseSampleId()); + businessSubSampleAnalysisGroupDO.setBusinessSubParentSampleId(subSampleReqVO.getBusinessSubParentSampleId()); + businessSubSampleAnalysisGroupDO.setBusinessSubSampleId(subSampleReqVO.getId()); + businessSubSampleAnalysisGroupDO.setAssayDepartmentId(assayDepartmentId); + businessSubSampleAnalysisGroupDO.setAssayDepartmentName(assayDepartmentName); + businessSubSampleAnalysisGroupDO.setSampleStatus("待收样"); + + + saveAnalysisGroupDOList.add(businessSubSampleAnalysisGroupDO); + } + + for (BusinessSampleEntrustUnStandardProjectSaveReqVO req : reqList) { + req.setBusinessSubSampleId(subSampleReqVO.getId()); + if (req.getId() == null) { + saveList.add(BeanUtils.toBean(req, BusinessSampleEntrustUnStandardProjectDO.class)); + } else { + updateList.add(BeanUtils.toBean(req, BusinessSampleEntrustUnStandardProjectDO.class)); + } + } + + if (CollUtil.isNotEmpty(saveList)) { + businessSampleEntrustUnStandardProjectMapper.insertBatch(saveList); + } + if (CollUtil.isNotEmpty(updateList)) { + businessSampleEntrustUnStandardProjectMapper.updateBatch(updateList); + } + if (CollUtil.isNotEmpty(saveAnalysisGroupDOList)) { + businessSubSampleAnalysisGroupMapper.insertBatch(saveAnalysisGroupDOList); + } + if (CollUtil.isNotEmpty(oldAnalysisGroupDOList)) { + List oldAnalysisGroupDOIdList = oldAnalysisGroupDOList.stream().map(m -> m.getId()).collect(Collectors.toList()); + businessSubSampleAnalysisGroupMapper.deleteByIds(oldAnalysisGroupDOIdList); + } + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleEntrustServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleEntrustServiceImpl.java index a042a9c7..c72fa8b7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleEntrustServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleEntrustServiceImpl.java @@ -22,7 +22,6 @@ import cn.hutool.core.collection.CollUtil; import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.framework.tenant.core.context.TenantContextHolder; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleEntrustDetailExtendRespVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleEntrustProjectExtendRespVO; @@ -32,15 +31,18 @@ import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleAssayRes import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustUnStandardProjectDO; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleAssayResultMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustProjectMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustUnStandardProjectMapper; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustDetail; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustDetailProject; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustParam; import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext; -import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; +import com.zt.plat.module.qms.enums.QmsCommonConstant; + import jakarta.annotation.Resource; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; @@ -62,6 +64,9 @@ public class SampleEntrustServiceImpl implements SampleEntrustService { @Resource private BusinessSampleEntrustProjectMapper businessSampleEntrustProjectMapper; + @Resource + private BusinessSampleEntrustUnStandardProjectMapper businessSampleEntrustUnStandardProjectMapper; + @Resource private BusinessSampleAssayResultMapper businessSampleAssayResultMapper; @@ -235,22 +240,32 @@ public class SampleEntrustServiceImpl implements SampleEntrustService { sampleEntrustParam.setIsReceiveSample(req.getIsReceiveSample()); sampleEntrustParam.setIsSendSample(req.getIsSendSample()); - List sampleEntrustDetailDOList = businessSampleEntrustDetailMapper.selectList(new LambdaQueryWrapperX().eq(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, req.getId())); + List sampleEntrustDetailDOList = businessSampleEntrustDetailMapper.selectByBusinessSampleEntrustRegistrationId(req.getId()); if (CollUtil.isNotEmpty(sampleEntrustDetailDOList)) { List sampleEntrustDetailIdList = sampleEntrustDetailDOList.stream().map(m -> m.getId()).collect(Collectors.toList()); - List sampleEntrustProjectDOList = businessSampleEntrustProjectMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList)); + + List sampleEntrustProjectDOList = businessSampleEntrustProjectMapper.selectByBusinessSampleEntrustDetailIds(sampleEntrustDetailIdList); + + List sampleEntrustUnStandardProjectDOList = businessSampleEntrustUnStandardProjectMapper.selectByBusinessSampleEntrustDetailIds(sampleEntrustDetailIdList); List sampleEntrustDetailList = BeanUtils.toBean(sampleEntrustDetailDOList, SampleEntrustDetail.class); for (SampleEntrustDetail sampleEntrustDetail : sampleEntrustDetailList) { - List entrustProjectDOList = sampleEntrustProjectDOList.stream().filter(f -> f.getBusinessSampleEntrustDetailId().equals(sampleEntrustDetail.getId())).collect(Collectors.toList()); - List sampleEntrustDetailProjectList = BeanUtils.toBean(entrustProjectDOList, SampleEntrustDetailProject.class); + + List sampleEntrustDetailProjectList = null; + if (sampleEntrustRegistration.getIsMaterialAssayStandard().equals(QmsCommonConstant.YES)) { + List entrustProjectDOList = sampleEntrustProjectDOList.stream().filter(f -> f.getBusinessSampleEntrustDetailId().equals(sampleEntrustDetail.getId())).collect(Collectors.toList()); + sampleEntrustDetailProjectList = BeanUtils.toBean(entrustProjectDOList, SampleEntrustDetailProject.class); + } else { + List entrustProjectDOList = sampleEntrustUnStandardProjectDOList.stream().filter(f -> f.getBusinessSampleEntrustDetailId().equals(sampleEntrustDetail.getId())).collect(Collectors.toList()); + sampleEntrustDetailProjectList = BeanUtils.toBean(entrustProjectDOList, SampleEntrustDetailProject.class); + } + sampleEntrustDetail.setSampleEntrustDetailProjectList(sampleEntrustDetailProjectList); } sampleEntrustParam.setSampleEntrustDetailList(sampleEntrustDetailList); - //List sampleAssayResultDOList = businessSampleAssayResultMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleAssayResultDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList)); } LiteflowResponse response = flowExecutor.execute2Resp("sampleEntrustSubmitChain" + tenantId, sampleEntrustParam, SampleEntrustContext.class); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignService.java index 2cd50c44..174c51ce 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignService.java @@ -8,6 +8,8 @@ import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualTypeParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignMethodParam; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectMethodParam; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectNoMethodParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignSampleParam; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; @@ -80,6 +82,20 @@ public interface SampleTaskAssignService { */ LiteflowResponse manualTypeAssign(SampleTaskAssignManualTypeParam param); + /** + * 按检测项目分配(已有方法) + * @param param + * @return + */ + LiteflowResponse projectMethodAssign(SampleTaskAssignProjectMethodParam param); + + /** + * 按检测项目分配(无方法) + * @param param + * @return + */ + LiteflowResponse projectNoMethodAssign(SampleTaskAssignProjectNoMethodParam param); + /** * 提交任务单 * @param id diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java index 217113fe..9b4a5d03 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java @@ -61,6 +61,8 @@ import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualTypeParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignMethodParam; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectMethodParam; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectNoMethodParam; import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignSampleParam; import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignContext; import com.zt.plat.module.qms.business.config.controller.vo.ConfigAssayMethodProjectExtendRespVO; @@ -1360,6 +1362,46 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService { return response; } + @Override + public LiteflowResponse projectMethodAssign(SampleTaskAssignProjectMethodParam param) { + if (CollUtil.isEmpty(param.getAssignAssayUserList())) { + throw new ServiceException(1_032_100_000, "无任务分配人员"); + } + if (param.getConfigAssayMethodId() == null) { + throw new ServiceException(1_032_100_000, "无分析方法"); + } + if (CollUtil.isEmpty(param.getAssayProjectDataIdList())) { + throw new ServiceException(1_032_100_000, "无分配的检测项目"); + } + Long tenantId = TenantContextHolder.getRequiredTenantId(); + LiteflowResponse response = flowExecutor.execute2Resp("sampleTaskAssignChain" + tenantId, param, SampleTaskAssignContext.class); + if (!response.isSuccess()){ + log.error("手动分配任务失败", response.getCause()); + throw new ServiceException(1_032_100_000, response.getCause().getMessage()); + } + return response; + } + + @Override + public LiteflowResponse projectNoMethodAssign(SampleTaskAssignProjectNoMethodParam param) { + if (CollUtil.isEmpty(param.getAssignAssayUserList())) { + throw new ServiceException(1_032_100_000, "无任务分配人员"); + } + if (param.getConfigAssayMethodId() == null) { + throw new ServiceException(1_032_100_000, "无分析方法"); + } + if (CollUtil.isEmpty(param.getSampleEntrustUnStandardProjectIdList())) { + throw new ServiceException(1_032_100_000, "无分配的检测项目"); + } + Long tenantId = TenantContextHolder.getRequiredTenantId(); + LiteflowResponse response = flowExecutor.execute2Resp("sampleTaskAssignChain" + tenantId, param, SampleTaskAssignContext.class); + if (!response.isSuccess()){ + log.error("手动分配任务失败", response.getCause()); + throw new ServiceException(1_032_100_000, response.getCause().getMessage()); + } + return response; + } + @Override @Transactional(rollbackFor = Exception.class) public void submitAssign(Long id) { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/admin/ConfigAssayMethodController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/admin/ConfigAssayMethodController.java index 1d2d8d9f..6b73d958 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/admin/ConfigAssayMethodController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/admin/ConfigAssayMethodController.java @@ -4,6 +4,7 @@ import com.zt.plat.module.qms.business.config.controller.vo.*; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; +import org.apache.commons.lang3.StringUtils; import org.springframework.security.access.prepost.PreAuthorize; import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; @@ -34,6 +35,8 @@ import com.zt.plat.module.qms.business.config.controller.vo.*; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO; import com.zt.plat.module.qms.business.config.service.ConfigAssayMethodService; +import cn.hutool.core.collection.CollUtil; + @Tag(name = "管理后台 - 检测方法配置") @RestController @RequestMapping("/qms/config-assay-method") @@ -91,8 +94,20 @@ public class ConfigAssayMethodController implements BusinessControllerMarker { @Operation(summary = "获得检测方法配置列表") //@PreAuthorize("@ss.hasPermission('qms:config-assay-method:query')") public CommonResult> getConfigAssayMethodList(@Valid ConfigAssayMethodReqVO reqVO) { + List list = new ArrayList<>(); List listResult = configAssayMethodService.getConfigAssayMethodList(reqVO); - return success(listResult); + if (StringUtils.isNotBlank(reqVO.getProjectSimpleNames())) { + List projectSimpoleNameList = Arrays.asList(reqVO.getProjectSimpleNames().split(",")); + for (ConfigAssayMethodExtendRespVO configAssayMethodExtendRespVO : listResult) { + if (CollUtil.isNotEmpty(configAssayMethodExtendRespVO.getProjectSimpleNameList()) && configAssayMethodExtendRespVO.getProjectSimpleNameList().containsAll(projectSimpoleNameList)) { + list.add(configAssayMethodExtendRespVO); + } + } + } else { + list.addAll(listResult); + } + + return success(list); } @GetMapping("/page") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodExtendRespVO.java index 1978d9b9..0fe91fc7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodExtendRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodExtendRespVO.java @@ -1,7 +1,11 @@ package com.zt.plat.module.qms.business.config.controller.vo; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import org.apache.commons.lang3.StringUtils; + import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectDO; import lombok.Data; @@ -9,5 +13,15 @@ import lombok.Data; public class ConfigAssayMethodExtendRespVO extends ConfigAssayMethodRespVO { private List configAssayMethodProjectList; - + + private List projectSimpleNameList; + + public List getProjectSimpleNameList() { + this.projectSimpleNameList = new ArrayList<>(); + if (StringUtils.isNotBlank(this.getDescription())) { + List asList = Arrays.asList(this.getDescription().split("、")); + this.projectSimpleNameList.addAll(asList); + } + return this.projectSimpleNameList; + } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodReqVO.java index f82c1f7a..020f7f93 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodReqVO.java @@ -80,4 +80,6 @@ public class ConfigAssayMethodReqVO { @Schema(description = "版本") private Integer version; + //=============扩展字段 + private String projectSimpleNames; } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigAssayMethodProjectMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigAssayMethodProjectMapper.java index 67585758..c631a7f4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigAssayMethodProjectMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigAssayMethodProjectMapper.java @@ -85,5 +85,23 @@ public interface ConfigAssayMethodProjectMapper extends BaseMapperX selectByAssayDepartmentId(Long assayDepartmentId) { + return selectJoinList(ConfigAssayMethodProjectExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, ConfigAssayMethodProjectDO::getConfigAssayMethodId) + .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, ConfigAssayMethodProjectDO::getDictionaryProjectId) + .selectAll(ConfigAssayMethodProjectDO.class) + .selectAs(ConfigAssayMethodDO::getName, ConfigAssayMethodProjectExtendRespVO::getConfigAssayMethodName) + .selectAs(ConfigAssayMethodDO::getMethodNameCategory, ConfigAssayMethodProjectExtendRespVO::getConfigAssayMethodNameAndCategory) + .selectAs(DictionaryProjectDO::getKey, ConfigAssayMethodProjectExtendRespVO::getDictionaryProjectKey) + .selectAs(DictionaryProjectDO::getSimpleName, ConfigAssayMethodProjectExtendRespVO::getSimpleName) + .selectAs(DictionaryProjectDO::getShowName, ConfigAssayMethodProjectExtendRespVO::getShowName) + .eq(ConfigAssayMethodDO::getAssayDepartmentId, assayDepartmentId)); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigEntrustSourceMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigEntrustSourceMapper.java index 66e0002e..9e812141 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigEntrustSourceMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigEntrustSourceMapper.java @@ -59,4 +59,10 @@ public interface ConfigEntrustSourceMapper extends BaseMapperX() + .eq(ConfigEntrustSourceDO::getKey, configEntrustSourceKey) + .eq(ConfigEntrustSourceDO::getEntrustType, entrustType)); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/controller/admin/DictionaryProjectController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/controller/admin/DictionaryProjectController.java index 5c948abe..38be617f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/controller/admin/DictionaryProjectController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/controller/admin/DictionaryProjectController.java @@ -91,6 +91,13 @@ public class DictionaryProjectController implements BusinessControllerMarker { return success(BeanUtils.toBean(pageResult, DictionaryProjectRespVO.class)); } + @GetMapping("/list") + @Operation(summary = "获得检测项目字典列表") + public CommonResult getDictionaryProjectList(DictionaryProjectPageReqVO reqVO) { + List list = dictionaryProjectService.getDictionaryProjectList(reqVO); + return success(BeanUtils.toBean(list, DictionaryProjectRespVO.class)); + } + @GetMapping("/export-excel") @Operation(summary = "导出检测项目字典 Excel") //@PreAuthorize("@ss.hasPermission('qms:dictionary-project:export')") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/dal/mapper/DictionaryProjectMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/dal/mapper/DictionaryProjectMapper.java index 9f5621ae..ab5ae49b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/dal/mapper/DictionaryProjectMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/dal/mapper/DictionaryProjectMapper.java @@ -5,6 +5,9 @@ import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.qms.business.dic.controller.vo.DictionaryProjectPageReqVO; import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; + +import java.util.List; + import org.apache.ibatis.annotations.Mapper; /** @@ -27,5 +30,18 @@ public interface DictionaryProjectMapper extends BaseMapperX selectList(DictionaryProjectPageReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(DictionaryProjectDO::getCode, reqVO.getCode()) + .likeIfPresent(DictionaryProjectDO::getName, reqVO.getName()) + .likeIfPresent(DictionaryProjectDO::getSimpleName, reqVO.getSimpleName()) + .likeIfPresent(DictionaryProjectDO::getShowName, reqVO.getShowName()) + .eqIfPresent(DictionaryProjectDO::getKey, reqVO.getKey()) + .eqIfPresent(DictionaryProjectDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .betweenIfPresent(DictionaryProjectDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(DictionaryProjectDO::getRemark, reqVO.getRemark()) + .orderByAsc(DictionaryProjectDO::getId)); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectService.java index 8652b162..9bb8dc7b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectService.java @@ -61,4 +61,11 @@ public interface DictionaryProjectService { */ PageResult getDictionaryProjectPage(DictionaryProjectPageReqVO pageReqVO); + /** + * 获取检测项目字段列表 + * @param reqVO + * @return + */ + List getDictionaryProjectList(DictionaryProjectPageReqVO reqVO); + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectServiceImpl.java index 52f45a2d..99c94bd9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/dic/service/DictionaryProjectServiceImpl.java @@ -86,4 +86,9 @@ public class DictionaryProjectServiceImpl implements DictionaryProjectService { return dictionaryProjectMapper.selectPage(pageReqVO); } + @Override + public List getDictionaryProjectList(DictionaryProjectPageReqVO reqVO) { + return dictionaryProjectMapper.selectList(reqVO); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/controller/vo/OtherDictionaryProjectExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/controller/vo/OtherDictionaryProjectExtendRespVO.java new file mode 100644 index 00000000..74d55bc5 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/controller/vo/OtherDictionaryProjectExtendRespVO.java @@ -0,0 +1,21 @@ +package com.zt.plat.module.qms.business.other.controller.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 扩展 + */ +@Data +public class OtherDictionaryProjectExtendRespVO extends OtherDictionaryProjectRespVO { + + + @Schema(description = "检测项名称") + private String dictionaryProjectName; + + @Schema(description = "检测项简称") + private String dictionaryProjectSimpleName; + + @Schema(description = "检测项显示名") + private String dictionaryProjectShowName; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/dal/mapper/OtherDictionaryProjectMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/dal/mapper/OtherDictionaryProjectMapper.java index 46a8cbd5..ba38812a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/dal/mapper/OtherDictionaryProjectMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/other/dal/mapper/OtherDictionaryProjectMapper.java @@ -4,6 +4,9 @@ import java.util.*; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; +import com.zt.plat.module.qms.business.config.controller.vo.MaterialAssayStandardDetailRespVO; +import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; import com.zt.plat.module.qms.business.other.controller.vo.*; import com.zt.plat.module.qms.business.other.dal.dataobject.OtherDictionaryProjectDO; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; @@ -38,5 +41,16 @@ public interface OtherDictionaryProjectMapper extends BaseMapperX selectExtendByOtherSystemAndOtherIds(String otherSystem, List otherIdList) { + return selectJoinList(OtherDictionaryProjectExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, OtherDictionaryProjectDO::getDictionaryProjectId) + .selectAll(OtherDictionaryProjectDO.class) + .selectAs(DictionaryProjectDO::getName, OtherDictionaryProjectExtendRespVO::getDictionaryProjectName) + .selectAs(DictionaryProjectDO::getSimpleName, OtherDictionaryProjectExtendRespVO::getDictionaryProjectSimpleName) + .selectAs(DictionaryProjectDO::getShowName, OtherDictionaryProjectExtendRespVO::getDictionaryProjectShowName) + .eq(OtherDictionaryProjectDO::getOtherSystem, otherSystem) + .in(OtherDictionaryProjectDO::getOtherId, otherIdList)); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/ThirdpartyXntSampleEntrustServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/ThirdpartyXntSampleEntrustServiceImpl.java index 69df46e0..015f0acd 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/ThirdpartyXntSampleEntrustServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/ThirdpartyXntSampleEntrustServiceImpl.java @@ -18,6 +18,7 @@ import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext; import com.zt.plat.module.qms.business.bus.service.SampleEntrustService; import com.zt.plat.module.qms.business.config.controller.vo.MaterialAssayStandardDetailRespVO; import com.zt.plat.module.qms.business.config.dal.mapper.MaterialAssayStandardDetailMapper; +import com.zt.plat.module.qms.business.other.controller.vo.OtherDictionaryProjectExtendRespVO; import com.zt.plat.module.qms.business.other.dal.dataobject.OtherBaseSampleDO; import com.zt.plat.module.qms.business.other.dal.dataobject.OtherDictionaryBusinessDO; import com.zt.plat.module.qms.business.other.dal.dataobject.OtherDictionaryProjectDO; @@ -139,6 +140,80 @@ public class ThirdpartyXntSampleEntrustServiceImpl implements ThirdpartyXntSampl sampleEntrustParam.setSampleSendDate(LocalDateTime.now()); + List limsObjectIdList = sampleEntrustReqVOList.stream().map(m -> m.getLimsObjectId()).distinct().collect(Collectors.toList()); + List otherBaseSampleDOList = otherBaseSampleMapper.selectByOtherSystemAndOtherIds(QmsCommonConstant.OTHER_SYSTEM_XNT_LIMS, limsObjectIdList); +// List baseSampleIdList = otherBaseSampleDOList.stream().map(m -> m.getBaseSampleId()).distinct().collect(Collectors.toList()); +// List materialAssayStandardDetailRespList = materialAssayStandardDetailMapper.selectByBaseSampleIds(baseSampleIdList); + //获取第三方送样人id列表 + List otherSendUserIdList = sampleEntrustReqVOList.stream().flatMap(m -> { + // 按逗号分割 + String[] parts = m.getEntrustSampleSenderIds().split(","); + + // 转为 Stream 并处理空格 (trim),同时过滤掉分割后可能产生的空字符串 + return Arrays.stream(parts) + .map(String::trim) // 去除每个ID前后的空格 + .filter(s -> !s.isEmpty()); // 过滤掉空项(例如 "101,,102" 中间的空项) + }).distinct().collect(Collectors.toList()); + + List otherSystemUserDOList = otherSystemUserMapper.selectByOtherSystemAndOtherIds(QmsCommonConstant.OTHER_SYSTEM_XNT_LIMS, otherSendUserIdList); + + List otherDictionaryBusinessDOList = otherDictionaryBusinessMapper.selectByOtherSystem(QmsCommonConstant.OTHER_SYSTEM_XNT_LIMS); + + List sampleEntrustDetailList = new ArrayList<>(); + for (ThirdpartyXntSampleEntrustReqVO thirdpartySampleEntrustReqVO : sampleEntrustReqVOList) { + OtherBaseSampleDO otherBaseSampleDO = otherBaseSampleDOList.stream().filter(f -> f.getOtherId().equals(thirdpartySampleEntrustReqVO.getLimsObjectId())).findFirst().orElse(null); + + SampleEntrustDetail sampleEntrustDetail = new SampleEntrustDetail(); + sampleEntrustDetail.setBaseSampleId(otherBaseSampleDO.getBaseSampleId()); + sampleEntrustDetail.setEntrustGroupCode(thirdpartySampleEntrustReqVO.getEntrustGroupCode()); + sampleEntrustDetail.setEntrustBatchCode(thirdpartySampleEntrustReqVO.getEntrustBatchCode()); + sampleEntrustDetail.setEntrustDualFlag(null); + sampleEntrustDetail.setEntrustSampleName(thirdpartySampleEntrustReqVO.getLimsObjectName()); + sampleEntrustDetail.setEntrustSampleCode(thirdpartySampleEntrustReqVO.getEntrustSampleCode()); + sampleEntrustDetail.setSampleName(thirdpartySampleEntrustReqVO.getLimsObjectName()); + sampleEntrustDetail.setSampleCode(thirdpartySampleEntrustReqVO.getEntrustSampleCode()); + if (StringUtils.isNotBlank(thirdpartySampleEntrustReqVO.getEntrustSampleQuantity())) { + sampleEntrustDetail.setIsWeighing(QmsCommonConstant.YES); + } else { + sampleEntrustDetail.setIsWeighing(QmsCommonConstant.NO); + } + sampleEntrustDetail.setEntrustSampleQuantity(thirdpartySampleEntrustReqVO.getEntrustSampleQuantity()); + sampleEntrustDetail.setEntrustSampleQuantityUnit(thirdpartySampleEntrustReqVO.getEntrustSampleQuantityUnit()); + + //处理分析等级 + if (StringUtils.isNotBlank(thirdpartySampleEntrustReqVO.getAssayLevel())) { + OtherDictionaryBusinessDO otherDictionaryBusinessDO = otherDictionaryBusinessDOList.stream().filter(f -> f.getOtherKey().equals(thirdpartySampleEntrustReqVO.getAssayLevel())).findFirst().orElse(null); + sampleEntrustDetail.setAssayLevel(Integer.parseInt(otherDictionaryBusinessDO.getDictionaryBusinessKey())); + } + + String entrustSampleSenderIds = thirdpartySampleEntrustReqVO.getEntrustSampleSenderIds(); + String sampleSender = otherSystemUserDOList.stream().filter(f -> Arrays.asList(entrustSampleSenderIds.split(",")).contains(f.getOtherId())).map(m -> m.getUserRealName()).collect(Collectors.joining(",")); + sampleEntrustParam.setSampleSender(sampleSender); + + String assayProjectIds = thirdpartySampleEntrustReqVO.getAssayProjectIds(); + List assayProjectIdList = Arrays.asList(assayProjectIds.split(",")); + List otherDictionaryProjectDOList = otherDictionaryProjectMapper.selectExtendByOtherSystemAndOtherIds(QmsCommonConstant.OTHER_SYSTEM_XNT_LIMS, assayProjectIdList); +// List dictionaryProjectIdList = otherDictionaryProjectDOList.stream().map(m -> m.getDictionaryProjectId()).collect(Collectors.toList()); +// List currMaterialAssayStandardDetailList = materialAssayStandardDetailRespList.stream().filter(f -> f.getBaseSampleId().equals(otherBaseSampleDO.getBaseSampleId()) && dictionaryProjectIdList.contains(f.getDictionaryProjectId())).collect(Collectors.toList()); +// String assayProjectShowName = currMaterialAssayStandardDetailList.stream().map(m -> m.getDictionaryProjectShowName()).collect(Collectors.joining(",")); + String assayProjectShowName = otherDictionaryProjectDOList.stream().map(m -> m.getDictionaryProjectShowName()).collect(Collectors.joining(",")); + sampleEntrustDetail.setAssayProject(assayProjectShowName); + List sampleEntrustDetailProjectList = new ArrayList<>(); + for (OtherDictionaryProjectExtendRespVO otherDictionaryProject : otherDictionaryProjectDOList) { + SampleEntrustDetailProject sampleEntrustDetailProject = new SampleEntrustDetailProject(); + sampleEntrustDetailProject.setDictionaryProjectId(otherDictionaryProject.getDictionaryProjectId()); + sampleEntrustDetailProject.setIsEnabled(QmsCommonConstant.YES); + sampleEntrustDetailProjectList.add(sampleEntrustDetailProject); + } + sampleEntrustDetail.setSampleEntrustDetailProjectList(sampleEntrustDetailProjectList); + + sampleEntrustDetailList.add(sampleEntrustDetail); + } + + + sampleEntrustParam.setSampleEntrustDetailList(sampleEntrustDetailList); + + return sampleEntrustParam; } From 93fac8ec5ac0cbafb1bf2af67917fee667faabce Mon Sep 17 00:00:00 2001 From: YBP Date: Wed, 1 Apr 2026 17:23:47 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BC=98=E5=8C=96onlyoffice=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/OnlyOfficeController.java | 17 +++-- .../service/OnlyOfficeServiceImpl.java | 67 ++++++++++++++++--- .../RecordFileAttachmentService.java | 2 + .../RecordFileAttachmentServiceImpl.java | 7 ++ .../recordrecord/RecordRecordServiceImpl.java | 64 +++++++++++++++++- 5 files changed, 137 insertions(+), 20 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java index 49dd0a46..c3ae5059 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/controller/admin/OnlyOfficeController.java @@ -1,7 +1,6 @@ package com.zt.plat.module.qms.resource.record.controller.admin.onlyOffice.controller.admin; -import com.zt.plat.framework.business.annotation.FileUploadController; import com.zt.plat.framework.business.controller.AbstractFileUploadController; import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; import com.zt.plat.framework.common.enums.UserTypeEnum; @@ -12,7 +11,6 @@ import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.tenant.core.aop.TenantIgnore; import com.zt.plat.module.qms.resource.record.controller.admin.onlyOffice.controller.vo.OnlyOfficeEditorConfigRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.onlyOffice.service.OnlyOfficeService; -import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.RecordRecordController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -34,15 +32,15 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @RequestMapping("/qms/common/only-office") @Validated @DeptDataPermissionIgnore(enable = "true") -@FileUploadController(source = "qms.only-office", codeKey = "data.fileUploadBusinessCode") +//@FileUploadController(source = "qms.only-office", codeKey = "data.fileUploadBusinessCode") public class OnlyOfficeController extends AbstractFileUploadController implements BusinessControllerMarker { - static { - FileUploadController annotation = RecordRecordController.class.getAnnotation(FileUploadController.class); - if (annotation != null) { - setFileUploadInfo(annotation); - } - } +// static { +// FileUploadController annotation = RecordRecordController.class.getAnnotation(FileUploadController.class); +// if (annotation != null) { +// setFileUploadInfo(annotation); +// } +// } @Resource private OnlyOfficeService onlyOfficeService; @@ -57,6 +55,7 @@ public class OnlyOfficeController extends AbstractFileUploadController implement @GetMapping("/file-content") @Operation(summary = "获取文档文件内容") @PermitAll + @TenantIgnore public void getFileContent(@RequestParam("fileId") Long fileId, @RequestParam("token") String token, HttpServletResponse response) { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java index 71c72efd..1b6355c9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/onlyOffice/service/OnlyOfficeServiceImpl.java @@ -8,6 +8,8 @@ import com.zt.plat.module.infra.api.businessfile.BusinessFileApi; import com.zt.plat.module.infra.api.file.FileApi; import com.zt.plat.module.infra.api.file.dto.FileRespDTO; import com.zt.plat.module.qms.resource.record.controller.admin.onlyOffice.controller.vo.OnlyOfficeEditorConfigRespVO; +import com.zt.plat.module.qms.resource.record.dal.dataobject.recordfileattachment.RecordFileAttachmentDO; +import com.zt.plat.module.qms.resource.record.service.recordfileattachment.RecordFileAttachmentService; import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; import jakarta.annotation.Resource; @@ -30,6 +32,9 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ @Resource private AdminUserApi adminUserApi; + @Resource + private RecordFileAttachmentService recordFileAttachmentService; + private static final String TEXT_DOCUMENT_EXTENSIONS = "doc,docx,odt,rtf,txt,html,htm,mht,pdf,djvu,fb2,epub,xps"; private static final String SPREADSHEET_EXTENSIONS = "xls,xlsx,ods,csv"; private static final String PRESENTATION_EXTENSIONS = "ppt,pptx,odp"; @@ -93,7 +98,11 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ @Override public OnlyOfficeEditorConfigRespVO getEditorConfig(Long id) { - +// RecordFileAttachmentDO recordFileAttachment = recordFileAttachmentService.getRecordFileAttachment(id); +// if (recordFileAttachment == null) { +// CommonResult.error(DOC_NOT_EXISTS); +// return null; +// } Long userId = SecurityFrameworkUtils.getLoginUserId(); OnlyOfficeEditorConfigRespVO resp = new OnlyOfficeEditorConfigRespVO(); @@ -114,8 +123,8 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ // 关键修复:使用基于文档版本的稳定key策略 // 只有当文档内容真正发生版本变更时,key才会改变 -// String documentKey = id + "_v" + data.getUpdateTime(); -// document.setKey(documentKey); + String documentKey = id + "_v" + System.currentTimeMillis(); + document.setKey(documentKey); document.setTitle(fileName); // log.info("生成文档key: docId={}, key={}, latestVersionId={}, userId={}", @@ -128,7 +137,7 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ String fileToken = generateFileToken(data.getId()); // 生成通过新接口访问文件的URL,包含JWT token - fileUrl = StrUtil.removeSuffix(onlyOfficeCallbackBaseUrl, "/") + "/admin-api/infra/doc-file/file-content?fileId=" + data.getId(); + fileUrl = StrUtil.removeSuffix(onlyOfficeCallbackBaseUrl, "/") + "/admin-api/qms/common/only-office/file-content?fileId=" + data.getId(); if (StrUtil.isNotBlank(fileToken)) { fileUrl += "&token=" + fileToken; } @@ -246,16 +255,58 @@ public class OnlyOfficeServiceImpl implements OnlyOfficeService{ return; } - // 获取文件内容 + // 获取文件内容:优先从 content 字段取,若为 null(文件存储在外网OSS时)则通过 URL 下载 byte[] content = file.getContent(); if (content == null) { - response.setStatus(HttpServletResponse.SC_NOT_FOUND); - return; + // 文件存储在外网(OSS/MinIO等),通过 URL 下载文件内容 + String fileUrl = file.getUrl(); + if (StrUtil.isBlank(fileUrl)) { + log.error("文件内容和URL均为空,无法提供文件: fileId={}", fileId); + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + log.info("文件content为空,通过URL下载: fileId={}, url={}", fileId, fileUrl); + try { + java.net.URL url = new java.net.URL(fileUrl); + java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(10000); + conn.setReadTimeout(30000); + conn.setRequestMethod("GET"); + int statusCode = conn.getResponseCode(); + if (statusCode != 200) { + log.error("从外网URL下载文件失败: fileId={}, url={}, httpStatus={}", fileId, fileUrl, statusCode); + response.setStatus(HttpServletResponse.SC_BAD_GATEWAY); + return; + } + // 设置响应头 + response.setContentType(file.getType() != null ? file.getType() : "application/octet-stream"); + response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + // 流式透传,避免大文件OOM + try (java.io.InputStream in = conn.getInputStream(); + OutputStream os = response.getOutputStream()) { + byte[] buffer = new byte[8192]; + int bytesRead; + while ((bytesRead = in.read(buffer)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.flush(); + } + return; + } catch (Exception e) { + log.error("从外网URL下载文件异常: fileId={}, url={}", fileId, fileUrl, e); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return; + } } // 设置响应头 response.setContentType(file.getType() != null ? file.getType() : "application/octet-stream"); -// response.setContentLength(content.length); response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); // 添加跨域头,允许 OnlyOffice 访问 response.setHeader("Access-Control-Allow-Origin", "*"); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentService.java index bf360b4c..be68f1aa 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentService.java @@ -63,4 +63,6 @@ public interface RecordFileAttachmentService { PageResult getRecordFileAttachmentPage(RecordFileAttachmentPageReqVO pageReqVO); int createRecordFileAttachmentBatch(List createAttachmentReqVOList); + + void deleteRecordFileAttachmentByRecord(Long recordId); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentServiceImpl.java index c993bba3..de09eed6 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordfileattachment/RecordFileAttachmentServiceImpl.java @@ -3,6 +3,7 @@ package com.zt.plat.module.qms.resource.record.service.recordfileattachment; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.jwt.JWT; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.qms.resource.record.controller.admin.recordfileattachment.vo.RecordFileAttachmentPageReqVO; @@ -97,6 +98,12 @@ public class RecordFileAttachmentServiceImpl implements RecordFileAttachmentServ return bean.size(); } + @Override + public void deleteRecordFileAttachmentByRecord(Long recordId) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(RecordFileAttachmentDO::getRecordId, recordId); + recordFileAttachmentMapper.delete(query); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java index faae55cf..6712f090 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java @@ -41,6 +41,7 @@ import java.util.List; import java.util.Optional; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*; /** @@ -96,7 +97,7 @@ public class RecordRecordServiceImpl implements RecordRecordService { // 添加文件记录附件 List files = createReqVO.getFiles(); - createFileAttachment(files,recordRecordDO.getId()); + createFileAttachment(files, recordRecordDO.getId()); } catch (Exception e) { throw new RuntimeException("create record error"); @@ -105,6 +106,11 @@ public class RecordRecordServiceImpl implements RecordRecordService { return BeanUtils.toBean(recordRecord, RecordRecordRespVO.class); } + // 删除附件,通过recordId + public void deleteFileAttachment(Long recordId) { + recordFileAttachmentService.deleteRecordFileAttachmentByRecord(recordId); + } + // 添加文件记录附件 public void createFileAttachment(List files, Long recordId) { // List files = createReqVO.getFiles(); @@ -178,7 +184,7 @@ public class RecordRecordServiceImpl implements RecordRecordService { recordRecordMapper.insert(recordRecordDO); // 添加文件记录附件 - createFileAttachment(createReqVO.getFiles(),recordRecordDO.getId()); + createFileAttachment(createReqVO.getFiles(), recordRecordDO.getId()); // 返回 return BeanUtils.toBean(recordRecordDO, RecordRecordRespVO.class); } catch (Exception e) { @@ -273,6 +279,57 @@ public class RecordRecordServiceImpl implements RecordRecordService { // return BeanUtils.toBean(recordRecordList, RecordRecordRespVO.class); // // } + // 文件提交,修改生效状态 + public void recordSubmitStatus(RecordRecordDO recordDO) { + Integer recordStatus = recordDO.getRecordStatus(); + if (recordStatus != null && recordStatus == 1) + throw exception0(RECORD_APPLY_NOT_EXISTS.getCode(), "文件已提交,无法提交申请"); +// RecordCategoryDO recordCategory = recordCategoryService.getRecordCategory(recordDO.getCategoryId()); + // 获取分类的根分类Id +// String idPath = recordCategory.getIdPath(); +// Optional segment = RecordCommonUtils.getSegment(idPath, 1); +// String s = segment.orElse(null); +// if (ObjectUtils.isEmpty(s)) +// throw exception(RECORD_APPLY_NOT_EXISTS); +// RecordCategoryDO category = recordCategoryService.getRecordCategory(Long.valueOf(s)); +// String customConfig = category.getCustomConfig(); +// if (ObjectUtils.isEmpty(customConfig)) { // 空,直接判断是否到生效日期 + // 判断是否到生效日期 +// RecordRecordDO effectiveRecordRecordDO = isEffective(recordDO); +// this.updateRecordRecordById(effectiveRecordRecordDO); +// return true; +// } +// JSONObject jsonObject = JSONObject.parseObject(customConfig); +// Integer submitFlag = jsonObject.getInteger("submitFlag"); +// if (submitFlag == 0) { + // 不允许提交,直接修改文件记录状态 +// recordDO.setRecordStatus(1); // 已生效 + RecordRecordDO effectiveRecordRecordDO = isEffective(recordDO); + this.updateRecordRecordById(effectiveRecordRecordDO); +// return true; +// } else { // 需要走流程 +// recordDO.setSubmitFlag(1); +// recordDO.setRecordStatus(0); +// this.updateRecordRecordById(recordDO); +// } + +// return false; + } + + // 判断文件记录生效状态 + public RecordRecordDO isEffective(RecordRecordDO recordDO) { + LocalDateTime effectiveDate = recordDO.getEffectiveDate(); + if (effectiveDate == null) { // 没有生效日期,立即生效 + recordDO.setRecordStatus(1); + } else { + recordDO.setRecordStatus(0); // 待生效 + LocalDateTime now = LocalDateTime.now(); + if (now.isAfter(effectiveDate) || now.isEqual(effectiveDate)) { + recordDO.setRecordStatus(1); // 已生效 + } + } + return recordDO; + } //通过跟分类的自定义属性判断文件状态 @@ -316,6 +373,7 @@ public class RecordRecordServiceImpl implements RecordRecordService { //删除附件 //TODO + deleteFileAttachment(updateObj.getId()); // 保存附件 List files = updateObj.getFiles(); createFileAttachment(files, updateObj.getId()); @@ -653,7 +711,7 @@ public class RecordRecordServiceImpl implements RecordRecordService { public PageResult getLookRecordList(RecordRecordPageReqVO pageReqVO) { Long categoryId = pageReqVO.getCategoryId(); if (categoryId == null) return PageResult.empty(); - PageResult recordRecordDOPageResult = selectRecordPage(pageReqVO,categoryId,null); + PageResult recordRecordDOPageResult = selectRecordPage(pageReqVO, categoryId, null); return BeanUtils.toBean(recordRecordDOPageResult, RecordRecordRespVO.class); }