carvendy vor 5 Monaten
Ursprung
Commit
f89ea432c7
100 geänderte Dateien mit 2155 neuen und 271 gelöschten Zeilen
  1. 1 0
      tz-framework/tz-spring-boot-starter-excel/src/main/java/cn/start/tz/framework/excel/core/util/ExcelUtils.java
  2. 1 0
      tz-framework/tz-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md
  3. 3 1
      tz-framework/tz-spring-boot-starter-security/src/main/java/cn/start/tz/framework/security/core/LoginUser.java
  4. 18 0
      tz-framework/tz-spring-boot-starter-security/src/main/java/cn/start/tz/framework/security/core/util/SecurityFrameworkUtils.java
  5. 1 0
      tz-framework/tz-spring-boot-starter-web/src/main/java/cn/start/tz/framework/web/config/TzWebAutoConfiguration.java
  6. 2 0
      tz-framework/tz-spring-boot-starter-web/src/main/java/cn/start/tz/framework/web/config/WebProperties.java
  7. 2 1
      tz-framework/tz-spring-boot-starter-web/src/main/java/cn/start/tz/framework/web/core/filter/ApiRequestFilter.java
  8. 25 27
      tz-gateway/src/main/java/cn/start/tz/gateway/filter/security/SignAuthFilter.java
  9. 3 3
      tz-gateway/src/main/resources/application-local.yaml
  10. 3 16
      tz-gateway/src/main/resources/application.yaml
  11. 1 1
      tz-gateway/src/main/resources/logback-spring.xml
  12. 21 7
      tz-module-bpm/tz-module-bpm-biz/src/main/java/cn/start/tz/module/bpm/api/task/BpmTaskApiImpl.java
  13. 1 0
      tz-module-bpm/tz-module-bpm-biz/src/main/java/cn/start/tz/module/bpm/service/definition/BpmUserGroupServiceImpl.java
  14. 77 7
      tz-module-bpm/tz-module-bpm-biz/src/main/java/cn/start/tz/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
  15. 1 1
      tz-module-bpm/tz-module-bpm-biz/src/main/resources/logback-spring.xml
  16. 13 0
      tz-module-grape-city/tz-module-grape-city-api/src/main/java/cn/start/tz/module/grape/city/api/vo/GrapeCityLaboratoryReportReqDTO.java
  17. 6 0
      tz-module-grape-city/tz-module-grape-city-api/src/main/java/cn/start/tz/module/grape/city/api/vo/GrapeCityReqDTO.java
  18. 10 1
      tz-module-grape-city/tz-module-grape-city-api/src/main/java/cn/start/tz/module/grape/city/enums/ApiConstants.java
  19. 31 19
      tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/api/GrapeCityApiImpl.java
  20. 20 0
      tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/config/CorsConfig.java
  21. 13 0
      tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/templatefactory/impl/OrderIssueReportService.java
  22. 25 10
      tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/templatefactory/impl/YearCheckService.java
  23. 4 3
      tz-module-grape-city/tz-module-grape-city-biz/src/main/resources/application-uat.yaml
  24. 5 0
      tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/file/FileApi.java
  25. 29 0
      tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/file/dto/FileRepsDTO.java
  26. 6 1
      tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/pay/PayApi.java
  27. 40 0
      tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/pay/dto/TaskChargeDTO.java
  28. 22 0
      tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/pay/dto/TaskChargeRespDTO.java
  29. 1 1
      tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/sign/dto/SignValuesDTO.java
  30. 6 0
      tz-module-infra/tz-module-infra-biz/pom.xml
  31. 7 0
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/api/file/FileApiImpl.java
  32. 10 1
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/api/pay/PayApiImpl.java
  33. 16 15
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/controller/appapi/AppApiFileController.java
  34. 4 1
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/framework/rpc/config/RpcConfiguration.java
  35. 2 3
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/framework/sign/config/SignConfig.java
  36. 48 9
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/mq/consumer/PayChargeStatusSendConsumer.java
  37. 4 1
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/mq/message/PayChargeEventMessage.java
  38. 7 0
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/file/FileService.java
  39. 5 0
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/file/FileServiceImpl.java
  40. 2 1
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/pay/PayService.java
  41. 34 0
      tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/pay/PayServiceImpl.java
  42. 26 24
      tz-module-infra/tz-module-infra-biz/src/main/resources/application-local.yaml
  43. 1 1
      tz-module-infra/tz-module-infra-biz/src/main/resources/logback-spring.xml
  44. 1 0
      tz-module-laboratory/tz-module-laboratory-api/src/main/java/cn/start/tz/module/laboratory/enums/CnasTypeEnums.java
  45. 9 0
      tz-module-laboratory/tz-module-laboratory-api/src/main/java/cn/start/tz/module/laboratory/enums/ErrorCodeConstants.java
  46. 3 1
      tz-module-laboratory/tz-module-laboratory-api/src/main/java/cn/start/tz/module/laboratory/enums/RedisKeyEnums.java
  47. 2 2
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/bo/SampleBO.java
  48. 3 3
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/archive/ArchiveController.java
  49. 17 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/basevo/DeleteReqVO.java
  50. 8 8
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/BusinessAcceptanceController.java
  51. 13 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/vo/BusinessAcceptanceRespVO.java
  52. 14 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/vo/BusinessAcceptanceSaveReqVO.java
  53. 67 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/vo/BusinessAcceptanceTemporarilyStoreReqVO.java
  54. 3 3
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptancecirculationrecord/BusinessAcceptanceCirculationRecordController.java
  55. 6 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesscheckproject/vo/BusinessCheckProjectRespVO.java
  56. 6 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesscheckproject/vo/BusinessCheckProjectSaveReqVO.java
  57. 5 5
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/BusinessSampleNewController.java
  58. 2 2
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/vo/BusinessSampleNewPageReqVO.java
  59. 2 2
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/vo/BusinessSampleNewRespVO.java
  60. 4 2
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/vo/BusinessSampleNewSaveReqVO.java
  61. 109 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/DeviceCodeController.java
  62. 23 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeBatchCreateReqVO.java
  63. 37 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodePageReqVO.java
  64. 39 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeRespVO.java
  65. 28 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeSaveReqVO.java
  66. 37 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeTreeRespVO.java
  67. 110 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/DeviceProductController.java
  68. 42 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/vo/DeviceProductPageReqVO.java
  69. 73 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/vo/DeviceProductRespVO.java
  70. 37 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/vo/DeviceProductSaveReqVO.java
  71. 118 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/DeviceProjectParamController.java
  72. 37 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/vo/DeviceProjectParamPageReqVO.java
  73. 39 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/vo/DeviceProjectParamRespVO.java
  74. 28 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/vo/DeviceProjectParamSaveReqVO.java
  75. 6 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/inspectionentry/vo/InspectionEntryItemRespVO.java
  76. 6 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/inspectionentry/vo/InspectionEntryItemSaveReqVO.java
  77. 2 2
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/itemrequirementmodify/ItemRequirementModifyController.java
  78. 2 1
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/reportpreparation/vo/ReportPreparationDelRespVO.java
  79. 3 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/reportratify/vo/ReportRatifyPageReqVO.java
  80. 6 6
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/reportupdateapply/ReportUpdateApplyController.java
  81. 40 32
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sample/SampleController.java
  82. 193 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sample/vo/SampleRespVO.java
  83. 193 5
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sample/vo/SampleSaveReqVO.java
  84. 6 6
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/samplecirculationrecord/SampleCirculationRecordController.java
  85. 6 6
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sampleoperaterecord/SampleOperateRecordController.java
  86. 4 4
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskfile/TaskFileController.java
  87. 5 5
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/TaskRelationController.java
  88. 11 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/vo/TaskProjectRespVO.java
  89. 11 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/vo/TaskProjectSaveReqVO.java
  90. 2 1
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/vo/TaskRelationItemReqVo.java
  91. 6 6
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/tasksubproject/TaskSubProjectController.java
  92. 6 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/tasksubproject/vo/TaskSubProjectSaveReqVO.java
  93. 6 6
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/tasksubreport/TaskSubReportController.java
  94. 6 6
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/technologicalachievements/TechnologicalAchievementsController.java
  95. 10 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/businessacceptance/BusinessAcceptanceDO.java
  96. 7 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/businesscheckproject/BusinessCheckProjectDO.java
  97. 2 2
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/businesssamplenew/BusinessSampleNewDO.java
  98. 60 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/devicecode/DeviceCodeDO.java
  99. 77 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/deviceproduct/DeviceProductDO.java
  100. 0 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/deviceprojectparam/DeviceProjectParamDO.java

+ 1 - 0
tz-framework/tz-spring-boot-starter-excel/src/main/java/cn/start/tz/framework/excel/core/util/ExcelUtils.java

@@ -44,6 +44,7 @@ public class ExcelUtils {
         response.setContentType("application/vnd.ms-excel;charset=UTF-8");
     }
 
+
     public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException {
         return EasyExcel.read(file.getInputStream(), head, null)
                 .autoCloseStream(false)  // 不要自动关闭,交给 Servlet 自己处理

+ 1 - 0
tz-framework/tz-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md

@@ -0,0 +1 @@
+<http://www.iocoder.cn/Spring-Boot/MyBatis/?tz>

+ 3 - 1
tz-framework/tz-spring-boot-starter-security/src/main/java/cn/start/tz/framework/security/core/LoginUser.java

@@ -19,8 +19,10 @@ import java.util.Map;
 public class LoginUser {
 
     public static final String INFO_KEY_NICKNAME = "nickname";
+    public static final String INFO_KEY_ID = "userId";
     public static final String INFO_KEY_DEPT_ID = "deptId";
-
+    public static final String MOBILE = "mobile";
+    public static final String IS_SUPER_ADMIN = "is_super_admin";
     /**
      * 用户编号
      */

+ 18 - 0
tz-framework/tz-spring-boot-starter-security/src/main/java/cn/start/tz/framework/security/core/util/SecurityFrameworkUtils.java

@@ -4,6 +4,7 @@ import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.start.tz.framework.security.core.LoginUser;
 import cn.start.tz.framework.web.core.util.WebFrameworkUtils;
+import cn.start.tz.module.system.enums.common.IsYesOrNoEnum;
 import org.springframework.lang.Nullable;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
@@ -114,6 +115,23 @@ public class SecurityFrameworkUtils {
         return loginUser != null ? MapUtil.getStr(loginUser.getInfo(), LoginUser.INFO_KEY_DEPT_ID) : null;
     }
 
+    /**
+     * 获得当前用户是否为超级管理员,从上下文中
+     *
+     * @return
+     */
+    @Nullable
+    public static boolean isSuperAdmin() {
+        LoginUser loginUser = getLoginUser();
+        if (loginUser == null) {
+            return false;
+        } else {
+            String isSuperAdmin = MapUtil.getStr(loginUser.getInfo(), LoginUser.IS_SUPER_ADMIN);
+            return IsYesOrNoEnum.YES.getKey().equals(isSuperAdmin);
+        }
+
+    }
+
     /**
      * 设置当前用户
      *

+ 1 - 0
tz-framework/tz-spring-boot-starter-web/src/main/java/cn/start/tz/framework/web/config/TzWebAutoConfiguration.java

@@ -46,6 +46,7 @@ public class TzWebAutoConfiguration implements WebMvcConfigurer {
         configurePathMatch(configurer, webProperties.getAppApi());
         configurePathMatch(configurer, webProperties.getApp());
         configurePathMatch(configurer, webProperties.getExternalApi());
+        configurePathMatch(configurer, webProperties.getPlatformApi());
     }
 
     /**

+ 2 - 0
tz-framework/tz-spring-boot-starter-web/src/main/java/cn/start/tz/framework/web/config/WebProperties.java

@@ -27,6 +27,8 @@ public class WebProperties {
 
     private Api externalApi = new Api("/external-api", "**.controller.external.**");
 
+    private Api platformApi = new Api("/platform-api", "**.controller.platform.**");
+
     @NotNull(message = "Admin UI 不能为空")
     private Ui adminUi;
 

+ 2 - 1
tz-framework/tz-spring-boot-starter-web/src/main/java/cn/start/tz/framework/web/core/filter/ApiRequestFilter.java

@@ -24,7 +24,8 @@ public abstract class ApiRequestFilter extends OncePerRequestFilter {
                 webProperties.getAdminApi().getPrefix(),
                 webProperties.getAppApi().getPrefix(),
                 webProperties.getApp().getPrefix(),
-                webProperties.getExternalApi().getPrefix()
+                webProperties.getExternalApi().getPrefix(),
+                webProperties.getPlatformApi().getPrefix()
                 );
     }
 

+ 25 - 27
tz-gateway/src/main/java/cn/start/tz/gateway/filter/security/SignAuthFilter.java

@@ -1,5 +1,4 @@
 package cn.start.tz.gateway.filter.security;
-
 import cn.start.tz.gateway.config.SignConfig;
 import cn.start.tz.gateway.util.SignUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -27,37 +26,36 @@ public class SignAuthFilter implements GlobalFilter, Ordered {
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         String path = exchange.getRequest().getPath().toString();
-        return chain.filter(exchange);
 
         // 1. 跳过非API路径和排除路径
-//        if (!path.startsWith(APP_API_PREFIX)) {
-//            return chain.filter(exchange);
-//        }
-//        if (signConfig.getExcludePaths().stream()
-//                .anyMatch(pattern -> path.startsWith(pattern) || path.matches(pattern))) {
-//            return chain.filter(exchange);
-//        }
-//
-//        // 2. 执行签名验证
-//        return signUtils.verifyAndProcess(exchange, chain, signConfig)
-//                .onErrorResume(e -> {
-//                    log.warn("签名验证失败 - URI: {} | 错误: {}",
-//                            exchange.getRequest().getPath(), e.getMessage());
-//                    exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
-//                    exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
-//
-//                    String errorMsg = e.getMessage() != null ? e.getMessage() : "签名验证失败";
-//                    String body = String.format("{\"code\":401,\"message\":\"%s\"}", errorMsg);
-//
-//                    return exchange.getResponse()
-//                            .writeWith(Mono.just(
-//                                    exchange.getResponse().bufferFactory().wrap(body.getBytes())
-//                            ));
-//                });
+        if (!path.startsWith(APP_API_PREFIX)) {
+            return chain.filter(exchange);
+        }
+        if (signConfig.getExcludePaths().stream()
+                .anyMatch(pattern -> path.startsWith(pattern) || path.matches(pattern))) {
+            return chain.filter(exchange);
+        }
+
+        // 2. 执行签名验证
+        return signUtils.verifyAndProcess(exchange, chain, signConfig)
+                .onErrorResume(e -> {
+                    log.warn("签名验证失败 - URI: {} | 错误: {}",
+                            exchange.getRequest().getPath(), e.getMessage());
+                    exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
+                    exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
+
+                    String errorMsg = e.getMessage() != null ? e.getMessage() : "签名验证失败";
+                    String body = String.format("{\"code\":401,\"message\":\"%s\"}", errorMsg);
+
+                    return exchange.getResponse()
+                            .writeWith(Mono.just(
+                                    exchange.getResponse().bufferFactory().wrap(body.getBytes())
+                            ));
+                });
     }
 
     @Override
     public int getOrder() {
         return -1000;
     }
-}
+}

+ 3 - 3
tz-gateway/src/main/resources/application-local.yaml

@@ -4,9 +4,9 @@ spring:
   cloud:
     nacos:
       #server-addr: 127.0.0.1:8848 # Nacos 服务器地址
-      server-addr: 192.168.0.53:8848 # Nacos 服务器地址
-      username: nacos # Nacos 账号
-      password: nacos # Nacos 密码
+      server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+      username: # Nacos 账号
+      password: # Nacos 密码
       discovery: # 【配置中心】配置项
         namespace: dev # 命名空间。这里使用 dev 开发环境
         group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP

+ 3 - 16
tz-gateway/src/main/resources/application.yaml

@@ -13,6 +13,9 @@ spring:
       - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置
       - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置
 
+  codec:
+    max-in-memory-size: 10MB
+
   cloud:
     # Spring Cloud Gateway 配置项,对应 GatewayProperties 类
     gateway:
@@ -116,19 +119,6 @@ spring:
             - Path=/app-api/pressure/**
           filters:
             - RewritePath=/app-api/pressure/v3/api-docs, /v3/api-docs
-        ## pipeline-server 服务
-        - id: pipeline-admin-api # 路由的编号
-          uri: grayLb://pipeline-server
-          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
-            - Path=/admin-api/pipeline/**
-          filters:
-            - RewritePath=/admin-api/pipeline/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
-        - id: pipeline-app-api # 路由的编号
-          uri: grayLb://pipeline-server
-          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
-            - Path=/app-api/pipeline/**
-          filters:
-            - RewritePath=/app-api/pipeline/v3/api-docs, /v3/api-docs
 
       x-forwarded:
         prefix-enabled: false # 避免 Swagger 重复带上额外的 /admin-api/system 前缀
@@ -181,9 +171,6 @@ knife4j:
       - name: member-server
         service-name: member-server
         url: /admin-api/member/v3/api-docs
-      - name: pipeline-server
-        service-name: pipeline-server
-        url: /admin-api/pipeline/v3/api-docs
 --- #################### 芋道相关配置 ####################
 
 tz:

+ 1 - 1
tz-gateway/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,stage,prod,hst,shd,default">
+    <springProfile name="dev,test,stage,prod,default">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 21 - 7
tz-module-bpm/tz-module-bpm-biz/src/main/java/cn/start/tz/module/bpm/api/task/BpmTaskApiImpl.java

@@ -55,14 +55,28 @@ public class BpmTaskApiImpl implements BpmTaskApi {
         if(ids == null){
             return CommonResult.success(map);
         }
+        Map<String, BpmFormDO> formMap = new HashMap<>();
+        Map<String,  AdminUserRespDTO> userMap = new HashMap<>();
+        Map<String,  DeptRespDTO> deptMap = new HashMap<>();
         for(String processInstanceId :ids){
-            HistoricTaskInstance historicTaskInstance = bpmTaskService.getTaskByProcessInstanceId(processInstanceId, false);
-            if(historicTaskInstance != null){
-                BpmTaskDTO bpmTaskDTO = BpmTaskDTO.builder().
-                        id(historicTaskInstance.getId()).name(historicTaskInstance.getName()).assignee(historicTaskInstance.getAssignee())
-                        .build();
-
-                map.put(processInstanceId,bpmTaskDTO);
+            //HistoricTaskInstance historicTaskInstance = bpmTaskService.getTaskByProcessInstanceId(processInstanceId, false);
+            List<HistoricTaskInstance> taskList = bpmTaskService.getTaskListByProcessInstanceId(processInstanceId, false);
+
+            List<BpmTaskRespVO> bpmTaskRespVOS = BpmTaskConvert.INSTANCE.buildTaskListByProcessInstanceId(taskList,
+                    formMap, userMap, deptMap);
+
+            List<BpmTaskRespDTO> bean = BeanUtils.toBean(bpmTaskRespVOS, BpmTaskRespDTO.class);
+            List<BpmTaskRespDTO> resultList = bean.stream().filter(item -> item.getStatus() != 100).toList();
+            // 最后审核人
+            if(CollUtil.isNotEmpty(resultList)){
+                BpmTaskRespDTO bpmTaskRespDTO = bean.get(0);
+                BpmTaskRespDTO bpmTaskDTO = resultList.get(0);
+                bpmTaskDTO.setName(bpmTaskRespDTO.getName());
+                map.put(processInstanceId,BeanUtils.toBean(bpmTaskDTO, BpmTaskDTO.class));
+            }else if(CollUtil.isNotEmpty(bean)){// 当前节点
+                BpmTaskRespDTO bpmTaskRespDTO = bean.get(0);
+                bpmTaskRespDTO.setAssignee("0");
+                map.put(processInstanceId,BeanUtils.toBean(bpmTaskRespDTO, BpmTaskDTO.class));
             }
 
         }

+ 1 - 0
tz-module-bpm/tz-module-bpm-biz/src/main/java/cn/start/tz/module/bpm/service/definition/BpmUserGroupServiceImpl.java

@@ -133,6 +133,7 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService {
 
         if(category != null){
             queryWrapperX.eq(BpmUserGroupDO::getCategory, category);
+            queryWrapperX.eq(BpmUserGroupDO::getStatus, 0);
         }
 
         if(StringUtils.isNotBlank(id)){

+ 77 - 7
tz-module-bpm/tz-module-bpm-biz/src/main/java/cn/start/tz/module/bpm/service/task/BpmProcessInstanceServiceImpl.java

@@ -45,6 +45,7 @@ import cn.start.tz.module.system.api.dept.DeptApi;
 import cn.start.tz.module.system.api.dept.dto.DeptRespDTO;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.nacos.client.naming.utils.CollectionUtils;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
@@ -794,36 +795,105 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
     @Override
     public List<BpmProcessInstanceRespDTO> getProcessInstanceList(String userId, BpmProcessInstanceDTO pageReqVO) {
         pageReqVO.setPageSize(9999);
-        // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
+
+        // 使用 TaskService 查询当前用户需要审批的任务
+        List<org.flowable.task.api.Task> tasks = taskService.createTaskQuery()
+                .taskAssignee(userId)
+                .active()
+                .orderByTaskCreateTime().desc()
+                .list();
+
+        if (CollectionUtils.isEmpty(tasks)) {
+            return new ArrayList<>();
+        }
+
+        // 收集流程实例ID
+        Set<String> processInstanceIds = tasks.stream()
+                .map(org.flowable.task.api.Task::getProcessInstanceId)
+                .collect(Collectors.toSet());
+
+        // 使用 HistoryService 查询这些流程实例的详细信息
         HistoricProcessInstanceQuery processInstanceQuery = historyService.createHistoricProcessInstanceQuery()
                 .includeProcessVariables()
                 .processInstanceTenantId(FlowableUtils.getTenantId())
+                .processInstanceIds(processInstanceIds) // 使用 processInstanceIds 方法过滤
                 .orderByProcessInstanceStartTime().desc();
-        if (userId != null) {
-            processInstanceQuery.startedBy(String.valueOf(userId));
+
+        // 添加状态过滤
+        if (pageReqVO.getStatus() != null) {
+            processInstanceQuery.variableValueEquals(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, pageReqVO.getStatus());
         }
-        processInstanceQuery.variableValueEquals(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, pageReqVO.getStatus());
+
+        // 添加流程定义key过滤
         if (StringUtils.isNotEmpty(pageReqVO.getProcessDefinitionKey())) {
             processInstanceQuery.processDefinitionKey(pageReqVO.getProcessDefinitionKey());
         }
+
         // 查询数量
         long processInstanceCount = processInstanceQuery.count();
         if (processInstanceCount == 0) {
             return new ArrayList<>();
         }
+
         // 查询列表
         List<HistoricProcessInstance> processInstanceList = processInstanceQuery.listPage(PageUtils.getStart(pageReqVO), pageReqVO.getPageSize());
-        // 拼接返回
+
+        // 获取相关的任务信息
         Map<String, List<org.flowable.task.api.Task>> taskMap = bpmTaskService.getTaskMapByProcessInstanceIds(
                 convertList(processInstanceList, HistoricProcessInstance::getId));
+
+        // 获取流程定义信息
         Map<String, ProcessDefinition> processDefinitionMap = processDefinitionService.getProcessDefinitionMap(
                 convertSet(processInstanceList, HistoricProcessInstance::getProcessDefinitionId));
+
+        // 获取分类信息
         Map<String, BpmCategoryDO> categoryMap = categoryService.getCategoryMap(
                 convertSet(processDefinitionMap.values(), ProcessDefinition::getCategory));
+
+        // 获取流程定义扩展信息
         Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap(
                 convertSet(processInstanceList, HistoricProcessInstance::getProcessDefinitionId));
-        //组装完整数据
-        List<BpmProcessInstanceRespVO> bpmProcessInstanceRespVOS = BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceList(processInstanceList, processDefinitionMap, categoryMap, taskMap, null, null, processDefinitionInfoMap);
+
+        // 组装完整数据
+        List<BpmProcessInstanceRespVO> bpmProcessInstanceRespVOS = BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceList(
+                processInstanceList, processDefinitionMap, categoryMap, taskMap, null, null, processDefinitionInfoMap);
+
         return BeanUtils.toBean(bpmProcessInstanceRespVOS, BpmProcessInstanceRespDTO.class);
     }
+
+//    @Override
+//    public List<BpmProcessInstanceRespDTO> getProcessInstanceList(String userId, BpmProcessInstanceDTO pageReqVO) {
+//        pageReqVO.setPageSize(9999);
+//        // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
+//        HistoricProcessInstanceQuery processInstanceQuery = historyService.createHistoricProcessInstanceQuery()
+//                .includeProcessVariables()
+//                .processInstanceTenantId(FlowableUtils.getTenantId())
+//                .orderByProcessInstanceStartTime().desc();
+//        if (userId != null) {
+//            processInstanceQuery.startedBy(String.valueOf(userId));
+//        }
+//        processInstanceQuery.variableValueEquals(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, pageReqVO.getStatus());
+//        if (StringUtils.isNotEmpty(pageReqVO.getProcessDefinitionKey())) {
+//            processInstanceQuery.processDefinitionKey(pageReqVO.getProcessDefinitionKey());
+//        }
+//        // 查询数量
+//        long processInstanceCount = processInstanceQuery.count();
+//        if (processInstanceCount == 0) {
+//            return new ArrayList<>();
+//        }
+//        // 查询列表
+//        List<HistoricProcessInstance> processInstanceList = processInstanceQuery.listPage(PageUtils.getStart(pageReqVO), pageReqVO.getPageSize());
+//        // 拼接返回
+//        Map<String, List<org.flowable.task.api.Task>> taskMap = bpmTaskService.getTaskMapByProcessInstanceIds(
+//                convertList(processInstanceList, HistoricProcessInstance::getId));
+//        Map<String, ProcessDefinition> processDefinitionMap = processDefinitionService.getProcessDefinitionMap(
+//                convertSet(processInstanceList, HistoricProcessInstance::getProcessDefinitionId));
+//        Map<String, BpmCategoryDO> categoryMap = categoryService.getCategoryMap(
+//                convertSet(processDefinitionMap.values(), ProcessDefinition::getCategory));
+//        Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap(
+//                convertSet(processInstanceList, HistoricProcessInstance::getProcessDefinitionId));
+//        //组装完整数据
+//        List<BpmProcessInstanceRespVO> bpmProcessInstanceRespVOS = BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceList(processInstanceList, processDefinitionMap, categoryMap, taskMap, null, null, processDefinitionInfoMap);
+//        return BeanUtils.toBean(bpmProcessInstanceRespVOS, BpmProcessInstanceRespDTO.class);
+//    }
 }

+ 1 - 1
tz-module-bpm/tz-module-bpm-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,stage,prod,hst,shd,default">
+    <springProfile name="dev,test,stage,prod,default">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 13 - 0
tz-module-grape-city/tz-module-grape-city-api/src/main/java/cn/start/tz/module/grape/city/api/vo/GrapeCityLaboratoryReportReqDTO.java

@@ -32,6 +32,11 @@ public class GrapeCityLaboratoryReportReqDTO {
      */
     private byte[] reportRatifyByImg;
 
+    /**
+     * 校核人签名图片
+     */
+    private byte[] reportCheckByImg;
+
 
     /**
      * 附件流
@@ -48,7 +53,15 @@ public class GrapeCityLaboratoryReportReqDTO {
      */
     private List<GrapeCityLaboratorySubReportReqDTO> subReportList;
 
+    /**
+     * 检验员签名图片列表
+     */
+    private List<byte[]> checkNameImgList;
 
+    /**
+     * 校核人签名图片列表
+     */
+    private List<byte[]> verifyNameImgList;
 
 
 

+ 6 - 0
tz-module-grape-city/tz-module-grape-city-api/src/main/java/cn/start/tz/module/grape/city/api/vo/GrapeCityReqDTO.java

@@ -43,6 +43,9 @@ public class GrapeCityReqDTO {
     @Schema(description = "审批人员签名图片")
     private byte[] ratifySignImageData;
 
+    @Schema(description = "编制人员签名图片")
+    private byte[] prepareSignImageData;
+
     @Schema(description = "业务数据")
     private GrapeCityBusinessReqDTO grapeCityBusinessReqDTO;
 
@@ -56,4 +59,7 @@ public class GrapeCityReqDTO {
 
     @Schema(description = "三方pdf文件")
     private List<String> pdfUrl;
+
+    @Schema(description = "是否要添加页码")
+    private Boolean isPage;
 }

+ 10 - 1
tz-module-grape-city/tz-module-grape-city-api/src/main/java/cn/start/tz/module/grape/city/enums/ApiConstants.java

@@ -27,9 +27,12 @@ public interface ApiConstants {
     // 实验室标准报告
     String QC13009202400 = "qc13009202400";
 
-    // 实验室受理
+    // 实验室-质量检验服务
     String QR0401202401 = "qr0401202401";
 
+    // 实验室-委托检验检测服务单
+    String QR0419202401 = "qr0419202401";
+
     // 实验室检验报告
     String QC13033202400 = "qc13033202400";
 
@@ -41,4 +44,10 @@ public interface ApiConstants {
 
     // 实验室-气体燃料检测报告
     String QC46024202400 = "qc46024202400";
+
+    // 实验室-生活饮用水检验报告
+    String QC41021202400 = "qc41021202400";
+
+    // 实验室-气体燃料检测记录
+    String QC46106202400 = "qc46106202400";
 }

+ 31 - 19
tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/api/GrapeCityApiImpl.java

@@ -9,9 +9,6 @@ import cn.start.tz.module.grape.city.api.vo.GrapeCityLaboratorySubReportReqDTO;
 import cn.start.tz.module.grape.city.api.vo.GrapeCityReqDTO;
 import cn.start.tz.module.grape.city.templatefactory.TemplateService;
 import cn.start.tz.module.grape.city.templatefactory.TemplateServiceFactory;
-import cn.start.tz.module.system.api.standard.dto.StandardProductRespDTO;
-import cn.start.tz.module.system.api.standard.dto.StandardTemplateRespDTO;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.grapecity.documents.excel.*;
 import com.grapecity.documents.excel.drawing.ImageType;
 import com.grapecity.documents.excel.template.DataSource.JsonDataSource;
@@ -23,13 +20,11 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.EnumSet;
 import java.util.List;
 
-import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.start.tz.module.grape.city.templatefactory.TemplateService.tableCopy;
-
 
 @Slf4j
 @RestController // 提供 RESTful API 接口,给 Feign 调用
@@ -47,16 +42,16 @@ public class GrapeCityApiImpl implements GrapeCityApi {
         TemplateService service = templateServiceFactory.getService(grapeCityReqDTO.getCode());
         if (grapeCityReqDTO.getIsImage() != null && grapeCityReqDTO.getIsImage()) {
             byte[] image = service.image(grapeCityReqDTO);
-            log.info("image byte size {}",image.length/1024);
+            log.info("image byte size {}", image.length / 1024);
             return CommonResult.success(image);
         }
         if (grapeCityReqDTO.getIsPdf() != null && grapeCityReqDTO.getIsPdf()) {
             byte[] pdf = service.pdf(grapeCityReqDTO);
-            log.info("pdf byte size {}",pdf.length/1024);
+            log.info("pdf byte size {}", pdf.length / 1024);
             return CommonResult.success(pdf);
         }
         byte[] excel = service.excel(grapeCityReqDTO);
-        log.info("excel byte size {}",excel.length/1024);
+        log.info("excel byte size {}", excel.length / 1024);
         return CommonResult.success(excel);
     }
 
@@ -70,13 +65,16 @@ public class GrapeCityApiImpl implements GrapeCityApi {
         for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
             IWorksheet worksheet = workbook.getWorksheets().get(i);
             worksheet.getPageSetup().setPrintHeadings(false);
-            // 水平居中
+            worksheet.getPageSetup().setPaperSize(PaperSize.A4);
+            worksheet.getPageSetup().setLeftMargin(7); // 左边距
+            worksheet.getPageSetup().setRightMargin(7); // 右边距
             worksheet.getPageSetup().setCenterHorizontally(true);
         }
-        PrintManager printManager = new PrintManager();
         Workbook.FontsFolderPath = fontsFolderPath;
-        List<PageInfo> pages = printManager.paginate(workbook);
-        printManager.savePageInfosToPDF(byteArrayOutputStream, pages);
+        // 设置PdfSaveOptions以将工作簿导出为PDF文件。
+        PdfSaveOptions pdfOptions = new PdfSaveOptions();
+        pdfOptions.setIncludeAutoMergedCells(true);
+        workbook.save(byteArrayOutputStream, pdfOptions);
         return CommonResult.success(byteArrayOutputStream.toByteArray());
     }
 
@@ -114,20 +112,22 @@ public class GrapeCityApiImpl implements GrapeCityApi {
                             String bindingPath = cell.getBindingPath();
                             if ("preparedByName".equals(bindingPath) && reqDTO.getPreparedByImg() != null) {
                                 try (InputStream tempIn0 = new ByteArrayInputStream(reqDTO.getPreparedByImg())) {
-                                    Rectangle rect = CellInfo.GetRangeBoundary(worksheet.getRange(cell.getAddress()));
-                                    worksheet.getShapes().addPictureInPixel(tempIn0, ImageType.JPG, rect.getX(), rect.getY(), rect.getWidth() * 8, rect.getHeight());
+                                    this.imagePicture(worksheet, cell, tempIn0);
                                 }
                             }
                             if ("reportApprovalByName".equals(bindingPath) && reqDTO.getReportApprovalByImg() != null) {
                                 try (InputStream tempIn1 = new ByteArrayInputStream(reqDTO.getReportApprovalByImg())) {
-                                    Rectangle rect = CellInfo.GetRangeBoundary(worksheet.getRange(cell.getAddress()));
-                                    worksheet.getShapes().addPictureInPixel(tempIn1, ImageType.JPG, rect.getX(), rect.getY(), rect.getWidth() * 8, rect.getHeight());
+                                    this.imagePicture(worksheet, cell, tempIn1);
                                 }
                             }
                             if ("reportRatifyByName".equals(bindingPath) && reqDTO.getReportRatifyByImg() != null) {
                                 try (InputStream tempIn4 = new ByteArrayInputStream(reqDTO.getReportRatifyByImg())) {
-                                    Rectangle rect = CellInfo.GetRangeBoundary(worksheet.getRange(cell.getAddress()));
-                                    worksheet.getShapes().addPictureInPixel(tempIn4, ImageType.JPG, rect.getX(), rect.getY(), rect.getWidth() * 8, rect.getHeight());
+                                    this.imagePicture(worksheet, cell, tempIn4);
+                                }
+                            }
+                            if ("checkByName".equals(bindingPath) && reqDTO.getReportCheckByImg() != null) {
+                                try (InputStream tempIn4 = new ByteArrayInputStream(reqDTO.getReportCheckByImg())) {
+                                    this.imagePicture(worksheet, cell, tempIn4);
                                 }
                             }
                         }
@@ -187,5 +187,17 @@ public class GrapeCityApiImpl implements GrapeCityApi {
         return CommonResult.success(byteArrayOutputStream.toByteArray());
     }
 
+    private void imagePicture(IWorksheet worksheet, IRange cell, InputStream tempIn4) throws IOException {
+        Rectangle rect = CellInfo.GetRangeBoundary(worksheet.getRange(cell.getAddress()));
+        double widthInPixel = worksheet.getRange(cell.getAddress()).getMergeArea().getWidthInPixel();
+        if (widthInPixel > 100) {
+            widthInPixel = 100;
+        }
+        worksheet.getShapes().addPictureInPixel(tempIn4, ImageType.JPG, rect.getX() + 2,
+                rect.getY() + 2,
+                widthInPixel - 4,
+                worksheet.getRange(cell.getAddress()).getMergeArea().getHeightInPixel() - 4);
+    }
+
 
 }

+ 20 - 0
tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/config/CorsConfig.java

@@ -0,0 +1,20 @@
+package cn.start.tz.module.grape.city.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class CorsConfig implements WebMvcConfigurer {
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**") // 适用于所有路径
+                .allowedOrigins("https://cloud-admin-uat.gzsei.com", "https://appapi-uat.gzsei.cn/") // 必须:明确指定允许的域名
+                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 建议:按需限制方法
+                .allowedHeaders("*") // 建议:按需限制头部
+                .allowCredentials(true) // 可选:如需传递Cookie等凭证
+                .maxAge(3600); // 可选:预检请求缓存时间
+    }
+
+}

+ 13 - 0
tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/templatefactory/impl/OrderIssueReportService.java

@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 
@@ -313,4 +314,16 @@ public class OrderIssueReportService implements TemplateService {
 
         log.debug("Page layout set (page numbers removed) for worksheet '{}'", worksheet.getName());
     }
+
+    private void imagePicture(IWorksheet worksheet, IRange cell, InputStream tempIn4) throws IOException {
+        Rectangle rect = CellInfo.GetRangeBoundary(worksheet.getRange(cell.getAddress()));
+        double widthInPixel = worksheet.getRange(cell.getAddress()).getMergeArea().getWidthInPixel();
+        if (widthInPixel > 100) {
+            widthInPixel = 100;
+        }
+        worksheet.getShapes().addPictureInPixel(tempIn4, ImageType.JPG, rect.getX() + 2,
+                rect.getY() + 2,
+                widthInPixel - 4,
+                worksheet.getRange(cell.getAddress()).getMergeArea().getHeightInPixel() - 4);
+    }
 }

+ 25 - 10
tz-module-grape-city/tz-module-grape-city-biz/src/main/java/cn/start/tz/module/grape/city/templatefactory/impl/YearCheckService.java

@@ -82,6 +82,7 @@ public class YearCheckService implements TemplateService {
         byte[] recheckSignImageData = grapeCityReqDTO.getRecheckSignImageData();
         byte[] approvalSignImageData = grapeCityReqDTO.getApprovalSignImageData();
         byte[] ratifySignImageData = grapeCityReqDTO.getRatifySignImageData();
+        byte[] prepareSignImageData = grapeCityReqDTO.getPrepareSignImageData();
 
         WorkbookOptions workbookOptions = new WorkbookOptions();
         workbookOptions.setPixelBasedColumnWidth(true);
@@ -103,7 +104,7 @@ public class YearCheckService implements TemplateService {
             worksheet.getRows().getEntireRow().autoFit(true);
             TemplateService.tableCopy(worksheet);
 
-            if (imageData != null || managerSignImageData != null || recheckSignImageData != null || ratifySignImageData != null || approvalSignImageData != null || checkSignImageData != null) {
+            if (imageData != null || managerSignImageData != null || recheckSignImageData != null || ratifySignImageData != null || approvalSignImageData != null || checkSignImageData != null || prepareSignImageData != null) {
                 IRange usedRange = worksheet.getUsedRange();
                 if (usedRange != null) {
                     for (int row = 0; row < worksheet.getUsedRange().getRowCount(); row++) {
@@ -169,19 +170,33 @@ public class YearCheckService implements TemplateService {
                                     tempIn4.close();
                                 }
                             }
+
+                            //编制人员签名
+                            if ("prepareName".equals(bindingPath) && prepareSignImageData != null) {
+                                InputStream tempIn5 = new ByteArrayInputStream(prepareSignImageData);
+                                try {
+                                    Rectangle rect = CellInfo.GetRangeBoundary(worksheet.getRange(cell.getAddress()));
+                                    rect.setWidth(100.0);
+//                                    rect.setHeight(25.0);
+                                    worksheet.getShapes().addPictureInPixel(tempIn5, ImageType.JPG, rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
+                                } finally {
+                                    tempIn5.close();
+                                }
+                            }
                         }
                     }
                 }
             }
-
-            if (i == 0) {
-                worksheet.getPageSetup().setFirstPageNumber(1);
-                worksheet.getPageSetup().setIsAutoFirstPageNumber(false);
-                worksheet.getPageSetup().setCenterFooter("第&P页共&N页");
-            }
-            if (i > 0) {
-                worksheet.getPageSetup().setCenterFooter("第&P页共&N页");
-                worksheet.getPageSetup().setIsAutoFirstPageNumber(true);
+            if (grapeCityReqDTO.getIsPage()) {
+                if (i == 0) {
+                    worksheet.getPageSetup().setFirstPageNumber(1);
+                    worksheet.getPageSetup().setIsAutoFirstPageNumber(false);
+                    worksheet.getPageSetup().setCenterFooter("第&P页共&N页");
+                }
+                if (i > 0) {
+                    worksheet.getPageSetup().setCenterFooter("第&P页共&N页");
+                    worksheet.getPageSetup().setIsAutoFirstPageNumber(true);
+                }
             }
             worksheet.getPageSetup().setPrintHeadings(false);
             worksheet.getPageSetup().setCenterHorizontally(true);

+ 4 - 3
tz-module-grape-city/tz-module-grape-city-biz/src/main/resources/application-uat.yaml

@@ -18,10 +18,9 @@ spring:
   datasource:
     druid: # Druid 【监控】相关的全局配置
       web-stat-filter:
-        enabled: true
+        enabled: false
       stat-view-servlet:
-        enabled: true
-        allow: # 设置白名单,不填则允许所有访问
+        enabled: false
         url-pattern: /druid/*
         login-username: # 控制台管理用户名和密码
         login-password:
@@ -47,6 +46,8 @@ spring:
         test-while-idle: true
         test-on-borrow: false
         test-on-return: false
+        stat-view-servlet:
+          enabled: false
       primary: master
       datasource:
         master:

+ 5 - 0
tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/file/FileApi.java

@@ -2,6 +2,7 @@ package cn.start.tz.module.infra.api.file;
 
 import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.module.infra.api.file.dto.FileCreateReqDTO;
+import cn.start.tz.module.infra.api.file.dto.FileRepsDTO;
 import cn.start.tz.module.infra.enums.ApiConstants;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
@@ -69,4 +70,8 @@ public interface FileApi {
     @Operation(summary = "获取文件")
     CommonResult<byte[]> getFileByPath(@RequestParam(required = false) String path) throws Exception;
 
+    @PostMapping(PREFIX + "/getFileRepsDTOByPath")
+    @Operation(summary = "获取文件信息")
+    CommonResult<FileRepsDTO> getFileRepsDTO(@RequestParam(required = false) String path) throws Exception;
+
 }

+ 29 - 0
tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/file/dto/FileRepsDTO.java

@@ -0,0 +1,29 @@
+package cn.start.tz.module.infra.api.file.dto;
+
+import lombok.Data;
+
+@Data
+public class FileRepsDTO {
+
+    /**
+     * 原文件名
+     */
+    private String name;
+    /**
+     * 路径,即文件名
+     */
+    private String path;
+    /**
+     * 访问地址
+     */
+    private String url;
+    /**
+     * 文件的 MIME 类型,例如 "application/octet-stream"
+     */
+    private String type;
+    /**
+     * 文件大小
+     */
+    private Integer size;
+
+}

+ 6 - 1
tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/pay/PayApi.java

@@ -1,6 +1,7 @@
 package cn.start.tz.module.infra.api.pay;
 
 import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.module.infra.api.pay.dto.TaskChargeDTO;
 import cn.start.tz.module.infra.api.pay.dto.TaskInfoDTO;
 import cn.start.tz.module.infra.api.sign.dto.CntSignReqDTO;
 import cn.start.tz.module.infra.api.sign.dto.CntSignResponseRepsDTO;
@@ -21,7 +22,11 @@ public interface PayApi {
 
     @PostMapping(PREFIX + "/pushOrder")
     @Operation(summary = "服务单推送收费")
-    CommonResult<Boolean> pushOrder(@Valid @RequestBody TaskInfoDTO reqDTO) throws Exception;
+    CommonResult<Boolean> pushOrder(@Valid @RequestBody TaskInfoDTO reqDTO) ;
 
 
+    @PostMapping(PREFIX + "/pay-order")
+    @Operation(summary = "服务单收费")
+    CommonResult<String> payOrder(@Valid @RequestBody TaskChargeDTO reqDTO) ;
+
 }

+ 40 - 0
tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/pay/dto/TaskChargeDTO.java

@@ -0,0 +1,40 @@
+package cn.start.tz.module.infra.api.pay.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class TaskChargeDTO {
+
+    /**
+     * {
+     *   "taskno": "2025-000359",
+     *   "payUnitCode": "91440101MA59FWMW5X",
+     *   "payType": "1",
+     *   "money": 0.01,
+     *   "createNo": "test",
+     *   "createName": "test",
+     *   "phone": "18138793871",
+     *   "smsFlag": 0
+     * }
+     */
+    @Schema(description = "任务编号")
+    private String taskno;
+    @Schema(description = "付款单位统一社会信用代码")
+    private String payUnitCode;
+    @Schema(description = "缴费方式(1银联扫码支付,2现场缴费,3对公转账)")
+    private String payType;
+    @Schema(description = "缴费金额")
+    private BigDecimal money;
+    @Schema(description = "缴费人账号")
+    private String createNo;
+    @Schema(description = "缴费人姓名")
+    private String createName;
+    @Schema(description = "缴费人手机号")
+    private String phone;
+    @Schema(description = "短信自动发送标识(0手动发送,1自动发送),默认为0")
+    private Integer smsFlag;
+
+}

+ 22 - 0
tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/pay/dto/TaskChargeRespDTO.java

@@ -0,0 +1,22 @@
+package cn.start.tz.module.infra.api.pay.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 任务充值响应数据传输对象
+ * 用于封装任务充值操作后的返回结果信息
+ */
+@Data
+public class TaskChargeRespDTO {
+
+    @Schema(description = "响应码")
+    private Integer code;
+
+    @Schema(description = "响应信息")
+    private String message;
+
+    @Schema(description = "响应数据")
+    private String data;
+
+}

+ 1 - 1
tz-module-infra/tz-module-infra-api/src/main/java/cn/start/tz/module/infra/api/sign/dto/SignValuesDTO.java

@@ -19,7 +19,7 @@ public class SignValuesDTO implements Serializable {
     public static final String SIGN_GD_MAC_SEAL = "3"; // 广东省质量监督建筑机械检验专用章
     public static final String SIGN_GZ_RDI_SEAL = "4"; // 广州特种机电设备检测研究院监督抽查检验章
     public static final String SIGN_GD_RDI_SEAL = "5"; // 广东省质量监督建筑机械检验省站CMA章
-    public static final String SIGN_GZ_YWZ_SEAL = "6"; // 广东省质量监督建筑机械检验省站CMA
+    public static final String SIGN_GZ_YWZ_SEAL = "6"; // 广州特种设备检测研究院业务
 
     public static final String SIGN_GZ_CNAS_SEAL = "JYCNAS"; // 特检院-检验CNAS章
 

+ 6 - 0
tz-module-infra/tz-module-infra-biz/pom.xml

@@ -37,6 +37,12 @@
             <version>${revision}</version>
         </dependency>
 
+        <dependency>
+            <groupId>cn.tz.cloud</groupId>
+            <artifactId>tz-module-pressure-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
         <!-- 业务组件 -->
         <dependency>
             <groupId>cn.tz.cloud</groupId>

+ 7 - 0
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/api/file/FileApiImpl.java

@@ -2,7 +2,9 @@ package cn.start.tz.module.infra.api.file;
 
 import cn.hutool.core.util.StrUtil;
 import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
 import cn.start.tz.module.infra.api.file.dto.FileCreateReqDTO;
+import cn.start.tz.module.infra.api.file.dto.FileRepsDTO;
 import cn.start.tz.module.infra.framework.file.core.client.FileClient;
 import cn.start.tz.module.infra.service.file.FileConfigService;
 import cn.start.tz.module.infra.service.file.FileService;
@@ -47,4 +49,9 @@ public class FileApiImpl implements FileApi {
         return success(fileService.getFileContentByPath(path));
     }
 
+    @Override
+    public CommonResult<FileRepsDTO> getFileRepsDTO(String path) throws Exception {
+        return success(BeanUtils.toBean(fileService.getFileByPath(path), FileRepsDTO.class));
+    }
+
 }

+ 10 - 1
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/api/pay/PayApiImpl.java

@@ -1,6 +1,7 @@
 package cn.start.tz.module.infra.api.pay;
 
 import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.module.infra.api.pay.dto.TaskChargeDTO;
 import cn.start.tz.module.infra.api.pay.dto.TaskInfoDTO;
 import cn.start.tz.module.infra.service.pay.PayService;
 import jakarta.annotation.Resource;
@@ -16,8 +17,16 @@ public class PayApiImpl implements PayApi {
 
 
     @Override
-    public CommonResult<Boolean> pushOrder(TaskInfoDTO reqDTO) throws Exception {
+    public CommonResult<Boolean> pushOrder(TaskInfoDTO reqDTO) {
         payService.pushOrder(reqDTO);
         return CommonResult.success(Boolean.TRUE);
     }
+
+    @Override
+    public CommonResult<String> payOrder(TaskChargeDTO reqDTO) {
+        String url = payService.payOrder(reqDTO);
+        return CommonResult.success(url);
+    }
+
+
 }

+ 16 - 15
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/controller/appapi/AppApiFileController.java

@@ -4,6 +4,7 @@ import cn.hutool.core.io.IoUtil;
 import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.module.infra.controller.admin.file.vo.file.FileCreateReqVO;
 import cn.start.tz.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO;
+import cn.start.tz.module.infra.controller.admin.file.vo.file.FileUploadReqVO;
 import cn.start.tz.module.infra.controller.app.file.vo.AppFileUploadReqVO;
 import cn.start.tz.module.infra.service.file.FileService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -29,26 +30,26 @@ public class AppApiFileController {
     private FileService fileService;
 
     @PostMapping("/upload")
-    @Operation(summary = "上传文件")
-    @PermitAll
-    public CommonResult<String> uploadFile(AppFileUploadReqVO uploadReqVO) throws Exception {
+    @Operation(summary = "上传文件", description = "模式一:后端上传文件")
+    public CommonResult<String> uploadFile(FileUploadReqVO uploadReqVO) throws Exception {
         MultipartFile file = uploadReqVO.getFile();
         String path = uploadReqVO.getPath();
         return success(fileService.createFile(file.getOriginalFilename(), path, IoUtil.readBytes(file.getInputStream())));
     }
 
-    @GetMapping("/presigned-url")
-    @Operation(summary = "获取文件预签名地址", description = "模式二:前端上传文件:用于前端直接上传七牛、阿里云 OSS 等文件存储器")
-    @PermitAll
-    public CommonResult<FilePresignedUrlRespVO> getFilePresignedUrl(@RequestParam("path") String path) throws Exception {
-        return success(fileService.getFilePresignedUrl(path));
-    }
 
-    @PostMapping("/create")
-    @Operation(summary = "创建文件", description = "模式二:前端上传文件:配合 presigned-url 接口,记录上传了上传的文件")
-    @PermitAll
-    public CommonResult<String> createFile(@Valid @RequestBody FileCreateReqVO createReqVO) {
-        return success(fileService.createFile(createReqVO));
-    }
+//    @GetMapping("/presigned-url")
+//    @Operation(summary = "获取文件预签名地址", description = "模式二:前端上传文件:用于前端直接上传七牛、阿里云 OSS 等文件存储器")
+//    @PermitAll
+//    public CommonResult<FilePresignedUrlRespVO> getFilePresignedUrl(@RequestParam("path") String path) throws Exception {
+//        return success(fileService.getFilePresignedUrl(path));
+//    }
+//
+//    @PostMapping("/create")
+//    @Operation(summary = "创建文件", description = "模式二:前端上传文件:配合 presigned-url 接口,记录上传了上传的文件")
+//    @PermitAll
+//    public CommonResult<String> createFile(@Valid @RequestBody FileCreateReqVO createReqVO) {
+//        return success(fileService.createFile(createReqVO));
+//    }
 
 }

+ 4 - 1
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/framework/rpc/config/RpcConfiguration.java

@@ -1,10 +1,13 @@
 package cn.start.tz.module.infra.framework.rpc.config;
 
+import cn.start.tz.module.pressure.api.acceptorder.AcceptOrderApi;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration(proxyBeanMethods = false)
-@EnableFeignClients(clients = AdminUserApi.class)
+@EnableFeignClients(clients = {
+        AdminUserApi.class, AcceptOrderApi.class
+})
 public class RpcConfiguration {
 }

+ 2 - 3
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/framework/sign/config/SignConfig.java

@@ -49,9 +49,8 @@ public class SignConfig {
 
     public String getServerUrl() {
         if (StrUtil.isBlank(serverUrl)) {
-            serverUrl = "http://192.168.18.223:8080/tosignserver/";
-//            serverUrl = "http://192.168.18.97:8089/tosignserver/";
-//            serverUrl = "http://192.168.18.98:8089/tosignserver/";
+//            serverUrl = "http://192.168.18.223:8080/tosignserver/";
+            serverUrl = "http://192.168.18.98:8089/tosignserver/";
         }
         return serverUrl;
     }

+ 48 - 9
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/mq/consumer/PayChargeStatusSendConsumer.java

@@ -1,29 +1,68 @@
 package cn.start.tz.module.infra.mq.consumer;
 
 import cn.start.tz.module.infra.mq.message.PayChargeEventMessage;
+import cn.start.tz.module.pressure.api.acceptorder.AcceptOrderApi;
+import cn.start.tz.module.pressure.api.acceptorder.dto.UpdatePayStatusDTO;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
 import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
-//@Component
-//@RocketMQMessageListener( // 重点:添加 @RocketMQMessageListener 注解,声明消费的 topic
-//        topic = "js_pay_service_charge_status",
-//        consumerGroup = "js_pay_service_charge_status" + "_infra"
-//)
+@Component
+@RocketMQMessageListener( // 重点:添加 @RocketMQMessageListener 注解,声明消费的 topic
+        topic = "js_pay_service_charge_status",
+        consumerGroup = "js_pay_service_charge_status" + "_infra"
+)
 @Slf4j
 public class PayChargeStatusSendConsumer implements RocketMQListener<PayChargeEventMessage> {
 
+    @Resource
+    private AcceptOrderApi acceptOrderApi;
+
+    @Resource
+    private ObjectMapper objectMapper;
+
     @EventListener
-    @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
+    // @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
+    @Override
     public void onMessage(PayChargeEventMessage message) {
-        log.info("[onMessage][消息内容({})]", message);
+        log.info("PayChargeStatusSendConsumer [onMessage][消息内容({})]", message);
 
-        // todo 消息转发回对应服务
-    }
+        if("1".equals(message.getEventType()+"")){
+            //费用事件:1.缴费 2.解除认领
+            if(StringUtils.isNotBlank(message.getTaskList())){
+                try {
+                    PayChargeEventMessage.TaskInfo[] taskInfos = objectMapper.readValue(message.getTaskList(), PayChargeEventMessage.TaskInfo[].class);
+                    for (PayChargeEventMessage.TaskInfo taskInfo :taskInfos){
+                        if("4".equals(taskInfo.getInData())){
+                            //承压
+                            log.info("PayChargeStatusSendConsumer 承压支付回调 {}", taskInfo.getTaskNo());
+                            UpdatePayStatusDTO payInfo = new UpdatePayStatusDTO();
+                            payInfo.setAcceptNo(taskInfo.getTaskNo());
+                            payInfo.setChargeTime(taskInfo.getChargeTime());
+                            payInfo.setChargeAmount(taskInfo.getChargeAmount());
+                            acceptOrderApi.updatePayStatus(payInfo);
+                        }else if("5".equals(taskInfo.getInData())){
+                            // 实验室
+
+                        }else{
+                            log.warn("[onMessage][消息内容({})]", taskInfo.getInData());
+                        }
+                    }
 
+                }catch (Exception e){
+                    log.error("PayChargeStatusSendConsumer error ", e);
+                }
+            }
+
+        }
+
+    }
 
 
 }

+ 4 - 1
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/mq/message/PayChargeEventMessage.java

@@ -21,7 +21,8 @@ public class PayChargeEventMessage {
     /**
      * 服务单集合
      */
-    private List<TaskInfo> taskList;
+    private String taskList;
+    //private List<TaskInfo> taskList;
 
     // 嵌套类:服务单信息
     @Data
@@ -76,6 +77,8 @@ public class PayChargeEventMessage {
          */
         private String chargeTime;  // 实际使用时建议 String 或 LocalDateTime
 
+        private String inData;
+
     }
 
 

+ 7 - 0
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/file/FileService.java

@@ -93,4 +93,11 @@ public interface FileService {
      */
     byte[] getFileContentByPath(String path) throws Exception;
 
+    /**
+     * 获取文件
+     *
+     * @param path 文件路径
+     */
+    FileDO getFileByPath(String path) throws Exception;
+
 }

+ 5 - 0
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/file/FileServiceImpl.java

@@ -169,4 +169,9 @@ public class FileServiceImpl implements FileService {
         return client.getContent(path);
     }
 
+    @Override
+    public FileDO getFileByPath(String path) throws Exception {
+        return fileMapper.selectOneByPath(path);
+    }
+
 }

+ 2 - 1
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/pay/PayService.java

@@ -1,5 +1,6 @@
 package cn.start.tz.module.infra.service.pay;
 
+import cn.start.tz.module.infra.api.pay.dto.TaskChargeDTO;
 import cn.start.tz.module.infra.api.pay.dto.TaskInfoDTO;
 
 public interface PayService {
@@ -12,5 +13,5 @@ public interface PayService {
     void pushOrder(TaskInfoDTO infoDTO);
 
 
-
+    String payOrder(TaskChargeDTO reqDTO);
 }

+ 34 - 0
tz-module-infra/tz-module-infra-biz/src/main/java/cn/start/tz/module/infra/service/pay/PayServiceImpl.java

@@ -2,6 +2,8 @@ package cn.start.tz.module.infra.service.pay;
 
 import cn.start.tz.framework.common.util.json.JsonUtils;
 import cn.start.tz.module.infra.api.pay.dto.PayTokenRespDTO;
+import cn.start.tz.module.infra.api.pay.dto.TaskChargeDTO;
+import cn.start.tz.module.infra.api.pay.dto.TaskChargeRespDTO;
 import cn.start.tz.module.infra.api.pay.dto.TaskInfoDTO;
 import cn.start.tz.module.infra.enums.RedisKeyConstants;
 import cn.start.tz.module.infra.framework.pay.config.PayConfig;
@@ -60,6 +62,38 @@ public class PayServiceImpl implements PayService {
 
     }
 
+    @Override
+    public String payOrder(TaskChargeDTO reqDTO) {
+        String token = getToken();
+        if (StringUtils.isBlank(token)) {
+            log.warn("获取token失败");
+            return null;
+        }
+        okhttp3.Request request = new Request.Builder()
+                .url(payConfig.getPayHost() + "/report/api/charge/taskfeeqrcode.json?access_token=" + token)
+                .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"),
+                        JsonUtils.toJsonString(reqDTO)))
+                .build();
+        okhttp3.OkHttpClient client = new OkHttpClient();
+        try (Response response = client.newCall(request).execute()) {
+            if (response.isSuccessful()) {
+                String body = null;
+                if (response.body() != null) {
+                    body = response.body().string();
+                }
+                log.info("Response: " + body);
+
+                TaskChargeRespDTO taskChargeRespDTO = objectMapper.readValue(body, TaskChargeRespDTO.class);
+                return taskChargeRespDTO.getData();
+            } else {
+                log.info("Request failed: " + response.code());
+            }
+        } catch (IOException e) {
+            log.error("请求错误", e);
+        }
+        return null;
+    }
+
     private String getToken() {
         String token = stringRedisTemplate.opsForValue().get(RedisKeyConstants.TOKEN_KEY);
         if (StringUtils.isNotBlank(token)) {

+ 26 - 24
tz-module-infra/tz-module-infra-biz/src/main/resources/application-local.yaml

@@ -3,10 +3,9 @@
 spring:
   cloud:
     nacos:
-#      server-addr: 127.0.0.1:8848 # Nacos 服务器地址
-      server-addr: 192.168.0.53:8848 # Nacos 服务器地址
-      username: nacos # Nacos 账号
-      password: nacos # Nacos 密码
+      server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+      username: # Nacos 账号
+      password: # Nacos 密码
       discovery: # 【配置中心】配置项
         namespace: dev # 命名空间。这里使用 dev 开发环境
         group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
@@ -30,9 +29,9 @@ spring:
   datasource:
     druid: # Druid 【监控】相关的全局配置
       web-stat-filter:
-        enabled: true
+        enabled: false
       stat-view-servlet:
-        enabled: true
+        enabled: false
         allow: # 设置白名单,不填则允许所有访问
         url-pattern: /druid/*
         login-username: # 控制台管理用户名和密码
@@ -62,26 +61,26 @@ spring:
       primary: master
       datasource:
         master:
-          url: jdbc:dm://192.168.0.66:5236?schema=TZ_CLOUD_DEV
+          url: jdbc:dm://data.hofo.co:5236?schema=TZ_CLOUD_DEV
           username: SYSDBA
-          password: Bowin123
+          password: Dexdev2025
         #          username: sa # SQL Server 连接的示例
         #          password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例
         #          username: SYSDBA # DM 连接的示例
         #          password: SYSDBA # DM 连接的示例
         slave: # 模拟从库,可根据自己需要修改
           lazy: true # 开启懒加载,保证启动速度
-          url: jdbc:dm://192.168.0.66:5236?schema=TZ_CLOUD_DEV
+          url: jdbc:dm://data.hofo.co:5236?schema=TZ_CLOUD_DEV
           username: SYSDBA
-          password: Bowin123
+          password: Dexdev2025
 
   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
   data:
     redis:
-      host: 192.168.0.79 # 地址
+      host: data.hofo.co # 地址
       port: 6379 # 端口
-      database: 5 # 数据库索引
-      password: H3bowin # 密码,建议生产环境开启
+      database: 10 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
 
 --- #################### MQ 消息队列相关配置 ####################
 
@@ -89,16 +88,16 @@ spring:
 rocketmq:
   name-server: data.hofo.co:9876 # RocketMQ Namesrv
 
-spring:
-  # RabbitMQ 配置项,对应 RabbitProperties 配置类
-  rabbitmq:
-    host: 127.0.0.1 # RabbitMQ 服务的地址
-    port: 5672 # RabbitMQ 服务的端口
-    username: guest # RabbitMQ 服务的账号
-    password: guest # RabbitMQ 服务的密码
-  # Kafka 配置项,对应 KafkaProperties 配置类
-  kafka:
-    bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
+#spring:
+#  # RabbitMQ 配置项,对应 RabbitProperties 配置类
+#  rabbitmq:
+#    host: 127.0.0.1 # RabbitMQ 服务的地址
+#    port: 5672 # RabbitMQ 服务的端口
+#    username: guest # RabbitMQ 服务的账号
+#    password: guest # RabbitMQ 服务的密码
+#  # Kafka 配置项,对应 KafkaProperties 配置类
+#  kafka:
+#    bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
 
 --- #################### 定时任务相关配置 ####################
 xxl:
@@ -154,4 +153,7 @@ tz:
     mock-enable: true
   access-log: # 访问日志的配置项
     enable: false
-  encryption: your-base64-encoded-aes256-key-here
+  encryption: your-base64-encoded-aes256-key-here
+
+sign:
+  server-url: http://192.168.18.223:8080/tosignserver/

+ 1 - 1
tz-module-infra/tz-module-infra-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,stage,prod,hst,shd,default">
+    <springProfile name="dev,test,stage,prod,default">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 1 - 0
tz-module-laboratory/tz-module-laboratory-api/src/main/java/cn/start/tz/module/laboratory/enums/CnasTypeEnums.java

@@ -10,6 +10,7 @@ public enum CnasTypeEnums {
     SYS("1", "实验室CNAS"),
     YJJG("2",  "检验机构CNAS"),
     WU("3",  "无"),
+    LHBSZ("4",  "ILAC-MRA/CNAS 联合标识章"),
 
     ;
 

+ 9 - 0
tz-module-laboratory/tz-module-laboratory-api/src/main/java/cn/start/tz/module/laboratory/enums/ErrorCodeConstants.java

@@ -5,6 +5,15 @@ package cn.start.tz.module.laboratory.enums;// TODO 待办:请将下面的错
 import cn.start.tz.framework.common.exception.ErrorCode;
 
 public interface ErrorCodeConstants{
+    ErrorCode DEVICE_PROJECT_PARAM_LIST_EMPTY   = new ErrorCode(101008, "设备项目参数列表为空");
+    ErrorCode DEVICE_PROJECT_NAME_EMPTY   = new ErrorCode(101007, "项目名称为空");
+    ErrorCode DEVICE_PROJECT_PARAM_EMPTY   = new ErrorCode(101006, "设备项目参数为空");
+    ErrorCode DEVICE_CODE_LIST_EMPTY   = new ErrorCode(101005, "设备代码列表为空");
+    ErrorCode DEVICE_CODE_LEVEL1_REQUIRED   = new ErrorCode(101004, "必须包含一级设备");
+    ErrorCode DEVICE_CODE_TYPE_ERROR  = new ErrorCode(101004, "设备代码类型错误");
+    ErrorCode DEVICE_PROJECT_PARAM_NOT_EXISTS = new ErrorCode(101003, "设备项目参数不存在");
+    ErrorCode DEVICE_PRODUCT_NOT_EXISTS = new ErrorCode(101002, "设备产品不存在");
+    ErrorCode DEVICE_CODE_NOT_EXISTS = new ErrorCode(101001, "设备代码不存在");
     ErrorCode READ_CONFIRM_NOT_EXISTS = new ErrorCode(100030 , "已读确认不存在");
     ErrorCode ANNOUNCEMENT_NOT_EXISTS = new ErrorCode(100031, "公告不存在");
     ErrorCode SAMPLE_NOT_EXISTS = new ErrorCode(1006, "实验室-样品管理不存在");

+ 3 - 1
tz-module-laboratory/tz-module-laboratory-api/src/main/java/cn/start/tz/module/laboratory/enums/RedisKeyEnums.java

@@ -2,7 +2,9 @@ package cn.start.tz.module.laboratory.enums;
 
 public enum RedisKeyEnums {
 
-    BUSINESS_ACCEPTANCE_NO("Business_Acceptance_no", "业务受理流水号生成");
+    BUSINESS_ACCEPTANCE_NO("Business_Acceptance_no", "业务受理流水号生成"),
+
+    SERVICE_ACCEPTANCE_NO("Service_Acceptance_no", "服务单流水号生成");
 
 
     /**

+ 2 - 2
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/bo/SampleBO.java

@@ -38,7 +38,7 @@ public class SampleBO {
     /**
      * 抽样基数
      */
-    private Integer samplingBase;
+    private String samplingBase;
 
     /**
      * 样品编号
@@ -48,7 +48,7 @@ public class SampleBO {
     /**
      * 样品数量
      */
-    private Integer sampleNum;
+    private String sampleNum;
 
     /**
      * 批号

+ 3 - 3
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/archive/ArchiveController.java

@@ -31,7 +31,7 @@ public class ArchiveController {
 
     @GetMapping("/archivePage")
     @Operation(summary = "获得报告归档分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:archive:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:archive:query')")
     public CommonResult<PageResult<ReportArchiveRespVO>> archivePage(@Valid ReportArchivePageReqVO pageReqVO) {
         PageResult<ReportArchiveRespVO> pageResult = taskRelationService.archivePage(pageReqVO);
         return success(pageResult);
@@ -39,7 +39,7 @@ public class ArchiveController {
 
     @PutMapping("/sendRegister")
     @Operation(summary = "寄送登记")
-    @PreAuthorize("@ss.hasPermission('laboratory:archive:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:archive:update')")
     public CommonResult<Boolean> sendRegister(@Valid @RequestBody ReportSendRegisterReqVO reqVO) {
         Boolean aBoolean = taskRelationService.sendRegister(reqVO);
         return success(aBoolean);
@@ -62,7 +62,7 @@ public class ArchiveController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出实验室-归档报告 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:archive:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:archive:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportArchiveExcel(@Valid ReportArchivePageReqVO pageReqVO,
                                    HttpServletResponse response) throws IOException {

+ 17 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/basevo/DeleteReqVO.java

@@ -0,0 +1,17 @@
+package cn.start.tz.module.laboratory.controller.admin.basevo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.NonNull;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - 批量删除 Request VO")
+@Data
+public class DeleteReqVO {
+
+    @Schema(description = "id")
+    @NonNull
+    private List<String> ids;
+}

+ 8 - 8
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/BusinessAcceptanceController.java

@@ -35,14 +35,14 @@ public class BusinessAcceptanceController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室-业务受理")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:create')")
     public CommonResult<String> createBusinessAcceptance(@Valid @RequestBody BusinessAcceptanceSaveReqVO createReqVO) {
         return success(businessAcceptanceService.createBusinessAcceptance(createReqVO));
     }
 
     @PostMapping("/temporarilyStore")
     @Operation(summary = "业务受理暂存")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:temporarilyStore')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:update')")
     public CommonResult<String> temporarilyStore(@Valid @RequestBody BusinessAcceptanceTemporarilyStoreReqVO temporarilyStoreReqVO) {
         return success(businessAcceptanceService.temporarilyStore(temporarilyStoreReqVO));
     }
@@ -57,7 +57,7 @@ public class BusinessAcceptanceController {
 
     @PostMapping("/update")
     @Operation(summary = "更新实验室-业务受理")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:update')")
     public CommonResult<Boolean> updateBusinessAcceptance(@Valid @RequestBody BusinessAcceptanceSaveReqVO updateReqVO) throws Exception {
         businessAcceptanceService.updateBusinessAcceptance(updateReqVO);
         return success(true);
@@ -65,7 +65,7 @@ public class BusinessAcceptanceController {
 
     @PutMapping("/updateStatus")
     @Operation(summary = "更新实验室-业务受理状态")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:updateStatus')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:update')")
     public CommonResult<Boolean> updateStatus(@Valid @RequestBody BusinessAcceptanceSaveStatusReqVO updateReqVO) {
         businessAcceptanceService.updateStatus(updateReqVO);
         return success(true);
@@ -74,7 +74,7 @@ public class BusinessAcceptanceController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室-业务受理")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:delete')")
     public CommonResult<Boolean> deleteBusinessAcceptance(@RequestParam("id") String id) {
         businessAcceptanceService.deleteBusinessAcceptance(id);
         return success(true);
@@ -83,7 +83,7 @@ public class BusinessAcceptanceController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室-业务受理")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:query')")
     public CommonResult<BusinessAcceptanceResultVo> getBusinessAcceptance(@RequestParam("id") String id) {
         BusinessAcceptanceResultVo businessAcceptance = businessAcceptanceService.getBusinessAcceptance(id);
         return success(businessAcceptance);
@@ -91,7 +91,7 @@ public class BusinessAcceptanceController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室-业务受理分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:query')")
     public CommonResult<PageResult<BusinessAcceptanceRespVO>> getBusinessAcceptancePage(@Valid BusinessAcceptancePageReqVO pageReqVO) {
         PageResult<BusinessAcceptanceRespVO> pageResult = businessAcceptanceService.getBusinessAcceptancePage(pageReqVO);
         return success(pageResult);
@@ -99,7 +99,7 @@ public class BusinessAcceptanceController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出实验室-业务受理 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportBusinessAcceptanceExcel(@Valid BusinessAcceptancePageReqVO pageReqVO,
                                               HttpServletResponse response) throws IOException {

+ 13 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/vo/BusinessAcceptanceRespVO.java

@@ -489,6 +489,19 @@ public class BusinessAcceptanceRespVO {
     @Schema(description = "工程名称")
     private String constructionName;
 
+    /**
+     * 检验费用修改原因
+     */
+    @Schema(description = "检验费用修改原因")
+    private String costModifyReason;
+
+    /**
+     * 是否线下报告  0否  1是
+     *
+     */
+    @Schema(description = "是否线下报告  0否  1是")
+    private String isOfflineReport;
+
 
 
 }

+ 14 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/vo/BusinessAcceptanceSaveReqVO.java

@@ -404,4 +404,18 @@ public class BusinessAcceptanceSaveReqVO {
      */
     @Schema(description = "工程名称")
     private String constructionName;
+
+    /**
+     * 检验费用修改原因
+     */
+    @Schema(description = "检验费用修改原因")
+    private String costModifyReason;
+
+    /**
+     * 是否线下报告  0否  1是
+     *
+     */
+    @Schema(description = "是否线下报告  0否  1是")
+    private String isOfflineReport;
+
 }

+ 67 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptance/vo/BusinessAcceptanceTemporarilyStoreReqVO.java

@@ -306,4 +306,71 @@ public class BusinessAcceptanceTemporarilyStoreReqVO {
      */
     @Schema(description = "受理单标准类型: 0产品标准 1方法标准")
     private String standardType;
+
+    /**
+     * 检验费用修改原因
+     */
+    @Schema(description = "检验费用修改原因")
+    private String costModifyReason;
+
+    /**
+     * cma类型
+     */
+    @Schema(description = "cma类型")
+    private String cmaType;
+
+    /**
+     * cnas类型
+     */
+    @Schema(description = "cnas类型")
+    private String cnasType;
+
+    /**
+     * 委托单位统一社会信用代码
+     */
+    @Schema(description = "委托单位统一社会信用代码")
+    private String socialCreditCode;
+
+    /**
+     * 使用单位
+     */
+    @Schema(description = "使用单位id")
+    private String useUnitId;
+
+    /**
+     * 使用单位名称
+     */
+    @Schema(description = "使用单位名称")
+    private String useUnitName;
+    /**
+     * 使用单位统一社会信用代码
+     */
+    @Schema(description = "使用单位统一社会信用代码")
+    private String useUnitSocialCreditCode;
+
+    /**
+     * 使用单位联系人
+     */
+    @Schema(description = "使用单位联系人")
+    private String useUnitContacts;
+
+    /**
+     * 使用单位联系电话
+     */
+    @Schema(description = "使用单位联系电话")
+    private String useUnitPhone;
+
+    /**
+     * 工程名称
+     */
+    @Schema(description = "工程名称")
+    private String constructionName;
+
+    /**
+     * 是否线下报告  0否  1是
+     *
+     */
+    @Schema(description = "是否线下报告  0否  1是")
+    private String isOfflineReport;
+
 }

+ 3 - 3
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businessacceptancecirculationrecord/BusinessAcceptanceCirculationRecordController.java

@@ -41,7 +41,7 @@ public class BusinessAcceptanceCirculationRecordController {
     @GetMapping("/get")
     @Operation(summary = "获得业务受理流转记录")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance-circulation-record:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance-circulation-record:query')")
     public CommonResult<BusinessAcceptanceCirculationRecordRespVO> getBusinessAcceptanceCirculationRecord(@RequestParam("id") String id) {
         BusinessAcceptanceCirculationRecordDO businessAcceptanceCirculationRecord = businessAcceptanceCirculationRecordService.getBusinessAcceptanceCirculationRecord(id);
         return success(BeanUtils.toBean(businessAcceptanceCirculationRecord, BusinessAcceptanceCirculationRecordRespVO.class));
@@ -49,7 +49,7 @@ public class BusinessAcceptanceCirculationRecordController {
 
     @GetMapping("/page")
     @Operation(summary = "获得业务受理流转记录分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance-circulation-record:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance-circulation-record:query')")
     public CommonResult<PageResult<BusinessAcceptanceCirculationRecordRespVO>> getBusinessAcceptanceCirculationRecordPage(@Valid BusinessAcceptanceCirculationRecordPageReqVO pageReqVO) {
         PageResult<BusinessAcceptanceCirculationRecordDO> pageResult = businessAcceptanceCirculationRecordService.getBusinessAcceptanceCirculationRecordPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, BusinessAcceptanceCirculationRecordRespVO.class));
@@ -57,7 +57,7 @@ public class BusinessAcceptanceCirculationRecordController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出业务受理流转记录 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance-circulation-record:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-acceptance-circulation-record:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportBusinessAcceptanceCirculationRecordExcel(@Valid BusinessAcceptanceCirculationRecordPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {

+ 6 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesscheckproject/vo/BusinessCheckProjectRespVO.java

@@ -189,5 +189,11 @@ public class BusinessCheckProjectRespVO {
      */
     private String checkStatus;
 
+    @Schema(description = "验收标准")
+    private String acceptanceCriteria;
+
+    @Schema(description = "规格/型号", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String specification;
+
 
 }

+ 6 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesscheckproject/vo/BusinessCheckProjectSaveReqVO.java

@@ -102,5 +102,11 @@ public class BusinessCheckProjectSaveReqVO {
     @Schema(description = "样品名称")
     private String sampleName;
 
+    @Schema(description = "验收标准")
+    private String acceptanceCriteria;
+
+    @Schema(description = "规格/型号", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String specification;
+
 
 }

+ 5 - 5
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/BusinessSampleNewController.java

@@ -40,14 +40,14 @@ public class BusinessSampleNewController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室-受理单关联样品")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:create')")
     public CommonResult<String> createBusinessSampleNew(@Valid @RequestBody BusinessSampleNewSaveReqVO createReqVO) {
         return success(businessSampleNewService.createBusinessSampleNew(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新实验室-受理单关联样品")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:update')")
     public CommonResult<Boolean> updateBusinessSampleNew(@Valid @RequestBody BusinessSampleNewSaveReqVO updateReqVO) {
         businessSampleNewService.updateBusinessSampleNew(updateReqVO);
         return success(true);
@@ -56,7 +56,7 @@ public class BusinessSampleNewController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室-受理单关联样品")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:delete')")
     public CommonResult<Boolean> deleteBusinessSampleNew(@RequestParam("id") String id) {
         businessSampleNewService.deleteBusinessSampleNew(id);
         return success(true);
@@ -65,7 +65,7 @@ public class BusinessSampleNewController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室-受理单关联样品")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:query')")
     public CommonResult<BusinessSampleNewRespVO> getBusinessSampleNew(@RequestParam("id") String id) {
         BusinessSampleNewDO businessSampleNew = businessSampleNewService.getBusinessSampleNew(id);
         return success(BeanUtils.toBean(businessSampleNew, BusinessSampleNewRespVO.class));
@@ -73,7 +73,7 @@ public class BusinessSampleNewController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室-受理单关联样品分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:business-sample-new:query')")
     public CommonResult<PageResult<BusinessSampleNewRespVO>> getBusinessSampleNewPage(@Valid BusinessSampleNewPageReqVO pageReqVO) {
         PageResult<BusinessSampleNewDO> pageResult = businessSampleNewService.getBusinessSampleNewPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, BusinessSampleNewRespVO.class));

+ 2 - 2
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/vo/BusinessSampleNewPageReqVO.java

@@ -137,7 +137,7 @@ public class BusinessSampleNewPageReqVO extends PageParam {
     private String produceUnit;
 
     @Schema(description = "样品数量")
-    private Integer sampleNum;
+    private String sampleNum;
 
     @Schema(description = "样品状况")
     private String sampleCondition;
@@ -146,7 +146,7 @@ public class BusinessSampleNewPageReqVO extends PageParam {
     private String projectNo;
 
     @Schema(description = "抽样基数")
-    private Integer samplingBase;
+    private String samplingBase;
 
     @Schema(description = "是否新样品(0=是,1=否)")
     private Boolean isNew;

+ 2 - 2
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/vo/BusinessSampleNewRespVO.java

@@ -171,7 +171,7 @@ public class BusinessSampleNewRespVO {
 
     @Schema(description = "样品数量")
     @ExcelProperty("样品数量")
-    private Integer sampleNum;
+    private String sampleNum;
 
     @Schema(description = "样品状况")
     @ExcelProperty("样品状况")
@@ -183,7 +183,7 @@ public class BusinessSampleNewRespVO {
 
     @Schema(description = "抽样基数")
     @ExcelProperty("抽样基数")
-    private Integer samplingBase;
+    private String samplingBase;
 
     @Schema(description = "是否新样品(0=是,1=否)")
     @ExcelProperty("是否新样品(0=是,1=否)")

+ 4 - 2
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/businesssamplenew/vo/BusinessSampleNewSaveReqVO.java

@@ -140,7 +140,7 @@ public class BusinessSampleNewSaveReqVO {
     private String produceUnit;
 
     @Schema(description = "样品数量")
-    private Integer sampleNum;
+    private String sampleNum;
 
     @Schema(description = "样品状况")
     private String sampleCondition;
@@ -149,7 +149,7 @@ public class BusinessSampleNewSaveReqVO {
     private String projectNo;
 
     @Schema(description = "抽样基数")
-    private Integer samplingBase;
+    private String samplingBase;
 
     @Schema(description = "是否新样品(0=是,1=否)")
     private Boolean isNew;
@@ -159,4 +159,6 @@ public class BusinessSampleNewSaveReqVO {
 
     private List<BusinessSampleNewSaveReqVO> sumProject;
 
+
+
 }

+ 109 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/DeviceCodeController.java

@@ -0,0 +1,109 @@
+package cn.start.tz.module.laboratory.controller.admin.devicecode;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.start.tz.framework.common.pojo.PageParam;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
+
+import cn.start.tz.framework.excel.core.util.ExcelUtils;
+
+import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.start.tz.module.laboratory.controller.admin.devicecode.vo.*;
+import cn.start.tz.module.laboratory.dal.dataobject.devicecode.DeviceCodeDO;
+import cn.start.tz.module.laboratory.service.devicecode.DeviceCodeService;
+
+@Tag(name = "管理后台 - 设备代码")
+@RestController
+@RequestMapping("/laboratory/device-code")
+@Validated
+public class DeviceCodeController {
+
+    @Resource
+    private DeviceCodeService deviceCodeService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建设备代码")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:create')")
+    public CommonResult<Integer> createDeviceCode(@Valid @RequestBody DeviceCodeSaveReqVO createReqVO) {
+        return success(deviceCodeService.createDeviceCode(createReqVO));
+    }
+
+    @PostMapping("/batch-create")
+    @Operation(summary = "批量创建设备代码")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:create')")
+    public CommonResult<Boolean> batchCreateDeviceCode(@Valid @RequestBody List<DeviceCodeBatchCreateReqVO> createReqVOList) {
+        deviceCodeService.batchCreateDeviceCode(createReqVOList);
+        return success(true);
+    }
+    @PutMapping("/update")
+    @Operation(summary = "更新设备代码")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:update')")
+    public CommonResult<Boolean> updateDeviceCode(@Valid @RequestBody DeviceCodeSaveReqVO updateReqVO) {
+        deviceCodeService.updateDeviceCode(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除设备代码")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:delete')")
+    public CommonResult<Boolean> deleteDeviceCode(@RequestParam("id") Integer id) {
+        deviceCodeService.deleteDeviceCode(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得设备代码")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:query')")
+    public CommonResult<DeviceCodeRespVO> getDeviceCode(@RequestParam("id") Integer id) {
+        DeviceCodeDO deviceCode = deviceCodeService.getDeviceCode(id);
+        return success(BeanUtils.toBean(deviceCode, DeviceCodeRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得设备代码分页")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:query')")
+    public CommonResult<PageResult<DeviceCodeRespVO>> getDeviceCodePage(@Valid DeviceCodePageReqVO pageReqVO) {
+        PageResult<DeviceCodeDO> pageResult = deviceCodeService.getDeviceCodePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DeviceCodeRespVO.class));
+    }
+
+    @GetMapping("/tree")
+    @Operation(summary = "获得设备代码树")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:query')")
+    public CommonResult<List<DeviceCodeTreeRespVO>> getDeviceCodeTree() {
+        List<DeviceCodeTreeRespVO> tree = deviceCodeService.getDeviceCodeTree();
+        return success(tree);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出设备代码 Excel")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-code:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDeviceCodeExcel(@Valid DeviceCodePageReqVO pageReqVO,
+                                      HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DeviceCodeDO> list = deviceCodeService.getDeviceCodePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "设备代码.xls", "数据", DeviceCodeRespVO.class,
+                BeanUtils.toBean(list, DeviceCodeRespVO.class));
+    }
+}

+ 23 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeBatchCreateReqVO.java

@@ -0,0 +1,23 @@
+package cn.start.tz.module.laboratory.controller.admin.devicecode.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import java.util.List;
+
+@Schema(description = "管理后台 - 设备代码批量创建 Request VO")
+@Data
+public class DeviceCodeBatchCreateReqVO {
+
+    @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "设备名称不能为空")
+    private String deviceName;
+
+    @Schema(description = "设备类型", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "设备类型不能为空")
+    private Integer deviceType;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+}

+ 37 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodePageReqVO.java

@@ -0,0 +1,37 @@
+package cn.start.tz.module.laboratory.controller.admin.devicecode.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.start.tz.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.start.tz.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 设备代码分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DeviceCodePageReqVO extends PageParam {
+
+    @Schema(description = "主键ID", example = "8573")
+    private Integer id;
+
+    @Schema(description = "父级ID", example = "23256")
+    private Integer parentId;
+
+    @Schema(description = "设备名称", example = "张三")
+    private String deviceName;
+
+    @Schema(description = "设备类型", example = "1")
+    private Integer deviceType;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 39 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeRespVO.java

@@ -0,0 +1,39 @@
+package cn.start.tz.module.laboratory.controller.admin.devicecode.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 DeviceCodeRespVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8573")
+    @ExcelProperty("主键ID")
+    private Integer id;
+
+    @Schema(description = "父级ID", example = "23256")
+    @ExcelProperty("父级ID")
+    private Integer parentId;
+
+    @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+    @ExcelProperty("设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备类型", example = "1")
+    @ExcelProperty("设备类型")
+    private Integer deviceType;
+
+    @Schema(description = "设备代码")
+    @ExcelProperty("设备代码")
+    private String deviceCode;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 28 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeSaveReqVO.java

@@ -0,0 +1,28 @@
+package cn.start.tz.module.laboratory.controller.admin.devicecode.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 DeviceCodeSaveReqVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8573")
+    private Integer id;
+
+    @Schema(description = "父级ID", example = "23256")
+    private Integer parentId;
+
+    @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+    @NotEmpty(message = "设备名称不能为空")
+    private String deviceName;
+
+    @Schema(description = "设备类型", example = "1")
+    private Integer deviceType;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+}

+ 37 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/devicecode/vo/DeviceCodeTreeRespVO.java

@@ -0,0 +1,37 @@
+package cn.start.tz.module.laboratory.controller.admin.devicecode.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import java.util.List;
+
+@Schema(description = "管理后台 - 设备代码树节点 Response VO")
+@Data
+public class DeviceCodeTreeRespVO {
+
+    @Schema(description = "节点标签(设备名称)", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String label;
+
+    @Schema(description = "节点值(设备ID)", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Integer value;
+
+    @Schema(description = "设备类型", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Integer deviceType;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+    @Schema(description = "父级id")
+    private Integer parentId;
+
+    @Schema(description = "子节点列表")
+    private List<DeviceCodeTreeRespVO> children;
+
+    public DeviceCodeTreeRespVO() {}
+
+    public DeviceCodeTreeRespVO(String label, Integer value, Integer deviceType, String deviceCode,Integer parentId) {
+        this.label = label;
+        this.value = value;
+        this.deviceType = deviceType;
+        this.deviceCode = deviceCode;
+        this.parentId = parentId;
+    }
+}

+ 110 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/DeviceProductController.java

@@ -0,0 +1,110 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceproduct;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.start.tz.framework.common.pojo.PageParam;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
+
+import cn.start.tz.framework.excel.core.util.ExcelUtils;
+
+import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.start.tz.module.laboratory.controller.admin.deviceproduct.vo.*;
+import cn.start.tz.module.laboratory.dal.dataobject.deviceproduct.DeviceProductDO;
+import cn.start.tz.module.laboratory.service.deviceproduct.DeviceProductService;
+
+@Tag(name = "管理后台 - 设备产品")
+@RestController
+@RequestMapping("/laboratory/device-product")
+@Validated
+public class DeviceProductController {
+
+    @Resource
+    private DeviceProductService deviceProductService;
+
+    @PutMapping("/update-with-params")
+    @Operation(summary = "更新设备产品及其参数")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:update')")
+    public CommonResult<Boolean> updateDeviceProductWithParams(@Valid @RequestBody DeviceProductSaveReqVO updateReqVO) {
+        deviceProductService.updateDeviceProductWithParams(updateReqVO);
+        return success(true);
+    }
+
+    @PostMapping("/create-with-params")
+    @Operation(summary = "创建设备产品及其参数")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:create')")
+    public CommonResult<Integer> createDeviceProductWithParams(@Valid @RequestBody DeviceProductSaveReqVO createReqVO) {
+        return success(deviceProductService.createDeviceProductWithParams(createReqVO));
+    }
+
+    @PostMapping("/create")
+    @Operation(summary = "创建设备产品")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:create')")
+    public CommonResult<Integer> createDeviceProduct(@Valid @RequestBody DeviceProductSaveReqVO createReqVO) {
+        return success(deviceProductService.createDeviceProduct(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新设备产品")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:update')")
+    public CommonResult<Boolean> updateDeviceProduct(@Valid @RequestBody DeviceProductSaveReqVO updateReqVO) {
+        deviceProductService.updateDeviceProduct(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除设备产品")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:delete')")
+    public CommonResult<Boolean> deleteDeviceProduct(@RequestParam("id") Integer id) {
+        deviceProductService.deleteDeviceProduct(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得设备产品")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:query')")
+    public CommonResult<DeviceProductRespVO> getDeviceProduct(@RequestParam("id") Integer id) {
+        DeviceProductDO deviceProduct = deviceProductService.getDeviceProduct(id);
+        return success(BeanUtils.toBean(deviceProduct, DeviceProductRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得设备产品分页")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:query')")
+    public CommonResult<PageResult<DeviceProductRespVO>> getDeviceProductPage(@Valid DeviceProductPageReqVO pageReqVO) {
+        PageResult<DeviceProductDO> pageResult = deviceProductService.getDeviceProductPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DeviceProductRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出设备产品 Excel")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-product:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDeviceProductExcel(@Valid DeviceProductPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DeviceProductDO> list = deviceProductService.getDeviceProductPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "设备产品.xls", "数据", DeviceProductRespVO.class,
+                        BeanUtils.toBean(list, DeviceProductRespVO.class));
+    }
+
+}

+ 42 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/vo/DeviceProductPageReqVO.java

@@ -0,0 +1,42 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceproduct.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.start.tz.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.start.tz.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 设备产品分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DeviceProductPageReqVO extends PageParam {
+
+    @Schema(description = "主键ID", example = "20758")
+    private Integer id;
+
+    @Schema(description = "产品名称", example = "王五")
+    private String productName;
+
+    @Schema(description = "设备类型ID", example = "17235")
+    private Integer deviceTypeId;
+
+    @Schema(description = "设备类别ID", example = "26801")
+    private Integer deviceCategoryId;
+
+    @Schema(description = "设备品种ID", example = "31842")
+    private Integer deviceVarietyId;
+
+    @Schema(description = "设备项目参数ID", example = "16702")
+    private Integer deviceProjectParamId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "设备代码id", example = "16703")
+    private Integer codeId;
+}

+ 73 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/vo/DeviceProductRespVO.java

@@ -0,0 +1,73 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceproduct.vo;
+
+import cn.start.tz.module.laboratory.dal.dataobject.deviceprojectparam.DeviceProjectParamDO;
+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 DeviceProductRespVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20758")
+    @ExcelProperty("主键ID")
+    private Integer id;
+
+    @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @ExcelProperty("产品名称")
+    private String productName;
+
+    @Schema(description = "设备类型ID", example = "17235")
+    @ExcelProperty("设备类型ID")
+    private Integer deviceTypeId;
+
+    @Schema(description = "设备类型名称", example = "传感器")
+    @ExcelProperty("设备类型名称")
+    private String deviceTypeName;
+
+    @Schema(description = "设备类型代码", example = "SENSOR")
+    @ExcelProperty("设备类型代码")
+    private String deviceTypeCode;
+
+    @Schema(description = "设备类别ID", example = "26801")
+    @ExcelProperty("设备类别ID")
+    private Integer deviceCategoryId;
+
+    @Schema(description = "设备类别名称", example = "温度传感器")
+    @ExcelProperty("设备类别名称")
+    private String deviceCategoryName;
+
+    @Schema(description = "设备类别代码", example = "TEMP_SENSOR")
+    @ExcelProperty("设备类别代码")
+    private String deviceCategoryCode;
+
+    @Schema(description = "设备品种ID", example = "31842")
+    @ExcelProperty("设备品种ID")
+    private Integer deviceVarietyId;
+
+    @Schema(description = "设备品种名称", example = "数字温度传感器")
+    @ExcelProperty("设备品种名称")
+    private String deviceVarietyName;
+
+    @Schema(description = "设备品种代码", example = "DIGITAL_TEMP")
+    @ExcelProperty("设备品种代码")
+    private String deviceVarietyCode;
+
+    @Schema(description = "设备项目参数ID", example = "16702")
+    @ExcelProperty("设备项目参数ID")
+    private Integer deviceProjectParamId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "设备参数列表")
+    @ExcelProperty("设备参数列表")
+    private List<DeviceProjectParamDO> deviceProjectParamList;
+
+    @Schema(description = "设备代码id")
+    private Integer codeId; }

+ 37 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceproduct/vo/DeviceProductSaveReqVO.java

@@ -0,0 +1,37 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceproduct.vo;
+
+import cn.start.tz.module.laboratory.controller.admin.deviceprojectparam.vo.DeviceProjectParamSaveReqVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 设备产品新增/修改 Request VO")
+@Data
+public class DeviceProductSaveReqVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20758")
+    private Integer id;
+
+    @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @NotEmpty(message = "产品名称不能为空")
+    private String productName;
+
+    @Schema(description = "设备类型ID", example = "17235")
+    private Integer deviceTypeId;
+
+    @Schema(description = "设备类别ID", example = "26801")
+    private Integer deviceCategoryId;
+
+    @Schema(description = "设备品种ID", example = "31842")
+    private Integer deviceVarietyId;
+
+    @Schema(description = "设备项目参数ID", example = "16702")
+    private Integer deviceProjectParamId;
+
+    @Schema(description = "设备参数列表", example = "16704")
+    private List<DeviceProjectParamSaveReqVO> deviceProjectParamSaveReqVOList;
+
+    @Schema(description = "设备代码id", example = "16703")
+    private Integer codeId;
+}

+ 118 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/DeviceProjectParamController.java

@@ -0,0 +1,118 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceprojectparam;
+
+import cn.start.tz.framework.common.exception.ErrorCode;
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.start.tz.framework.common.pojo.PageParam;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+
+import static cn.start.tz.framework.common.pojo.CommonResult.error;
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
+
+import cn.start.tz.framework.excel.core.util.ExcelUtils;
+
+import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.start.tz.module.laboratory.controller.admin.deviceprojectparam.vo.*;
+import cn.start.tz.module.laboratory.dal.dataobject.deviceprojectparam.DeviceProjectParamDO;
+import cn.start.tz.module.laboratory.service.deviceprojectparam.DeviceProjectParamService;
+
+@Tag(name = "管理后台 - 设备项目参数")
+@RestController
+@RequestMapping("/laboratory/device-project-param")
+@Validated
+public class DeviceProjectParamController {
+
+    @Resource
+    private DeviceProjectParamService deviceProjectParamService;
+
+    @PostMapping("/batch-create")
+    @Operation(summary = "批量创建设备项目参数")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-project-param:create')")
+    public CommonResult<Boolean> batchCreateDeviceProjectParam(@Valid @RequestBody List<DeviceProjectParamSaveReqVO> createReqVOList) {
+        if (createReqVOList.isEmpty()){
+            return error(new ErrorCode(101009, " 设备产品Id不能为空"));
+        }
+        for (DeviceProjectParamSaveReqVO deviceProjectParamSaveReqVO : createReqVOList) {
+            if (deviceProjectParamSaveReqVO.getDeviceProductId() == null){
+                return error(new ErrorCode(101009, " 设备产品Id不能为空"));
+            }
+        }
+        deviceProjectParamService.batchCreateDeviceProjectParam(createReqVOList);
+        return success(true);
+    }
+
+
+    @PostMapping("/create")
+    @Operation(summary = "创建设备项目参数")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-project-param:create')")
+    public CommonResult<Integer> createDeviceProjectParam(@Valid @RequestBody DeviceProjectParamSaveReqVO createReqVO) {
+        if (createReqVO.getDeviceProductId() == null){
+            return error(new ErrorCode(101009, " 设备产品Id不能为空"));
+        }
+        return success(deviceProjectParamService.createDeviceProjectParam(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新设备项目参数")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-project-param:update')")
+    public CommonResult<Boolean> updateDeviceProjectParam(@Valid @RequestBody DeviceProjectParamSaveReqVO updateReqVO) {
+        deviceProjectParamService.updateDeviceProjectParam(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除设备项目参数")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('laboratory:device-project-param:delete')")
+    public CommonResult<Boolean> deleteDeviceProjectParam(@RequestParam("id") Integer id) {
+        deviceProjectParamService.deleteDeviceProjectParam(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得设备项目参数")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-project-param:query')")
+    public CommonResult<DeviceProjectParamRespVO> getDeviceProjectParam(@RequestParam("id") Integer id) {
+        DeviceProjectParamDO deviceProjectParam = deviceProjectParamService.getDeviceProjectParam(id);
+        return success(BeanUtils.toBean(deviceProjectParam, DeviceProjectParamRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得设备项目参数分页")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-project-param:query')")
+    public CommonResult<PageResult<DeviceProjectParamRespVO>> getDeviceProjectParamPage(@Valid DeviceProjectParamPageReqVO pageReqVO) {
+        PageResult<DeviceProjectParamDO> pageResult = deviceProjectParamService.getDeviceProjectParamPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DeviceProjectParamRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出设备项目参数 Excel")
+    @PreAuthorize("@ss.hasPermission('laboratory:device-project-param:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDeviceProjectParamExcel(@Valid DeviceProjectParamPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DeviceProjectParamDO> list = deviceProjectParamService.getDeviceProjectParamPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "设备项目参数.xls", "数据", DeviceProjectParamRespVO.class,
+                        BeanUtils.toBean(list, DeviceProjectParamRespVO.class));
+    }
+
+}

+ 37 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/vo/DeviceProjectParamPageReqVO.java

@@ -0,0 +1,37 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceprojectparam.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.start.tz.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.start.tz.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 设备项目参数分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DeviceProjectParamPageReqVO extends PageParam {
+
+    @Schema(description = "主键ID", example = "6525")
+    private Integer id;
+
+    @Schema(description = "项目名称", example = "李四")
+    private String projectName;
+
+    @Schema(description = "设备单位")
+    private String deviceUnit;
+
+    @Schema(description = "设备数值")
+    private String deviceValue;
+
+    @Schema(description = "设备产品ID", example = "30985")
+    private Integer deviceProductId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 39 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/vo/DeviceProjectParamRespVO.java

@@ -0,0 +1,39 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceprojectparam.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 DeviceProjectParamRespVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6525")
+    @ExcelProperty("主键ID")
+    private Integer id;
+
+    @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @ExcelProperty("项目名称")
+    private String projectName;
+
+    @Schema(description = "设备单位")
+    @ExcelProperty("设备单位")
+    private String deviceUnit;
+
+    @Schema(description = "设备数值")
+    @ExcelProperty("设备数值")
+    private String deviceValue;
+
+    @Schema(description = "设备产品ID", example = "30985")
+    @ExcelProperty("设备产品ID")
+    private Integer deviceProductId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 28 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/deviceprojectparam/vo/DeviceProjectParamSaveReqVO.java

@@ -0,0 +1,28 @@
+package cn.start.tz.module.laboratory.controller.admin.deviceprojectparam.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 DeviceProjectParamSaveReqVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6525")
+    private Integer id;
+
+    @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "项目名称不能为空")
+    private String projectName;
+
+    @Schema(description = "设备单位")
+    private String deviceUnit;
+
+    @Schema(description = "设备数值")
+    private String deviceValue;
+
+    @Schema(description = "设备产品ID", example = "30985")
+    private Integer deviceProductId;
+
+}

+ 6 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/inspectionentry/vo/InspectionEntryItemRespVO.java

@@ -173,6 +173,12 @@ public class InspectionEntryItemRespVO {
     @Schema(description = "样品名称")
     private String sampleName;
 
+    @Schema(description = "验收标准")
+    private String acceptanceCriteria;
+
+    @Schema(description = "规格/型号")
+    private String specification;
+
 
 
 }

+ 6 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/inspectionentry/vo/InspectionEntryItemSaveReqVO.java

@@ -148,4 +148,10 @@ public class InspectionEntryItemSaveReqVO {
     @Schema(description = "样品名称")
     private String sampleName;
 
+    @Schema(description = "验收标准")
+    private String acceptanceCriteria;
+
+    @Schema(description = "规格/型号")
+    private String specification;
+
 }

+ 2 - 2
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/itemrequirementmodify/ItemRequirementModifyController.java

@@ -41,7 +41,7 @@ public class ItemRequirementModifyController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室报告项目技术要求修改记录")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:item-requirement-modify:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:item-requirement-modify:query')")
     public CommonResult<ItemRequirementModifyRespVO> getItemRequirementModify(@RequestParam("id") String id) {
         ItemRequirementModifyDO itemRequirementModify = itemRequirementModifyService.getItemRequirementModify(id);
         return success(BeanUtils.toBean(itemRequirementModify, ItemRequirementModifyRespVO.class));
@@ -49,7 +49,7 @@ public class ItemRequirementModifyController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室报告项目技术要求修改记录分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:item-requirement-modify:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:item-requirement-modify:query')")
     public CommonResult<PageResult<ItemRequirementModifyRespVO>> getItemRequirementModifyPage(@Valid ItemRequirementModifyPageReqVO pageReqVO) {
         PageResult<ItemRequirementModifyDO> pageResult = itemRequirementModifyService.getItemRequirementModifyPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, ItemRequirementModifyRespVO.class));

+ 2 - 1
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/reportpreparation/vo/ReportPreparationDelRespVO.java

@@ -3,6 +3,7 @@ package cn.start.tz.module.laboratory.controller.admin.reportpreparation.vo;
 import cn.start.tz.module.laboratory.controller.admin.businessacceptance.vo.BusinessAcceptanceRespVO;
 import cn.start.tz.module.laboratory.controller.admin.businesssamplenew.vo.BusinessSampleNewRespVO;
 import cn.start.tz.module.laboratory.controller.admin.inspectionentry.vo.InspectionEntryItemRespVO;
+import cn.start.tz.module.laboratory.controller.admin.sample.vo.SampleRespVO;
 import cn.start.tz.module.laboratory.controller.admin.taskrelation.vo.TaskRelationRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -17,7 +18,7 @@ public class ReportPreparationDelRespVO extends TaskRelationRespVO {
     private BusinessAcceptanceRespVO businessAcceptanceRespVO;
 
     @Schema(description = "样品列表")
-    private List<BusinessSampleNewRespVO> sampleRespVOList;
+    private List<SampleRespVO> sampleRespVOList;
 
     @Schema(description = "检验项目列表")
     private List<InspectionEntryItemRespVO> itemRespVOList;

+ 3 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/reportratify/vo/ReportRatifyPageReqVO.java

@@ -42,6 +42,9 @@ public class ReportRatifyPageReqVO extends PageParam {
     @Schema(description = "受理人受理人名称")
     private String acceptedByName;
 
+    @Schema(description = "合同/协议编号")
+    private String contractNo;
+
     /**
      * 报告批准状态 0待编制 1已提交 2已回退
      */

+ 6 - 6
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/reportupdateapply/ReportUpdateApplyController.java

@@ -29,7 +29,7 @@ public class ReportUpdateApplyController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室检验报告-报告修改申请")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:delete')")
     public CommonResult<Boolean> deleteReportUpdateApply(@RequestParam("id") String id) {
         reportUpdateApplyService.deleteReportUpdateApply(id);
         return success(true);
@@ -38,7 +38,7 @@ public class ReportUpdateApplyController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室检验报告-报告修改申请")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:query')")
     public CommonResult<ReportUpdateApplyRespVO> getReportUpdateApply(@RequestParam("id") String id) {
         ReportUpdateApplyDO reportUpdateApply = reportUpdateApplyService.getReportUpdateApply(id);
         return success(BeanUtils.toBean(reportUpdateApply, ReportUpdateApplyRespVO.class));
@@ -46,7 +46,7 @@ public class ReportUpdateApplyController {
 
     @GetMapping("/approvalPage")
     @Operation(summary = "获得实验室检验报告-报告修改审批人分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:query')")
     public CommonResult<PageResult<ReportUpdateApplyRespVO>> approvalPage(@Valid ReportUpdateApplyPageReqVO pageReqVO) {
         PageResult<ReportUpdateApplyRespVO> pageResult = reportUpdateApplyService.approvalPage(pageReqVO);
         return success(pageResult);
@@ -54,7 +54,7 @@ public class ReportUpdateApplyController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室检验报告-报告修改申请人分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:query')")
     public CommonResult<PageResult<ReportUpdateApplyRespVO>> getReportUpdateApplyPage(@Valid ReportUpdateApplyPageReqVO pageReqVO) {
         PageResult<ReportUpdateApplyRespVO> pageResult = reportUpdateApplyService.getReportUpdateApplyPage(pageReqVO);
         return success(pageResult);
@@ -62,7 +62,7 @@ public class ReportUpdateApplyController {
 
     @PutMapping("/approve")
     @Operation(summary = "通过")
-    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:update')")
     public CommonResult<Boolean> approve(@Valid @RequestBody ReportUpdateApplyApproveReqVO reqVO) {
         Boolean approve = reportUpdateApplyService.approve(reqVO);
         return success(approve);
@@ -71,7 +71,7 @@ public class ReportUpdateApplyController {
 
     @PutMapping("/reject")
     @Operation(summary = "拒绝")
-    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:report-update-apply:update')")
     public CommonResult<Boolean> reject(@Valid @RequestBody ReportUpdateApplyRejectReqVO reqVO) {
         Boolean reject = reportUpdateApplyService.reject(reqVO.getIds(), reqVO.getRefuseReason());
         return success(reject);

+ 40 - 32
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sample/SampleController.java

@@ -1,33 +1,32 @@
 package cn.start.tz.module.laboratory.controller.admin.sample;
 
-import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-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.start.tz.framework.apilog.core.annotation.ApiAccessLog;
+import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageParam;
 import cn.start.tz.framework.common.pojo.PageResult;
-import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.util.object.BeanUtils;
-import static cn.start.tz.framework.common.pojo.CommonResult.success;
-
 import cn.start.tz.framework.excel.core.util.ExcelUtils;
-
-import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
-import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.*;
-
-import cn.start.tz.module.laboratory.controller.admin.sample.vo.*;
+import cn.start.tz.module.laboratory.controller.admin.basevo.DeleteReqVO;
+import cn.start.tz.module.laboratory.controller.admin.sample.vo.SampleExportVO;
+import cn.start.tz.module.laboratory.controller.admin.sample.vo.SamplePageReqVO;
+import cn.start.tz.module.laboratory.controller.admin.sample.vo.SampleRespVO;
+import cn.start.tz.module.laboratory.controller.admin.sample.vo.SampleSaveReqVO;
 import cn.start.tz.module.laboratory.dal.dataobject.sample.SampleDO;
 import cn.start.tz.module.laboratory.service.sample.SampleService;
+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.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
 
 @Tag(name = "管理后台 - 实验室-样品管理")
 @RestController
@@ -40,14 +39,14 @@ public class SampleController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室-样品管理")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:create')")
     public CommonResult<String> createSample(@Valid @RequestBody SampleSaveReqVO createReqVO) {
         return success(sampleService.createSample(createReqVO).getId());
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新实验室-样品管理")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:update')")
     public CommonResult<Boolean> updateSample(@Valid @RequestBody SampleSaveReqVO updateReqVO) {
         sampleService.updateSample(updateReqVO);
         return success(true);
@@ -56,7 +55,7 @@ public class SampleController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室-样品管理")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:sample:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:delete')")
     public CommonResult<Boolean> deleteSample(@RequestParam("id") String id) {
         sampleService.deleteSample(id);
         return success(true);
@@ -65,15 +64,15 @@ public class SampleController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室-样品管理")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample:query')")
-    public CommonResult<SampleRespVO> getSample(@RequestParam("id") String id) {
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:query')")
+    public CommonResult<SampleRespVO> getSample(@RequestParam("id") String id) throws Exception {
         SampleRespVO respVO = sampleService.getSampleRespVO(id);
         return success(respVO);
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室-样品管理分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:query')")
     public CommonResult<PageResult<SampleRespVO>> getSamplePage(@Valid SamplePageReqVO pageReqVO) {
         PageResult<SampleRespVO> pageResult = sampleService.getSamplePageAndParent(pageReqVO);
         return success(pageResult);
@@ -82,7 +81,7 @@ public class SampleController {
     @GetMapping("/getChildrenList")
     @Operation(summary = "获得实验室-样品管理")
     @Parameter(name = "parentId", description = "父级编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:query')")
     public CommonResult<List<SampleRespVO>> getChildrenList(@RequestParam("parentId") String parentId) {
         List<SampleRespVO> respVOList = sampleService.getParentRespVO(parentId);
         return success(respVOList);
@@ -90,17 +89,26 @@ public class SampleController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出实验室-样品管理 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportSampleExcel(@Valid SamplePageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
+                                  HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<SampleDO> list = sampleService.getSamplePage(pageReqVO).getList();
         // 导出 Excel
         ExcelUtils.write(response, "实验室-样品管理.xls", "数据", SampleExportVO.class,
-                        BeanUtils.toBean(list, SampleExportVO.class));
+                BeanUtils.toBean(list, SampleExportVO.class));
     }
 
+    @PutMapping("/hideSample")
+    @Operation(summary = "隐藏样品信息")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample:update')")
+    public CommonResult<Boolean> hideSample(@Valid @RequestBody DeleteReqVO reqVO) {
+        sampleService.updateSampleShowList(reqVO.getIds());
+        return success(true);
+    }
+
+
     // TODO: 2025/9/2 待完善样品登记打印功能
 
 

+ 193 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sample/vo/SampleRespVO.java

@@ -1,11 +1,14 @@
 package cn.start.tz.module.laboratory.controller.admin.sample.vo;
 
+import cn.start.tz.module.infra.api.file.dto.FileRepsDTO;
 import cn.start.tz.module.laboratory.dal.dataobject.sample.SampleDO;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
+
+import java.time.LocalDate;
 import java.util.*;
 import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
@@ -211,4 +214,194 @@ public class SampleRespVO {
      */
     @Schema(description = "是否分样 0否  1是")
     private String isDivision;
+
+
+    /**
+     * 抽样地点
+     */
+    @Schema(description = "抽样地点")
+    private String samplingLocation;
+
+    /**
+     * 抽样日期
+     */
+    @Schema(description = "抽样日期")
+    private LocalDate samplingDate;
+
+    /**
+     * 抽样记录表url
+     */
+    @Schema(description = "抽样记录表url")
+    private String samplingUrl;
+
+    /**
+     * 样品报告号
+     */
+    @Schema(description = "样品报告号")
+    private String sampleReportNo;
+
+    @Schema(description = "常规存储(0否 1是)")
+    private String isNormal;
+
+    @Schema(description = "避光存储(0否 1是)")
+    private String isLightAvoid;
+
+    @Schema(description = "温度")
+    private String temperature;
+
+    @Schema(description = "相对湿度")
+    private String relativeHumidity;
+
+    @Schema(description = "其它要求")
+    private String otherDesc;
+
+    /**
+     * 封样日期
+     */
+    @Schema(description = "封样日期")
+    private LocalDate sealedSampleDate;
+
+    /**
+     * 残余样品处理
+     */
+    @Schema(description = "残余样品处理")
+    private String residualSampleProcessing;
+
+    /**
+     * 封样单位
+     */
+    @Schema(description = "封样单位")
+    private String sealedSampleUnit;
+
+    /**
+     * 样品异常原因
+     */
+    @Schema(description = "样品异常原因")
+    private String abnormalReason;;
+
+    /**
+     * 抽样数量
+     */
+    @Schema(description = "抽样数量")
+    private String samplingNum;
+
+    @Schema(description = "抽样记录单url详情")
+    private FileRepsDTO samplingUrlDTO;
+
+
+    /**
+     * 制造单位id
+     */
+    @Schema(description = "制造单位id")
+    private String manufactureUnitId;
+
+    /**
+     * 制造单位名称
+     */
+    @Schema(description = "制造单位名称")
+    private String manufactureUnitName;
+
+    /**
+     * 制造单位住所
+     */
+    @Schema(description = "制造单位住所")
+    private String manufactureUnitResidence;
+
+    /**
+     * 制造单位地址
+     */
+    @Schema(description = "制造单位地址")
+    private String manufactureUnitAddress;
+
+    /**
+     * 制造单位电话
+     */
+    @Schema(description = "制造单位电话")
+    private String manufactureUnitPhone;
+
+    /**
+     * 制造单位联系人
+     */
+    @Schema(description = "制造单位联系人")
+    private String manufactureUnitContact;
+
+    /**
+     * 制造单位邮政编码
+     */
+    @Schema(description = "制造单位邮政编码")
+    private String manufactureUnitPost;
+
+    /**
+     * 制造单位联系人邮箱
+     */
+    @Schema(description = "制造单位联系人邮箱")
+    private String manufactureUnitMail;
+
+    /**
+     * 制造标准
+     */
+    @Schema(description = "制造标准")
+    private String manufactureStandard;
+
+    /**
+     * 抽样方式
+     */
+    @Schema(description = "抽样方式")
+    private String samplingWay;
+
+    /**
+     * 封样方式
+     */
+    @Schema(description = "封样方式")
+    private String sealedWay;
+
+    /**
+     * 送达地点
+     */
+    @Schema(description = "送达地点")
+    private String deliveryLocation;
+
+    /**
+     * 设计总图图号
+     */
+    @Schema(description = "设计总图图号")
+    private String generalDesignNo;
+
+    /**
+     * 设计日期
+     */
+    @Schema(description = "设计日期")
+    private LocalDate designDate;
+
+    /**
+     * 制造单位代表
+     */
+    @Schema(description = "制造单位代表")
+    private String manufactureUnitRepresent;
+
+    /**
+     * 委托日期
+     */
+    @Schema(description = "委托日期")
+    private LocalDate entrustDate;
+
+    /**
+     * 封样地点
+     */
+    @Schema(description = "封样地点")
+    private String sealedLocation;
+
+    /**
+     * 封样人
+     */
+    @Schema(description = "封样人")
+    private String sampleSealer;
+
+    /**
+     * 封样人
+     */
+    @Schema(description = "封样人名称")
+    private String sampleSealerName;
+
+
 }

+ 193 - 5
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sample/vo/SampleSaveReqVO.java

@@ -1,12 +1,11 @@
 package cn.start.tz.module.laboratory.controller.admin.sample.vo;
 
-import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.fastjson.JSONArray;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import jakarta.validation.constraints.*;
-import org.springframework.format.annotation.DateTimeFormat;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 @Schema(description = "管理后台 - 实验室-样品管理新增/修改 Request VO")
@@ -161,4 +160,193 @@ public class SampleSaveReqVO {
      */
     @Schema(description = "样品类别")
     private String category;
+
+    /**
+     * 抽样地点
+     */
+    @Schema(description = "抽样地点")
+    private String samplingLocation;
+
+    /**
+     * 抽样日期
+     */
+    @Schema(description = "抽样日期")
+    private LocalDate samplingDate;
+
+    /**
+     * 抽样记录表url
+     */
+    @Schema(description = "抽样记录表url")
+    private String samplingUrl;
+
+    /**
+     * 样品报告号
+     */
+    @Schema(description = "样品报告号")
+    private String sampleReportNo;
+
+    @Schema(description = "常规存储(0否 1是)")
+    private String isNormal;
+
+    @Schema(description = "避光存储(0否 1是)")
+    private String isLightAvoid;
+
+    @Schema(description = "温度")
+    private String temperature;
+
+    @Schema(description = "相对湿度")
+    private String relativeHumidity;
+
+    @Schema(description = "其它要求")
+    private String otherDesc;
+
+    /**
+     * 封样日期
+     */
+    @Schema(description = "封样日期")
+    private LocalDate sealedSampleDate;
+
+    /**
+     * 残余样品处理
+     */
+    @Schema(description = "残余样品处理")
+    private String residualSampleProcessing;
+
+    /**
+     * 封样单位
+     */
+    @Schema(description = "封样单位")
+    private String sealedSampleUnit;
+
+
+    /**
+     * 样品异常原因
+     */
+    @Schema(description = "样品异常原因")
+    private String abnormalReason;;
+
+
+    /**
+     * 抽样数量
+     */
+    @Schema(description = "抽样数量")
+    private String samplingNum;
+
+
+    /**
+     * 制造单位id
+     */
+    @Schema(description = "制造单位id")
+    private String manufactureUnitId;
+
+    /**
+     * 制造单位名称
+     */
+    @Schema(description = "制造单位名称")
+    private String manufactureUnitName;
+
+    /**
+     * 制造单位住所
+     */
+    @Schema(description = "制造单位住所")
+    private String manufactureUnitResidence;
+
+    /**
+     * 制造单位地址
+     */
+    @Schema(description = "制造单位地址")
+    private String manufactureUnitAddress;
+
+    /**
+     * 制造单位电话
+     */
+    @Schema(description = "制造单位电话")
+    private String manufactureUnitPhone;
+
+    /**
+     * 制造单位联系人
+     */
+    @Schema(description = "制造单位联系人")
+    private String manufactureUnitContact;
+
+    /**
+     * 制造单位邮政编码
+     */
+    @Schema(description = "制造单位邮政编码")
+    private String manufactureUnitPost;
+
+    /**
+     * 制造单位联系人邮箱
+     */
+    @Schema(description = "制造单位联系人邮箱")
+    private String manufactureUnitMail;
+
+    /**
+     * 制造标准
+     */
+    @Schema(description = "制造标准")
+    private String manufactureStandard;
+
+    /**
+     * 抽样方式
+     */
+    @Schema(description = "抽样方式")
+    private String samplingWay;
+
+    /**
+     * 封样方式
+     */
+    @Schema(description = "封样方式")
+    private String sealedWay;
+
+    /**
+     * 送达地点
+     */
+    @Schema(description = "送达地点")
+    private String deliveryLocation;
+
+    /**
+     * 设计总图图号
+     */
+    @Schema(description = "设计总图图号")
+    private String generalDesignNo;
+
+    /**
+     * 设计日期
+     */
+    @Schema(description = "设计日期")
+    private LocalDate designDate;
+
+    /**
+     * 制造单位代表
+     */
+    @Schema(description = "制造单位代表")
+    private String manufactureUnitRepresent;
+
+    /**
+     * 委托日期
+     */
+    @Schema(description = "委托日期")
+    private LocalDate entrustDate;
+
+    /**
+     * 封样地点
+     */
+    @Schema(description = "封样地点")
+    private String sealedLocation;
+
+    /**
+     * 封样人
+     */
+    @Schema(description = "封样人")
+    private String sampleSealer;
+
+    /**
+     * 封样人
+     */
+    @Schema(description = "封样人名称")
+    private String sampleSealerName;
+
+
+
 }

+ 6 - 6
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/samplecirculationrecord/SampleCirculationRecordController.java

@@ -40,14 +40,14 @@ public class SampleCirculationRecordController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室-样品流转登记")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:create')")
     public CommonResult<String> createSampleCirculationRecord(@Valid @RequestBody SampleCirculationRecordSaveReqVO createReqVO) {
         return success(sampleCirculationRecordService.createSampleCirculationRecord(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新实验室-样品流转登记")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:update')")
     public CommonResult<Boolean> updateSampleCirculationRecord(@Valid @RequestBody SampleCirculationRecordSaveReqVO updateReqVO) {
         sampleCirculationRecordService.updateSampleCirculationRecord(updateReqVO);
         return success(true);
@@ -56,7 +56,7 @@ public class SampleCirculationRecordController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室-样品流转登记")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:delete')")
     public CommonResult<Boolean> deleteSampleCirculationRecord(@RequestParam("id") String id) {
         sampleCirculationRecordService.deleteSampleCirculationRecord(id);
         return success(true);
@@ -65,7 +65,7 @@ public class SampleCirculationRecordController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室-样品流转登记")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:query')")
     public CommonResult<SampleCirculationRecordRespVO> getSampleCirculationRecord(@RequestParam("id") String id) {
         SampleCirculationRecordDO sampleCirculationRecord = sampleCirculationRecordService.getSampleCirculationRecord(id);
         return success(BeanUtils.toBean(sampleCirculationRecord, SampleCirculationRecordRespVO.class));
@@ -73,7 +73,7 @@ public class SampleCirculationRecordController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室-样品流转登记分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:query')")
     public CommonResult<PageResult<SampleCirculationRecordRespVO>> getSampleCirculationRecordPage(@Valid SampleCirculationRecordPageReqVO pageReqVO) {
         PageResult<SampleCirculationRecordDO> pageResult = sampleCirculationRecordService.getSampleCirculationRecordPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, SampleCirculationRecordRespVO.class));
@@ -81,7 +81,7 @@ public class SampleCirculationRecordController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出实验室-样品流转登记 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-circulation-record:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportSampleCirculationRecordExcel(@Valid SampleCirculationRecordPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {

+ 6 - 6
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/sampleoperaterecord/SampleOperateRecordController.java

@@ -40,14 +40,14 @@ public class SampleOperateRecordController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室-样品操作记录")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:create')")
     public CommonResult<String> createSampleOperateRecord(@Valid @RequestBody SampleOperateRecordSaveReqVO createReqVO) {
         return success(sampleOperateRecordService.createSampleOperateRecord(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新实验室-样品操作记录")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:update')")
     public CommonResult<Boolean> updateSampleOperateRecord(@Valid @RequestBody SampleOperateRecordSaveReqVO updateReqVO) {
         sampleOperateRecordService.updateSampleOperateRecord(updateReqVO);
         return success(true);
@@ -56,7 +56,7 @@ public class SampleOperateRecordController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室-样品操作记录")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:delete')")
     public CommonResult<Boolean> deleteSampleOperateRecord(@RequestParam("id") String id) {
         sampleOperateRecordService.deleteSampleOperateRecord(id);
         return success(true);
@@ -65,7 +65,7 @@ public class SampleOperateRecordController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室-样品操作记录")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:query')")
     public CommonResult<SampleOperateRecordRespVO> getSampleOperateRecord(@RequestParam("id") String id) {
         SampleOperateRecordDO sampleOperateRecord = sampleOperateRecordService.getSampleOperateRecord(id);
         return success(BeanUtils.toBean(sampleOperateRecord, SampleOperateRecordRespVO.class));
@@ -73,7 +73,7 @@ public class SampleOperateRecordController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室-样品操作记录分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:query')")
     public CommonResult<PageResult<SampleOperateRecordRespVO>> getSampleOperateRecordPage(@Valid SampleOperateRecordPageReqVO pageReqVO) {
         PageResult<SampleOperateRecordDO> pageResult = sampleOperateRecordService.getSampleOperateRecordPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, SampleOperateRecordRespVO.class));
@@ -81,7 +81,7 @@ public class SampleOperateRecordController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出实验室-样品操作记录 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:sample-operate-record:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportSampleOperateRecordExcel(@Valid SampleOperateRecordPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {

+ 4 - 4
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskfile/TaskFileController.java

@@ -40,14 +40,14 @@ public class TaskFileController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室任务单文件库")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-file:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-file:create')")
     public CommonResult<String> createTaskFile(@Valid @RequestBody TaskFileSaveReqVO createReqVO) {
         return success(taskFileService.createTaskFile(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新实验室任务单文件库")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-file:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-file:update')")
     public CommonResult<Boolean> updateTaskFile(@Valid @RequestBody TaskFileSaveReqVO updateReqVO) {
         taskFileService.updateTaskFile(updateReqVO);
         return success(true);
@@ -64,7 +64,7 @@ public class TaskFileController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室任务单文件库")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-file:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-file:query')")
     public CommonResult<TaskFileRespVO> getTaskFile(@RequestParam("id") String id) {
         TaskFileDO taskFile = taskFileService.getTaskFile(id);
         return success(BeanUtils.toBean(taskFile, TaskFileRespVO.class));
@@ -72,7 +72,7 @@ public class TaskFileController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室任务单文件库分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-file:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-file:query')")
     public CommonResult<PageResult<TaskFileRespVO>> getTaskFilePage(@Valid TaskFilePageReqVO pageReqVO) {
         PageResult<TaskFileDO> pageResult = taskFileService.getTaskFilePage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, TaskFileRespVO.class));

+ 5 - 5
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/TaskRelationController.java

@@ -27,7 +27,7 @@ public class TaskRelationController {
 
     @PutMapping("/update")
     @Operation(summary = "更新业务受理任务")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:update')")
     public CommonResult<Boolean> updateTaskRelation(@Valid @RequestBody TaskRelationSaveReqVO updateReqVO) {
         taskRelationService.updateTaskRelation(updateReqVO);
         return success(true);
@@ -35,7 +35,7 @@ public class TaskRelationController {
 
     @PutMapping("/updateBath")
     @Operation(summary = "更新业务受理任务")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:update')")
     public CommonResult<Boolean> updateBathTaskRelation(@Valid @RequestBody TaskRelationSaveReqUpdateBathVO updateReqVO) {
         taskRelationService.updateBathTaskRelation(updateReqVO);
         return success(true);
@@ -44,7 +44,7 @@ public class TaskRelationController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除业务受理任务")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:delete')")
     public CommonResult<Boolean> deleteTaskRelation(@RequestParam("id") String id) {
         taskRelationService.deleteTaskRelation(id);
         return success(true);
@@ -53,7 +53,7 @@ public class TaskRelationController {
     @GetMapping("/get")
     @Operation(summary = "获得业务受理任务")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:query')")
     public CommonResult<TaskRelationItemReqVo> getTaskRelation(@RequestParam("id") String id) {
         TaskRelationItemReqVo taskRelation = taskRelationService.getTaskRelation(id);
         return success(taskRelation);
@@ -61,7 +61,7 @@ public class TaskRelationController {
 
     @GetMapping("/page")
     @Operation(summary = "获得业务受理任务分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-relation:query')")
     public CommonResult<PageResult<TaskRelationRespVO>> getTaskRelationPage(@Valid TaskRelationPageReqVO pageReqVO) {
         PageResult<TaskRelationRespVO> pageResult = taskRelationService.getTaskRelationPage(pageReqVO);
         return success(pageResult);

+ 11 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/vo/TaskProjectRespVO.java

@@ -113,4 +113,15 @@ public class TaskProjectRespVO {
     @Schema(description = "样品名称")
     private String sampleName;
 
+    @Schema(description = "验收标准")
+    private String acceptanceCriteria;
+
+    @Schema(description = "规格/型号")
+    private String specification;
+
+    /**
+     * 样品报告号(新样品编号)
+     */
+    private String sampleReportNo;
+
 }

+ 11 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/vo/TaskProjectSaveReqVO.java

@@ -84,4 +84,15 @@ public class TaskProjectSaveReqVO {
     @Schema(description = "任务单子项目列表")
     private List<TaskSubProjectSaveReqVO> taskSubProjectSaveReqVOList;
 
+    @Schema(description = "验收标准")
+    private String acceptanceCriteria;
+
+    @Schema(description = "规格/型号")
+    private String specification;
+
+    /**
+     * 样品报告号(新样品编号)
+     */
+    private String sampleReportNo;
+
 }

+ 2 - 1
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/taskrelation/vo/TaskRelationItemReqVo.java

@@ -2,6 +2,7 @@ package cn.start.tz.module.laboratory.controller.admin.taskrelation.vo;
 
 import cn.start.tz.module.laboratory.controller.admin.businesscheckproject.vo.BusinessCheckProjectRespVO;
 import cn.start.tz.module.laboratory.controller.admin.businesssamplenew.vo.BusinessSampleNewRespVO;
+import cn.start.tz.module.laboratory.controller.admin.sample.vo.SampleRespVO;
 import cn.start.tz.module.laboratory.controller.admin.taskfile.vo.TaskFileRespVO;
 import cn.start.tz.module.laboratory.dal.dataobject.businessacceptance.BusinessAcceptanceDO;
 import cn.start.tz.module.laboratory.dal.dataobject.taskrelation.TaskRelationDO;
@@ -22,7 +23,7 @@ public class TaskRelationItemReqVo extends TaskRelationDO {
     private BusinessAcceptanceDO businessAcceptanceDO;
 
     @Schema(description = "样品列表")
-    private List<BusinessSampleNewRespVO> businessSampleSaveReqVOS;
+    private List<SampleRespVO> businessSampleSaveReqVOS;
 
     @Schema(description = "检验项目列表")
     private List<TaskProjectRespVO> taskProjectRespVOList;

+ 6 - 6
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/tasksubproject/TaskSubProjectController.java

@@ -39,14 +39,14 @@ public class TaskSubProjectController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室任务单子项目")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:create')")
     public CommonResult<String> createTaskSubProject(@Valid @RequestBody TaskSubProjectSaveReqVO createReqVO) {
         return success(taskSubProjectService.createTaskSubProject(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新实验室任务单子项目")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:update')")
     public CommonResult<Boolean> updateTaskSubProject(@Valid @RequestBody TaskSubProjectSaveReqVO updateReqVO) {
         taskSubProjectService.updateTaskSubProject(updateReqVO);
         return success(true);
@@ -55,7 +55,7 @@ public class TaskSubProjectController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室任务单子项目")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:delete')")
     public CommonResult<Boolean> deleteTaskSubProject(@RequestParam("id") String id) {
         taskSubProjectService.deleteTaskSubProject(id);
         return success(true);
@@ -64,7 +64,7 @@ public class TaskSubProjectController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室任务单子项目")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:query')")
     public CommonResult<TaskSubProjectRespVO> getTaskSubProject(@RequestParam("id") String id) {
         TaskSubProjectDO taskSubProject = taskSubProjectService.getTaskSubProject(id);
         return success(BeanUtils.toBean(taskSubProject, TaskSubProjectRespVO.class));
@@ -72,7 +72,7 @@ public class TaskSubProjectController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室任务单子项目分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:query')")
     public CommonResult<PageResult<TaskSubProjectRespVO>> getTaskSubProjectPage(@Valid TaskSubProjectPageReqVO pageReqVO) {
         PageResult<TaskSubProjectDO> pageResult = taskSubProjectService.getTaskSubProjectPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, TaskSubProjectRespVO.class));
@@ -80,7 +80,7 @@ public class TaskSubProjectController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出实验室任务单子项目 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-project:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportTaskSubProjectExcel(@Valid TaskSubProjectPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {

+ 6 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/tasksubproject/vo/TaskSubProjectSaveReqVO.java

@@ -42,6 +42,12 @@ public class TaskSubProjectSaveReqVO {
     @Schema(description = "原子项目id", requiredMode = Schema.RequiredMode.REQUIRED)
     private String itemId;
 
+    /**
+     * 样品报告号(新样品编号)
+     */
+    @Schema(description = "样品报告号(新样品编号)", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String sampleReportNo;
+
 
 
 }

+ 6 - 6
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/tasksubreport/TaskSubReportController.java

@@ -40,14 +40,14 @@ public class TaskSubReportController {
 
     @PostMapping("/create")
     @Operation(summary = "创建实验室任务单子报告")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:create')")
     public CommonResult<String> createTaskSubReport(@Valid @RequestBody TaskSubReportSaveReqVO createReqVO) {
         return success(taskSubReportService.createTaskSubReport(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新实验室任务单子报告")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:update')")
     public CommonResult<Boolean> updateTaskSubReport(@Valid @RequestBody TaskSubReportSaveReqVO updateReqVO) {
         taskSubReportService.updateTaskSubReport(updateReqVO);
         return success(true);
@@ -56,7 +56,7 @@ public class TaskSubReportController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除实验室任务单子报告")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:delete')")
     public CommonResult<Boolean> deleteTaskSubReport(@RequestParam("id") String id) {
         taskSubReportService.deleteTaskSubReport(id);
         return success(true);
@@ -65,7 +65,7 @@ public class TaskSubReportController {
     @GetMapping("/get")
     @Operation(summary = "获得实验室任务单子报告")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:query')")
     public CommonResult<TaskSubReportRespVO> getTaskSubReport(@RequestParam("id") String id) {
         TaskSubReportDO taskSubReport = taskSubReportService.getTaskSubReport(id);
         return success(BeanUtils.toBean(taskSubReport, TaskSubReportRespVO.class));
@@ -73,7 +73,7 @@ public class TaskSubReportController {
 
     @GetMapping("/page")
     @Operation(summary = "获得实验室任务单子报告分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:query')")
     public CommonResult<PageResult<TaskSubReportRespVO>> getTaskSubReportPage(@Valid TaskSubReportPageReqVO pageReqVO) {
         PageResult<TaskSubReportDO> pageResult = taskSubReportService.getTaskSubReportPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, TaskSubReportRespVO.class));
@@ -81,7 +81,7 @@ public class TaskSubReportController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出实验室任务单子报告 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:task-sub-report:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportTaskSubReportExcel(@Valid TaskSubReportPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {

+ 6 - 6
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/controller/admin/technologicalachievements/TechnologicalAchievementsController.java

@@ -41,7 +41,7 @@ public class TechnologicalAchievementsController {
 
     @PostMapping("/create")
     @Operation(summary = "创建科技成果")
-    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:create')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:create')")
     public CommonResult<String> createTechnologicalAchievements(@Valid @RequestBody TechnologicalAchievementsSaveReqVO createReqVO) {
         // 1. 校验专利号唯一性(Controller层校验)
         if (technologicalAchievementsService.isPatentNoExists(createReqVO.getPatentNo())) {
@@ -52,7 +52,7 @@ public class TechnologicalAchievementsController {
 
     @PutMapping("/update")
     @Operation(summary = "更新科技成果")
-    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:update')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:update')")
     public CommonResult<Boolean> updateTechnologicalAchievements(@Valid @RequestBody TechnologicalAchievementsSaveReqVO updateReqVO) {
         technologicalAchievementsService.updateTechnologicalAchievements(updateReqVO);
         return success(true);
@@ -61,7 +61,7 @@ public class TechnologicalAchievementsController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除科技成果")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:delete')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:delete')")
     public CommonResult<Boolean> deleteTechnologicalAchievements(@RequestParam("id") String id) {
         technologicalAchievementsService.deleteTechnologicalAchievements(id);
         return success(true);
@@ -70,7 +70,7 @@ public class TechnologicalAchievementsController {
     @GetMapping("/get")
     @Operation(summary = "获得科技成果")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:query')")
     public CommonResult<TechnologicalAchievementsRespVO> getTechnologicalAchievements(@RequestParam("id") String id) {
         TechnologicalAchievementsDO technologicalAchievements = technologicalAchievementsService.getTechnologicalAchievements(id);
         return success(BeanUtils.toBean(technologicalAchievements, TechnologicalAchievementsRespVO.class));
@@ -78,7 +78,7 @@ public class TechnologicalAchievementsController {
 
     @GetMapping("/page")
     @Operation(summary = "获得科技成果分页")
-    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:query')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:query')")
     public CommonResult<PageResult<TechnologicalAchievementsRespVO>> getTechnologicalAchievementsPage(@Valid TechnologicalAchievementsPageReqVO pageReqVO) {
         PageResult<TechnologicalAchievementsRespVO> pageResult = technologicalAchievementsService.getTechnologicalAchievementsPage(pageReqVO);
         return success(pageResult);
@@ -86,7 +86,7 @@ public class TechnologicalAchievementsController {
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出科技成果 Excel")
-    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:export')")
+//    @PreAuthorize("@ss.hasPermission('laboratory:technological-achievements:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportTechnologicalAchievementsExcel(@Valid TechnologicalAchievementsPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {

+ 10 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/businessacceptance/BusinessAcceptanceDO.java

@@ -506,4 +506,14 @@ public class BusinessAcceptanceDO extends BaseDO {
      */
     private String constructionName;
 
+    /**
+     * 检验费用修改原因
+     */
+    private String costModifyReason;
+
+    /**
+     * 是否线下报告  0否  1是
+     *
+     */
+    private String isOfflineReport;
 }

+ 7 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/businesscheckproject/BusinessCheckProjectDO.java

@@ -177,4 +177,11 @@ public class BusinessCheckProjectDO extends BaseDO {
     private String sampleName;
 
 
+    @Schema(description = "验收标准")
+    private String acceptanceCriteria;
+
+    @Schema(description = "规格/型号", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String specification;
+
+
 }

+ 2 - 2
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/businesssamplenew/BusinessSampleNewDO.java

@@ -185,7 +185,7 @@ public class BusinessSampleNewDO extends BaseDO {
     /**
      * 样品数量
      */
-    private Integer sampleNum;
+    private String sampleNum;
     /**
      * 样品状况
      */
@@ -197,7 +197,7 @@ public class BusinessSampleNewDO extends BaseDO {
     /**
      * 抽样基数
      */
-    private Integer samplingBase;
+    private String samplingBase;
     /**
      * 是否新样品(0=是,1=否)
      */

+ 60 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/devicecode/DeviceCodeDO.java

@@ -0,0 +1,60 @@
+// DeviceCodeDO.java 添加以下方法
+package cn.start.tz.module.laboratory.dal.dataobject.devicecode;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 设备代码 DO
+ *
+ * @author 特种管理员
+ */
+@TableName("laboratory_device_code")
+@KeySequence("laboratory_device_code_seq")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DeviceCodeDO extends BaseDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 父级ID
+     */
+    private Integer parentId;
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+    /**
+     * 设备类型
+     */
+    private Integer deviceType;
+    /**
+     * 设备代码
+     */
+    private String deviceCode;
+
+    // 添加树形结构字段(非数据库字段)
+    @TableField(exist = false)
+    private List<DeviceCodeDO> children;
+
+    /**
+     * 添加子节点
+     */
+    public void addChild(DeviceCodeDO child) {
+        if (children == null) {
+            children = new ArrayList<>();
+        }
+        children.add(child);
+    }
+}

+ 77 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/deviceproduct/DeviceProductDO.java

@@ -0,0 +1,77 @@
+package cn.start.tz.module.laboratory.dal.dataobject.deviceproduct;
+
+import cn.start.tz.module.laboratory.dal.dataobject.deviceprojectparam.DeviceProjectParamDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 设备产品 DO
+ *
+ * @author 特种管理员
+ */
+@TableName("laboratory_device_product")
+@KeySequence("laboratory_device_product_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DeviceProductDO extends BaseDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 设备类型ID
+     */
+    private Integer deviceTypeId;
+    /**
+     * 设备类别ID
+     */
+    private Integer deviceCategoryId;
+    /**
+     * 设备品种ID
+     */
+    private Integer deviceVarietyId;
+    /**
+     * 设备项目参数ID
+     */
+    private Integer deviceProjectParamId;
+
+    // 关联字段 - 非数据库字段
+    @TableField(exist = false)
+    private String deviceTypeName;
+
+    @TableField(exist = false)
+    private String deviceTypeCode;
+
+    @TableField(exist = false)
+    private String deviceCategoryName;
+
+    @TableField(exist = false)
+    private String deviceCategoryCode;
+
+    @TableField(exist = false)
+    private String deviceVarietyName;
+
+    @TableField(exist = false)
+    private String deviceVarietyCode;
+
+    @TableField(exist = false)
+    private List<DeviceProjectParamDO> deviceProjectParamList;
+
+    private Integer codeId;
+
+}

+ 0 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/dal/dataobject/deviceprojectparam/DeviceProjectParamDO.java


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.