diff --git a/pom.xml b/pom.xml
index 7ef1892..71dc209 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,12 +8,7 @@
${revision}
pom
- yudao-module-jy-business
- yudao-module-jy-manage
- yudao-module-jy-resource
- yudao-module-jy-office
- yudao-module-jy-report
- yudao-module-jy-iot
+ yudao-dependencies
qms-server
@@ -155,7 +150,6 @@
aliyun
https://maven.aliyun.com/repository/public
-
spring-milestones
Spring Milestones
@@ -176,9 +170,14 @@
ZT
中铜 ZStack 私服
http://172.16.46.63:30708/repository/maven-hosted/
-
- false
-
+
+
+
+
+
+ zzjc-release
+ Release Repository
+ https://nexus.will-way.cn/repository/zzjc-releases/
diff --git a/qms-server/pom.xml b/qms-server/pom.xml
index e0728e7..8e5bd71 100644
--- a/qms-server/pom.xml
+++ b/qms-server/pom.xml
@@ -9,109 +9,13 @@
4.0.0
qms-server
- jar
+ pom
qms-server
Qms 服务器
-
-
-
- cn.iocoder.cloud
- yudao-module-system-api
- ${revision}
-
-
- cn.iocoder.cloud
- yudao-module-infra-api
- ${revision}
-
-
- cn.iocoder.cloud
- yudao-module-jy-business-server
- ${revision}
-
-
- cn.iocoder.cloud
- yudao-module-jy-manage-server
- ${revision}
-
-
- cn.iocoder.cloud
- yudao-module-jy-resource-server
- ${revision}
-
-
- cn.iocoder.cloud
- yudao-module-jy-office-server
- ${revision}
-
-
- cn.iocoder.cloud
- yudao-module-jy-report-server
- ${revision}
-
-
- cn.iocoder.cloud
- yudao-module-jy-iot-server
- ${revision}
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
-
-
- cn.iocoder.cloud
- yudao-spring-boot-starter-protection
-
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-config
-
-
-
-
- cn.iocoder.cloud
- yudao-spring-boot-starter-rpc
-
-
-
- org.springframework.cloud
- spring-cloud-starter-openfeign
-
-
-
-
-
-
-
-
- ${project.artifactId}
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- ${spring.boot.version}
-
-
-
- repackage
-
-
-
-
-
-
+
+ yudao-module-qms-api
+ yudao-module-qms-server
+
diff --git a/qms-server/pom_bak.xml b/qms-server/pom_bak.xml
new file mode 100644
index 0000000..5c73c8d
--- /dev/null
+++ b/qms-server/pom_bak.xml
@@ -0,0 +1,87 @@
+
+
+
+ cn.iocoder.cloud
+ dsc-qms
+ ${revision}
+
+ 4.0.0
+ qms-server
+ jar
+
+ qms-server
+ Qms 服务器
+
+
+
+ cn.iocoder.cloud
+ yudao-module-system-api
+ ${revision}
+
+
+ cn.iocoder.cloud
+ yudao-module-infra-api
+ ${revision}
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+
+ cn.iocoder.cloud
+ yudao-spring-boot-starter-protection
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ cn.iocoder.cloud
+ yudao-spring-boot-starter-rpc
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+
+
+
+
+
+ ${project.artifactId}
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring.boot.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
+
diff --git a/qms-server/src/main/java/cn/iocoder/yudao/qms/controller/qms/QmsController.java b/qms-server/src/main/java/cn/iocoder/yudao/qms/controller/qms/QmsController.java
index 1d44c2c..eeffb7d 100644
--- a/qms-server/src/main/java/cn/iocoder/yudao/qms/controller/qms/QmsController.java
+++ b/qms-server/src/main/java/cn/iocoder/yudao/qms/controller/qms/QmsController.java
@@ -1,7 +1,7 @@
package cn.iocoder.yudao.qms.controller.qms;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
+//import io.swagger.v3.oas.annotations.Operation;
+//import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -15,13 +15,13 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
*
* @author ZT
*/
-@Tag(name = "qms")
+//@Tag(name = "qms")
@RestController
@RequestMapping("/qms")
public class QmsController {
@GetMapping("/hello")
- @Operation(summary = "Hello qms")
+// @Operation(summary = "Hello qms")
public CommonResult hello() {
return success("Hello, qms!");
}
diff --git a/yudao-module-jy-iot/yudao-module-jy-iot-api/pom.xml b/qms-server/yudao-module-qms-api/pom.xml
similarity index 93%
rename from yudao-module-jy-iot/yudao-module-jy-iot-api/pom.xml
rename to qms-server/yudao-module-qms-api/pom.xml
index c5fd837..2b66828 100644
--- a/yudao-module-jy-iot/yudao-module-jy-iot-api/pom.xml
+++ b/qms-server/yudao-module-qms-api/pom.xml
@@ -3,12 +3,12 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- yudao-module-jy-iot
+ qms-server
cn.iocoder.cloud
${revision}
4.0.0
- yudao-module-jy-iot-api
+ yudao-module-qms-api
jar
${project.artifactId}
diff --git a/qms-server/yudao-module-qms-api/src/main/java/cn/iocoder/yudao/module/qms/enums/ErrorCodeConstants.java b/qms-server/yudao-module-qms-api/src/main/java/cn/iocoder/yudao/module/qms/enums/ErrorCodeConstants.java
new file mode 100644
index 0000000..b52825b
--- /dev/null
+++ b/qms-server/yudao-module-qms-api/src/main/java/cn/iocoder/yudao/module/qms/enums/ErrorCodeConstants.java
@@ -0,0 +1,83 @@
+package cn.iocoder.yudao.module.qms.enums;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+/**
+ * ErrorCodeConstants
+ * 错误码枚举类
+ * qms 系统,使用 1_200_000_000 段
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年8月29日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年8月28日
+ */
+public interface ErrorCodeConstants {
+
+ /*==============================common===============================*/
+ ErrorCode MISS_PARAMETER = new ErrorCode(500, "缺少参数");
+ ErrorCode SQL_INJECTION_EXCEPTION = new ErrorCode(500, "表名不合法,存在SQL注入风险,联系管理员处理");
+
+ ErrorCode DATA_COLLECTION_NOT_EXISTS = new ErrorCode(1_200_000_000, "数据集不存在");
+ ErrorCode DATA_COLLECTION_CLASSIFY_DUPLICATE = new ErrorCode(500, "分类名称重复,请重新输入");
+ ErrorCode DATA_COLLECTION_CLASSIFY_PARENT_ERROR = new ErrorCode(800, "上级分类不能设置为当前分类及其的后代分类");
+ ErrorCode DATA_COLLECTION_FIELD_NOT_EXISTS = new ErrorCode(1_200_000_000, "数据集字段不存在");
+
+ ErrorCode DICTIONARY_BUSINESS_NOT_EXISTS = new ErrorCode(500, "业务参数字典不存在");
+
+ ErrorCode DICTIONARY_BUSINESS_DATA_MORE_THAN_ONE = new ErrorCode(500, "业务参数字典[数据]key重名,请联系管理员处理!");
+ ErrorCode DICTIONARY_BUSINESS_CATEGORY_MORE_THAN_ONE = new ErrorCode(500, "业务参数字典[分类]key重名,请联系管理员处理!");
+ ErrorCode DICTIONARY_BUSINESS_CLASSIFY_DUPLICATE = new ErrorCode(500, "分类名称重复,请重新输入");
+
+
+ /*==============================config===============================*/
+ ErrorCode CONFIG_REPORT_TEMPLATE_NOT_EXISTS = new ErrorCode(1_200_000_000, "报表模版配置不存在");
+ ErrorCode CONFIG_ASSAY_METHOD_NOT_EXISTS = new ErrorCode(1_200_000_000, "检测方法配置不存在");
+ ErrorCode CONFIG_ASSAY_METHOD_PROJECT_NOT_EXISTS = new ErrorCode(1_200_000_000, "检测方法分析项目配置不存在");
+ ErrorCode CONFIG_REPORT_FIELD_NOT_EXISTS = new ErrorCode(1_200_000_000, "报表字段配置不存在");
+ ErrorCode CONFIG_STANDARD_SAMPLE_TYPE_NOT_EXISTS = new ErrorCode(1_200_000_000, "标准样类型配置不存在");
+ ErrorCode CONFIG_STANDARD_SAMPLE_PROJECT_NOT_EXISTS = new ErrorCode(1_200_000_000, "标准样检测项目配置不存在");
+ ErrorCode CONFIG_SUB_SAMPLE_PARENT_NOT_EXISTS = new ErrorCode(1_200_000_000, "分样配置不存在");
+ ErrorCode CONFIG_SUB_SAMPLE_METHOD_NOT_EXISTS = new ErrorCode(1_200_000_000, "子样与检测方法配置不存在");
+ ErrorCode CONFIG_SUB_SAMPLE_NOT_EXISTS = new ErrorCode(1_200_000_000, "子样配置不存在");
+ ErrorCode CONFIG_SAMPLE_REPORT_NOT_EXISTS = new ErrorCode(1_200_000_000, "样品报表关系不存在");
+ ErrorCode CONFIG_SAMPLE_FLOW_NOT_EXISTS = new ErrorCode(1_200_000_000, "样品流程配置不存在");
+ ErrorCode CONFIG_REPORT_TYPE_NOT_EXISTS = new ErrorCode(1_200_000_000, "报表类型配置不存在");
+ ErrorCode CONFIG_PROJECT_NOT_EXISTS = new ErrorCode(1_200_000_000, "检测项目配置不存在");
+ ErrorCode CONFIG_ENTRUST_SOURCE_NOT_EXISTS = new ErrorCode(1_200_000_000, "检验委托来源配置不存在");
+ ErrorCode CONFIG_DOCUMENT_TYPE_NOT_EXISTS = new ErrorCode(1_200_000_000, "报告类型配置不存在");
+ ErrorCode CONFIG_BASE_SAMPLE_NOT_EXISTS = new ErrorCode(1_200_000_000, "主样配置不存在");
+ ErrorCode CONFIG_ASSAY_METHOD_PROJECT_PARAMETER_NOT_EXISTS = new ErrorCode(1_200_000_000, "检测方法分析项目参数配置不存在");
+ ErrorCode CONFIG_WAREHOUSE_LOCATION_INFOMATION_NOT_EXISTS = new ErrorCode(1_200_000_000, "样品库位信息不存在");
+ ErrorCode CONFIG_SIMPLE_FLOW_RULE_NOT_EXISTS = new ErrorCode(1_200_000_000, "LiteFlow规则配置不存在");
+ ErrorCode CONFIG_SIMPLE_FLOW_CODE_NOT_EXISTS = new ErrorCode(1_200_000_000, "LiteFlow脚本配置不存在");
+
+ ErrorCode BASE_SAMPLE_NOT_EXISTS = new ErrorCode(500, "样品大类管理不存在");
+ ErrorCode MATERIAL_ASSAY_STANDARD_DETAIL_NOT_EXISTS = new ErrorCode(500, "检测标准明细不存在");
+ ErrorCode MATERIAL_ASSAY_STANDARD_NOT_EXISTS = new ErrorCode(500, "检测标准不存在");
+ ErrorCode MATERIAL_ASSAY_STANDARD_METHOD_NOT_EXISTS = new ErrorCode(500, "检测标准方法不存在");
+
+
+ /*==============================dictionary===============================*/
+ ErrorCode DICTIONARY_SAMPLE_FLOW_NODE_NOT_EXISTS = new ErrorCode(1_200_000_000, "样品流程节点字典不存在");
+ ErrorCode DICTIONARY_PARAMETER_NOT_EXISTS = new ErrorCode(1_200_000_000, "检测参数字典不存在");
+ ErrorCode DICTIONARY_PROJECT_NOT_EXISTS = new ErrorCode(1_200_000_000, "检测项目字典不存在");
+ ErrorCode DICTIONARY_SAMPLE_TYPE_NOT_EXISTS = new ErrorCode(1_200_000_000, "样品类型字典不存在");
+
+ /*=================================bus==================================*/
+ ErrorCode BUSINESS_SAMPLE_ENTRUST_REGISTRATION_NOT_EXISTS = new ErrorCode(1_200_000_000, "委检登记业务不存在");
+ ErrorCode BUSINESS_SAMPLE_ENTRUST_DETAIL_NOT_EXISTS = new ErrorCode(1_200_000_000, "委检登记样品明细不存在");
+ ErrorCode BUSINESS_SAMPLE_ENTRUST_PROJECT_NOT_EXISTS = new ErrorCode(1_200_000_000, "委检样品检测项目业务不存在");
+
+ ErrorCode BUSINESS_BASE_SAMPLE_NOT_EXISTS = new ErrorCode(1_200_000_000, "主样业务不存在");
+ ErrorCode BUSINESS_SUB_PARENT_SAMPLE_NOT_EXISTS = new ErrorCode(1_200_000_000, "分样业务不存在");
+ ErrorCode BUSINESS_SUB_SAMPLE_NOT_EXISTS = new ErrorCode(1_200_000_000, "子样业务不存在");
+ ErrorCode BUSINESS_HANDOVER_RECORD_SUB_NOT_EXISTS = new ErrorCode(1_200_000_000, "子样交接记录业务不存在");
+ ErrorCode BUSINESS_SAMPLE_ASSAY_RESULT_NOT_EXISTS = new ErrorCode(1_200_000_000, "委检登记来样品位不存在");
+
+
+}
diff --git a/yudao-module-jy-resource/yudao-module-jy-resource-server/pom.xml b/qms-server/yudao-module-qms-server/pom.xml
similarity index 71%
rename from yudao-module-jy-resource/yudao-module-jy-resource-server/pom.xml
rename to qms-server/yudao-module-qms-server/pom.xml
index 3846cdf..61ad8dc 100644
--- a/yudao-module-jy-resource/yudao-module-jy-resource-server/pom.xml
+++ b/qms-server/yudao-module-qms-server/pom.xml
@@ -3,18 +3,18 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- yudao-module-jy-resource
+ qms-server
cn.iocoder.cloud
${revision}
4.0.0
jar
- yudao-module-jy-resource-server
+ yudao-module-qms-server
${project.artifactId}
- JyResource 模块。
+ 样例模块。
@@ -38,7 +38,7 @@
cn.iocoder.cloud
- yudao-module-jy-resource-api
+ yudao-module-qms-api
${revision}
@@ -116,6 +116,60 @@
yudao-spring-boot-starter-excel
+
+ org.apache.commons
+ commons-text
+ 1.14.0
+
+
+
+
+ cn.rubylong
+ gridreport
+ 20230309.RELEASE
+
+
+
+
+ com.yomahub
+ liteflow-spring-boot-starter
+ 2.15.0
+
+
+ com.yomahub
+ liteflow-script-javax-pro
+ 2.15.0
+
+
+ com.yomahub
+ liteflow-script-groovy
+ 2.15.0
+
+
+ com.yomahub
+ liteflow-script-qlexpress
+ 2.15.0
+
+
+ com.yomahub
+ liteflow-script-graaljs
+ 2.15.0
+
+
+
+
+ org.apache.pdfbox
+ pdfbox
+ 2.0.33
+
+
+
+
+ e-iceblue
+ spire.pdf.free
+ 9.13.0
+
+
cn.iocoder.cloud
@@ -147,5 +201,4 @@
-
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/QmsServerApplication.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/QmsServerApplication.java
new file mode 100644
index 0000000..4c6280f
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/QmsServerApplication.java
@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.qms;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * 项目的启动类
+ */
+@SpringBootApplication
+public class QmsServerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(QmsServerApplication.class, args);
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessBaseSampleController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessBaseSampleController.java
new file mode 100644
index 0000000..6d6df32
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessBaseSampleController.java
@@ -0,0 +1,106 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessBaseSampleService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+@Tag(name = "管理后台 - 主样业务")
+@RestController
+@RequestMapping("/qms/business-base-sample")
+@Validated
+public class BusinessBaseSampleController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessBaseSampleService businessBaseSampleService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建主样业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-base-sample:create')")
+ public CommonResult createBusinessBaseSample(@Valid @RequestBody BusinessBaseSampleSaveReqVO createReqVO) {
+ return success(businessBaseSampleService.createBusinessBaseSample(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新主样业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-base-sample:update')")
+ public CommonResult updateBusinessBaseSample(@Valid @RequestBody BusinessBaseSampleSaveReqVO updateReqVO) {
+ businessBaseSampleService.updateBusinessBaseSample(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除主样业务")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('qms:business-base-sample:delete')")
+ public CommonResult deleteBusinessBaseSample(@RequestParam("id") Long id) {
+ businessBaseSampleService.deleteBusinessBaseSample(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除主样业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-base-sample:delete')")
+ public CommonResult deleteBusinessBaseSampleList(@RequestBody BatchDeleteReqVO req) {
+ businessBaseSampleService.deleteBusinessBaseSampleListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得主样业务")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('qms:business-base-sample:query')")
+ public CommonResult getBusinessBaseSample(@RequestParam("id") Long id) {
+ BusinessBaseSampleDO businessBaseSample = businessBaseSampleService.getBusinessBaseSample(id);
+ return success(BeanUtils.toBean(businessBaseSample, BusinessBaseSampleRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得主样业务分页")
+ @PreAuthorize("@ss.hasPermission('qms:business-base-sample:query')")
+ public CommonResult> getBusinessBaseSamplePage(@Valid BusinessBaseSamplePageReqVO pageReqVO) {
+ PageResult pageResult = businessBaseSampleService.getBusinessBaseSamplePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessBaseSampleRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出主样业务 Excel")
+ @PreAuthorize("@ss.hasPermission('qms:business-base-sample:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportBusinessBaseSampleExcel(@Valid BusinessBaseSamplePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessBaseSampleService.getBusinessBaseSamplePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "主样业务.xls", "数据", BusinessBaseSampleRespVO.class,
+ BeanUtils.toBean(list, BusinessBaseSampleRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessHandoverRecordSubController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessHandoverRecordSubController.java
new file mode 100644
index 0000000..7cf0ea6
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessHandoverRecordSubController.java
@@ -0,0 +1,106 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessHandoverRecordSubDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessHandoverRecordSubService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+@Tag(name = "管理后台 - 子样交接记录业务")
+@RestController
+@RequestMapping("/qms/business-handover-record-sub")
+@Validated
+public class BusinessHandoverRecordSubController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessHandoverRecordSubService businessHandoverRecordSubService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建子样交接记录业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-handover-record-sub:create')")
+ public CommonResult createBusinessHandoverRecordSub(@Valid @RequestBody BusinessHandoverRecordSubSaveReqVO createReqVO) {
+ return success(businessHandoverRecordSubService.createBusinessHandoverRecordSub(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新子样交接记录业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-handover-record-sub:update')")
+ public CommonResult updateBusinessHandoverRecordSub(@Valid @RequestBody BusinessHandoverRecordSubSaveReqVO updateReqVO) {
+ businessHandoverRecordSubService.updateBusinessHandoverRecordSub(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除子样交接记录业务")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('qms:business-handover-record-sub:delete')")
+ public CommonResult deleteBusinessHandoverRecordSub(@RequestParam("id") Long id) {
+ businessHandoverRecordSubService.deleteBusinessHandoverRecordSub(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除子样交接记录业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-handover-record-sub:delete')")
+ public CommonResult deleteBusinessHandoverRecordSubList(@RequestBody BatchDeleteReqVO req) {
+ businessHandoverRecordSubService.deleteBusinessHandoverRecordSubListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得子样交接记录业务")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('qms:business-handover-record-sub:query')")
+ public CommonResult getBusinessHandoverRecordSub(@RequestParam("id") Long id) {
+ BusinessHandoverRecordSubDO businessHandoverRecordSub = businessHandoverRecordSubService.getBusinessHandoverRecordSub(id);
+ return success(BeanUtils.toBean(businessHandoverRecordSub, BusinessHandoverRecordSubRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得子样交接记录业务分页")
+ @PreAuthorize("@ss.hasPermission('qms:business-handover-record-sub:query')")
+ public CommonResult> getBusinessHandoverRecordSubPage(@Valid BusinessHandoverRecordSubPageReqVO pageReqVO) {
+ PageResult pageResult = businessHandoverRecordSubService.getBusinessHandoverRecordSubPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessHandoverRecordSubRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出子样交接记录业务 Excel")
+ @PreAuthorize("@ss.hasPermission('qms:business-handover-record-sub:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportBusinessHandoverRecordSubExcel(@Valid BusinessHandoverRecordSubPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessHandoverRecordSubService.getBusinessHandoverRecordSubPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "子样交接记录业务.xls", "数据", BusinessHandoverRecordSubRespVO.class,
+ BeanUtils.toBean(list, BusinessHandoverRecordSubRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleAssayResultController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleAssayResultController.java
new file mode 100644
index 0000000..c4afd25
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleAssayResultController.java
@@ -0,0 +1,106 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessSampleAssayResultService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+@Tag(name = "管理后台 - 委检登记来样品位")
+@RestController
+@RequestMapping("/qms/business-sample-assay-result")
+@Validated
+public class BusinessSampleAssayResultController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessSampleAssayResultService businessSampleAssayResultService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建委检登记来样品位")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-assay-result:create')")
+ public CommonResult createBusinessSampleAssayResult(@Valid @RequestBody BusinessSampleAssayResultSaveReqVO createReqVO) {
+ return success(businessSampleAssayResultService.createBusinessSampleAssayResult(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新委检登记来样品位")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-assay-result:update')")
+ public CommonResult updateBusinessSampleAssayResult(@Valid @RequestBody BusinessSampleAssayResultSaveReqVO updateReqVO) {
+ businessSampleAssayResultService.updateBusinessSampleAssayResult(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除委检登记来样品位")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-assay-result:delete')")
+ public CommonResult deleteBusinessSampleAssayResult(@RequestParam("id") Long id) {
+ businessSampleAssayResultService.deleteBusinessSampleAssayResult(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除委检登记来样品位")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-assay-result:delete')")
+ public CommonResult deleteBusinessSampleAssayResultList(@RequestBody BatchDeleteReqVO req) {
+ businessSampleAssayResultService.deleteBusinessSampleAssayResultListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得委检登记来样品位")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-assay-result:query')")
+ public CommonResult getBusinessSampleAssayResult(@RequestParam("id") Long id) {
+ BusinessSampleAssayResultDO businessSampleAssayResult = businessSampleAssayResultService.getBusinessSampleAssayResult(id);
+ return success(BeanUtils.toBean(businessSampleAssayResult, BusinessSampleAssayResultRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得委检登记来样品位分页")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-assay-result:query')")
+ public CommonResult> getBusinessSampleAssayResultPage(@Valid BusinessSampleAssayResultPageReqVO pageReqVO) {
+ PageResult pageResult = businessSampleAssayResultService.getBusinessSampleAssayResultPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessSampleAssayResultRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出委检登记来样品位 Excel")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-assay-result:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportBusinessSampleAssayResultExcel(@Valid BusinessSampleAssayResultPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessSampleAssayResultService.getBusinessSampleAssayResultPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "委检登记来样品位.xls", "数据", BusinessSampleAssayResultRespVO.class,
+ BeanUtils.toBean(list, BusinessSampleAssayResultRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustDetailController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustDetailController.java
new file mode 100644
index 0000000..e8ba02c
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustDetailController.java
@@ -0,0 +1,106 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessSampleEntrustDetailService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+@Tag(name = "管理后台 - 委检登记样品明细")
+@RestController
+@RequestMapping("/qms/business-sample-entrust-detail")
+@Validated
+public class BusinessSampleEntrustDetailController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessSampleEntrustDetailService businessSampleEntrustDetailService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建委检登记样品明细")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-detail:create')")
+ public CommonResult createBusinessSampleEntrustDetail(@Valid @RequestBody BusinessSampleEntrustDetailSaveReqVO createReqVO) {
+ return success(businessSampleEntrustDetailService.createBusinessSampleEntrustDetail(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新委检登记样品明细")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-detail:update')")
+ public CommonResult updateBusinessSampleEntrustDetail(@Valid @RequestBody BusinessSampleEntrustDetailSaveReqVO updateReqVO) {
+ businessSampleEntrustDetailService.updateBusinessSampleEntrustDetail(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除委检登记样品明细")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-detail:delete')")
+ public CommonResult deleteBusinessSampleEntrustDetail(@RequestParam("id") Long id) {
+ businessSampleEntrustDetailService.deleteBusinessSampleEntrustDetail(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除委检登记样品明细")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-detail:delete')")
+ public CommonResult deleteBusinessSampleEntrustDetailList(@RequestBody BatchDeleteReqVO req) {
+ businessSampleEntrustDetailService.deleteBusinessSampleEntrustDetailListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得委检登记样品明细")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-detail:query')")
+ public CommonResult getBusinessSampleEntrustDetail(@RequestParam("id") Long id) {
+ BusinessSampleEntrustDetailDO businessSampleEntrustDetail = businessSampleEntrustDetailService.getBusinessSampleEntrustDetail(id);
+ return success(BeanUtils.toBean(businessSampleEntrustDetail, BusinessSampleEntrustDetailRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得委检登记样品明细分页")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-detail:query')")
+ public CommonResult> getBusinessSampleEntrustDetailPage(@Valid BusinessSampleEntrustDetailPageReqVO pageReqVO) {
+ PageResult pageResult = businessSampleEntrustDetailService.getBusinessSampleEntrustDetailPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessSampleEntrustDetailRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出委检登记样品明细 Excel")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-detail:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportBusinessSampleEntrustDetailExcel(@Valid BusinessSampleEntrustDetailPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessSampleEntrustDetailService.getBusinessSampleEntrustDetailPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "委检登记样品明细.xls", "数据", BusinessSampleEntrustDetailRespVO.class,
+ BeanUtils.toBean(list, BusinessSampleEntrustDetailRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustProjectController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustProjectController.java
new file mode 100644
index 0000000..5454121
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustProjectController.java
@@ -0,0 +1,106 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessSampleEntrustProjectService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+@Tag(name = "管理后台 - 委检样品检测项目业务")
+@RestController
+@RequestMapping("/qms/business-sample-entrust-project")
+@Validated
+public class BusinessSampleEntrustProjectController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessSampleEntrustProjectService businessSampleEntrustProjectService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建委检样品检测项目业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-project:create')")
+ public CommonResult createBusinessSampleEntrustProject(@Valid @RequestBody BusinessSampleEntrustProjectSaveReqVO createReqVO) {
+ return success(businessSampleEntrustProjectService.createBusinessSampleEntrustProject(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新委检样品检测项目业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-project:update')")
+ public CommonResult updateBusinessSampleEntrustProject(@Valid @RequestBody BusinessSampleEntrustProjectSaveReqVO updateReqVO) {
+ businessSampleEntrustProjectService.updateBusinessSampleEntrustProject(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除委检样品检测项目业务")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-project:delete')")
+ public CommonResult deleteBusinessSampleEntrustProject(@RequestParam("id") Long id) {
+ businessSampleEntrustProjectService.deleteBusinessSampleEntrustProject(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除委检样品检测项目业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-project:delete')")
+ public CommonResult deleteBusinessSampleEntrustProjectList(@RequestBody BatchDeleteReqVO req) {
+ businessSampleEntrustProjectService.deleteBusinessSampleEntrustProjectListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得委检样品检测项目业务")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-project:query')")
+ public CommonResult getBusinessSampleEntrustProject(@RequestParam("id") Long id) {
+ BusinessSampleEntrustProjectDO businessSampleEntrustProject = businessSampleEntrustProjectService.getBusinessSampleEntrustProject(id);
+ return success(BeanUtils.toBean(businessSampleEntrustProject, BusinessSampleEntrustProjectRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得委检样品检测项目业务分页")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-project:query')")
+ public CommonResult> getBusinessSampleEntrustProjectPage(@Valid BusinessSampleEntrustProjectPageReqVO pageReqVO) {
+ PageResult pageResult = businessSampleEntrustProjectService.getBusinessSampleEntrustProjectPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessSampleEntrustProjectRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出委检样品检测项目业务 Excel")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-project:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportBusinessSampleEntrustProjectExcel(@Valid BusinessSampleEntrustProjectPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessSampleEntrustProjectService.getBusinessSampleEntrustProjectPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "委检样品检测项目业务.xls", "数据", BusinessSampleEntrustProjectRespVO.class,
+ BeanUtils.toBean(list, BusinessSampleEntrustProjectRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustRegistrationController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustRegistrationController.java
new file mode 100644
index 0000000..2438444
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSampleEntrustRegistrationController.java
@@ -0,0 +1,107 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessSampleEntrustRegistrationService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+
+@Tag(name = "管理后台 - 委检登记业务")
+@RestController
+@RequestMapping("/qms/business-sample-entrust-registration")
+@Validated
+public class BusinessSampleEntrustRegistrationController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessSampleEntrustRegistrationService businessSampleEntrustRegistrationService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建委检登记业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-registration:create')")
+ public CommonResult createBusinessSampleEntrustRegistration(@Valid @RequestBody BusinessSampleEntrustRegistrationSaveReqVO createReqVO) {
+ return success(businessSampleEntrustRegistrationService.createBusinessSampleEntrustRegistration(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新委检登记业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-registration:update')")
+ public CommonResult updateBusinessSampleEntrustRegistration(@Valid @RequestBody BusinessSampleEntrustRegistrationSaveReqVO updateReqVO) {
+ businessSampleEntrustRegistrationService.updateBusinessSampleEntrustRegistration(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除委检登记业务")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-registration:delete')")
+ public CommonResult deleteBusinessSampleEntrustRegistration(@RequestParam("id") Long id) {
+ businessSampleEntrustRegistrationService.deleteBusinessSampleEntrustRegistration(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除委检登记业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-registration:delete')")
+ public CommonResult deleteBusinessSampleEntrustRegistrationList(@RequestBody BatchDeleteReqVO req) {
+ businessSampleEntrustRegistrationService.deleteBusinessSampleEntrustRegistrationListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得委检登记业务")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-registration:query')")
+ public CommonResult getBusinessSampleEntrustRegistration(@RequestParam("id") Long id) {
+ BusinessSampleEntrustRegistrationDO businessSampleEntrustRegistration = businessSampleEntrustRegistrationService.getBusinessSampleEntrustRegistration(id);
+ return success(BeanUtils.toBean(businessSampleEntrustRegistration, BusinessSampleEntrustRegistrationRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得委检登记业务分页")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-registration:query')")
+ public CommonResult> getBusinessSampleEntrustRegistrationPage(@Valid BusinessSampleEntrustRegistrationPageReqVO pageReqVO) {
+ PageResult pageResult = businessSampleEntrustRegistrationService.getBusinessSampleEntrustRegistrationPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessSampleEntrustRegistrationRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出委检登记业务 Excel")
+ @PreAuthorize("@ss.hasPermission('qms:business-sample-entrust-registration:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportBusinessSampleEntrustRegistrationExcel(@Valid BusinessSampleEntrustRegistrationPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessSampleEntrustRegistrationService.getBusinessSampleEntrustRegistrationPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "委检登记业务.xls", "数据", BusinessSampleEntrustRegistrationRespVO.class,
+ BeanUtils.toBean(list, BusinessSampleEntrustRegistrationRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSubParentSampleController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSubParentSampleController.java
new file mode 100644
index 0000000..7e1691a
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSubParentSampleController.java
@@ -0,0 +1,106 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessSubParentSampleService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+@Tag(name = "管理后台 - 分样业务")
+@RestController
+@RequestMapping("/qms/business-sub-parent-sample")
+@Validated
+public class BusinessSubParentSampleController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessSubParentSampleService businessSubParentSampleService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建分样业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sub-parent-sample:create')")
+ public CommonResult createBusinessSubParentSample(@Valid @RequestBody BusinessSubParentSampleSaveReqVO createReqVO) {
+ return success(businessSubParentSampleService.createBusinessSubParentSample(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新分样业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sub-parent-sample:update')")
+ public CommonResult updateBusinessSubParentSample(@Valid @RequestBody BusinessSubParentSampleSaveReqVO updateReqVO) {
+ businessSubParentSampleService.updateBusinessSubParentSample(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除分样业务")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('qms:business-sub-parent-sample:delete')")
+ public CommonResult deleteBusinessSubParentSample(@RequestParam("id") Long id) {
+ businessSubParentSampleService.deleteBusinessSubParentSample(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除分样业务")
+ @PreAuthorize("@ss.hasPermission('qms:business-sub-parent-sample:delete')")
+ public CommonResult deleteBusinessSubParentSampleList(@RequestBody BatchDeleteReqVO req) {
+ businessSubParentSampleService.deleteBusinessSubParentSampleListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得分样业务")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('qms:business-sub-parent-sample:query')")
+ public CommonResult getBusinessSubParentSample(@RequestParam("id") Long id) {
+ BusinessSubParentSampleDO businessSubParentSample = businessSubParentSampleService.getBusinessSubParentSample(id);
+ return success(BeanUtils.toBean(businessSubParentSample, BusinessSubParentSampleRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得分样业务分页")
+ @PreAuthorize("@ss.hasPermission('qms:business-sub-parent-sample:query')")
+ public CommonResult> getBusinessSubParentSamplePage(@Valid BusinessSubParentSamplePageReqVO pageReqVO) {
+ PageResult pageResult = businessSubParentSampleService.getBusinessSubParentSamplePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessSubParentSampleRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出分样业务 Excel")
+ @PreAuthorize("@ss.hasPermission('qms:business-sub-parent-sample:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportBusinessSubParentSampleExcel(@Valid BusinessSubParentSamplePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessSubParentSampleService.getBusinessSubParentSamplePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "分样业务.xls", "数据", BusinessSubParentSampleRespVO.class,
+ BeanUtils.toBean(list, BusinessSubParentSampleRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSubSampleController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSubSampleController.java
new file mode 100644
index 0000000..e50bf9a
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/BusinessSubSampleController.java
@@ -0,0 +1,107 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+
+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.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSamplePageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSampleRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSampleSaveReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessSubSampleService;
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+@Tag(name = "管理后台 - 子样业务")
+@RestController
+@RequestMapping("/qms/bus/iness-sub-sample")
+@Validated
+public class BusinessSubSampleController implements BusinessControllerMarker {
+
+
+ @Resource
+ private BusinessSubSampleService businessSubSampleService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建子样业务")
+ @PreAuthorize("@ss.hasPermission('bus:iness-sub-sample:create')")
+ public CommonResult createinessSubSample(@Valid @RequestBody BusinessSubSampleSaveReqVO createReqVO) {
+ return success(businessSubSampleService.createinessSubSample(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新子样业务")
+ @PreAuthorize("@ss.hasPermission('bus:iness-sub-sample:update')")
+ public CommonResult updateinessSubSample(@Valid @RequestBody BusinessSubSampleSaveReqVO updateReqVO) {
+ businessSubSampleService.updateinessSubSample(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除子样业务")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('bus:iness-sub-sample:delete')")
+ public CommonResult deleteinessSubSample(@RequestParam("id") Long id) {
+ businessSubSampleService.deleteinessSubSample(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除子样业务")
+ @PreAuthorize("@ss.hasPermission('bus:iness-sub-sample:delete')")
+ public CommonResult deleteinessSubSampleList(@RequestParam("ids") List ids) {
+ businessSubSampleService.deleteinessSubSampleListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得子样业务")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('bus:iness-sub-sample:query')")
+ public CommonResult getinessSubSample(@RequestParam("id") Long id) {
+ BusinessSubSampleDO inessSubSample = businessSubSampleService.getinessSubSample(id);
+ return success(BeanUtils.toBean(inessSubSample, BusinessSubSampleRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得子样业务分页")
+ @PreAuthorize("@ss.hasPermission('bus:iness-sub-sample:query')")
+ public CommonResult> getinessSubSamplePage(@Valid BusinessSubSamplePageReqVO pageReqVO) {
+ PageResult pageResult = businessSubSampleService.getinessSubSamplePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, BusinessSubSampleRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出子样业务 Excel")
+ @PreAuthorize("@ss.hasPermission('bus:iness-sub-sample:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportinessSubSampleExcel(@Valid BusinessSubSamplePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = businessSubSampleService.getinessSubSamplePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "子样业务.xls", "数据", BusinessSubSampleRespVO.class,
+ BeanUtils.toBean(list, BusinessSubSampleRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/SampleEntrustController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/SampleEntrustController.java
new file mode 100644
index 0000000..9739127
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/SampleEntrustController.java
@@ -0,0 +1,185 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.alibaba.fastjson2.JSON;
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustDetail;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustDetailProject;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustParam;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleFlowParam;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleFlowContext;
+import cn.iocoder.yudao.module.qms.business.bus.service.SampleEntrustService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+
+/**
+ * SampleEntrustController
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@Tag(name = "管理后台 - 样品委托")
+@RestController
+@RequestMapping("/qms/bus/sample/entrust")
+@Validated
+public class SampleEntrustController {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Resource
+ private SampleEntrustService sampleEntrustService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建委托登记")
+ public CommonResult> create(@Valid @RequestBody SampleEntrustParam sampleEntrustParam) {
+ LiteflowResponse response = sampleEntrustService.create(sampleEntrustParam);
+ if (response.isSuccess()) {
+ return success(response.getContextBean(SampleEntrustContext.class));
+ } else {
+ return error(500, response.getMessage());
+ }
+ }
+
+ @GetMapping("/detail")
+ @Operation(summary = "委托登记详情")
+ public CommonResult> detail(@RequestParam("id") Long id) {
+ BusinessSampleEntrustRegistrationExtendRespVO sampleEntrustRegistration = sampleEntrustService.detail(id);
+ return success(sampleEntrustRegistration);
+ }
+
+ @PostMapping("/update")
+ @Operation(summary = "修改委托登记")
+ public CommonResult> update(@Valid @RequestBody SampleEntrustParam sampleEntrustParam) {
+ LiteflowResponse response = sampleEntrustService.update(sampleEntrustParam);
+ if (response.isSuccess()) {
+ return success(response.getContextBean(SampleEntrustContext.class));
+ } else {
+ return error(500, response.getMessage());
+ }
+ }
+
+ @PostMapping("/submit")
+ @Operation(summary = "提交托登记")
+ public CommonResult> submit(@Valid @RequestBody BusinessSampleEntrustRegistrationSubmitReqVO req) {
+ //如果仅勾选了送样,则需要把收样也勾选
+ if (req.getIsSendSample().equals(1) && req.getIsReceiveSample().equals(0)) {
+ req.setIsReceiveSample(1);
+ }
+ sampleEntrustService.submit(req);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除委托登记")
+ @Parameter(name = "id", description = "ID", required = true)
+ public CommonResult delete(@RequestParam("id") Long id) {
+ sampleEntrustService.delete(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "ID", required = true)
+ @Operation(summary = "批量删除委托登记")
+ public CommonResult deleteList(@RequestParam("ids") List ids) {
+ sampleEntrustService.deleteList(ids);
+ return success(true);
+ }
+
+ @PostMapping("/test")
+ public CommonResult> test() {
+
+ Long tenantId = TenantContextHolder.getRequiredTenantId();
+
+ SampleEntrustDetail sampleEntrustDetail_1 = new SampleEntrustDetail();
+ sampleEntrustDetail_1.setBaseSampleId(1000000000000000001L);//铜精矿(结算样)
+ sampleEntrustDetail_1.setDictionaryBusinessId(1965289473129664514L);
+ sampleEntrustDetail_1.setSampleName("铜精矿");
+ sampleEntrustDetail_1.setEntrustSampleCode("SRC0001");
+ sampleEntrustDetail_1.setEntrustSampleName("来样名称-铜精矿");
+ sampleEntrustDetail_1.setSort(1);
+ sampleEntrustDetail_1.setAssayProject("");
+ sampleEntrustDetail_1.setForecastResult("");
+ sampleEntrustDetail_1.setRemark("");
+
+ List sampleEntrustDetailProjectList_1 = new ArrayList<>();
+ SampleEntrustDetailProject sampleEntrustDetailProject_1_1 = new SampleEntrustDetailProject();
+ sampleEntrustDetailProject_1_1.setMaterialAssayStandardDetailId(1000000000000000001L);
+ sampleEntrustDetailProject_1_1.setIsEnabled(1);
+ sampleEntrustDetailProjectList_1.add(sampleEntrustDetailProject_1_1);
+ sampleEntrustDetail_1.setSampleEntrustDetailProjectList(sampleEntrustDetailProjectList_1);
+
+ SampleEntrustDetail sampleEntrustDetail_2 = new SampleEntrustDetail();
+ sampleEntrustDetail_2.setBaseSampleId(1000000000000000001L);//铜精矿(结算样)
+ sampleEntrustDetail_2.setDictionaryBusinessId(1965289473129664514L);
+ sampleEntrustDetail_2.setSampleName("铜精矿");
+ sampleEntrustDetail_2.setEntrustSampleCode("SRC0002");
+ sampleEntrustDetail_2.setEntrustSampleName("来样名称-铜精矿");
+ sampleEntrustDetail_2.setSort(2);
+ sampleEntrustDetail_2.setAssayProject("");
+ sampleEntrustDetail_2.setForecastResult("");
+ sampleEntrustDetail_2.setRemark("");
+
+ List sampleEntrustDetailProjectList_2 = new ArrayList<>();
+ SampleEntrustDetailProject sampleEntrustDetailProject_2_1 = new SampleEntrustDetailProject();
+ sampleEntrustDetailProject_2_1.setMaterialAssayStandardDetailId(1000000000000000001L);
+ sampleEntrustDetailProject_2_1.setIsEnabled(1);
+ sampleEntrustDetailProjectList_2.add(sampleEntrustDetailProject_2_1);
+ sampleEntrustDetail_2.setSampleEntrustDetailProjectList(sampleEntrustDetailProjectList_2);
+
+ List sampleEntrustDetailList = new ArrayList<>();
+ sampleEntrustDetailList.add(sampleEntrustDetail_1);
+ sampleEntrustDetailList.add(sampleEntrustDetail_2);
+
+
+ SampleEntrustParam sampleEntrustParam = new SampleEntrustParam();
+ sampleEntrustParam.setEntrustUnit("西南铜业");
+ sampleEntrustParam.setSampleSender("送样人");
+ sampleEntrustParam.setConfigEntrustSourceId(1000000000000000001L);
+ sampleEntrustParam.setSampleSendDate(LocalDateTime.now());
+ sampleEntrustParam.setSampleQuantity(2);
+ sampleEntrustParam.setRemaineSampleRequirement("放弃");
+ sampleEntrustParam.setSampleEntrustDetailList(sampleEntrustDetailList);
+
+ String jsonString = JSON.toJSONString(sampleEntrustParam);
+ System.out.println(jsonString);
+
+ LiteflowResponse response = flowExecutor.execute2Resp("sampleEntrustChain" + tenantId, sampleEntrustParam, SampleEntrustContext.class);
+ if (response.isSuccess()) {
+ return success(response.getContextBean(SampleEntrustContext.class));
+ } else {
+ return error(500, response.getMessage());
+ }
+ //return success(FlowBus.getNodeMap());
+ }
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/SampleFlowController.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/SampleFlowController.java
new file mode 100644
index 0000000..7af56c4
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/admin/SampleFlowController.java
@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.admin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleFlowParam;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleFlowContext;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
+
+/**
+ * SampleFlowController
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月6日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月6日
+ */
+@Tag(name = "管理后台 - 样品流转")
+@RestController
+@RequestMapping("/qms/bus/sample/flow")
+@Validated
+public class SampleFlowController {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+
+ @GetMapping("/test")
+ public CommonResult> test() {
+
+ Long tenantId = TenantContextHolder.getRequiredTenantId();
+
+ List sampleIdList = new ArrayList<>();
+ sampleIdList.add(1111L);
+
+ SampleFlowParam sampleFlowParam = new SampleFlowParam();
+ sampleFlowParam.setSampleSourceType(2);
+ sampleFlowParam.setSampleProcessNo("P3000");
+ sampleFlowParam.setSampleIdList(sampleIdList);
+
+
+
+ LiteflowResponse response = flowExecutor.execute2Resp("sampleFlowChain" + tenantId, sampleFlowParam, SampleFlowContext.class);
+ if (response.isSuccess()) {
+ return success(response.getContextBean(SampleFlowContext.class));
+ } else {
+ return error(500, response.getMessage());
+ }
+ //return success(FlowBus.getNodeMap());
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSamplePageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSamplePageReqVO.java
new file mode 100644
index 0000000..c8081f2
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSamplePageReqVO.java
@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 主样业务分页 Request VO")
+@Data
+public class BusinessBaseSamplePageReqVO extends PageParam {
+
+ @Schema(description = "样品名称", example = "芋艿")
+ private String sampleName;
+
+ @Schema(description = "样品编号")
+ private String sampleCode;
+
+ @Schema(description = "主样配置ID", example = "26608")
+ private Long configBaseSampleId;
+
+ @Schema(description = "主样类型ID,字典表:【T_DIC_BSN】结算样、抽查样、委检样", example = "27887")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品生成时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] sampleTime;
+
+ @Schema(description = "打印次数", example = "20143")
+ private Integer printCount;
+
+ @Schema(description = "末次打印时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] printLastTime;
+
+ @Schema(description = "样品流程ID", example = "25222")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY")
+ private String sampleFlowKey;
+
+ @Schema(description = "样品流程节点时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] sampleFlowTime;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", example = "1")
+ private String sampleStatus;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建人名称")
+ private String operator;
+
+ @Schema(description = "创建日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "乐观锁", example = "13116")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSampleRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSampleRespVO.java
new file mode 100644
index 0000000..3ce07dc
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSampleRespVO.java
@@ -0,0 +1,83 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 主样业务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessBaseSampleRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14424")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @ExcelProperty("样品名称")
+ private String sampleName;
+
+ @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品编号")
+ private String sampleCode;
+
+ @Schema(description = "主样配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26608")
+ @ExcelProperty("主样配置ID")
+ private Long configBaseSampleId;
+
+ @Schema(description = "主样类型ID,字典表:【T_DIC_BSN】结算样、抽查样、委检样", requiredMode = Schema.RequiredMode.REQUIRED, example = "27887")
+ @ExcelProperty("主样类型ID,字典表:【T_DIC_BSN】结算样、抽查样、委检样")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品生成时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品生成时间")
+ private LocalDateTime sampleTime;
+
+ @Schema(description = "打印次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "20143")
+ @ExcelProperty("打印次数")
+ private Integer printCount;
+
+ @Schema(description = "末次打印时间")
+ @ExcelProperty("末次打印时间")
+ private LocalDateTime printLastTime;
+
+ @Schema(description = "样品流程ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25222")
+ @ExcelProperty("样品流程ID")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品流程KEY")
+ private String sampleFlowKey;
+
+ @Schema(description = "样品流程节点时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品流程节点时间")
+ private LocalDateTime sampleFlowTime;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废")
+ private String sampleStatus;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建人名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建人名称")
+ private String operator;
+
+ @Schema(description = "创建日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建日期")
+ private LocalDateTime createTime;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "13116")
+ @ExcelProperty("乐观锁")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSampleSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSampleSaveReqVO.java
new file mode 100644
index 0000000..e5b9b11
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessBaseSampleSaveReqVO.java
@@ -0,0 +1,75 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 主样业务新增/修改 Request VO")
+@Data
+public class BusinessBaseSampleSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14424")
+ private Long id;
+
+ @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "样品名称不能为空")
+ private String sampleName;
+
+ @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "样品编号不能为空")
+ private String sampleCode;
+
+ @Schema(description = "主样配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26608")
+ @NotNull(message = "主样配置ID不能为空")
+ private Long configBaseSampleId;
+
+ @Schema(description = "主样类型ID,字典表:【T_DIC_BSN】结算样、抽查样、委检样", requiredMode = Schema.RequiredMode.REQUIRED, example = "27887")
+ @NotNull(message = "主样类型ID,字典表:【T_DIC_BSN】结算样、抽查样、委检样不能为空")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品生成时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "样品生成时间不能为空")
+ private LocalDateTime sampleTime;
+
+ @Schema(description = "打印次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "20143")
+ @NotNull(message = "打印次数不能为空")
+ private Integer printCount;
+
+ @Schema(description = "末次打印时间")
+ private LocalDateTime printLastTime;
+
+ @Schema(description = "样品流程ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25222")
+ @NotNull(message = "样品流程ID不能为空")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "样品流程KEY不能为空")
+ private String sampleFlowKey;
+
+ @Schema(description = "样品流程节点时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "样品流程节点时间不能为空")
+ private LocalDateTime sampleFlowTime;
+
+ @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;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "所属部门不能为空")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建人名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "创建人名称不能为空")
+ private String operator;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "13116")
+ @NotNull(message = "乐观锁不能为空")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubPageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubPageReqVO.java
new file mode 100644
index 0000000..3bc0461
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubPageReqVO.java
@@ -0,0 +1,58 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 子样交接记录业务分页 Request VO")
+@Data
+public class BusinessHandoverRecordSubPageReqVO extends PageParam {
+
+ @Schema(description = "样品子样ID", example = "7268")
+ private Long businessSubSampleId;
+
+ @Schema(description = "样品流程ID", example = "27410")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY")
+ private String sampleFlowKey;
+
+ @Schema(description = "样品编号")
+ private String sampleCode;
+
+ @Schema(description = "样品重量")
+ private BigDecimal sampleWeight;
+
+ @Schema(description = "操作时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] operationTime;
+
+ @Schema(description = "操作人")
+ private String operator;
+
+ @Schema(description = "操作人ID", example = "9370")
+ private Long operatorId;
+
+ @Schema(description = "送样人")
+ private String sendSampleOperator;
+
+ @Schema(description = "收样人")
+ private String receiveSampleOperator;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubRespVO.java
new file mode 100644
index 0000000..71535ee
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubRespVO.java
@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 子样交接记录业务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessHandoverRecordSubRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3962")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "样品子样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7268")
+ @ExcelProperty("样品子样ID")
+ private Long businessSubSampleId;
+
+ @Schema(description = "样品流程ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27410")
+ @ExcelProperty("样品流程ID")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品流程KEY")
+ private String sampleFlowKey;
+
+ @Schema(description = "样品编号")
+ @ExcelProperty("样品编号")
+ private String sampleCode;
+
+ @Schema(description = "样品重量")
+ @ExcelProperty("样品重量")
+ private BigDecimal sampleWeight;
+
+ @Schema(description = "操作时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("操作时间")
+ private LocalDateTime operationTime;
+
+ @Schema(description = "操作人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("操作人")
+ private String operator;
+
+ @Schema(description = "操作人ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9370")
+ @ExcelProperty("操作人ID")
+ private Long operatorId;
+
+ @Schema(description = "送样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("送样人")
+ private String sendSampleOperator;
+
+ @Schema(description = "收样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("收样人")
+ private String receiveSampleOperator;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建日期")
+ private LocalDateTime createTime;
+
+ @Schema(description = "备注")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubSaveReqVO.java
new file mode 100644
index 0000000..cd9d777
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessHandoverRecordSubSaveReqVO.java
@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 子样交接记录业务新增/修改 Request VO")
+@Data
+public class BusinessHandoverRecordSubSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3962")
+ private Long id;
+
+ @Schema(description = "样品子样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7268")
+ @NotNull(message = "样品子样ID不能为空")
+ private Long businessSubSampleId;
+
+ @Schema(description = "样品流程ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27410")
+ @NotNull(message = "样品流程ID不能为空")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "样品流程KEY不能为空")
+ private String sampleFlowKey;
+
+ @Schema(description = "样品编号")
+ private String sampleCode;
+
+ @Schema(description = "样品重量")
+ private BigDecimal sampleWeight;
+
+ @Schema(description = "操作时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "操作时间不能为空")
+ private LocalDateTime operationTime;
+
+ @Schema(description = "操作人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "操作人不能为空")
+ private String operator;
+
+ @Schema(description = "操作人ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9370")
+ @NotNull(message = "操作人ID不能为空")
+ private Long operatorId;
+
+ @Schema(description = "送样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "送样人不能为空")
+ private String sendSampleOperator;
+
+ @Schema(description = "收样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "收样人不能为空")
+ private String receiveSampleOperator;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "所属部门不能为空")
+ private String systemDepartmentCode;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultPageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultPageReqVO.java
new file mode 100644
index 0000000..532ed51
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultPageReqVO.java
@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 委检登记来样品位分页 Request VO")
+@Data
+public class BusinessSampleAssayResultPageReqVO extends PageParam {
+
+ @Schema(description = "委托登记样品明细ID", example = "5711")
+ private Long businessSampleEntrustDetailId;
+
+ @Schema(description = "样品主样ID", example = "22353")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "来样品位")
+ private String data;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "乐观锁", example = "18328")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultRespVO.java
new file mode 100644
index 0000000..8d10cc9
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultRespVO.java
@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 委检登记来样品位 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessSampleAssayResultRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31437")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "委托登记样品明细ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5711")
+ @ExcelProperty("委托登记样品明细ID")
+ private Long businessSampleEntrustDetailId;
+
+ @Schema(description = "样品主样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22353")
+ @ExcelProperty("样品主样ID")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "来样品位", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("来样品位")
+ private String data;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "18328")
+ @ExcelProperty("乐观锁")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultSaveReqVO.java
new file mode 100644
index 0000000..927970d
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleAssayResultSaveReqVO.java
@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 委检登记来样品位新增/修改 Request VO")
+@Data
+public class BusinessSampleAssayResultSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31437")
+ private Long id;
+
+ @Schema(description = "委托登记样品明细ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5711")
+ @NotNull(message = "委托登记样品明细ID不能为空")
+ private Long businessSampleEntrustDetailId;
+
+ @Schema(description = "样品主样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22353")
+ @NotNull(message = "样品主样ID不能为空")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "来样品位", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "来样品位不能为空")
+ private String data;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "所属部门不能为空")
+ private String systemDepartmentCode;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "18328")
+ @NotNull(message = "乐观锁不能为空")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailExtendRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailExtendRespVO.java
new file mode 100644
index 0000000..f32df16
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailExtendRespVO.java
@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import java.util.List;
+
+import lombok.Data;
+
+/**
+ * BusinessSampleEntrustDetailExtendRespVO
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月10日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月10日
+ */
+@Data
+public class BusinessSampleEntrustDetailExtendRespVO extends BusinessSampleEntrustDetailRespVO {
+
+ private List sampleEntrustDetailProjectList;
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailPageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailPageReqVO.java
new file mode 100644
index 0000000..a875a4d
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailPageReqVO.java
@@ -0,0 +1,65 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 委检登记样品明细分页 Request VO")
+@Data
+public class BusinessSampleEntrustDetailPageReqVO extends PageParam {
+
+ @Schema(description = "检验委托登记ID", example = "3509")
+ private Long businessSampleEntrustRegistrationId;
+
+ @Schema(description = "主样业务ID", example = "24710")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "样品大类ID", example = "10243")
+ private Long baseSampleId;
+
+ @Schema(description = "样品类型ID,字典表:【T_DIC_BSN】结算样、委检样、生产样等", example = "27392")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品名称", example = "芋艿")
+ private String sampleName;
+
+ @Schema(description = "样品编号")
+ private String sampleCode;
+
+ @Schema(description = "委托样品名称", example = "赵六")
+ private String entrustSampleName;
+
+ @Schema(description = "委托样品编号")
+ private String entrustSampleCode;
+
+ @Schema(description = "排序")
+ private Integer sort;
+
+ @Schema(description = "检测项目")
+ private String assayProject;
+
+ @Schema(description = "预报结果")
+ private String forecastResult;
+
+ @Schema(description = "是否称重,1-启用,0-不启用")
+ private Integer isWeighing;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "乐观锁", example = "12540")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailRespVO.java
new file mode 100644
index 0000000..545dd5b
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailRespVO.java
@@ -0,0 +1,83 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 委检登记样品明细 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessSampleEntrustDetailRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12340")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "检验委托登记ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3509")
+ @ExcelProperty("检验委托登记ID")
+ private Long businessSampleEntrustRegistrationId;
+
+ @Schema(description = "主样业务ID", example = "24710")
+ @ExcelProperty("主样业务ID")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "样品大类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10243")
+ @ExcelProperty("样品大类ID")
+ private Long baseSampleId;
+
+ @Schema(description = "样品类型ID,字典表:【T_DIC_BSN】结算样、委检样、生产样等", requiredMode = Schema.RequiredMode.REQUIRED, example = "27392")
+ @ExcelProperty("样品类型ID,字典表:【T_DIC_BSN】结算样、委检样、生产样等")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品名称", example = "芋艿")
+ @ExcelProperty("样品名称")
+ private String sampleName;
+
+ @Schema(description = "样品编号")
+ @ExcelProperty("样品编号")
+ private String sampleCode;
+
+ @Schema(description = "委托样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @ExcelProperty("委托样品名称")
+ private String entrustSampleName;
+
+ @Schema(description = "委托样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("委托样品编号")
+ private String entrustSampleCode;
+
+ @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("排序")
+ private Integer sort;
+
+ @Schema(description = "检测项目")
+ @ExcelProperty("检测项目")
+ private String assayProject;
+
+ @Schema(description = "预报结果")
+ @ExcelProperty("预报结果")
+ private String forecastResult;
+
+ @Schema(description = "是否称重,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("是否称重,1-启用,0-不启用")
+ private Integer isWeighing;
+
+ @Schema(description = "所属部门")
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "乐观锁", example = "12540")
+ @ExcelProperty("乐观锁")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailSaveReqVO.java
new file mode 100644
index 0000000..603e30a
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustDetailSaveReqVO.java
@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 委检登记样品明细新增/修改 Request VO")
+@Data
+public class BusinessSampleEntrustDetailSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12340")
+ private Long id;
+
+ @Schema(description = "检验委托登记ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3509")
+ @NotNull(message = "检验委托登记ID不能为空")
+ private Long businessSampleEntrustRegistrationId;
+
+ @Schema(description = "主样业务ID", example = "24710")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "样品大类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10243")
+ @NotNull(message = "样品大类ID不能为空")
+ private Long baseSampleId;
+
+ @Schema(description = "样品类型ID,字典表:【T_DIC_BSN】结算样、委检样、生产样等", requiredMode = Schema.RequiredMode.REQUIRED, example = "27392")
+ @NotNull(message = "样品类型ID,字典表:【T_DIC_BSN】结算样、委检样、生产样等不能为空")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品名称", example = "芋艿")
+ private String sampleName;
+
+ @Schema(description = "样品编号")
+ private String sampleCode;
+
+ @Schema(description = "委托样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "委托样品名称不能为空")
+ private String entrustSampleName;
+
+ @Schema(description = "委托样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "委托样品编号不能为空")
+ private String entrustSampleCode;
+
+ @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "排序不能为空")
+ private Integer sort;
+
+ @Schema(description = "检测项目")
+ private String assayProject;
+
+ @Schema(description = "预报结果")
+ private String forecastResult;
+
+ @Schema(description = "是否称重,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "是否称重,1-启用,0-不启用不能为空")
+ private Integer isWeighing;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "乐观锁", example = "12540")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectExtendRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectExtendRespVO.java
new file mode 100644
index 0000000..fad8a2c
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectExtendRespVO.java
@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.Data;
+
+/**
+ * BusinessSampleEntrustProjectExtendRespVO
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月10日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月10日
+ */
+@Data
+public class BusinessSampleEntrustProjectExtendRespVO extends BusinessSampleEntrustProjectRespVO {
+
+ /** 检测项目编码 **/
+ private String projectCode;
+
+ /** 检测项目名称 **/
+ private String projectName;
+
+ /** 检测项目缩写 **/
+ private String projectSimpleName;
+
+ /** 检测项目显示名称 **/
+ private String projectShowName;
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectPageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectPageReqVO.java
new file mode 100644
index 0000000..a91537f
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectPageReqVO.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 委检样品检测项目业务分页 Request VO")
+@Data
+public class BusinessSampleEntrustProjectPageReqVO extends PageParam {
+
+ @Schema(description = "样品检验委托明细ID", example = "31234")
+ private Long businessSampleEntrustDetailId;
+
+ @Schema(description = "物料检测标准检测项目ID", example = "1780")
+ private Long materialAssayStandardDetailId;
+
+ @Schema(description = "检测项目ID,字典表:【T_DIC_PRJ】", example = "29566")
+ private Long dictionaryProjectId;
+
+ @Schema(description = "是否启用,1-启用,0-不启用")
+ private Integer isEnabled;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "乐观锁", example = "22753")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectRespVO.java
new file mode 100644
index 0000000..ff2e6b0
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectRespVO.java
@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 委检样品检测项目业务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessSampleEntrustProjectRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6960")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "样品检验委托明细ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31234")
+ @ExcelProperty("样品检验委托明细ID")
+ private Long businessSampleEntrustDetailId;
+
+ @Schema(description = "物料检测标准检测项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1780")
+ @ExcelProperty("物料检测标准检测项目ID")
+ private Long materialAssayStandardDetailId;
+
+ @Schema(description = "检测项目ID,字典表:【T_DIC_PRJ】", requiredMode = Schema.RequiredMode.REQUIRED, example = "29566")
+ @ExcelProperty("检测项目ID,字典表:【T_DIC_PRJ】")
+ private Long dictionaryProjectId;
+
+ @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("是否启用,1-启用,0-不启用")
+ private Integer isEnabled;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "22753")
+ @ExcelProperty("乐观锁")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectSaveReqVO.java
new file mode 100644
index 0000000..9320b59
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustProjectSaveReqVO.java
@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 委检样品检测项目业务新增/修改 Request VO")
+@Data
+public class BusinessSampleEntrustProjectSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6960")
+ private Long id;
+
+ @Schema(description = "样品检验委托明细ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31234")
+ @NotNull(message = "样品检验委托明细ID不能为空")
+ private Long businessSampleEntrustDetailId;
+
+ @Schema(description = "物料检测标准检测项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1780")
+ @NotNull(message = "物料检测标准检测项目ID不能为空")
+ private Long materialAssayStandardDetailId;
+
+ @Schema(description = "检测项目ID,字典表:【T_DIC_PRJ】", requiredMode = Schema.RequiredMode.REQUIRED, example = "29566")
+ @NotNull(message = "检测项目ID,字典表:【T_DIC_PRJ】不能为空")
+ private Long dictionaryProjectId;
+
+ @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "是否启用,1-启用,0-不启用不能为空")
+ private Integer isEnabled;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "所属部门不能为空")
+ private String systemDepartmentCode;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "22753")
+ @NotNull(message = "乐观锁不能为空")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationExtendRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationExtendRespVO.java
new file mode 100644
index 0000000..c727fd3
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationExtendRespVO.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import java.util.List;
+
+import lombok.Data;
+
+/**
+ * BusinessSampleEntrustRegistrationExtendRespVO
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月10日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月10日
+ */
+@Data
+public class BusinessSampleEntrustRegistrationExtendRespVO extends BusinessSampleEntrustRegistrationRespVO {
+
+ private List sampleEntrustDetailList;
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationPageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationPageReqVO.java
new file mode 100644
index 0000000..f5fbab6
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationPageReqVO.java
@@ -0,0 +1,135 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 委检登记业务分页 Request VO")
+@Data
+public class BusinessSampleEntrustRegistrationPageReqVO extends PageParam {
+
+ @Schema(description = "委托ID", example = "8324")
+ private Long entrustId;
+
+ @Schema(description = "委托单号")
+ private String entrustNumber;
+
+ @Schema(description = "委托单位/送样单位")
+ private String entrustUnit;
+
+ @Schema(description = "委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托", example = "25366")
+ private Long configEntrustSourceId;
+
+ @Schema(description = "样品数量")
+ private Integer sampleQuantity;
+
+ @Schema(description = "任务数量")
+ private Integer taskQuantity;
+
+ @Schema(description = "已完成任务数量")
+ private Integer taskFinishedQuantity;
+
+ @Schema(description = "余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃")
+ private String remaineSampleRequirement;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体", example = "2")
+ private String sampleStatus;
+
+ @Schema(description = "电话")
+ private String tel;
+
+ @Schema(description = "传真")
+ private String fax;
+
+ @Schema(description = "通讯地址")
+ private String address;
+
+ @Schema(description = "邮编")
+ private String postal;
+
+ @Schema(description = "E-mail")
+ private String email;
+
+ @Schema(description = "委托检测类别,【字典】【jy_sample_entrust_category】一般委托、仲裁委托")
+ private String entrustCategory;
+
+ @Schema(description = "样品类别(装港/卸港),【字典】【jy_sample_entrust_category】装港样、卸港样")
+ private String sampleCategory;
+
+ @Schema(description = "样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样")
+ private String sampleOrigin;
+
+ @Schema(description = "保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求")
+ private String secrecyRequire;
+
+ @Schema(description = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择")
+ private String assayMethod;
+
+ @Schema(description = "送样人")
+ private String sampleSender;
+
+ @Schema(description = "送样日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] sampleSendDate;
+
+ @Schema(description = "收样人")
+ private String sampleReceiver;
+
+ @Schema(description = "收样日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] sampleReceiveDate;
+
+ @Schema(description = "登记状态,register-登记中、submitted-已提交", example = "1")
+ private String registrationStatus;
+
+ @Schema(description = "数据校验状态,success-数据校验成功、fail-数据校验失败", example = "2")
+ private String dataCheckStatus;
+
+ @Schema(description = "检验状态,unchecked-未检验;checked-已检验", example = "1")
+ private String assayStatus;
+
+ @Schema(description = "数据回报状态,unreturned-未回报;returned-已回报", example = "1")
+ private String dataStatus;
+
+ @Schema(description = "报告IDs", example = "17931")
+ private String documentMainId;
+
+ @Schema(description = "报告发送方式,【字典】【jy_sample_entrust_send_way】自取、邮寄、电话、传真、E-mail")
+ private String documentSendWay;
+
+ @Schema(description = "报告发送人")
+ private String documentPublisher;
+
+ @Schema(description = "报告发送日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] documentPublisherDate;
+
+ @Schema(description = "报告接收人")
+ private String documentReceiver;
+
+ @Schema(description = "报告接收日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] documentReceiveDate;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "乐观锁", example = "6291")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "扩展信息")
+ private String externalInfomation;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationRespVO.java
new file mode 100644
index 0000000..0180201
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationRespVO.java
@@ -0,0 +1,171 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 委检登记业务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessSampleEntrustRegistrationRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9288")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "委托ID", example = "8324")
+ @ExcelProperty("委托ID")
+ private Long entrustId;
+
+ @Schema(description = "委托单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("委托单号")
+ private String entrustNumber;
+
+ @Schema(description = "委托单位/送样单位", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("委托单位/送样单位")
+ private String entrustUnit;
+
+ @Schema(description = "委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托", requiredMode = Schema.RequiredMode.REQUIRED, example = "25366")
+ @ExcelProperty("委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托")
+ private Long configEntrustSourceId;
+
+ @Schema(description = "样品数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品数量")
+ private Integer sampleQuantity;
+
+ @Schema(description = "任务数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("任务数量")
+ private Integer taskQuantity;
+
+ @Schema(description = "已完成任务数量")
+ @ExcelProperty("已完成任务数量")
+ private Integer taskFinishedQuantity;
+
+ @Schema(description = "余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃")
+ private String remaineSampleRequirement;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @ExcelProperty("样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体")
+ private String sampleStatus;
+
+ @Schema(description = "电话")
+ @ExcelProperty("电话")
+ private String tel;
+
+ @Schema(description = "传真")
+ @ExcelProperty("传真")
+ private String fax;
+
+ @Schema(description = "通讯地址")
+ @ExcelProperty("通讯地址")
+ private String address;
+
+ @Schema(description = "邮编")
+ @ExcelProperty("邮编")
+ private String postal;
+
+ @Schema(description = "E-mail")
+ @ExcelProperty("E-mail")
+ private String email;
+
+ @Schema(description = "委托检测类别,【字典】【jy_sample_entrust_category】一般委托、仲裁委托")
+ @ExcelProperty("委托检测类别,【字典】【jy_sample_entrust_category】一般委托、仲裁委托")
+ private String entrustCategory;
+
+ @Schema(description = "样品类别(装港/卸港),【字典】【jy_sample_entrust_category】装港样、卸港样")
+ @ExcelProperty("样品类别(装港/卸港),【字典】【jy_sample_entrust_category】装港样、卸港样")
+ private String sampleCategory;
+
+ @Schema(description = "样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样")
+ private String sampleOrigin;
+
+ @Schema(description = "保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求")
+ private String secrecyRequire;
+
+ @Schema(description = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择")
+ private String assayMethod;
+
+ @Schema(description = "送样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("送样人")
+ private String sampleSender;
+
+ @Schema(description = "送样日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("送样日期")
+ private LocalDateTime sampleSendDate;
+
+ @Schema(description = "收样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("收样人")
+ private String sampleReceiver;
+
+ @Schema(description = "收样日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("收样日期")
+ private LocalDateTime sampleReceiveDate;
+
+ @Schema(description = "登记状态,register-登记中、submitted-已提交", example = "1")
+ @ExcelProperty("登记状态,register-登记中、submitted-已提交")
+ private String registrationStatus;
+
+ @Schema(description = "数据校验状态,success-数据校验成功、fail-数据校验失败", example = "2")
+ @ExcelProperty("数据校验状态,success-数据校验成功、fail-数据校验失败")
+ private String dataCheckStatus;
+
+ @Schema(description = "检验状态,unchecked-未检验;checked-已检验", example = "1")
+ @ExcelProperty("检验状态,unchecked-未检验;checked-已检验")
+ private String assayStatus;
+
+ @Schema(description = "数据回报状态,unreturned-未回报;returned-已回报", example = "1")
+ @ExcelProperty("数据回报状态,unreturned-未回报;returned-已回报")
+ private String dataStatus;
+
+ @Schema(description = "报告IDs", example = "17931")
+ @ExcelProperty("报告IDs")
+ private String documentMainId;
+
+ @Schema(description = "报告发送方式,【字典】【jy_sample_entrust_send_way】自取、邮寄、电话、传真、E-mail")
+ @ExcelProperty("报告发送方式,【字典】【jy_sample_entrust_send_way】自取、邮寄、电话、传真、E-mail")
+ private String documentSendWay;
+
+ @Schema(description = "报告发送人")
+ @ExcelProperty("报告发送人")
+ private String documentPublisher;
+
+ @Schema(description = "报告发送日期")
+ @ExcelProperty("报告发送日期")
+ private LocalDateTime documentPublisherDate;
+
+ @Schema(description = "报告接收人")
+ @ExcelProperty("报告接收人")
+ private String documentReceiver;
+
+ @Schema(description = "报告接收日期")
+ @ExcelProperty("报告接收日期")
+ private LocalDateTime documentReceiveDate;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "6291")
+ @ExcelProperty("乐观锁")
+ private Integer updateCount;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "扩展信息")
+ @ExcelProperty("扩展信息")
+ private String externalInfomation;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSaveReqVO.java
new file mode 100644
index 0000000..f59e1ad
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSaveReqVO.java
@@ -0,0 +1,145 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 委检登记业务新增/修改 Request VO")
+@Data
+public class BusinessSampleEntrustRegistrationSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9288")
+ private Long id;
+
+ @Schema(description = "委托ID", example = "8324")
+ private Long entrustId;
+
+ @Schema(description = "委托单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "委托单号不能为空")
+ private String entrustNumber;
+
+ @Schema(description = "委托单位/送样单位", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "委托单位/送样单位不能为空")
+ private String entrustUnit;
+
+ @Schema(description = "委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托", requiredMode = Schema.RequiredMode.REQUIRED, example = "25366")
+ @NotNull(message = "委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托不能为空")
+ private Long configEntrustSourceId;
+
+ @Schema(description = "样品数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "样品数量不能为空")
+ private Integer sampleQuantity;
+
+ @Schema(description = "任务数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "任务数量不能为空")
+ private Integer taskQuantity;
+
+ @Schema(description = "已完成任务数量")
+ private Integer taskFinishedQuantity;
+
+ @Schema(description = "余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃不能为空")
+ private String remaineSampleRequirement;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotEmpty(message = "样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体不能为空")
+ private String sampleStatus;
+
+ @Schema(description = "电话")
+ private String tel;
+
+ @Schema(description = "传真")
+ private String fax;
+
+ @Schema(description = "通讯地址")
+ private String address;
+
+ @Schema(description = "邮编")
+ private String postal;
+
+ @Schema(description = "E-mail")
+ private String email;
+
+ @Schema(description = "委托检测类别,【字典】【jy_sample_entrust_category】一般委托、仲裁委托")
+ private String entrustCategory;
+
+ @Schema(description = "样品类别(装港/卸港),【字典】【jy_sample_entrust_category】装港样、卸港样")
+ private String sampleCategory;
+
+ @Schema(description = "样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样不能为空")
+ private String sampleOrigin;
+
+ @Schema(description = "保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求不能为空")
+ private String secrecyRequire;
+
+ @Schema(description = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择不能为空")
+ private String assayMethod;
+
+ @Schema(description = "送样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "送样人不能为空")
+ private String sampleSender;
+
+ @Schema(description = "送样日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "送样日期不能为空")
+ private LocalDateTime sampleSendDate;
+
+ @Schema(description = "收样人", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "收样人不能为空")
+ private String sampleReceiver;
+
+ @Schema(description = "收样日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "收样日期不能为空")
+ private LocalDateTime sampleReceiveDate;
+
+ @Schema(description = "登记状态,register-登记中、submitted-已提交", example = "1")
+ private String registrationStatus;
+
+ @Schema(description = "数据校验状态,success-数据校验成功、fail-数据校验失败", example = "2")
+ private String dataCheckStatus;
+
+ @Schema(description = "检验状态,unchecked-未检验;checked-已检验", example = "1")
+ private String assayStatus;
+
+ @Schema(description = "数据回报状态,unreturned-未回报;returned-已回报", example = "1")
+ private String dataStatus;
+
+ @Schema(description = "报告IDs", example = "17931")
+ private String documentMainId;
+
+ @Schema(description = "报告发送方式,【字典】【jy_sample_entrust_send_way】自取、邮寄、电话、传真、E-mail")
+ private String documentSendWay;
+
+ @Schema(description = "报告发送人")
+ private String documentPublisher;
+
+ @Schema(description = "报告发送日期")
+ private LocalDateTime documentPublisherDate;
+
+ @Schema(description = "报告接收人")
+ private String documentReceiver;
+
+ @Schema(description = "报告接收日期")
+ private LocalDateTime documentReceiveDate;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "所属部门不能为空")
+ private String systemDepartmentCode;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "6291")
+ @NotNull(message = "乐观锁不能为空")
+ private Integer updateCount;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+ @Schema(description = "扩展信息")
+ private String externalInfomation;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSubmitReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSubmitReqVO.java
new file mode 100644
index 0000000..3b74a63
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSampleEntrustRegistrationSubmitReqVO.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import java.time.LocalDateTime;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * BusinessSampleEntrustRegistrationSubmitReqVO
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月10日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月10日
+ */
+@Schema(description = "管理后台 - 委检登记业务提交 Request VO")
+@Data
+public class BusinessSampleEntrustRegistrationSubmitReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9288")
+ private Long id;
+
+ @Schema(description = "是否收样", example = "1")
+ private Integer isReceiveSample = 0;
+
+ @Schema(description = "是否送样", example = "1")
+ private Integer isSendSample = 0;
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSamplePageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSamplePageReqVO.java
new file mode 100644
index 0000000..b11f91d
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSamplePageReqVO.java
@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 分样业务分页 Request VO")
+@Data
+public class BusinessSubParentSamplePageReqVO extends PageParam {
+
+ @Schema(description = "样品ID", example = "18364")
+ private Long sampleId;
+
+ @Schema(description = "样品主样ID", example = "26057")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "分样配置ID", example = "2344")
+ private Long configSubSampleParentId;
+
+ @Schema(description = "分样类型ID,字典表:【T_DIC_BSN】化学样、试金样、仪器样", example = "21472")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品编号")
+ private String sampleCode;
+
+ @Schema(description = "样品名称", example = "张三")
+ private String sampleName;
+
+ @Schema(description = "子样样品编号")
+ private String subSampleCode;
+
+ @Schema(description = "子样归库码")
+ private String subSampleReturnCode;
+
+ @Schema(description = "上报人")
+ private String reporter;
+
+ @Schema(description = "上报时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] reportTime;
+
+ @Schema(description = "审核流程code")
+ private String auditFlowCode;
+
+ @Schema(description = "超差标注", example = "2")
+ private Integer assessmentStatus;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", example = "2")
+ private String sampleStatus;
+
+ @Schema(description = "是否启用,1-启用,0-不启用")
+ private Integer isEnabled;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "乐观锁", example = "4381")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSampleRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSampleRespVO.java
new file mode 100644
index 0000000..7bc1478
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSampleRespVO.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 分样业务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessSubParentSampleRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25832")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "样品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18364")
+ @ExcelProperty("样品ID")
+ private Long sampleId;
+
+ @Schema(description = "样品主样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26057")
+ @ExcelProperty("样品主样ID")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "分样配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2344")
+ @ExcelProperty("分样配置ID")
+ private Long configSubSampleParentId;
+
+ @Schema(description = "分样类型ID,字典表:【T_DIC_BSN】化学样、试金样、仪器样", requiredMode = Schema.RequiredMode.REQUIRED, example = "21472")
+ @ExcelProperty("分样类型ID,字典表:【T_DIC_BSN】化学样、试金样、仪器样")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品编号")
+ private String sampleCode;
+
+ @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+ @ExcelProperty("样品名称")
+ private String sampleName;
+
+ @Schema(description = "子样样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("子样样品编号")
+ private String subSampleCode;
+
+ @Schema(description = "子样归库码")
+ @ExcelProperty("子样归库码")
+ private String subSampleReturnCode;
+
+ @Schema(description = "上报人")
+ @ExcelProperty("上报人")
+ private String reporter;
+
+ @Schema(description = "上报时间")
+ @ExcelProperty("上报时间")
+ private LocalDateTime reportTime;
+
+ @Schema(description = "审核流程code")
+ @ExcelProperty("审核流程code")
+ private String auditFlowCode;
+
+ @Schema(description = "超差标注", example = "2")
+ @ExcelProperty("超差标注")
+ private Integer assessmentStatus;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @ExcelProperty("样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废")
+ private String sampleStatus;
+
+ @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("是否启用,1-启用,0-不启用")
+ private Integer isEnabled;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建日期")
+ private LocalDateTime createTime;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "4381")
+ @ExcelProperty("乐观锁")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSampleSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSampleSaveReqVO.java
new file mode 100644
index 0000000..be18873
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubParentSampleSaveReqVO.java
@@ -0,0 +1,79 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 分样业务新增/修改 Request VO")
+@Data
+public class BusinessSubParentSampleSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25832")
+ private Long id;
+
+ @Schema(description = "样品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18364")
+ @NotNull(message = "样品ID不能为空")
+ private Long sampleId;
+
+ @Schema(description = "样品主样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26057")
+ @NotNull(message = "样品主样ID不能为空")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "分样配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2344")
+ @NotNull(message = "分样配置ID不能为空")
+ private Long configSubSampleParentId;
+
+ @Schema(description = "分样类型ID,字典表:【T_DIC_BSN】化学样、试金样、仪器样", requiredMode = Schema.RequiredMode.REQUIRED, example = "21472")
+ @NotNull(message = "分样类型ID,字典表:【T_DIC_BSN】化学样、试金样、仪器样不能为空")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "样品编号不能为空")
+ private String sampleCode;
+
+ @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+ @NotEmpty(message = "样品名称不能为空")
+ private String sampleName;
+
+ @Schema(description = "子样样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "子样样品编号不能为空")
+ private String subSampleCode;
+
+ @Schema(description = "子样归库码")
+ private String subSampleReturnCode;
+
+ @Schema(description = "上报人")
+ private String reporter;
+
+ @Schema(description = "上报时间")
+ private LocalDateTime reportTime;
+
+ @Schema(description = "审核流程code")
+ private String auditFlowCode;
+
+ @Schema(description = "超差标注", example = "2")
+ private Integer assessmentStatus;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotEmpty(message = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废不能为空")
+ private String sampleStatus;
+
+ @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "是否启用,1-启用,0-不启用不能为空")
+ private Integer isEnabled;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "所属部门不能为空")
+ private String systemDepartmentCode;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "4381")
+ @NotNull(message = "乐观锁不能为空")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSamplePageReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSamplePageReqVO.java
new file mode 100644
index 0000000..9fe61a8
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSamplePageReqVO.java
@@ -0,0 +1,121 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 子样业务分页 Request VO")
+@Data
+public class BusinessSubSamplePageReqVO extends PageParam {
+
+ @Schema(description = "样品主样ID", example = "11587")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "样品分样ID", example = "2157")
+ private Long businessSubParentSampleId;
+
+ @Schema(description = "子样配置ID", example = "20299")
+ private Long configSubSampleId;
+
+ @Schema(description = "子样类型ID,字典表:【T_DIC_BSN】化学分析样、试金分析样、仪器分析样", example = "30304")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "库位信息ID", example = "28807")
+ private Long configWarehouseLocationInfomationId;
+
+ @Schema(description = "样品ID", example = "13062")
+ private Long sampleId;
+
+ @Schema(description = "组ID,如果是委托创建的,则组ID和样品分样ID一致", example = "29885")
+ private String groupId;
+
+ @Schema(description = "样品名称", example = "赵六")
+ private String sampleName;
+
+ @Schema(description = "样品编号")
+ private String sampleCode;
+
+ @Schema(description = "分析编号")
+ private String sampleAssayCode;
+
+ @Schema(description = "归库编号")
+ private String sampleReturnCode;
+
+ @Schema(description = "样品流程ID", example = "18294")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY")
+ private String sampleFlowKey;
+
+ @Schema(description = "下一步样品流程名称")
+ private String nextSampleFlow;
+
+ @Schema(description = "是否已生成归库码")
+ private Integer isGenerateReturnCode;
+
+ @Schema(description = "任务指派给分析人")
+ private String assayOperator;
+
+ @Schema(description = "是否已指派")
+ private Integer isTasked;
+
+ @Schema(description = "指派时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] taskTime;
+
+ @Schema(description = "是否已上报")
+ private Integer isReported;
+
+ @Schema(description = "上报人")
+ private String reporter;
+
+ @Schema(description = "上报时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] reportTime;
+
+ @Schema(description = "归库时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] returnTime;
+
+ @Schema(description = "归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁", example = "1")
+ private Integer returnStatus;
+
+ @Schema(description = "打印次数", example = "28859")
+ private Integer returnCodePrintCount;
+
+ @Schema(description = "末次打印时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] printLastTime;
+
+ @Schema(description = "样品流程节点时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] sampleFlowTime;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", example = "2")
+ private String sampleStatus;
+
+ @Schema(description = "是否启用,1-启用,0-不启用")
+ private Integer isEnabled;
+
+ @Schema(description = "分析元素备注")
+ private String analysisRemark;
+
+ @Schema(description = "所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "乐观锁", example = "8971")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSampleRespVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSampleRespVO.java
new file mode 100644
index 0000000..f950cff
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSampleRespVO.java
@@ -0,0 +1,151 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 子样业务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BusinessSubSampleRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18282")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "样品主样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11587")
+ @ExcelProperty("样品主样ID")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "样品分样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2157")
+ @ExcelProperty("样品分样ID")
+ private Long businessSubParentSampleId;
+
+ @Schema(description = "子样配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20299")
+ @ExcelProperty("子样配置ID")
+ private Long configSubSampleId;
+
+ @Schema(description = "子样类型ID,字典表:【T_DIC_BSN】化学分析样、试金分析样、仪器分析样", requiredMode = Schema.RequiredMode.REQUIRED, example = "30304")
+ @ExcelProperty("子样类型ID,字典表:【T_DIC_BSN】化学分析样、试金分析样、仪器分析样")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "库位信息ID", example = "28807")
+ @ExcelProperty("库位信息ID")
+ private Long configWarehouseLocationInfomationId;
+
+ @Schema(description = "样品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13062")
+ @ExcelProperty("样品ID")
+ private Long sampleId;
+
+ @Schema(description = "组ID,如果是委托创建的,则组ID和样品分样ID一致", example = "29885")
+ @ExcelProperty("组ID,如果是委托创建的,则组ID和样品分样ID一致")
+ private String groupId;
+
+ @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @ExcelProperty("样品名称")
+ private String sampleName;
+
+ @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品编号")
+ private String sampleCode;
+
+ @Schema(description = "分析编号")
+ @ExcelProperty("分析编号")
+ private String sampleAssayCode;
+
+ @Schema(description = "归库编号")
+ @ExcelProperty("归库编号")
+ private String sampleReturnCode;
+
+ @Schema(description = "样品流程ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18294")
+ @ExcelProperty("样品流程ID")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品流程KEY")
+ private String sampleFlowKey;
+
+ @Schema(description = "下一步样品流程名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("下一步样品流程名称")
+ private String nextSampleFlow;
+
+ @Schema(description = "是否已生成归库码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("是否已生成归库码")
+ private Integer isGenerateReturnCode;
+
+ @Schema(description = "任务指派给分析人")
+ @ExcelProperty("任务指派给分析人")
+ private String assayOperator;
+
+ @Schema(description = "是否已指派", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("是否已指派")
+ private Integer isTasked;
+
+ @Schema(description = "指派时间")
+ @ExcelProperty("指派时间")
+ private LocalDateTime taskTime;
+
+ @Schema(description = "是否已上报", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("是否已上报")
+ private Integer isReported;
+
+ @Schema(description = "上报人")
+ @ExcelProperty("上报人")
+ private String reporter;
+
+ @Schema(description = "上报时间")
+ @ExcelProperty("上报时间")
+ private LocalDateTime reportTime;
+
+ @Schema(description = "归库时间")
+ @ExcelProperty("归库时间")
+ private LocalDateTime returnTime;
+
+ @Schema(description = "归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁", example = "1")
+ @ExcelProperty("归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁")
+ private Integer returnStatus;
+
+ @Schema(description = "打印次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "28859")
+ @ExcelProperty("打印次数")
+ private Integer returnCodePrintCount;
+
+ @Schema(description = "末次打印时间")
+ @ExcelProperty("末次打印时间")
+ private LocalDateTime printLastTime;
+
+ @Schema(description = "样品流程节点时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("样品流程节点时间")
+ private LocalDateTime sampleFlowTime;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @ExcelProperty("样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废")
+ private String sampleStatus;
+
+ @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("是否启用,1-启用,0-不启用")
+ private Integer isEnabled;
+
+ @Schema(description = "分析元素备注")
+ @ExcelProperty("分析元素备注")
+ private String analysisRemark;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("所属部门")
+ private String systemDepartmentCode;
+
+ @Schema(description = "创建日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建日期")
+ private LocalDateTime createTime;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "8971")
+ @ExcelProperty("乐观锁")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSampleSaveReqVO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSampleSaveReqVO.java
new file mode 100644
index 0000000..214ffed
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/controller/vo/BusinessSubSampleSaveReqVO.java
@@ -0,0 +1,132 @@
+package cn.iocoder.yudao.module.qms.business.bus.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 子样业务新增/修改 Request VO")
+@Data
+public class BusinessSubSampleSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18282")
+ private Long id;
+
+ @Schema(description = "样品主样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11587")
+ @NotNull(message = "样品主样ID不能为空")
+ private Long businessBaseSampleId;
+
+ @Schema(description = "样品分样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2157")
+ @NotNull(message = "样品分样ID不能为空")
+ private Long businessSubParentSampleId;
+
+ @Schema(description = "子样配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20299")
+ @NotNull(message = "子样配置ID不能为空")
+ private Long configSubSampleId;
+
+ @Schema(description = "子样类型ID,字典表:【T_DIC_BSN】化学分析样、试金分析样、仪器分析样", requiredMode = Schema.RequiredMode.REQUIRED, example = "30304")
+ @NotNull(message = "子样类型ID,字典表:【T_DIC_BSN】化学分析样、试金分析样、仪器分析样不能为空")
+ private Long dictionaryBusinessId;
+
+ @Schema(description = "库位信息ID", example = "28807")
+ private Long configWarehouseLocationInfomationId;
+
+ @Schema(description = "样品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13062")
+ @NotNull(message = "样品ID不能为空")
+ private Long sampleId;
+
+ @Schema(description = "组ID,如果是委托创建的,则组ID和样品分样ID一致", example = "29885")
+ private String groupId;
+
+ @Schema(description = "样品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "样品名称不能为空")
+ private String sampleName;
+
+ @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "样品编号不能为空")
+ private String sampleCode;
+
+ @Schema(description = "分析编号")
+ private String sampleAssayCode;
+
+ @Schema(description = "归库编号")
+ private String sampleReturnCode;
+
+ @Schema(description = "样品流程ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18294")
+ @NotNull(message = "样品流程ID不能为空")
+ private Long sampleFlowId;
+
+ @Schema(description = "样品流程KEY", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "样品流程KEY不能为空")
+ private String sampleFlowKey;
+
+ @Schema(description = "下一步样品流程名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "下一步样品流程名称不能为空")
+ private String nextSampleFlow;
+
+ @Schema(description = "是否已生成归库码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "是否已生成归库码不能为空")
+ private Integer isGenerateReturnCode;
+
+ @Schema(description = "任务指派给分析人")
+ private String assayOperator;
+
+ @Schema(description = "是否已指派", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "是否已指派不能为空")
+ private Integer isTasked;
+
+ @Schema(description = "指派时间")
+ private LocalDateTime taskTime;
+
+ @Schema(description = "是否已上报", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "是否已上报不能为空")
+ private Integer isReported;
+
+ @Schema(description = "上报人")
+ private String reporter;
+
+ @Schema(description = "上报时间")
+ private LocalDateTime reportTime;
+
+ @Schema(description = "归库时间")
+ private LocalDateTime returnTime;
+
+ @Schema(description = "归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁", example = "1")
+ private Integer returnStatus;
+
+ @Schema(description = "打印次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "28859")
+ @NotNull(message = "打印次数不能为空")
+ private Integer returnCodePrintCount;
+
+ @Schema(description = "末次打印时间")
+ private LocalDateTime printLastTime;
+
+ @Schema(description = "样品流程节点时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "样品流程节点时间不能为空")
+ private LocalDateTime sampleFlowTime;
+
+ @Schema(description = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotEmpty(message = "样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废不能为空")
+ private String sampleStatus;
+
+ @Schema(description = "是否启用,1-启用,0-不启用", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "是否启用,1-启用,0-不启用不能为空")
+ private Integer isEnabled;
+
+ @Schema(description = "分析元素备注")
+ private String analysisRemark;
+
+ @Schema(description = "所属部门", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "所属部门不能为空")
+ private String systemDepartmentCode;
+
+ @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "8971")
+ @NotNull(message = "乐观锁不能为空")
+ private Integer updateCount;
+
+ @Schema(description = "备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessBaseSampleDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessBaseSampleDO.java
new file mode 100644
index 0000000..40b070c
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessBaseSampleDO.java
@@ -0,0 +1,113 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 主样业务 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_bse_smp")
+@KeySequence("t_bsn_bse_smp_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessBaseSampleDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 样品名称
+ */
+ @TableField("SMP_NAME")
+ private String sampleName;
+ /**
+ * 样品编号
+ */
+ @TableField("SMP_CD")
+ private String sampleCode;
+ /**
+ * 主样配置ID
+ */
+ @TableField("CFG_BSE_SMP_ID")
+ private Long configBaseSampleId;
+ /**
+ * 主样类型ID,字典表:【T_DIC_BSN】结算样、抽查样、委检样
+ */
+ @TableField("DIC_BSN_ID")
+ private Long dictionaryBusinessId;
+ /**
+ * 样品生成时间
+ */
+ @TableField("SMP_TM")
+ private LocalDateTime sampleTime;
+ /**
+ * 打印次数
+ */
+ @TableField("PRNT_CNT")
+ private Integer printCount;
+ /**
+ * 末次打印时间
+ */
+ @TableField("PRNT_LST_TM")
+ private LocalDateTime printLastTime;
+ /**
+ * 样品流程ID
+ */
+ @TableField("SMP_FLW_ID")
+ private Long sampleFlowId;
+ /**
+ * 样品流程KEY
+ */
+ @TableField("SMP_FLW_KY")
+ private String sampleFlowKey;
+ /**
+ * 样品流程节点时间
+ */
+ @TableField("SMP_FLW_TM")
+ private LocalDateTime sampleFlowTime;
+ /**
+ * 样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废
+ */
+ @TableField("SMP_STS")
+ private String sampleStatus;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 创建人名称
+ */
+ @TableField("OPTR")
+ private String operator;
+ /**
+ * 乐观锁
+ */
+ @TableField("UPD_CNT")
+ private Integer updateCount;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessHandoverRecordSubDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessHandoverRecordSubDO.java
new file mode 100644
index 0000000..3c39819
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessHandoverRecordSubDO.java
@@ -0,0 +1,97 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.math.BigDecimal;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 子样交接记录业务 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_hnd_rcd_sb")
+@KeySequence("t_bsn_hnd_rcd_sb_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessHandoverRecordSubDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 样品子样ID
+ */
+ @TableField("BSN_SB_SMP_ID")
+ private Long businessSubSampleId;
+ /**
+ * 样品流程ID
+ */
+ @TableField("SMP_FLW_ID")
+ private Long sampleFlowId;
+ /**
+ * 样品流程KEY
+ */
+ @TableField("SMP_FLW_KY")
+ private String sampleFlowKey;
+ /**
+ * 样品编号
+ */
+ @TableField("SMP_CD")
+ private String sampleCode;
+ /**
+ * 样品重量
+ */
+ @TableField("SMP_WGT")
+ private BigDecimal sampleWeight;
+ /**
+ * 操作时间
+ */
+ @TableField("OPTN_TM")
+ private LocalDateTime operationTime;
+ /**
+ * 操作人
+ */
+ @TableField("OPTR")
+ private String operator;
+ /**
+ * 操作人ID
+ */
+ @TableField("OPTR_ID")
+ private Long operatorId;
+ /**
+ * 送样人
+ */
+ @TableField("SND_SMP_OPTR")
+ private String sendSampleOperator;
+ /**
+ * 收样人
+ */
+ @TableField("RCV_SMP_OPTR")
+ private String receiveSampleOperator;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleAssayResultDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleAssayResultDO.java
new file mode 100644
index 0000000..01c4a8f
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleAssayResultDO.java
@@ -0,0 +1,65 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 委检登记来样品位 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_smp_asy_rslt")
+@KeySequence("t_bsn_smp_asy_rslt_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessSampleAssayResultDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 委托登记样品明细ID
+ */
+ @TableField("BSN_SMP_ENTT_DTL_ID")
+ private Long businessSampleEntrustDetailId;
+ /**
+ * 样品主样ID
+ */
+ @TableField("BSN_BSE_SMP_ID")
+ private Long businessBaseSampleId;
+ /**
+ * 来样品位
+ */
+ @TableField("DAT")
+ private String data;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 乐观锁
+ */
+ @TableField("UPD_CNT")
+ private Integer updateCount;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustDetailDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustDetailDO.java
new file mode 100644
index 0000000..2952aca
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustDetailDO.java
@@ -0,0 +1,110 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 委检登记样品明细 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_smp_entt_dtl")
+@KeySequence("t_bsn_smp_entt_dtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessSampleEntrustDetailDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 检验委托登记ID
+ */
+ @TableField("BSN_SMP_ENTT_REG_ID")
+ private Long businessSampleEntrustRegistrationId;
+ /**
+ * 主样业务ID
+ */
+ @TableField("BSN_BSE_SMP_ID")
+ private Long businessBaseSampleId;
+ /**
+ * 样品大类ID
+ */
+ @TableField("BSE_SMP_ID")
+ private Long baseSampleId;
+ /**
+ * 样品类型ID,字典表:【T_DIC_BSN】结算样、委检样、生产样等
+ */
+ @TableField("DIC_BSN_ID")
+ private Long dictionaryBusinessId;
+ /**
+ * 样品名称
+ */
+ @TableField("SMP_NAME")
+ private String sampleName;
+ /**
+ * 样品编号
+ */
+ @TableField("SMP_CD")
+ private String sampleCode;
+ /**
+ * 委托样品名称
+ */
+ @TableField("ENTT_SMP_NAME")
+ private String entrustSampleName;
+ /**
+ * 委托样品编号
+ */
+ @TableField("ENTT_SMP_CD")
+ private String entrustSampleCode;
+ /**
+ * 排序
+ */
+ @TableField("SRT")
+ private Integer sort;
+ /**
+ * 检测项目
+ */
+ @TableField("ASY_PRJ")
+ private String assayProject;
+ /**
+ * 预报结果
+ */
+ @TableField("FRCST_RSLT")
+ private String forecastResult;
+ /**
+ * 是否称重,1-启用,0-不启用
+ */
+ @TableField("IS_WG")
+ private Integer isWeighing;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 乐观锁
+ */
+ @TableField("UPD_CNT")
+ private Integer updateCount;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustProjectDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustProjectDO.java
new file mode 100644
index 0000000..e5a0bab
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustProjectDO.java
@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 委检样品检测项目业务 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_smp_entt_prj")
+@KeySequence("t_bsn_smp_entt_prj_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessSampleEntrustProjectDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 样品检验委托明细ID
+ */
+ @TableField("BSN_SMP_ENTT_DTL_ID")
+ private Long businessSampleEntrustDetailId;
+ /**
+ * 物料检测标准检测项目ID
+ */
+ @TableField("MTRL_ASY_STD_DTL_ID")
+ private Long materialAssayStandardDetailId;
+ /**
+ * 检测项目ID,字典表:【T_DIC_PRJ】
+ */
+ @TableField("DIC_PRJ_ID")
+ private Long dictionaryProjectId;
+ /**
+ * 是否启用,1-启用,0-不启用
+ */
+ @TableField("IS_ENBD")
+ private Integer isEnabled;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 乐观锁
+ */
+ @TableField("UPD_CNT")
+ private Integer updateCount;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustRegistrationDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustRegistrationDO.java
new file mode 100644
index 0000000..2dc57fa
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSampleEntrustRegistrationDO.java
@@ -0,0 +1,224 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 委检登记业务 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_smp_entt_reg")
+@KeySequence("t_bsn_smp_entt_reg_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessSampleEntrustRegistrationDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 委托ID
+ */
+ @TableField("ENTT_ID")
+ private Long entrustId;
+ /**
+ * 委托单号
+ */
+ @TableField("ENTT_NUM")
+ private String entrustNumber;
+ /**
+ * 委托单位/送样单位
+ */
+ @TableField("ENTT_UNT")
+ private String entrustUnit;
+ /**
+ * 委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托
+ */
+ @TableField("CFG_ENTT_SRC_ID")
+ private Long configEntrustSourceId;
+ /**
+ * 样品数量
+ */
+ @TableField("SMP_QTY")
+ private Integer sampleQuantity;
+ /**
+ * 任务数量
+ */
+ @TableField("TSK_QTY")
+ private Integer taskQuantity;
+ /**
+ * 已完成任务数量
+ */
+ @TableField("TSK_FIND_QTY")
+ private Integer taskFinishedQuantity;
+ /**
+ * 余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃
+ */
+ @TableField("RMNE_SMP_REQM")
+ private String remaineSampleRequirement;
+ /**
+ * 样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体
+ */
+ @TableField("SMP_STS")
+ private String sampleStatus;
+ /**
+ * 电话
+ */
+ @TableField("TEL")
+ private String tel;
+ /**
+ * 传真
+ */
+ @TableField("FAX")
+ private String fax;
+ /**
+ * 通讯地址
+ */
+ @TableField("ADR")
+ private String address;
+ /**
+ * 邮编
+ */
+ @TableField("PSTL")
+ private String postal;
+ /**
+ * E-mail
+ */
+ @TableField("EM")
+ private String email;
+ /**
+ * 委托检测类别,【字典】【jy_sample_entrust_category】一般委托、仲裁委托
+ */
+ @TableField("ENTT_CTGR")
+ private String entrustCategory;
+ /**
+ * 样品类别(装港/卸港),【字典】【jy_sample_entrust_category】装港样、卸港样
+ */
+ @TableField("SMP_CTGR")
+ private String sampleCategory;
+ /**
+ * 样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样
+ */
+ @TableField("SMP_ORGN")
+ private String sampleOrigin;
+ /**
+ * 保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求
+ */
+ @TableField("SCRY_REQR")
+ private String secrecyRequire;
+ /**
+ * 检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择
+ */
+ @TableField("ASY_MTHD")
+ private String assayMethod;
+ /**
+ * 送样人
+ */
+ @TableField("SMP_SNDR")
+ private String sampleSender;
+ /**
+ * 送样日期
+ */
+ @TableField("SMP_SND_DT")
+ private LocalDateTime sampleSendDate;
+ /**
+ * 收样人
+ */
+ @TableField("SMP_RCVR")
+ private String sampleReceiver;
+ /**
+ * 收样日期
+ */
+ @TableField("SMP_RCV_DT")
+ private LocalDateTime sampleReceiveDate;
+ /**
+ * 登记状态,register-登记中、submitted-已提交
+ */
+ @TableField("REG_STS")
+ private String registrationStatus;
+ /**
+ * 数据校验状态,success-数据校验成功、fail-数据校验失败
+ */
+ @TableField("DAT_CHK_STS")
+ private String dataCheckStatus;
+ /**
+ * 检验状态,unchecked-未检验;checked-已检验
+ */
+ @TableField("ASY_STS")
+ private String assayStatus;
+ /**
+ * 数据回报状态,unreturned-未回报;returned-已回报
+ */
+ @TableField("DAT_STS")
+ private String dataStatus;
+ /**
+ * 报告IDs
+ */
+ @TableField("DOC_MAIN_ID")
+ private String documentMainId;
+ /**
+ * 报告发送方式,【字典】【jy_sample_entrust_send_way】自取、邮寄、电话、传真、E-mail
+ */
+ @TableField("DOC_SND_WY")
+ private String documentSendWay;
+ /**
+ * 报告发送人
+ */
+ @TableField("DOC_PUBR")
+ private String documentPublisher;
+ /**
+ * 报告发送日期
+ */
+ @TableField("DOC_PUBR_DT")
+ private LocalDateTime documentPublisherDate;
+ /**
+ * 报告接收人
+ */
+ @TableField("DOC_RCVR")
+ private String documentReceiver;
+ /**
+ * 报告接收日期
+ */
+ @TableField("DOC_RCV_DT")
+ private LocalDateTime documentReceiveDate;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 乐观锁
+ */
+ @TableField("UPD_CNT")
+ private Integer updateCount;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+ /**
+ * 扩展信息
+ */
+ @TableField("EXT_INF")
+ private String externalInfomation;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSubParentSampleDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSubParentSampleDO.java
new file mode 100644
index 0000000..8ffb5ab
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSubParentSampleDO.java
@@ -0,0 +1,121 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 分样业务 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_sb_prn_smp")
+@KeySequence("t_bsn_sb_prn_smp_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessSubParentSampleDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 样品ID
+ */
+ @TableField("SMP_ID")
+ private Long sampleId;
+ /**
+ * 样品主样ID
+ */
+ @TableField("BSN_BSE_SMP_ID")
+ private Long businessBaseSampleId;
+ /**
+ * 分样配置ID
+ */
+ @TableField("CFG_SB_SMP_PRN_ID")
+ private Long configSubSampleParentId;
+ /**
+ * 分样类型ID,字典表:【T_DIC_BSN】化学样、试金样、仪器样
+ */
+ @TableField("DIC_BSN_ID")
+ private Long dictionaryBusinessId;
+ /**
+ * 样品编号
+ */
+ @TableField("SMP_CD")
+ private String sampleCode;
+ /**
+ * 样品名称
+ */
+ @TableField("SMP_NAME")
+ private String sampleName;
+ /**
+ * 子样样品编号
+ */
+ @TableField("SB_SMP_CD")
+ private String subSampleCode;
+ /**
+ * 子样归库码
+ */
+ @TableField("SB_SMP_RTN_CD")
+ private String subSampleReturnCode;
+ /**
+ * 上报人
+ */
+ @TableField("RPTR")
+ private String reporter;
+ /**
+ * 上报时间
+ */
+ @TableField("RPT_TM")
+ private LocalDateTime reportTime;
+ /**
+ * 审核流程code
+ */
+ @TableField("AUD_FLW_CD")
+ private String auditFlowCode;
+ /**
+ * 超差标注
+ */
+ @TableField("ASMT_STS")
+ private Integer assessmentStatus;
+ /**
+ * 样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废
+ */
+ @TableField("SMP_STS")
+ private String sampleStatus;
+ /**
+ * 是否启用,1-启用,0-不启用
+ */
+ @TableField("IS_ENBD")
+ private Integer isEnabled;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 乐观锁
+ */
+ @TableField("UPD_CNT")
+ private Integer updateCount;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSubSampleDO.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSubSampleDO.java
new file mode 100644
index 0000000..07e2cf8
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/dataobject/BusinessSubSampleDO.java
@@ -0,0 +1,200 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.dataobject;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
+/**
+* 子样业务 DO
+*
+* @author 后台管理
+*/
+@TableName("t_bsn_sb_smp")
+@KeySequence("t_bsn_sb_smp_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class BusinessSubSampleDO extends BusinessBaseDO {
+
+
+
+ /**
+ * ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 样品主样ID
+ */
+ @TableField("BSN_BSE_SMP_ID")
+ private Long businessBaseSampleId;
+ /**
+ * 样品分样ID
+ */
+ @TableField("BSN_SB_PRN_SMP_ID")
+ private Long businessSubParentSampleId;
+ /**
+ * 子样配置ID
+ */
+ @TableField("CFG_SB_SMP_ID")
+ private Long configSubSampleId;
+ /**
+ * 子样类型ID,字典表:【T_DIC_BSN】化学分析样、试金分析样、仪器分析样
+ */
+ @TableField("DIC_BSN_ID")
+ private Long dictionaryBusinessId;
+ /**
+ * 库位信息ID
+ */
+ @TableField("CFG_WRH_LOC_INF_ID")
+ private Long configWarehouseLocationInfomationId;
+ /**
+ * 样品ID
+ */
+ @TableField("SMP_ID")
+ private Long sampleId;
+ /**
+ * 组ID,如果是委托创建的,则组ID和样品分样ID一致
+ */
+ @TableField("GRP_ID")
+ private String groupId;
+ /**
+ * 样品名称
+ */
+ @TableField("SMP_NAME")
+ private String sampleName;
+ /**
+ * 样品编号
+ */
+ @TableField("SMP_CD")
+ private String sampleCode;
+ /**
+ * 分析编号
+ */
+ @TableField("SMP_ASY_CD")
+ private String sampleAssayCode;
+ /**
+ * 归库编号
+ */
+ @TableField("SMP_RTN_CD")
+ private String sampleReturnCode;
+ /**
+ * 样品流程ID
+ */
+ @TableField("SMP_FLW_ID")
+ private Long sampleFlowId;
+ /**
+ * 样品流程KEY
+ */
+ @TableField("SMP_FLW_KY")
+ private String sampleFlowKey;
+ /**
+ * 下一步样品流程名称
+ */
+ @TableField("NXT_SMP_FLW")
+ private String nextSampleFlow;
+ /**
+ * 是否已生成归库码
+ */
+ @TableField("IS_GEN_RTN_CD")
+ private Integer isGenerateReturnCode;
+ /**
+ * 任务指派给分析人
+ */
+ @TableField("ASY_OPTR")
+ private String assayOperator;
+ /**
+ * 是否已指派
+ */
+ @TableField("IS_TSKD")
+ private Integer isTasked;
+ /**
+ * 指派时间
+ */
+ @TableField("TSK_TM")
+ private LocalDateTime taskTime;
+ /**
+ * 是否已上报
+ */
+ @TableField("IS_RPOD")
+ private Integer isReported;
+ /**
+ * 上报人
+ */
+ @TableField("RPTR")
+ private String reporter;
+ /**
+ * 上报时间
+ */
+ @TableField("RPT_TM")
+ private LocalDateTime reportTime;
+ /**
+ * 归库时间
+ */
+ @TableField("RTN_TM")
+ private LocalDateTime returnTime;
+ /**
+ * 归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁
+ */
+ @TableField("RTN_STS")
+ private Integer returnStatus;
+ /**
+ * 打印次数
+ */
+ @TableField("RTN_CD_PRNT_CNT")
+ private Integer returnCodePrintCount;
+ /**
+ * 末次打印时间
+ */
+ @TableField("PRNT_LST_TM")
+ private LocalDateTime printLastTime;
+ /**
+ * 样品流程节点时间
+ */
+ @TableField("SMP_FLW_TM")
+ private LocalDateTime sampleFlowTime;
+ /**
+ * 样品状态,【字典】【jy_sample_status】normal-正常、isolation-隔离、void-作废
+ */
+ @TableField("SMP_STS")
+ private String sampleStatus;
+ /**
+ * 是否启用,1-启用,0-不启用
+ */
+ @TableField("IS_ENBD")
+ private Integer isEnabled;
+ /**
+ * 分析元素备注
+ */
+ @TableField("ANL_RMK")
+ private String analysisRemark;
+ /**
+ * 所属部门
+ */
+ @TableField("SYS_DEPT_CD")
+ private String systemDepartmentCode;
+ /**
+ * 乐观锁
+ */
+ @TableField("UPD_CNT")
+ private Integer updateCount;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessBaseSampleMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessBaseSampleMapper.java
new file mode 100644
index 0000000..4d14019
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessBaseSampleMapper.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessBaseSamplePageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 主样业务 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessBaseSampleMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessBaseSamplePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(BusinessBaseSampleDO::getSampleName, reqVO.getSampleName())
+ .eqIfPresent(BusinessBaseSampleDO::getSampleCode, reqVO.getSampleCode())
+ .eqIfPresent(BusinessBaseSampleDO::getConfigBaseSampleId, reqVO.getConfigBaseSampleId())
+ .eqIfPresent(BusinessBaseSampleDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
+ .betweenIfPresent(BusinessBaseSampleDO::getSampleTime, reqVO.getSampleTime())
+ .eqIfPresent(BusinessBaseSampleDO::getPrintCount, reqVO.getPrintCount())
+ .betweenIfPresent(BusinessBaseSampleDO::getPrintLastTime, reqVO.getPrintLastTime())
+ .eqIfPresent(BusinessBaseSampleDO::getSampleFlowId, reqVO.getSampleFlowId())
+ .eqIfPresent(BusinessBaseSampleDO::getSampleFlowKey, reqVO.getSampleFlowKey())
+ .betweenIfPresent(BusinessBaseSampleDO::getSampleFlowTime, reqVO.getSampleFlowTime())
+ .eqIfPresent(BusinessBaseSampleDO::getSampleStatus, reqVO.getSampleStatus())
+ .eqIfPresent(BusinessBaseSampleDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .eqIfPresent(BusinessBaseSampleDO::getOperator, reqVO.getOperator())
+ .betweenIfPresent(BusinessBaseSampleDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessBaseSampleDO::getUpdateCount, reqVO.getUpdateCount())
+ .eqIfPresent(BusinessBaseSampleDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessBaseSampleDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessHandoverRecordSubMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessHandoverRecordSubMapper.java
new file mode 100644
index 0000000..bfb56e6
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessHandoverRecordSubMapper.java
@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessHandoverRecordSubPageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessHandoverRecordSubDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 子样交接记录业务 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessHandoverRecordSubMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessHandoverRecordSubPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(BusinessHandoverRecordSubDO::getBusinessSubSampleId, reqVO.getBusinessSubSampleId())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getSampleFlowId, reqVO.getSampleFlowId())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getSampleFlowKey, reqVO.getSampleFlowKey())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getSampleCode, reqVO.getSampleCode())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getSampleWeight, reqVO.getSampleWeight())
+ .betweenIfPresent(BusinessHandoverRecordSubDO::getOperationTime, reqVO.getOperationTime())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getOperator, reqVO.getOperator())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getOperatorId, reqVO.getOperatorId())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getSendSampleOperator, reqVO.getSendSampleOperator())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getReceiveSampleOperator, reqVO.getReceiveSampleOperator())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .betweenIfPresent(BusinessHandoverRecordSubDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessHandoverRecordSubDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessHandoverRecordSubDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleAssayResultMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleAssayResultMapper.java
new file mode 100644
index 0000000..1023a08
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleAssayResultMapper.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleAssayResultPageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 委检登记来样品位 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessSampleAssayResultMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessSampleAssayResultPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(BusinessSampleAssayResultDO::getBusinessSampleEntrustDetailId, reqVO.getBusinessSampleEntrustDetailId())
+ .eqIfPresent(BusinessSampleAssayResultDO::getBusinessBaseSampleId, reqVO.getBusinessBaseSampleId())
+ .eqIfPresent(BusinessSampleAssayResultDO::getData, reqVO.getData())
+ .eqIfPresent(BusinessSampleAssayResultDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .betweenIfPresent(BusinessSampleAssayResultDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessSampleAssayResultDO::getUpdateCount, reqVO.getUpdateCount())
+ .eqIfPresent(BusinessSampleAssayResultDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessSampleAssayResultDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustDetailMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustDetailMapper.java
new file mode 100644
index 0000000..3bc78ee
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustDetailMapper.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 委检登记样品明细 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessSampleEntrustDetailMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessSampleEntrustDetailPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, reqVO.getBusinessSampleEntrustRegistrationId())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getBusinessBaseSampleId, reqVO.getBusinessBaseSampleId())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getBaseSampleId, reqVO.getBaseSampleId())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
+ .likeIfPresent(BusinessSampleEntrustDetailDO::getSampleName, reqVO.getSampleName())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getSampleCode, reqVO.getSampleCode())
+ .likeIfPresent(BusinessSampleEntrustDetailDO::getEntrustSampleName, reqVO.getEntrustSampleName())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getEntrustSampleCode, reqVO.getEntrustSampleCode())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getSort, reqVO.getSort())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getAssayProject, reqVO.getAssayProject())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getForecastResult, reqVO.getForecastResult())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getIsWeighing, reqVO.getIsWeighing())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .betweenIfPresent(BusinessSampleEntrustDetailDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getUpdateCount, reqVO.getUpdateCount())
+ .eqIfPresent(BusinessSampleEntrustDetailDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessSampleEntrustDetailDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustProjectMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustProjectMapper.java
new file mode 100644
index 0000000..45c4c38
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustProjectMapper.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustProjectPageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 委检样品检测项目业务 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessSampleEntrustProjectMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessSampleEntrustProjectPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, reqVO.getBusinessSampleEntrustDetailId())
+ .eqIfPresent(BusinessSampleEntrustProjectDO::getMaterialAssayStandardDetailId, reqVO.getMaterialAssayStandardDetailId())
+ .eqIfPresent(BusinessSampleEntrustProjectDO::getDictionaryProjectId, reqVO.getDictionaryProjectId())
+ .eqIfPresent(BusinessSampleEntrustProjectDO::getIsEnabled, reqVO.getIsEnabled())
+ .eqIfPresent(BusinessSampleEntrustProjectDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .betweenIfPresent(BusinessSampleEntrustProjectDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessSampleEntrustProjectDO::getUpdateCount, reqVO.getUpdateCount())
+ .eqIfPresent(BusinessSampleEntrustProjectDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessSampleEntrustProjectDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustRegistrationMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustRegistrationMapper.java
new file mode 100644
index 0000000..566167d
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSampleEntrustRegistrationMapper.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustRegistrationPageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 委检登记业务 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessSampleEntrustRegistrationMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessSampleEntrustRegistrationPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getEntrustId, reqVO.getEntrustId())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getEntrustNumber, reqVO.getEntrustNumber())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getEntrustUnit, reqVO.getEntrustUnit())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getConfigEntrustSourceId, reqVO.getConfigEntrustSourceId())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSampleQuantity, reqVO.getSampleQuantity())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getTaskQuantity, reqVO.getTaskQuantity())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getTaskFinishedQuantity, reqVO.getTaskFinishedQuantity())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getRemaineSampleRequirement, reqVO.getRemaineSampleRequirement())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSampleStatus, reqVO.getSampleStatus())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getTel, reqVO.getTel())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getFax, reqVO.getFax())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getAddress, reqVO.getAddress())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getPostal, reqVO.getPostal())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getEmail, reqVO.getEmail())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getEntrustCategory, reqVO.getEntrustCategory())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSampleCategory, reqVO.getSampleCategory())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSampleOrigin, reqVO.getSampleOrigin())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSecrecyRequire, reqVO.getSecrecyRequire())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getAssayMethod, reqVO.getAssayMethod())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSampleSender, reqVO.getSampleSender())
+ .betweenIfPresent(BusinessSampleEntrustRegistrationDO::getSampleSendDate, reqVO.getSampleSendDate())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSampleReceiver, reqVO.getSampleReceiver())
+ .betweenIfPresent(BusinessSampleEntrustRegistrationDO::getSampleReceiveDate, reqVO.getSampleReceiveDate())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getRegistrationStatus, reqVO.getRegistrationStatus())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getDataCheckStatus, reqVO.getDataCheckStatus())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getAssayStatus, reqVO.getAssayStatus())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getDataStatus, reqVO.getDataStatus())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getDocumentMainId, reqVO.getDocumentMainId())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getDocumentSendWay, reqVO.getDocumentSendWay())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getDocumentPublisher, reqVO.getDocumentPublisher())
+ .betweenIfPresent(BusinessSampleEntrustRegistrationDO::getDocumentPublisherDate, reqVO.getDocumentPublisherDate())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getDocumentReceiver, reqVO.getDocumentReceiver())
+ .betweenIfPresent(BusinessSampleEntrustRegistrationDO::getDocumentReceiveDate, reqVO.getDocumentReceiveDate())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .betweenIfPresent(BusinessSampleEntrustRegistrationDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getUpdateCount, reqVO.getUpdateCount())
+ .eqIfPresent(BusinessSampleEntrustRegistrationDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessSampleEntrustRegistrationDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSubParentSampleMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSubParentSampleMapper.java
new file mode 100644
index 0000000..4335a8b
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSubParentSampleMapper.java
@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubParentSamplePageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 分样业务 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessSubParentSampleMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessSubParentSamplePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(BusinessSubParentSampleDO::getSampleId, reqVO.getSampleId())
+ .eqIfPresent(BusinessSubParentSampleDO::getBusinessBaseSampleId, reqVO.getBusinessBaseSampleId())
+ .eqIfPresent(BusinessSubParentSampleDO::getConfigSubSampleParentId, reqVO.getConfigSubSampleParentId())
+ .eqIfPresent(BusinessSubParentSampleDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
+ .eqIfPresent(BusinessSubParentSampleDO::getSampleCode, reqVO.getSampleCode())
+ .likeIfPresent(BusinessSubParentSampleDO::getSampleName, reqVO.getSampleName())
+ .eqIfPresent(BusinessSubParentSampleDO::getSubSampleCode, reqVO.getSubSampleCode())
+ .eqIfPresent(BusinessSubParentSampleDO::getSubSampleReturnCode, reqVO.getSubSampleReturnCode())
+ .eqIfPresent(BusinessSubParentSampleDO::getReporter, reqVO.getReporter())
+ .betweenIfPresent(BusinessSubParentSampleDO::getReportTime, reqVO.getReportTime())
+ .eqIfPresent(BusinessSubParentSampleDO::getAuditFlowCode, reqVO.getAuditFlowCode())
+ .eqIfPresent(BusinessSubParentSampleDO::getAssessmentStatus, reqVO.getAssessmentStatus())
+ .eqIfPresent(BusinessSubParentSampleDO::getSampleStatus, reqVO.getSampleStatus())
+ .eqIfPresent(BusinessSubParentSampleDO::getIsEnabled, reqVO.getIsEnabled())
+ .eqIfPresent(BusinessSubParentSampleDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .betweenIfPresent(BusinessSubParentSampleDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessSubParentSampleDO::getUpdateCount, reqVO.getUpdateCount())
+ .eqIfPresent(BusinessSubParentSampleDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessSubParentSampleDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSubSampleMapper.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSubSampleMapper.java
new file mode 100644
index 0000000..dd37bb3
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/dal/mapper/BusinessSubSampleMapper.java
@@ -0,0 +1,58 @@
+package cn.iocoder.yudao.module.qms.business.bus.dal.mapper;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSamplePageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 子样业务 Mapper
+ *
+ * @author 后台管理
+ */
+@Mapper
+public interface BusinessSubSampleMapper extends BaseMapperX {
+
+ default PageResult selectPage(BusinessSubSamplePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(BusinessSubSampleDO::getBusinessBaseSampleId, reqVO.getBusinessBaseSampleId())
+ .eqIfPresent(BusinessSubSampleDO::getBusinessSubParentSampleId, reqVO.getBusinessSubParentSampleId())
+ .eqIfPresent(BusinessSubSampleDO::getConfigSubSampleId, reqVO.getConfigSubSampleId())
+ .eqIfPresent(BusinessSubSampleDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
+ .eqIfPresent(BusinessSubSampleDO::getConfigWarehouseLocationInfomationId, reqVO.getConfigWarehouseLocationInfomationId())
+ .eqIfPresent(BusinessSubSampleDO::getSampleId, reqVO.getSampleId())
+ .eqIfPresent(BusinessSubSampleDO::getGroupId, reqVO.getGroupId())
+ .likeIfPresent(BusinessSubSampleDO::getSampleName, reqVO.getSampleName())
+ .eqIfPresent(BusinessSubSampleDO::getSampleCode, reqVO.getSampleCode())
+ .eqIfPresent(BusinessSubSampleDO::getSampleAssayCode, reqVO.getSampleAssayCode())
+ .eqIfPresent(BusinessSubSampleDO::getSampleReturnCode, reqVO.getSampleReturnCode())
+ .eqIfPresent(BusinessSubSampleDO::getSampleFlowId, reqVO.getSampleFlowId())
+ .eqIfPresent(BusinessSubSampleDO::getSampleFlowKey, reqVO.getSampleFlowKey())
+ .eqIfPresent(BusinessSubSampleDO::getNextSampleFlow, reqVO.getNextSampleFlow())
+ .eqIfPresent(BusinessSubSampleDO::getIsGenerateReturnCode, reqVO.getIsGenerateReturnCode())
+ .eqIfPresent(BusinessSubSampleDO::getAssayOperator, reqVO.getAssayOperator())
+ .eqIfPresent(BusinessSubSampleDO::getIsTasked, reqVO.getIsTasked())
+ .betweenIfPresent(BusinessSubSampleDO::getTaskTime, reqVO.getTaskTime())
+ .eqIfPresent(BusinessSubSampleDO::getIsReported, reqVO.getIsReported())
+ .eqIfPresent(BusinessSubSampleDO::getReporter, reqVO.getReporter())
+ .betweenIfPresent(BusinessSubSampleDO::getReportTime, reqVO.getReportTime())
+ .betweenIfPresent(BusinessSubSampleDO::getReturnTime, reqVO.getReturnTime())
+ .eqIfPresent(BusinessSubSampleDO::getReturnStatus, reqVO.getReturnStatus())
+ .eqIfPresent(BusinessSubSampleDO::getReturnCodePrintCount, reqVO.getReturnCodePrintCount())
+ .betweenIfPresent(BusinessSubSampleDO::getPrintLastTime, reqVO.getPrintLastTime())
+ .betweenIfPresent(BusinessSubSampleDO::getSampleFlowTime, reqVO.getSampleFlowTime())
+ .eqIfPresent(BusinessSubSampleDO::getSampleStatus, reqVO.getSampleStatus())
+ .eqIfPresent(BusinessSubSampleDO::getIsEnabled, reqVO.getIsEnabled())
+ .eqIfPresent(BusinessSubSampleDO::getAnalysisRemark, reqVO.getAnalysisRemark())
+ .eqIfPresent(BusinessSubSampleDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
+ .betweenIfPresent(BusinessSubSampleDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(BusinessSubSampleDO::getUpdateCount, reqVO.getUpdateCount())
+ .eqIfPresent(BusinessSubSampleDO::getRemark, reqVO.getRemark())
+ .orderByDesc(BusinessSubSampleDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustDetail.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustDetail.java
new file mode 100644
index 0000000..cf66a9b
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustDetail.java
@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.param;
+
+import java.util.List;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * SampleEntrustDetail
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@Data
+@Accessors(chain = true)
+public class SampleEntrustDetail {
+
+ /** ID **/
+ private Long id;
+
+ /** 委托登记id **/
+ private Long businessSampleEntrustRegistrationId;
+
+ /** 样品大类id **/
+ private Long baseSampleId;
+
+ /** 主样业务ID **/
+ private Long businessBaseSampleId;
+
+ /** 样品类型ID 字典表:【T_DIC_BSN】结算样、委检样、生产样等 **/
+ private Long dictionaryBusinessId;
+
+ /** 样品名称 **/
+ private String sampleName;
+
+ /** 样品编号 **/
+ private String sampleCode;
+
+ /** 委托样品名称 **/
+ private String entrustSampleName;
+
+ /** 委托样品编号 **/
+ private String entrustSampleCode;
+
+ /** 排序号 **/
+ private Integer sort;
+
+ /** 检测项目 **/
+ private String assayProject;
+
+ /** 预报结果 **/
+ private String forecastResult;
+
+ /** 是否称重 **/
+ private Integer isWeighing;
+
+ /** 备注 **/
+ private String remark;
+
+ /** 检测项目 **/
+ private List sampleEntrustDetailProjectList;
+
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustDetailProject.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustDetailProject.java
new file mode 100644
index 0000000..9783149
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustDetailProject.java
@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.param;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * SampleEntrustDetailProject
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@Data
+@Accessors(chain = true)
+public class SampleEntrustDetailProject {
+
+ /** ID **/
+ private Long id;
+
+ /** 样品检验委托明细ID **/
+ private Long businessSampleEntrustDetailId;
+
+ /** 物料检测标准检测项目ID **/
+ private Long materialAssayStandardDetailId;
+
+ /** 检测项目ID **/
+ private Long dictionaryProjectId;
+
+ /** 是否启用 **/
+ private Integer isEnabled;
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustParam.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustParam.java
new file mode 100644
index 0000000..60ec290
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleEntrustParam.java
@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.param;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * SampleEntrustParam
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@Data
+@Accessors(chain = true)
+public class SampleEntrustParam {
+
+ /** 委托登记id **/
+ private Long id;
+
+ /** 委托id **/
+ private Long entrustId;
+
+ /** 委托单号 **/
+ private String entrustNumber;
+
+ /** 委托单位 **/
+ private String entrustUnit;
+
+ /** 委托来源 **/
+ private Long configEntrustSourceId;
+
+ /** 样品数量 **/
+ private Integer sampleQuantity;
+
+ /** 余样要求 **/
+ private String remaineSampleRequirement;
+
+ /** 送样人 **/
+ private String sampleSender;
+
+ /** 送样日期 **/
+ private LocalDateTime sampleSendDate;
+
+ /** 备注 **/
+ private String remark;
+
+ /** 扩展信息 **/
+ private String extInfo;
+
+ private List sampleEntrustDetailList;
+
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleFlowParam.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleFlowParam.java
new file mode 100644
index 0000000..5aa5b23
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/param/SampleFlowParam.java
@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.param;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * SampleFlowParam
+ * 样品流转参数
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月6日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月6日
+ */
+@Data
+@Accessors(chain = true)
+public class SampleFlowParam {
+
+ /** 样品来源 1:主,2:子 **/
+ private Integer sampleSourceType;
+
+ /** 样品当前流程节点 **/
+ private String sampleProcessNo;
+
+ /** 样品id列表 **/
+ private List sampleIdList;
+
+ /** 指定时间 **/
+ private LocalDateTime specifyDateTime;
+
+ /** 送样人 **/
+ private String sendSampleOper;
+
+ /** 收样人 **/
+ private String receiveSampleOper;
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCheckCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCheckCmp.java
new file mode 100644
index 0000000..4bde6e9
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCheckCmp.java
@@ -0,0 +1,44 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.entrust;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO;
+
+/**
+ * SampleEntrustCheckCmp
+ * 样品委托检查
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@LiteflowComponent(id = "sampleEntrustCheckCmp", name = "样品委托检查")
+public class SampleEntrustCheckCmp extends NodeComponent {
+
+ @Override
+ public void process() throws Exception {
+ //获取样品委托上下文
+ SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class);
+ //获取样品委托单
+ BusinessSampleEntrustRegistrationDO sampleEntrustRegistration = sampleEntrustContext.getSampleEntrustRegistration();
+ if (sampleEntrustRegistration.getConfigEntrustSourceId() == null) {
+ throw new ServiceException(500, "委托来源id不允许为空");
+ }
+ ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId());
+ if (configEntrustSource == null) {
+ throw new ServiceException(500, "委托来源id不正确");
+ }
+ sampleEntrustRegistration.setDataCheckStatus("success");
+
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustContextInitCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustContextInitCmp.java
new file mode 100644
index 0000000..42890ad
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustContextInitCmp.java
@@ -0,0 +1,127 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.entrust;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustDetail;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustDetailProject;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustParam;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardMethodDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.mapper.ConfigEntrustSourceMapper;
+import cn.iocoder.yudao.module.qms.business.config.dal.mapper.MaterialAssayStandardDetailMapper;
+import cn.iocoder.yudao.module.qms.business.config.dal.mapper.MaterialAssayStandardMapper;
+import cn.iocoder.yudao.module.qms.business.config.dal.mapper.MaterialAssayStandardMethodMapper;
+import jakarta.annotation.Resource;
+
+/**
+ * SampleEntrustContextInitCmp
+ * 样品委托上下文初始化
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@LiteflowComponent(id = "sampleEntrustContextInitCmp", name = "样品委托上下文初始化")
+public class SampleEntrustContextInitCmp extends NodeComponent {
+
+ @Resource
+ private ConfigEntrustSourceMapper configEntrustSourceMapper;
+
+ @Resource
+ private MaterialAssayStandardMapper materialAssayStandardMapper;
+
+ @Resource
+ private MaterialAssayStandardDetailMapper materialAssayStandardDetailMapper;
+
+ @Resource
+ private MaterialAssayStandardMethodMapper materialAssayStandardMethodMapper;
+
+ @Override
+ public void process() throws Exception {
+ //租户id
+ Long tenantId = TenantContextHolder.getRequiredTenantId();
+
+ //当前登录用户
+ LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
+
+ //当前登录用户昵称
+ String nickName = SecurityFrameworkUtils.getLoginUserNickname();
+
+ //获取样品委托参数
+ SampleEntrustParam sampleEntrustParam = this.getRequestData();
+
+ if (sampleEntrustParam == null) {
+ throw new ServiceException(500, "样品委托参数不允许为空");
+ }
+
+ //获取样品委托上下文
+ SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class);
+ sampleEntrustContext.setTenantId(tenantId);
+ sampleEntrustContext.setLoginUser(loginUser);
+ sampleEntrustContext.setLoginRealname(nickName);
+
+ //委托来源配置
+ List configEntrustSourceList = configEntrustSourceMapper.selectList();
+ sampleEntrustContext.setConfigEntrustSourceList(configEntrustSourceList);
+
+ //物料检验标准
+ List materialAssayStandardList = materialAssayStandardMapper.selectList();
+ sampleEntrustContext.setMaterialAssayStandardList(materialAssayStandardList);
+
+ //物料检验标准项
+ List materialAssayStandardDetailList = materialAssayStandardDetailMapper.selectList();
+ sampleEntrustContext.setMaterialAssayStandardDetailList(materialAssayStandardDetailList);
+
+ //物料检验标准方法
+ List materialAssayStandardMethodList = materialAssayStandardMethodMapper.selectList();
+ sampleEntrustContext.setMaterialAssayStandardMethodList(materialAssayStandardMethodList);
+
+ //委托登记
+ BusinessSampleEntrustRegistrationDO sampleEntrustRegistration = BeanUtil.copyProperties(sampleEntrustParam, BusinessSampleEntrustRegistrationDO.class);
+ sampleEntrustContext.setSampleEntrustRegistration(sampleEntrustRegistration);
+
+ List detailList = sampleEntrustParam.getSampleEntrustDetailList();
+
+ //委托登记样品明细的检测项目明细
+ List sampleEntrustProjectList = new ArrayList<>();
+ for (SampleEntrustDetail sampleEntrustDetail : detailList) {
+ if (sampleEntrustDetail.getId() == null) {
+ sampleEntrustDetail.setId(IdWorker.getId());
+ }
+ List projectList = sampleEntrustDetail.getSampleEntrustDetailProjectList();
+ for (SampleEntrustDetailProject sampleEntrustDetailProject : projectList) {
+ if (sampleEntrustDetailProject.getBusinessSampleEntrustDetailId() == null) {
+ sampleEntrustDetailProject.setBusinessSampleEntrustDetailId(sampleEntrustDetail.getId());
+ }
+ }
+ sampleEntrustProjectList.addAll(BeanUtil.copyToList(projectList, BusinessSampleEntrustProjectDO.class));
+ }
+ sampleEntrustContext.setSampleEntrustProjectList(sampleEntrustProjectList);
+
+ //委托登记样品明细
+ List sampleEntrustDetailList = BeanUtil.copyToList(detailList, BusinessSampleEntrustDetailDO.class);
+ sampleEntrustContext.setSampleEntrustDetailList(sampleEntrustDetailList);
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCreateDataCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCreateDataCmp.java
new file mode 100644
index 0000000..d765f19
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustCreateDataCmp.java
@@ -0,0 +1,112 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.entrust;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleAssayResultMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustProjectMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO;
+import cn.iocoder.yudao.module.qms.core.code.SequenceUtil;
+import jakarta.annotation.Resource;
+
+/**
+ * SampleEntrustCreateDataCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@LiteflowComponent(id = "sampleEntrustCreateDataCmp", name = "样品委托创建委托数据" )
+public class SampleEntrustCreateDataCmp extends NodeComponent {
+
+ @Resource
+ private SequenceUtil sequenceUtil;
+
+ @Resource
+ private BusinessSampleEntrustRegistrationMapper businessSampleEntrustRegistrationMapper;
+
+ @Resource
+ private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper;
+
+ @Resource
+ private BusinessSampleEntrustProjectMapper businessSampleEntrustProjectMapper;
+
+ @Resource
+ private BusinessSampleAssayResultMapper businessSampleAssayResultMapper;
+
+ @Override
+ public void process() throws Exception {
+ //获取样品委托上下文
+ SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class);
+ //样品委托
+ BusinessSampleEntrustRegistrationDO sampleEntrustRegistration = sampleEntrustContext.getSampleEntrustRegistration();
+
+ //获取委托来源配置
+ ConfigEntrustSourceDO configEntrustSource = sampleEntrustContext.getConfigEntrustSourceById(sampleEntrustRegistration.getConfigEntrustSourceId());
+ String codeRule = configEntrustSource.getCodeRule();
+
+ //赋值id
+ sampleEntrustRegistration.setId(IdWorker.getId());
+ //设置委托单号
+ sampleEntrustRegistration.setEntrustNumber(sequenceUtil.genCode(codeRule));
+
+ List sampleAssayResultList = new ArrayList<>();
+
+
+ List sampleEntrustDetailList = sampleEntrustContext.getSampleEntrustDetailList();
+ for (BusinessSampleEntrustDetailDO businessSampleEntrustDetail : sampleEntrustDetailList) {
+ businessSampleEntrustDetail.setBusinessSampleEntrustRegistrationId(sampleEntrustRegistration.getId());
+
+ if (StringUtils.isNotBlank(businessSampleEntrustDetail.getForecastResult())) {
+ BusinessSampleAssayResultDO sampleAssayResult = new BusinessSampleAssayResultDO();
+ sampleAssayResult.setBusinessSampleEntrustDetailId(businessSampleEntrustDetail.getId());
+ sampleAssayResult.setData(businessSampleEntrustDetail.getForecastResult());
+ sampleAssayResultList.add(sampleAssayResult);
+ }
+ }
+
+ List sampleEntrustProjectList = sampleEntrustContext.getSampleEntrustProjectList();
+ for (BusinessSampleEntrustProjectDO businessSampleEntrustProject : sampleEntrustProjectList) {
+ MaterialAssayStandardDetailDO materialAssayStandardDetail = sampleEntrustContext.getMaterialAssayStandardDetailById(businessSampleEntrustProject.getMaterialAssayStandardDetailId());
+ businessSampleEntrustProject.setDictionaryProjectId(materialAssayStandardDetail.getDictionaryProjectId());
+ }
+
+ //保存样品委托登记
+ businessSampleEntrustRegistrationMapper.insert(sampleEntrustRegistration);
+
+ //保存样品明细
+ if (sampleEntrustDetailList != null && sampleEntrustDetailList.size() > 0) {
+ businessSampleEntrustDetailMapper.insertBatch(sampleEntrustDetailList);
+ }
+
+ //保存检测项目
+ if (sampleEntrustProjectList != null && sampleEntrustProjectList.size() > 0) {
+ businessSampleEntrustProjectMapper.insertBatch(sampleEntrustProjectList);
+ }
+
+ //保存来样元素
+ if (sampleAssayResultList.size() > 0) {
+ businessSampleAssayResultMapper.insertBatch(sampleAssayResultList);
+ }
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java
new file mode 100644
index 0000000..4635599
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java
@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.entrust;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+/**
+ * SampleEntrustGenSampleDataCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@LiteflowComponent(id = "sampleEntrustGenSampleDataCmp", name = "样品委托生成系统样品数据")
+public class SampleEntrustGenSampleDataCmp extends NodeComponent {
+
+ @Override
+ public void process() throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustIsCreateCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustIsCreateCmp.java
new file mode 100644
index 0000000..f650510
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustIsCreateCmp.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.entrust;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeBooleanComponent;
+
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
+
+/**
+ * SampleEntrustIsCreateCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月10日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月10日
+ */
+@LiteflowComponent(id = "sampleEntrustIsCreateCmp", name = "委托登记是否为创建")
+public class SampleEntrustIsCreateCmp extends NodeBooleanComponent {
+
+ @Override
+ public boolean processBoolean() throws Exception {
+ //获取样品委托上下文
+ SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class);
+ //样品委托
+ BusinessSampleEntrustRegistrationDO sampleEntrustRegistration = sampleEntrustContext.getSampleEntrustRegistration();
+ //如果委托登记id为空,则为创建
+ return sampleEntrustRegistration.getId() == null;
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUpdateDataCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUpdateDataCmp.java
new file mode 100644
index 0000000..5b98b08
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustUpdateDataCmp.java
@@ -0,0 +1,122 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.entrust;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleAssayResultMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustProjectMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO;
+import jakarta.annotation.Resource;
+
+/**
+ * sampleEntrustUpdateDataCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+@LiteflowComponent(id = "sampleEntrustUpdateDataCmp", name = "样品委托更新委托数据" )
+public class SampleEntrustUpdateDataCmp extends NodeComponent {
+
+ @Resource
+ private BusinessSampleEntrustRegistrationMapper businessSampleEntrustRegistrationMapper;
+
+ @Resource
+ private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper;
+
+ @Resource
+ private BusinessSampleEntrustProjectMapper businessSampleEntrustProjectMapper;
+
+ @Resource
+ private BusinessSampleAssayResultMapper businessSampleAssayResultMapper;
+
+ @Override
+ public void process() throws Exception {
+ //获取样品委托上下文
+ SampleEntrustContext sampleEntrustContext = this.getContextBean(SampleEntrustContext.class);
+ //样品委托
+ BusinessSampleEntrustRegistrationDO sampleEntrustRegistration = sampleEntrustContext.getSampleEntrustRegistration();
+
+ //先删除旧的
+ List sampleEntrustDetailOldList = businessSampleEntrustDetailMapper.selectList(new LambdaQueryWrapperX().eq(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, sampleEntrustRegistration.getId()));
+ if (sampleEntrustDetailOldList != null && sampleEntrustDetailOldList.size() > 0) {
+ List sampleEntrustDetailIdList = sampleEntrustDetailOldList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ List sampleEntrustProjectList = businessSampleEntrustProjectMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList));
+ if (sampleEntrustProjectList != null && sampleEntrustProjectList.size() > 0) {
+ List sampleEntrustProjectIdList = sampleEntrustProjectList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ //删除样品对应的检验项目
+ businessSampleEntrustProjectMapper.deleteByIds(sampleEntrustProjectIdList);
+ }
+ List sampleAssayResultList = businessSampleAssayResultMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleAssayResultDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList));
+ if (sampleAssayResultList != null && sampleAssayResultList.size() > 0) {
+ List sampleAssayResultIdList = sampleAssayResultList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ //删除来样品位
+ businessSampleAssayResultMapper.deleteByIds(sampleAssayResultIdList);
+ }
+
+ //删除委托登记明细
+ businessSampleEntrustDetailMapper.deleteByIds(sampleEntrustDetailIdList);
+ }
+
+ //保存更新新的
+ List sampleAssayResultList = new ArrayList<>();
+
+
+ List sampleEntrustDetailList = sampleEntrustContext.getSampleEntrustDetailList();
+ for (BusinessSampleEntrustDetailDO businessSampleEntrustDetail : sampleEntrustDetailList) {
+ businessSampleEntrustDetail.setBusinessSampleEntrustRegistrationId(sampleEntrustRegistration.getId());
+
+ if (StringUtils.isNotBlank(businessSampleEntrustDetail.getForecastResult())) {
+ BusinessSampleAssayResultDO sampleAssayResult = new BusinessSampleAssayResultDO();
+ sampleAssayResult.setBusinessSampleEntrustDetailId(businessSampleEntrustDetail.getId());
+ sampleAssayResult.setData(businessSampleEntrustDetail.getForecastResult());
+ sampleAssayResultList.add(sampleAssayResult);
+ }
+ }
+
+ List sampleEntrustProjectList = sampleEntrustContext.getSampleEntrustProjectList();
+ for (BusinessSampleEntrustProjectDO businessSampleEntrustProject : sampleEntrustProjectList) {
+ MaterialAssayStandardDetailDO materialAssayStandardDetail = sampleEntrustContext.getMaterialAssayStandardDetailById(businessSampleEntrustProject.getMaterialAssayStandardDetailId());
+ businessSampleEntrustProject.setDictionaryProjectId(materialAssayStandardDetail.getDictionaryProjectId());
+ }
+
+ //保存样品委托登记
+ businessSampleEntrustRegistrationMapper.updateById(sampleEntrustRegistration);
+
+ //保存样品明细
+ if (sampleEntrustDetailList != null && sampleEntrustDetailList.size() > 0) {
+ businessSampleEntrustDetailMapper.insertBatch(sampleEntrustDetailList);
+ }
+
+ //保存检测项目
+ if (sampleEntrustProjectList != null && sampleEntrustProjectList.size() > 0) {
+ businessSampleEntrustProjectMapper.insertBatch(sampleEntrustProjectList);
+ }
+
+ //保存来样元素
+ if (sampleAssayResultList.size() > 0) {
+ businessSampleAssayResultMapper.insertBatch(sampleAssayResultList);
+ }
+
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleDataSaveOrUpdateCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleDataSaveOrUpdateCmp.java
new file mode 100644
index 0000000..c25e733
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleDataSaveOrUpdateCmp.java
@@ -0,0 +1,58 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.flow;
+
+import java.util.List;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessHandoverRecordSubDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessHandoverRecordSubMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSubParentSampleMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleFlowContext;
+import jakarta.annotation.Resource;
+
+/**
+ * SampleDataSaveOrUpdateCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月8日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月8日
+ */
+@LiteflowComponent(id = "sampleDataSaveOrUpdateCmp", name = "样品相关数据保存或更新")
+public class SampleDataSaveOrUpdateCmp extends NodeComponent {
+
+ @Resource
+ private BusinessSubParentSampleMapper businessSubParentSampleMapper;
+
+ @Resource
+ private BusinessSubSampleMapper businessSubSampleMapper;
+
+ @Resource
+ private BusinessHandoverRecordSubMapper businessHandoverRecordSubMapper;
+
+ @Override
+ public void process() throws Exception {
+ SampleFlowContext sampleFlowContext = this.getContextBean(SampleFlowContext.class);
+ List busSubPsampleList = sampleFlowContext.getBusSubPsampleList();
+ if (busSubPsampleList != null && busSubPsampleList.size() > 0) {
+ businessSubParentSampleMapper.updateBatch(busSubPsampleList);
+ }
+ List busSubCsampleList = sampleFlowContext.getBusSubCsampleList();
+ if (busSubCsampleList != null && busSubCsampleList.size() > 0) {
+ businessSubSampleMapper.updateBatch(busSubCsampleList);
+ }
+ List busHandoverRecordSubList = sampleFlowContext.getBusHandoverRecordSubList();
+ if (busHandoverRecordSubList != null && busHandoverRecordSubList.size() > 0) {
+ businessHandoverRecordSubMapper.insertBatch(busHandoverRecordSubList);
+ }
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleFlowContextInitCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleFlowContextInitCmp.java
new file mode 100644
index 0000000..0ae34f8
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleFlowContextInitCmp.java
@@ -0,0 +1,75 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.flow;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleFlowParam;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleFlowContext;
+
+/**
+ * SampleFlowContextInitCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月6日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月6日
+ */
+@LiteflowComponent(id = "sampleFlowContextInitCmp", name = "样品流转上下文初始化")
+public class SampleFlowContextInitCmp extends NodeComponent {
+
+ @Override
+ public void process() throws Exception {
+ //租户id
+ Long tenantId = TenantContextHolder.getRequiredTenantId();
+
+ //当前登录用户
+ LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
+
+ //当前登录用户昵称
+ String nickName = SecurityFrameworkUtils.getLoginUserNickname();
+
+ //样品流转请求参数
+ SampleFlowParam sampleFlowParam = this.getRequestData();
+
+ if (StringUtils.isBlank(sampleFlowParam.getSampleProcessNo())) {
+ new ServiceException(500, "样品流程节点sampleProcessNo不允许为空");
+ }
+
+ if (sampleFlowParam.getSampleIdList() == null || sampleFlowParam.getSampleIdList().size() <= 0) {
+ new ServiceException(500, "样品Id列表不允许为空");
+ }
+
+ SampleFlowContext sampleFlowContext = this.getContextBean(SampleFlowContext.class);
+ sampleFlowContext.setTenantId(tenantId);
+ sampleFlowContext.setLoginUser(loginUser);
+ sampleFlowContext.setLoginRealname(nickName);
+ if (sampleFlowParam.getSpecifyDateTime() != null) {
+ sampleFlowContext.setCurrentDateTime(sampleFlowParam.getSpecifyDateTime());
+ }
+ sampleFlowContext.setSampleSourceType(sampleFlowParam.getSampleSourceType());
+ sampleFlowContext.setSampleProcessNo(sampleFlowParam.getSampleProcessNo());
+ sampleFlowContext.setSampleIdList(sampleFlowParam.getSampleIdList());
+ sampleFlowContext.setSendSampleOper(sampleFlowParam.getSendSampleOper());
+ sampleFlowContext.setReceiveSampleOper(sampleFlowParam.getReceiveSampleOper());
+ }
+
+ @Override
+ public boolean isAccess() {
+ SampleFlowParam sampleFlowParam = this.getRequestData();
+ if (sampleFlowParam == null) {
+ return false;
+ }
+ return super.isAccess();
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleHandoverRecordSubCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleHandoverRecordSubCmp.java
new file mode 100644
index 0000000..2577411
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleHandoverRecordSubCmp.java
@@ -0,0 +1,76 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.flow;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessHandoverRecordSubDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleFlowContext;
+import cn.iocoder.yudao.module.qms.business.bus.service.BusinessHandoverRecordSubService;
+import jakarta.annotation.Resource;
+
+/**
+ * SampleHandRecordSubCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月6日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月6日
+ */
+@LiteflowComponent(id = "sampleHandoverRecordSubCmp", name = "子样交接记录")
+public class SampleHandoverRecordSubCmp extends NodeComponent {
+
+ @Resource
+ private BusinessHandoverRecordSubService businessHandoverRecordSubService;
+
+ @Override
+ public void process() throws Exception {
+ SampleFlowContext sampleFlowContext = this.getContextBean(SampleFlowContext.class);
+ LoginUser loginUser = sampleFlowContext.getLoginUser();
+ String loginRealname = sampleFlowContext.getLoginRealname();
+ LocalDateTime currentDateTime = sampleFlowContext.getCurrentDateTime();
+ String sendSampleOper = sampleFlowContext.getSendSampleOper();
+ String receiveSampleOper = sampleFlowContext.getReceiveSampleOper();
+ List busSubCsampleList = sampleFlowContext.getBusSubCsampleList();
+
+ List busHandoverRecordSubList = new ArrayList<>();
+
+ BusinessHandoverRecordSubDO busHandoverRecordSub = null;
+ for (BusinessSubSampleDO businessSubSample : busSubCsampleList) {
+ busHandoverRecordSub = new BusinessHandoverRecordSubDO();
+ busHandoverRecordSub.setBusinessSubSampleId(businessSubSample.getId());
+ busHandoverRecordSub.setSampleCode(businessSubSample.getSampleCode());
+ if (businessSubSample.getIsGenerateReturnCode().intValue() == 1) {
+ busHandoverRecordSub.setSampleCode(businessSubSample.getSampleReturnCode());
+ }
+ busHandoverRecordSub.setSampleFlowKey(businessSubSample.getSampleFlowKey());
+
+ if (StringUtils.isNotBlank(receiveSampleOper)) {
+ busHandoverRecordSub.setReceiveSampleOperator(receiveSampleOper);
+ }
+ if (StringUtils.isNotBlank(sendSampleOper)) {
+ busHandoverRecordSub.setSendSampleOperator(sendSampleOper);
+ }
+
+ busHandoverRecordSub.setOperatorId(loginUser.getId());
+ busHandoverRecordSub.setOperator(loginRealname);
+ busHandoverRecordSub.setOperationTime(currentDateTime);
+
+ busHandoverRecordSubList.add(busHandoverRecordSub);
+ }
+
+ sampleFlowContext.setBusHandoverRecordSubList(busHandoverRecordSubList);
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleSubCheckCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleSubCheckCmp.java
new file mode 100644
index 0000000..9ffb5b9
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleSubCheckCmp.java
@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.flow;
+
+import java.util.List;
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleFlowContext;
+import jakarta.annotation.Resource;
+
+/**
+ * SampleSubCheckCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月6日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月6日
+ */
+@LiteflowComponent(id = "sampleSubCheckCmp", name = "子样检查")
+public class SampleSubCheckCmp extends NodeComponent {
+
+ @Resource
+ private BusinessSubSampleMapper businessSubSampleMapper;
+
+ @Override
+ public void process() throws Exception {
+ SampleFlowContext sampleFlowContext = this.getContextBean(SampleFlowContext.class);
+ String sampleProcessNo = sampleFlowContext.getSampleProcessNo();
+ List sampleIdList = sampleFlowContext.getSampleIdList();
+ if (sampleIdList == null || sampleIdList.size() <= 0) {
+ throw new ServiceException(500, "样品ID列表不允许为空");
+ }
+ List businessSubSampleDOList = businessSubSampleMapper.selectByIds(sampleIdList);
+
+ boolean isSampleFlowKeyFail = businessSubSampleDOList.stream().anyMatch(p -> !p.getSampleFlowKey().equals(sampleProcessNo));
+ if (isSampleFlowKeyFail) {
+ throw new ServiceException(500, "样品列表与当前流程不符");
+ }
+ sampleFlowContext.setBusSubCsampleList(businessSubSampleDOList);
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleSubProcessUpdateCmp.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleSubProcessUpdateCmp.java
new file mode 100644
index 0000000..55c4358
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/sample/flow/SampleSubProcessUpdateCmp.java
@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.sample.flow;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import com.alibaba.fastjson2.JSON;
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleFlowContext;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.ConfigSampleFlowDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.ConfigSubSampleDO;
+import cn.iocoder.yudao.module.qms.business.config.service.ConfigSampleFlowService;
+import cn.iocoder.yudao.module.qms.business.config.service.ConfigSubSampleService;
+import cn.iocoder.yudao.module.qms.core.sampleflow.SampleFlowDefinition;
+import cn.iocoder.yudao.module.qms.core.sampleflow.SampleFlowNode;
+import jakarta.annotation.Resource;
+
+/**
+ * SampleSubProcessUpdateCmp
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月8日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月8日
+ */
+@LiteflowComponent(id = "sampleSubProcessUpdateCmp", name = "子样流程节点更新")
+public class SampleSubProcessUpdateCmp extends NodeComponent {
+
+ @Resource
+ private ConfigSubSampleService configSubSampleService;
+
+ @Resource
+ private ConfigSampleFlowService configSampleFlowService;
+
+ @Override
+ public void process() throws Exception {
+ SampleFlowContext sampleFlowContext = this.getContextBean(SampleFlowContext.class);
+ String sampleProcessNo = sampleFlowContext.getSampleProcessNo();
+// LoginUser loginUser = sampleFlowContext.getLoginUser();
+// String loginRealname = sampleFlowContext.getLoginRealname();
+ LocalDateTime currentDateTime = sampleFlowContext.getCurrentDateTime();
+ List busSubCsampleList = sampleFlowContext.getBusSubCsampleList();
+ for (BusinessSubSampleDO businessSubSample : busSubCsampleList) {
+ Long configSubSampleId = businessSubSample.getConfigSubSampleId();
+ ConfigSubSampleDO configSubSample = configSubSampleService.getConfigSubSample(configSubSampleId);
+ String sampleFlowKey = configSubSample.getFlowKey();
+ ConfigSampleFlowDO configSampleFlow = configSampleFlowService.getConfigSampleFlowByKey(sampleFlowKey);
+ String configSampleFlowContent = configSampleFlow.getContent();
+ //样品流程定义
+ SampleFlowDefinition sampleFlowDefinition = JSON.parseObject(configSampleFlowContent, SampleFlowDefinition.class);
+ List flowNodeList = sampleFlowDefinition.getFlowNodeList();
+ SampleFlowNode flowNode = flowNodeList.stream().filter(f -> f.getNodeKey().equals(sampleProcessNo)).findFirst().orElse(null);
+ List nextFlowNodeList = flowNode.getNextFlowNodeList();
+ SampleFlowNode nextFlowNode = nextFlowNodeList.stream().filter(f -> f.getIsDefault()).findFirst().orElse(null);
+ businessSubSample.setSampleFlowKey(nextFlowNode.getNodeKey());
+ businessSubSample.setSampleFlowTime(currentDateTime);
+ }
+
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/slot/SampleEntrustContext.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/slot/SampleEntrustContext.java
new file mode 100644
index 0000000..847a11e
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/slot/SampleEntrustContext.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.slot;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardDetailDO;
+import cn.iocoder.yudao.module.qms.business.config.dal.dataobject.MaterialAssayStandardMethodDO;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * SampleEntrustContext
+ * 样品委托上下文
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月6日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月6日
+ */
+@Data
+@Accessors(chain = true)
+public class SampleEntrustContext {
+
+ /** 租户id **/
+ private Long tenantId;
+
+ /** 当前时间 **/
+ private LocalDateTime currentDateTime = LocalDateTime.now();
+
+ /** 当前登录用户 **/
+ private LoginUser loginUser;
+
+ /** 当前登录人 **/
+ private String loginRealname;
+
+ /** 委托来源配置列表 **/
+ private List configEntrustSourceList;
+
+ /**
+ * 根据id获取委托来源配置
+ * @param id 委托来源配置id
+ * @return
+ */
+ public ConfigEntrustSourceDO getConfigEntrustSourceById(Long id) {
+ ConfigEntrustSourceDO configEntrustSource = null;
+ if (this.configEntrustSourceList != null && this.configEntrustSourceList.size() > 0) {
+ configEntrustSource = this.configEntrustSourceList.stream().filter(f -> id.equals(f.getId())).findFirst().orElse(null);
+ }
+ return configEntrustSource;
+ }
+
+ /** 物料检测标准列表 **/
+ private List materialAssayStandardList;
+
+ /** 物料检测标准检测项目列表 **/
+ private List materialAssayStandardDetailList;
+
+ public MaterialAssayStandardDetailDO getMaterialAssayStandardDetailById(Long id) {
+ MaterialAssayStandardDetailDO materialAssayStandardDetail = null;
+ if (this.materialAssayStandardDetailList != null && this.materialAssayStandardDetailList.size() > 0) {
+ materialAssayStandardDetail = this.materialAssayStandardDetailList.stream().filter(f -> id.equals(f.getId())).findFirst().orElse(null);
+ }
+ return materialAssayStandardDetail;
+ }
+
+ /** 物料检测标准与方法列表 **/
+ private List materialAssayStandardMethodList;
+
+ /** 委托登记单 **/
+ private BusinessSampleEntrustRegistrationDO sampleEntrustRegistration;
+
+ /** 委托登记样品明细 **/
+ private List sampleEntrustDetailList;
+
+ /** 委托登记样品检测项目明细 **/
+ private List sampleEntrustProjectList;
+
+ /** 样品委托来样品位 **/
+ private List sampleAssayResultList;
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/slot/SampleFlowContext.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/slot/SampleFlowContext.java
new file mode 100644
index 0000000..f967da5
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/liteflow/slot/SampleFlowContext.java
@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.qms.business.bus.liteflow.slot;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessHandoverRecordSubDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * SampleFlowContext
+ * 样品流转上下文
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月6日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月6日
+ */
+@Data
+@Accessors(chain = true)
+public class SampleFlowContext {
+
+ /** 租户id **/
+ private Long tenantId;
+
+ /** 样品来源 1:主,2:子 **/
+ private Integer sampleSourceType;
+
+ /** 样品当前流程节点 **/
+ private String sampleProcessNo;
+
+ /** 样品id列表 **/
+ private List sampleIdList;
+
+ /** 主样信息 **/
+ private List busBaseSampleList;
+
+ /** 分样主样信息 **/
+ private List busSubPsampleList;
+
+ /** 分样子样信息 **/
+ private List busSubCsampleList;
+
+ /** 交接记录信息 **/
+ private List busHandoverRecordSubList;
+
+ /** 当前时间 **/
+ private LocalDateTime currentDateTime = LocalDateTime.now();
+
+ /** 当前登录用户 **/
+ private LoginUser loginUser;
+
+ /** 当前登录人 **/
+ private String loginRealname;
+
+ /** 送样人 **/
+ private String sendSampleOper;
+
+ /** 收样人 **/
+ private String receiveSampleOper;
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessBaseSampleService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessBaseSampleService.java
new file mode 100644
index 0000000..e19bef2
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessBaseSampleService.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 主样业务 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessBaseSampleService {
+
+ /**
+ * 创建主样业务
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessBaseSampleRespVO createBusinessBaseSample(@Valid BusinessBaseSampleSaveReqVO createReqVO);
+
+ /**
+ * 更新主样业务
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateBusinessBaseSample(@Valid BusinessBaseSampleSaveReqVO updateReqVO);
+
+ /**
+ * 删除主样业务
+ *
+ * @param id 编号
+ */
+ void deleteBusinessBaseSample(Long id);
+
+ /**
+ * 批量删除主样业务
+ *
+ * @param ids 编号
+ */
+ void deleteBusinessBaseSampleListByIds(List ids);
+
+ /**
+ * 获得主样业务
+ *
+ * @param id 编号
+ * @return 主样业务
+ */
+ BusinessBaseSampleDO getBusinessBaseSample(Long id);
+
+ /**
+ * 获得主样业务分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 主样业务分页
+ */
+ PageResult getBusinessBaseSamplePage(BusinessBaseSamplePageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessBaseSampleServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessBaseSampleServiceImpl.java
new file mode 100644
index 0000000..2d9cbda
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessBaseSampleServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessBaseSampleMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 主样业务 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessBaseSampleServiceImpl implements BusinessBaseSampleService {
+
+ @Resource
+ private BusinessBaseSampleMapper businessBaseSampleMapper;
+
+ @Override
+ public BusinessBaseSampleRespVO createBusinessBaseSample(BusinessBaseSampleSaveReqVO createReqVO) {
+ // 插入
+ BusinessBaseSampleDO businessBaseSample = BeanUtils.toBean(createReqVO, BusinessBaseSampleDO.class);
+ businessBaseSampleMapper.insert(businessBaseSample);
+ // 返回
+ return BeanUtils.toBean(businessBaseSample, BusinessBaseSampleRespVO.class);
+ }
+
+ @Override
+ public void updateBusinessBaseSample(BusinessBaseSampleSaveReqVO updateReqVO) {
+ // 校验存在
+ validateBusinessBaseSampleExists(updateReqVO.getId());
+ // 更新
+ BusinessBaseSampleDO updateObj = BeanUtils.toBean(updateReqVO, BusinessBaseSampleDO.class);
+ businessBaseSampleMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteBusinessBaseSample(Long id) {
+ // 校验存在
+ validateBusinessBaseSampleExists(id);
+ // 删除
+ businessBaseSampleMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteBusinessBaseSampleListByIds(List ids) {
+ // 校验存在
+ validateBusinessBaseSampleExists(ids);
+ // 删除
+ businessBaseSampleMapper.deleteByIds(ids);
+ }
+
+ private void validateBusinessBaseSampleExists(List ids) {
+ List list = businessBaseSampleMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_BASE_SAMPLE_NOT_EXISTS);
+ }
+ }
+
+ private void validateBusinessBaseSampleExists(Long id) {
+ if (businessBaseSampleMapper.selectById(id) == null) {
+ throw exception(BUSINESS_BASE_SAMPLE_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessBaseSampleDO getBusinessBaseSample(Long id) {
+ return businessBaseSampleMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getBusinessBaseSamplePage(BusinessBaseSamplePageReqVO pageReqVO) {
+ return businessBaseSampleMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessHandoverRecordSubService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessHandoverRecordSubService.java
new file mode 100644
index 0000000..0a66dc1
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessHandoverRecordSubService.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessHandoverRecordSubDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 子样交接记录业务 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessHandoverRecordSubService {
+
+ /**
+ * 创建子样交接记录业务
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessHandoverRecordSubRespVO createBusinessHandoverRecordSub(@Valid BusinessHandoverRecordSubSaveReqVO createReqVO);
+
+ /**
+ * 更新子样交接记录业务
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateBusinessHandoverRecordSub(@Valid BusinessHandoverRecordSubSaveReqVO updateReqVO);
+
+ /**
+ * 删除子样交接记录业务
+ *
+ * @param id 编号
+ */
+ void deleteBusinessHandoverRecordSub(Long id);
+
+ /**
+ * 批量删除子样交接记录业务
+ *
+ * @param ids 编号
+ */
+ void deleteBusinessHandoverRecordSubListByIds(List ids);
+
+ /**
+ * 获得子样交接记录业务
+ *
+ * @param id 编号
+ * @return 子样交接记录业务
+ */
+ BusinessHandoverRecordSubDO getBusinessHandoverRecordSub(Long id);
+
+ /**
+ * 获得子样交接记录业务分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 子样交接记录业务分页
+ */
+ PageResult getBusinessHandoverRecordSubPage(BusinessHandoverRecordSubPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessHandoverRecordSubServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessHandoverRecordSubServiceImpl.java
new file mode 100644
index 0000000..b2a12af
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessHandoverRecordSubServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessHandoverRecordSubDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessHandoverRecordSubMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 子样交接记录业务 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessHandoverRecordSubServiceImpl implements BusinessHandoverRecordSubService {
+
+ @Resource
+ private BusinessHandoverRecordSubMapper businessHandoverRecordSubMapper;
+
+ @Override
+ public BusinessHandoverRecordSubRespVO createBusinessHandoverRecordSub(BusinessHandoverRecordSubSaveReqVO createReqVO) {
+ // 插入
+ BusinessHandoverRecordSubDO businessHandoverRecordSub = BeanUtils.toBean(createReqVO, BusinessHandoverRecordSubDO.class);
+ businessHandoverRecordSubMapper.insert(businessHandoverRecordSub);
+ // 返回
+ return BeanUtils.toBean(businessHandoverRecordSub, BusinessHandoverRecordSubRespVO.class);
+ }
+
+ @Override
+ public void updateBusinessHandoverRecordSub(BusinessHandoverRecordSubSaveReqVO updateReqVO) {
+ // 校验存在
+ validateBusinessHandoverRecordSubExists(updateReqVO.getId());
+ // 更新
+ BusinessHandoverRecordSubDO updateObj = BeanUtils.toBean(updateReqVO, BusinessHandoverRecordSubDO.class);
+ businessHandoverRecordSubMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteBusinessHandoverRecordSub(Long id) {
+ // 校验存在
+ validateBusinessHandoverRecordSubExists(id);
+ // 删除
+ businessHandoverRecordSubMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteBusinessHandoverRecordSubListByIds(List ids) {
+ // 校验存在
+ validateBusinessHandoverRecordSubExists(ids);
+ // 删除
+ businessHandoverRecordSubMapper.deleteByIds(ids);
+ }
+
+ private void validateBusinessHandoverRecordSubExists(List ids) {
+ List list = businessHandoverRecordSubMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_HANDOVER_RECORD_SUB_NOT_EXISTS);
+ }
+ }
+
+ private void validateBusinessHandoverRecordSubExists(Long id) {
+ if (businessHandoverRecordSubMapper.selectById(id) == null) {
+ throw exception(BUSINESS_HANDOVER_RECORD_SUB_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessHandoverRecordSubDO getBusinessHandoverRecordSub(Long id) {
+ return businessHandoverRecordSubMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getBusinessHandoverRecordSubPage(BusinessHandoverRecordSubPageReqVO pageReqVO) {
+ return businessHandoverRecordSubMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleAssayResultService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleAssayResultService.java
new file mode 100644
index 0000000..a1729ac
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleAssayResultService.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 委检登记来样品位 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessSampleAssayResultService {
+
+ /**
+ * 创建委检登记来样品位
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessSampleAssayResultRespVO createBusinessSampleAssayResult(@Valid BusinessSampleAssayResultSaveReqVO createReqVO);
+
+ /**
+ * 更新委检登记来样品位
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateBusinessSampleAssayResult(@Valid BusinessSampleAssayResultSaveReqVO updateReqVO);
+
+ /**
+ * 删除委检登记来样品位
+ *
+ * @param id 编号
+ */
+ void deleteBusinessSampleAssayResult(Long id);
+
+ /**
+ * 批量删除委检登记来样品位
+ *
+ * @param ids 编号
+ */
+ void deleteBusinessSampleAssayResultListByIds(List ids);
+
+ /**
+ * 获得委检登记来样品位
+ *
+ * @param id 编号
+ * @return 委检登记来样品位
+ */
+ BusinessSampleAssayResultDO getBusinessSampleAssayResult(Long id);
+
+ /**
+ * 获得委检登记来样品位分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 委检登记来样品位分页
+ */
+ PageResult getBusinessSampleAssayResultPage(BusinessSampleAssayResultPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleAssayResultServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleAssayResultServiceImpl.java
new file mode 100644
index 0000000..4f4cd23
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleAssayResultServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleAssayResultMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 委检登记来样品位 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessSampleAssayResultServiceImpl implements BusinessSampleAssayResultService {
+
+ @Resource
+ private BusinessSampleAssayResultMapper businessSampleAssayResultMapper;
+
+ @Override
+ public BusinessSampleAssayResultRespVO createBusinessSampleAssayResult(BusinessSampleAssayResultSaveReqVO createReqVO) {
+ // 插入
+ BusinessSampleAssayResultDO businessSampleAssayResult = BeanUtils.toBean(createReqVO, BusinessSampleAssayResultDO.class);
+ businessSampleAssayResultMapper.insert(businessSampleAssayResult);
+ // 返回
+ return BeanUtils.toBean(businessSampleAssayResult, BusinessSampleAssayResultRespVO.class);
+ }
+
+ @Override
+ public void updateBusinessSampleAssayResult(BusinessSampleAssayResultSaveReqVO updateReqVO) {
+ // 校验存在
+ validateBusinessSampleAssayResultExists(updateReqVO.getId());
+ // 更新
+ BusinessSampleAssayResultDO updateObj = BeanUtils.toBean(updateReqVO, BusinessSampleAssayResultDO.class);
+ businessSampleAssayResultMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteBusinessSampleAssayResult(Long id) {
+ // 校验存在
+ validateBusinessSampleAssayResultExists(id);
+ // 删除
+ businessSampleAssayResultMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteBusinessSampleAssayResultListByIds(List ids) {
+ // 校验存在
+ validateBusinessSampleAssayResultExists(ids);
+ // 删除
+ businessSampleAssayResultMapper.deleteByIds(ids);
+ }
+
+ private void validateBusinessSampleAssayResultExists(List ids) {
+ List list = businessSampleAssayResultMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_SAMPLE_ASSAY_RESULT_NOT_EXISTS);
+ }
+ }
+
+ private void validateBusinessSampleAssayResultExists(Long id) {
+ if (businessSampleAssayResultMapper.selectById(id) == null) {
+ throw exception(BUSINESS_SAMPLE_ASSAY_RESULT_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessSampleAssayResultDO getBusinessSampleAssayResult(Long id) {
+ return businessSampleAssayResultMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getBusinessSampleAssayResultPage(BusinessSampleAssayResultPageReqVO pageReqVO) {
+ return businessSampleAssayResultMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustDetailService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustDetailService.java
new file mode 100644
index 0000000..30eb403
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustDetailService.java
@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustDetailPageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustDetailRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustDetailSaveReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 委检登记样品明细 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessSampleEntrustDetailService {
+
+ /**
+ * 创建委检登记样品明细
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessSampleEntrustDetailRespVO createBusinessSampleEntrustDetail(@Valid BusinessSampleEntrustDetailSaveReqVO createReqVO);
+
+ /**
+ * 更新委检登记样品明细
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateBusinessSampleEntrustDetail(@Valid BusinessSampleEntrustDetailSaveReqVO updateReqVO);
+
+ /**
+ * 删除委检登记样品明细
+ *
+ * @param id 编号
+ */
+ void deleteBusinessSampleEntrustDetail(Long id);
+
+ /**
+ * 批量删除委检登记样品明细
+ *
+ * @param ids 编号
+ */
+ void deleteBusinessSampleEntrustDetailListByIds(List ids);
+
+ /**
+ * 获得委检登记样品明细
+ *
+ * @param id 编号
+ * @return 委检登记样品明细
+ */
+ BusinessSampleEntrustDetailDO getBusinessSampleEntrustDetail(Long id);
+
+ /**
+ * 获得委检登记样品明细分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 委检登记样品明细分页
+ */
+ PageResult getBusinessSampleEntrustDetailPage(BusinessSampleEntrustDetailPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustDetailServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustDetailServiceImpl.java
new file mode 100644
index 0000000..657f73f
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustDetailServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 委检登记样品明细 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessSampleEntrustDetailServiceImpl implements BusinessSampleEntrustDetailService {
+
+ @Resource
+ private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper;
+
+ @Override
+ public BusinessSampleEntrustDetailRespVO createBusinessSampleEntrustDetail(BusinessSampleEntrustDetailSaveReqVO createReqVO) {
+ // 插入
+ BusinessSampleEntrustDetailDO businessSampleEntrustDetail = BeanUtils.toBean(createReqVO, BusinessSampleEntrustDetailDO.class);
+ businessSampleEntrustDetailMapper.insert(businessSampleEntrustDetail);
+ // 返回
+ return BeanUtils.toBean(businessSampleEntrustDetail, BusinessSampleEntrustDetailRespVO.class);
+ }
+
+ @Override
+ public void updateBusinessSampleEntrustDetail(BusinessSampleEntrustDetailSaveReqVO updateReqVO) {
+ // 校验存在
+ validateBusinessSampleEntrustDetailExists(updateReqVO.getId());
+ // 更新
+ BusinessSampleEntrustDetailDO updateObj = BeanUtils.toBean(updateReqVO, BusinessSampleEntrustDetailDO.class);
+ businessSampleEntrustDetailMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteBusinessSampleEntrustDetail(Long id) {
+ // 校验存在
+ validateBusinessSampleEntrustDetailExists(id);
+ // 删除
+ businessSampleEntrustDetailMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteBusinessSampleEntrustDetailListByIds(List ids) {
+ // 校验存在
+ validateBusinessSampleEntrustDetailExists(ids);
+ // 删除
+ businessSampleEntrustDetailMapper.deleteByIds(ids);
+ }
+
+ private void validateBusinessSampleEntrustDetailExists(List ids) {
+ List list = businessSampleEntrustDetailMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_SAMPLE_ENTRUST_DETAIL_NOT_EXISTS);
+ }
+ }
+
+ private void validateBusinessSampleEntrustDetailExists(Long id) {
+ if (businessSampleEntrustDetailMapper.selectById(id) == null) {
+ throw exception(BUSINESS_SAMPLE_ENTRUST_DETAIL_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessSampleEntrustDetailDO getBusinessSampleEntrustDetail(Long id) {
+ return businessSampleEntrustDetailMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getBusinessSampleEntrustDetailPage(BusinessSampleEntrustDetailPageReqVO pageReqVO) {
+ return businessSampleEntrustDetailMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustProjectService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustProjectService.java
new file mode 100644
index 0000000..03a61e2
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustProjectService.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 委检样品检测项目业务 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessSampleEntrustProjectService {
+
+ /**
+ * 创建委检样品检测项目业务
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessSampleEntrustProjectRespVO createBusinessSampleEntrustProject(@Valid BusinessSampleEntrustProjectSaveReqVO createReqVO);
+
+ /**
+ * 更新委检样品检测项目业务
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateBusinessSampleEntrustProject(@Valid BusinessSampleEntrustProjectSaveReqVO updateReqVO);
+
+ /**
+ * 删除委检样品检测项目业务
+ *
+ * @param id 编号
+ */
+ void deleteBusinessSampleEntrustProject(Long id);
+
+ /**
+ * 批量删除委检样品检测项目业务
+ *
+ * @param ids 编号
+ */
+ void deleteBusinessSampleEntrustProjectListByIds(List ids);
+
+ /**
+ * 获得委检样品检测项目业务
+ *
+ * @param id 编号
+ * @return 委检样品检测项目业务
+ */
+ BusinessSampleEntrustProjectDO getBusinessSampleEntrustProject(Long id);
+
+ /**
+ * 获得委检样品检测项目业务分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 委检样品检测项目业务分页
+ */
+ PageResult getBusinessSampleEntrustProjectPage(BusinessSampleEntrustProjectPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustProjectServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustProjectServiceImpl.java
new file mode 100644
index 0000000..54b0737
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustProjectServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustProjectMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 委检样品检测项目业务 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessSampleEntrustProjectServiceImpl implements BusinessSampleEntrustProjectService {
+
+ @Resource
+ private BusinessSampleEntrustProjectMapper businessSampleEntrustProjectMapper;
+
+ @Override
+ public BusinessSampleEntrustProjectRespVO createBusinessSampleEntrustProject(BusinessSampleEntrustProjectSaveReqVO createReqVO) {
+ // 插入
+ BusinessSampleEntrustProjectDO businessSampleEntrustProject = BeanUtils.toBean(createReqVO, BusinessSampleEntrustProjectDO.class);
+ businessSampleEntrustProjectMapper.insert(businessSampleEntrustProject);
+ // 返回
+ return BeanUtils.toBean(businessSampleEntrustProject, BusinessSampleEntrustProjectRespVO.class);
+ }
+
+ @Override
+ public void updateBusinessSampleEntrustProject(BusinessSampleEntrustProjectSaveReqVO updateReqVO) {
+ // 校验存在
+ validateBusinessSampleEntrustProjectExists(updateReqVO.getId());
+ // 更新
+ BusinessSampleEntrustProjectDO updateObj = BeanUtils.toBean(updateReqVO, BusinessSampleEntrustProjectDO.class);
+ businessSampleEntrustProjectMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteBusinessSampleEntrustProject(Long id) {
+ // 校验存在
+ validateBusinessSampleEntrustProjectExists(id);
+ // 删除
+ businessSampleEntrustProjectMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteBusinessSampleEntrustProjectListByIds(List ids) {
+ // 校验存在
+ validateBusinessSampleEntrustProjectExists(ids);
+ // 删除
+ businessSampleEntrustProjectMapper.deleteByIds(ids);
+ }
+
+ private void validateBusinessSampleEntrustProjectExists(List ids) {
+ List list = businessSampleEntrustProjectMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_SAMPLE_ENTRUST_PROJECT_NOT_EXISTS);
+ }
+ }
+
+ private void validateBusinessSampleEntrustProjectExists(Long id) {
+ if (businessSampleEntrustProjectMapper.selectById(id) == null) {
+ throw exception(BUSINESS_SAMPLE_ENTRUST_PROJECT_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessSampleEntrustProjectDO getBusinessSampleEntrustProject(Long id) {
+ return businessSampleEntrustProjectMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getBusinessSampleEntrustProjectPage(BusinessSampleEntrustProjectPageReqVO pageReqVO) {
+ return businessSampleEntrustProjectMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustRegistrationService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustRegistrationService.java
new file mode 100644
index 0000000..1aeb9e0
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustRegistrationService.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 委检登记业务 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessSampleEntrustRegistrationService {
+
+ /**
+ * 创建委检登记业务
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessSampleEntrustRegistrationRespVO createBusinessSampleEntrustRegistration(@Valid BusinessSampleEntrustRegistrationSaveReqVO createReqVO);
+
+ /**
+ * 更新委检登记业务
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateBusinessSampleEntrustRegistration(@Valid BusinessSampleEntrustRegistrationSaveReqVO updateReqVO);
+
+ /**
+ * 删除委检登记业务
+ *
+ * @param id 编号
+ */
+ void deleteBusinessSampleEntrustRegistration(Long id);
+
+ /**
+ * 批量删除委检登记业务
+ *
+ * @param ids 编号
+ */
+ void deleteBusinessSampleEntrustRegistrationListByIds(List ids);
+
+ /**
+ * 获得委检登记业务
+ *
+ * @param id 编号
+ * @return 委检登记业务
+ */
+ BusinessSampleEntrustRegistrationDO getBusinessSampleEntrustRegistration(Long id);
+
+ /**
+ * 获得委检登记业务分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 委检登记业务分页
+ */
+ PageResult getBusinessSampleEntrustRegistrationPage(BusinessSampleEntrustRegistrationPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustRegistrationServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustRegistrationServiceImpl.java
new file mode 100644
index 0000000..68cac6d
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSampleEntrustRegistrationServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 委检登记业务 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessSampleEntrustRegistrationServiceImpl implements BusinessSampleEntrustRegistrationService {
+
+ @Resource
+ private BusinessSampleEntrustRegistrationMapper businessSampleEntrustRegistrationMapper;
+
+ @Override
+ public BusinessSampleEntrustRegistrationRespVO createBusinessSampleEntrustRegistration(BusinessSampleEntrustRegistrationSaveReqVO createReqVO) {
+ // 插入
+ BusinessSampleEntrustRegistrationDO businessSampleEntrustRegistration = BeanUtils.toBean(createReqVO, BusinessSampleEntrustRegistrationDO.class);
+ businessSampleEntrustRegistrationMapper.insert(businessSampleEntrustRegistration);
+ // 返回
+ return BeanUtils.toBean(businessSampleEntrustRegistration, BusinessSampleEntrustRegistrationRespVO.class);
+ }
+
+ @Override
+ public void updateBusinessSampleEntrustRegistration(BusinessSampleEntrustRegistrationSaveReqVO updateReqVO) {
+ // 校验存在
+ validateBusinessSampleEntrustRegistrationExists(updateReqVO.getId());
+ // 更新
+ BusinessSampleEntrustRegistrationDO updateObj = BeanUtils.toBean(updateReqVO, BusinessSampleEntrustRegistrationDO.class);
+ businessSampleEntrustRegistrationMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteBusinessSampleEntrustRegistration(Long id) {
+ // 校验存在
+ validateBusinessSampleEntrustRegistrationExists(id);
+ // 删除
+ businessSampleEntrustRegistrationMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteBusinessSampleEntrustRegistrationListByIds(List ids) {
+ // 校验存在
+ validateBusinessSampleEntrustRegistrationExists(ids);
+ // 删除
+ businessSampleEntrustRegistrationMapper.deleteByIds(ids);
+ }
+
+ private void validateBusinessSampleEntrustRegistrationExists(List ids) {
+ List list = businessSampleEntrustRegistrationMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_SAMPLE_ENTRUST_REGISTRATION_NOT_EXISTS);
+ }
+ }
+
+ private void validateBusinessSampleEntrustRegistrationExists(Long id) {
+ if (businessSampleEntrustRegistrationMapper.selectById(id) == null) {
+ throw exception(BUSINESS_SAMPLE_ENTRUST_REGISTRATION_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessSampleEntrustRegistrationDO getBusinessSampleEntrustRegistration(Long id) {
+ return businessSampleEntrustRegistrationMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getBusinessSampleEntrustRegistrationPage(BusinessSampleEntrustRegistrationPageReqVO pageReqVO) {
+ return businessSampleEntrustRegistrationMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubParentSampleService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubParentSampleService.java
new file mode 100644
index 0000000..2d04cfe
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubParentSampleService.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 分样业务 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessSubParentSampleService {
+
+ /**
+ * 创建分样业务
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessSubParentSampleRespVO createBusinessSubParentSample(@Valid BusinessSubParentSampleSaveReqVO createReqVO);
+
+ /**
+ * 更新分样业务
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateBusinessSubParentSample(@Valid BusinessSubParentSampleSaveReqVO updateReqVO);
+
+ /**
+ * 删除分样业务
+ *
+ * @param id 编号
+ */
+ void deleteBusinessSubParentSample(Long id);
+
+ /**
+ * 批量删除分样业务
+ *
+ * @param ids 编号
+ */
+ void deleteBusinessSubParentSampleListByIds(List ids);
+
+ /**
+ * 获得分样业务
+ *
+ * @param id 编号
+ * @return 分样业务
+ */
+ BusinessSubParentSampleDO getBusinessSubParentSample(Long id);
+
+ /**
+ * 获得分样业务分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 分样业务分页
+ */
+ PageResult getBusinessSubParentSamplePage(BusinessSubParentSamplePageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubParentSampleServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubParentSampleServiceImpl.java
new file mode 100644
index 0000000..194b770
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubParentSampleServiceImpl.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.*;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSubParentSampleMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 分样业务 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessSubParentSampleServiceImpl implements BusinessSubParentSampleService {
+
+ @Resource
+ private BusinessSubParentSampleMapper businessSubParentSampleMapper;
+
+ @Override
+ public BusinessSubParentSampleRespVO createBusinessSubParentSample(BusinessSubParentSampleSaveReqVO createReqVO) {
+ // 插入
+ BusinessSubParentSampleDO businessSubParentSample = BeanUtils.toBean(createReqVO, BusinessSubParentSampleDO.class);
+ businessSubParentSampleMapper.insert(businessSubParentSample);
+ // 返回
+ return BeanUtils.toBean(businessSubParentSample, BusinessSubParentSampleRespVO.class);
+ }
+
+ @Override
+ public void updateBusinessSubParentSample(BusinessSubParentSampleSaveReqVO updateReqVO) {
+ // 校验存在
+ validateBusinessSubParentSampleExists(updateReqVO.getId());
+ // 更新
+ BusinessSubParentSampleDO updateObj = BeanUtils.toBean(updateReqVO, BusinessSubParentSampleDO.class);
+ businessSubParentSampleMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteBusinessSubParentSample(Long id) {
+ // 校验存在
+ validateBusinessSubParentSampleExists(id);
+ // 删除
+ businessSubParentSampleMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteBusinessSubParentSampleListByIds(List ids) {
+ // 校验存在
+ validateBusinessSubParentSampleExists(ids);
+ // 删除
+ businessSubParentSampleMapper.deleteByIds(ids);
+ }
+
+ private void validateBusinessSubParentSampleExists(List ids) {
+ List list = businessSubParentSampleMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_SUB_PARENT_SAMPLE_NOT_EXISTS);
+ }
+ }
+
+ private void validateBusinessSubParentSampleExists(Long id) {
+ if (businessSubParentSampleMapper.selectById(id) == null) {
+ throw exception(BUSINESS_SUB_PARENT_SAMPLE_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessSubParentSampleDO getBusinessSubParentSample(Long id) {
+ return businessSubParentSampleMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getBusinessSubParentSamplePage(BusinessSubParentSamplePageReqVO pageReqVO) {
+ return businessSubParentSampleMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubSampleService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubSampleService.java
new file mode 100644
index 0000000..0ec2fe3
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubSampleService.java
@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSamplePageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSampleRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSampleSaveReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 子样业务 Service 接口
+ *
+ * @author 后台管理
+ */
+public interface BusinessSubSampleService {
+
+ /**
+ * 创建子样业务
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ BusinessSubSampleRespVO createinessSubSample(@Valid BusinessSubSampleSaveReqVO createReqVO);
+
+ /**
+ * 更新子样业务
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateinessSubSample(@Valid BusinessSubSampleSaveReqVO updateReqVO);
+
+ /**
+ * 删除子样业务
+ *
+ * @param id 编号
+ */
+ void deleteinessSubSample(Long id);
+
+ /**
+ * 批量删除子样业务
+ *
+ * @param ids 编号
+ */
+ void deleteinessSubSampleListByIds(List ids);
+
+ /**
+ * 获得子样业务
+ *
+ * @param id 编号
+ * @return 子样业务
+ */
+ BusinessSubSampleDO getinessSubSample(Long id);
+
+ /**
+ * 获得子样业务分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 子样业务分页
+ */
+ PageResult getinessSubSamplePage(BusinessSubSamplePageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubSampleServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubSampleServiceImpl.java
new file mode 100644
index 0000000..5aafe2d
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/BusinessSubSampleServiceImpl.java
@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSamplePageReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSampleRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSubSampleSaveReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.yudao.module.qms.enums.ErrorCodeConstants.*;
+
+/**
+ * 子样业务 Service 实现类
+ *
+ * @author 后台管理
+ */
+@Service
+@Validated
+public class BusinessSubSampleServiceImpl implements BusinessSubSampleService {
+
+ @Resource
+ private BusinessSubSampleMapper businessSubSampleMapper;
+
+ @Override
+ public BusinessSubSampleRespVO createinessSubSample(BusinessSubSampleSaveReqVO createReqVO) {
+ // 插入
+ BusinessSubSampleDO inessSubSample = BeanUtils.toBean(createReqVO, BusinessSubSampleDO.class);
+ businessSubSampleMapper.insert(inessSubSample);
+ // 返回
+ return BeanUtils.toBean(inessSubSample, BusinessSubSampleRespVO.class);
+ }
+
+ @Override
+ public void updateinessSubSample(BusinessSubSampleSaveReqVO updateReqVO) {
+ // 校验存在
+ validateinessSubSampleExists(updateReqVO.getId());
+ // 更新
+ BusinessSubSampleDO updateObj = BeanUtils.toBean(updateReqVO, BusinessSubSampleDO.class);
+ businessSubSampleMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteinessSubSample(Long id) {
+ // 校验存在
+ validateinessSubSampleExists(id);
+ // 删除
+ businessSubSampleMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteinessSubSampleListByIds(List ids) {
+ // 校验存在
+ validateinessSubSampleExists(ids);
+ // 删除
+ businessSubSampleMapper.deleteByIds(ids);
+ }
+
+ private void validateinessSubSampleExists(List ids) {
+ List list = businessSubSampleMapper.selectByIds(ids);
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+ throw exception(BUSINESS_SUB_SAMPLE_NOT_EXISTS);
+ }
+ }
+
+ private void validateinessSubSampleExists(Long id) {
+ if (businessSubSampleMapper.selectById(id) == null) {
+ throw exception(BUSINESS_SUB_SAMPLE_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BusinessSubSampleDO getinessSubSample(Long id) {
+ return businessSubSampleMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getinessSubSamplePage(BusinessSubSamplePageReqVO pageReqVO) {
+ return businessSubSampleMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleEntrustService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleEntrustService.java
new file mode 100644
index 0000000..b97fbee
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleEntrustService.java
@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.List;
+
+import com.yomahub.liteflow.flow.LiteflowResponse;
+
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustRegistrationExtendRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustRegistrationSubmitReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustParam;
+import jakarta.validation.Valid;
+
+/**
+ * SampleEntrustService
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+public interface SampleEntrustService {
+
+ LiteflowResponse create(@Valid SampleEntrustParam sampleEntrustParam);
+
+ LiteflowResponse update(@Valid SampleEntrustParam sampleEntrustParam);
+
+ BusinessSampleEntrustRegistrationExtendRespVO detail(Long id);
+
+ void delete(Long id);
+
+ void deleteList(List ids);
+
+ void submit(@Valid BusinessSampleEntrustRegistrationSubmitReqVO req);
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleEntrustServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleEntrustServiceImpl.java
new file mode 100644
index 0000000..e9e837f
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleEntrustServiceImpl.java
@@ -0,0 +1,187 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustDetailExtendRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustProjectExtendRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustRegistrationExtendRespVO;
+import cn.iocoder.yudao.module.qms.business.bus.controller.vo.BusinessSampleEntrustRegistrationSubmitReqVO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleAssayResultDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustProjectDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleAssayResultMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustProjectMapper;
+import cn.iocoder.yudao.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.param.SampleEntrustParam;
+import cn.iocoder.yudao.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
+import cn.iocoder.yudao.module.qms.business.dic.dal.dataobject.DictionaryProjectDO;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+
+/**
+ * SampleEntrustServiceImpl
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月10日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月10日
+ */
+@Service
+public class SampleEntrustServiceImpl implements SampleEntrustService {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Resource
+ private BusinessSampleEntrustRegistrationMapper businessSampleEntrustRegistrationMapper;
+
+ @Resource
+ private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper;
+
+ @Resource
+ private BusinessSampleEntrustProjectMapper businessSampleEntrustProjectMapper;
+
+ @Resource
+ private BusinessSampleAssayResultMapper businessSampleAssayResultMapper;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public LiteflowResponse create(@Valid SampleEntrustParam sampleEntrustParam) {
+ Long tenantId = TenantContextHolder.getRequiredTenantId();
+ return flowExecutor.execute2Resp("sampleEntrustChain" + tenantId, sampleEntrustParam, SampleEntrustContext.class);
+ }
+
+ @Override
+ public BusinessSampleEntrustRegistrationExtendRespVO detail(Long id) {
+ BusinessSampleEntrustRegistrationDO businessSampleEntrustRegistrationDO = businessSampleEntrustRegistrationMapper.selectById(id);
+ BusinessSampleEntrustRegistrationExtendRespVO businessSampleEntrustRegistrationExtendRespVO = BeanUtils.toBean(businessSampleEntrustRegistrationDO, BusinessSampleEntrustRegistrationExtendRespVO.class);
+
+ List sampleEntrustDetailExtendRespVOList = new ArrayList<>();
+ List sampleEntrustDetailList = businessSampleEntrustDetailMapper.selectList(new LambdaQueryWrapperX().eq(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, id));
+ BusinessSampleEntrustDetailExtendRespVO businessSampleEntrustDetailExtendRespVO = null;
+ for (BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO : sampleEntrustDetailList) {
+ businessSampleEntrustDetailExtendRespVO = BeanUtils.toBean(businessSampleEntrustDetailDO, BusinessSampleEntrustDetailExtendRespVO.class);
+
+ List businessSampleEntrustProjectExtendRespVOList = businessSampleEntrustProjectMapper.selectJoinList(BusinessSampleEntrustProjectExtendRespVO.class, new MPJLambdaWrapperX()
+ .selectAll(BusinessSampleEntrustProjectDO.class)
+ .selectAs(DictionaryProjectDO::getCode, BusinessSampleEntrustProjectExtendRespVO::getProjectCode)
+ .selectAs(DictionaryProjectDO::getName, BusinessSampleEntrustProjectExtendRespVO::getProjectName)
+ .selectAs(DictionaryProjectDO::getSimpleName, BusinessSampleEntrustProjectExtendRespVO::getProjectSimpleName)
+ .selectAs(DictionaryProjectDO::getShowName, BusinessSampleEntrustProjectExtendRespVO::getProjectShowName)
+ .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessSampleEntrustProjectDO::getDictionaryProjectId)
+ .eq(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, businessSampleEntrustDetailDO.getId()));
+
+// List sampleEntrustProjectList = businessSampleEntrustProjectMapper.selectList(new LambdaQueryWrapperX().eq(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, businessSampleEntrustDetailDO.getId()));
+// List businessSampleEntrustProjectExtendRespVOList = BeanUtils.toBean(sampleEntrustProjectList, BusinessSampleEntrustProjectExtendRespVO.class);
+
+ businessSampleEntrustDetailExtendRespVO.setSampleEntrustDetailProjectList(businessSampleEntrustProjectExtendRespVOList);
+
+ sampleEntrustDetailExtendRespVOList.add(businessSampleEntrustDetailExtendRespVO);
+ }
+ businessSampleEntrustRegistrationExtendRespVO.setSampleEntrustDetailList(sampleEntrustDetailExtendRespVOList);
+
+ return businessSampleEntrustRegistrationExtendRespVO;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public LiteflowResponse update(@Valid SampleEntrustParam sampleEntrustParam) {
+ Long tenantId = TenantContextHolder.getRequiredTenantId();
+ return flowExecutor.execute2Resp("sampleEntrustChain" + tenantId, sampleEntrustParam, SampleEntrustContext.class);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void delete(Long id) {
+ if (id == null) {
+ throw new ServiceException(500, "委托登记id不允许为空");
+ }
+ if (businessSampleEntrustRegistrationMapper.selectById(id) == null) {
+ throw new ServiceException(500, "委托登记业务不存在");
+ }
+
+ List sampleEntrustDetailList = businessSampleEntrustDetailMapper.selectList(new LambdaQueryWrapperX().eq(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, id));
+ if (sampleEntrustDetailList != null && sampleEntrustDetailList.size() > 0) {
+ List sampleEntrustDetailIdList = sampleEntrustDetailList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ List sampleEntrustProjectList = businessSampleEntrustProjectMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList));
+ if (sampleEntrustProjectList != null && sampleEntrustProjectList.size() > 0) {
+ List sampleEntrustProjectIdList = sampleEntrustProjectList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ //删除样品对应的检验项目
+ businessSampleEntrustProjectMapper.deleteByIds(sampleEntrustProjectIdList);
+ }
+ List sampleAssayResultList = businessSampleAssayResultMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleAssayResultDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList));
+ if (sampleAssayResultList != null && sampleAssayResultList.size() > 0) {
+ List sampleAssayResultIdList = sampleAssayResultList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ //删除来样品位
+ businessSampleAssayResultMapper.deleteByIds(sampleAssayResultIdList);
+ }
+
+ //删除委托登记明细
+ businessSampleEntrustDetailMapper.deleteByIds(sampleEntrustDetailIdList);
+ }
+ //删除委托登记
+ businessSampleEntrustRegistrationMapper.deleteById(id);
+
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteList(List ids) {
+ if (ids == null || ids.size() <= 0) {
+ throw new ServiceException(500, "委托登记id列表不允许为空");
+ }
+ List sampleEntrustRegistrationList = businessSampleEntrustRegistrationMapper.selectByIds(ids);
+ if (sampleEntrustRegistrationList == null || sampleEntrustRegistrationList.size() != ids.size()) {
+ throw new ServiceException(500, "委托登记业务不存在");
+ }
+
+ List sampleEntrustDetailList = businessSampleEntrustDetailMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, ids));
+ if (sampleEntrustDetailList != null && sampleEntrustDetailList.size() > 0) {
+ List sampleEntrustDetailIdList = sampleEntrustDetailList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ List sampleEntrustProjectList = businessSampleEntrustProjectMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleEntrustProjectDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList));
+ if (sampleEntrustProjectList != null && sampleEntrustProjectList.size() > 0) {
+ List sampleEntrustProjectIdList = sampleEntrustProjectList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ //删除样品对应的检验项目
+ businessSampleEntrustProjectMapper.deleteByIds(sampleEntrustProjectIdList);
+ }
+ List sampleAssayResultList = businessSampleAssayResultMapper.selectList(new LambdaQueryWrapperX().in(BusinessSampleAssayResultDO::getBusinessSampleEntrustDetailId, sampleEntrustDetailIdList));
+ if (sampleAssayResultList != null && sampleAssayResultList.size() > 0) {
+ List sampleAssayResultIdList = sampleAssayResultList.stream().map(m -> m.getId()).collect(Collectors.toList());
+ //删除来样品位
+ businessSampleAssayResultMapper.deleteByIds(sampleAssayResultIdList);
+ }
+
+ //删除委托登记明细
+ businessSampleEntrustDetailMapper.deleteByIds(sampleEntrustDetailIdList);
+ }
+ //删除委托登记
+ businessSampleEntrustRegistrationMapper.deleteByIds(ids);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void submit(@Valid BusinessSampleEntrustRegistrationSubmitReqVO req) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleFlowService.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleFlowService.java
new file mode 100644
index 0000000..b5d7e5b
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleFlowService.java
@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+/**
+ * SampleFlowService
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容
+ * V1.0 2025年9月9日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司
+ *
+ * @author 王兴荣
+ * @version V1.0
+ * @since 2025年9月9日
+ */
+public interface SampleFlowService {
+
+}
diff --git a/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleFlowServiceImpl.java b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleFlowServiceImpl.java
new file mode 100644
index 0000000..288a834
--- /dev/null
+++ b/qms-server/yudao-module-qms-server/src/main/java/cn/iocoder/yudao/module/qms/business/bus/service/SampleFlowServiceImpl.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.qms.business.bus.service;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * SampleFlowServiceImpl
+ *
+ * 更新历史:
+ *
版本 更新时间 更新者 更新内容