From 426b962ef0c40ae856e06360a26c3fb121d0ff60 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期三, 03 九月 2025 11:22:02 +0800
Subject: [PATCH] art: 集成Swagger2

---
 src/main/java/com/lxzn/LxznSystemCollectApplication.java                                 |    6 
 src/main/java/com/lxzn/common/Result.java                                                |  176 ++++++++++++++++
 src/main/java/com/lxzn/modules/assembly2/service/impl/TcOpstateServiceImpl.java          |   22 ++
 src/main/java/com/lxzn/modules/assembly2/controller/AssemblyCollectionJobController.java |   28 ++
 src/main/java/com/lxzn/CodeGenerate.java                                                 |    4 
 src/main/java/com/lxzn/config/Swagger2Config.java                                        |  183 ++++++++++++++++
 pom.xml                                                                                  |   10 
 src/main/java/com/lxzn/modules/assembly2/service/ITcOpstateService.java                  |   16 +
 src/main/java/com/lxzn/modules/assembly2/entity/T020Boltcheck.java                       |   48 ++++
 src/main/java/com/lxzn/modules/assembly2/mapper/T020BoltcheckMapper.java                 |   16 +
 src/main/java/com/lxzn/modules/assembly2/service/IT020BoltcheckService.java              |   16 +
 src/main/java/com/lxzn/modules/assembly2/entity/TcOpstate.java                           |   32 ++
 src/main/java/com/lxzn/common/CommonConstant.java                                        |   28 ++
 src/main/java/com/lxzn/modules/assembly2/service/impl/T020BoltcheckServiceImpl.java      |   22 ++
 src/main/java/com/lxzn/modules/assembly2/mapper/xml/TcOpstateMapper.xml                  |    5 
 src/main/resources/application-dev.yml                                                   |   16 +
 src/main/java/com/lxzn/modules/assembly2/mapper/xml/T020BoltcheckMapper.xml              |    5 
 src/main/java/com/lxzn/modules/assembly2/mapper/TcOpstateMapper.java                     |   16 +
 18 files changed, 642 insertions(+), 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index a0d5715..5d0c957 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,9 @@
         <mybatis-plus.version>3.5.6</mybatis-plus.version>
         <dynamic-datasource-spring-boot-starter.version>3.2.0</dynamic-datasource-spring-boot-starter.version>
         <druid.version>1.1.22</druid.version>
+
+        <knife4j-spring-boot-starter.version>3.0.3</knife4j-spring-boot-starter.version>
+        <knife4j-spring-ui.version>2.0.9</knife4j-spring-ui.version>
     </properties>
 
     <dependencies>
@@ -73,6 +76,13 @@
             <scope>runtime</scope>
         </dependency>
 
+        <!-- knife4j -->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>${knife4j-spring-boot-starter.version}</version>
+        </dependency>
+
         <!-- Lombok -->
         <dependency>
             <groupId>org.projectlombok</groupId>
diff --git a/src/main/java/com/lxzn/CodeGenerate.java b/src/main/java/com/lxzn/CodeGenerate.java
index ca7fac5..fc32a6d 100644
--- a/src/main/java/com/lxzn/CodeGenerate.java
+++ b/src/main/java/com/lxzn/CodeGenerate.java
@@ -3,8 +3,6 @@
 import com.baomidou.mybatisplus.generator.FastAutoGenerator;
 import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
 
-import java.nio.file.Paths;
-
 public class CodeGenerate {
     public static void main(String[] args) {
         FastAutoGenerator.create("jdbc:sqlserver://127.0.0.1:1433;databaseName=XHJ-HUB3Line", "sa", "sa123")
@@ -22,7 +20,7 @@
                         .xml("mapper.xml")
                 )
                 .strategyConfig(builder -> builder
-                        .addInclude("T020_BoltCheck")
+                        .addInclude("TC_OPState")
                         .entityBuilder()
                         .enableLombok()
                 )
diff --git a/src/main/java/com/lxzn/LxznSystemCollectApplication.java b/src/main/java/com/lxzn/LxznSystemCollectApplication.java
index 9452417..3d65565 100644
--- a/src/main/java/com/lxzn/LxznSystemCollectApplication.java
+++ b/src/main/java/com/lxzn/LxznSystemCollectApplication.java
@@ -1,8 +1,10 @@
 package com.lxzn;
 
 import lombok.extern.slf4j.Slf4j;
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -16,7 +18,8 @@
 * 鎶ラ敊鎻愰啋: 鏈泦鎴恗ongo鎶ラ敊锛屽彲浠ユ墦寮�鍚姩绫讳笂闈㈢殑娉ㄩ噴 exclude={MongoAutoConfiguration.class}
 */
 @Slf4j
-@SpringBootApplication
+@SpringBootApplication(scanBasePackages = "com.lxzn", exclude = { DataSourceAutoConfiguration.class })
+@MapperScan(value={"com.lxzn.modules.**.mapper*"})
 public class LxznSystemCollectApplication extends SpringBootServletInitializer {
 
     @Override
@@ -33,6 +36,7 @@
         log.info("\n----------------------------------------------------------\n\t" +
                 "Application Lxzn System Collect Server is running! Access URLs:\n\t" +
                 "Local: \t\thttp://localhost:" + port + path + "/\n\t" +
+                "Swagger鏂囨。: \thttp://" + ip + ":" + port + path + "/doc.html\n" +
                 "----------------------------------------------------------");
 
     }
diff --git a/src/main/java/com/lxzn/common/CommonConstant.java b/src/main/java/com/lxzn/common/CommonConstant.java
new file mode 100644
index 0000000..8c1750d
--- /dev/null
+++ b/src/main/java/com/lxzn/common/CommonConstant.java
@@ -0,0 +1,28 @@
+package com.lxzn.common;
+
+/**
+ * @Description: 閫氱敤甯搁噺
+ * @author: jeecg-boot
+ */
+public interface CommonConstant {
+    /**
+     * {@code 500 Server Error} (HTTP/1.0 - RFC 1945)
+     */
+    Integer SC_INTERNAL_SERVER_ERROR_500 = 500;
+    /**
+     * {@code 200 OK} (HTTP/1.0 - RFC 1945)
+     */
+    Integer SC_OK_200 = 200;
+
+    /**
+     * 璁块棶鏉冮檺璁よ瘉鏈�氳繃 510
+     */
+    Integer SC_JEECG_NO_AUTHZ = 510;
+
+    /**===============================================================================================*/
+    /**
+     * ::闈炲父閲嶈::
+     * 娉ㄦ剰锛氳繖鍥涗釜甯搁噺鍊煎鏋滀慨鏀癸紝闇�瑕佷笌 jeecg-boot-starter/jeecg-boot-common/org.jeecg.config.FeignConfig 绫讳腑鐨勫�间繚鎸佷竴鑷淬��
+     */
+    String X_ACCESS_TOKEN = "X-Access-Token";
+}
diff --git a/src/main/java/com/lxzn/common/Result.java b/src/main/java/com/lxzn/common/Result.java
new file mode 100644
index 0000000..dda1f82
--- /dev/null
+++ b/src/main/java/com/lxzn/common/Result.java
@@ -0,0 +1,176 @@
+package com.lxzn.common;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *   鎺ュ彛杩斿洖鏁版嵁鏍煎紡
+ * @author scott
+ * @email jeecgos@163.com
+ * @date 2019骞�1鏈�19鏃�
+ */
+@Data
+@ApiModel(value = "鎺ュ彛杩斿洖瀵硅薄", description = "鎺ュ彛杩斿洖瀵硅薄")
+public class Result<T> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鎴愬姛鏍囧織
+     */
+    @ApiModelProperty(value = "鎴愬姛鏍囧織")
+    private boolean success = true;
+
+    /**
+     * 杩斿洖澶勭悊娑堟伅
+     */
+    @ApiModelProperty(value = "杩斿洖澶勭悊娑堟伅")
+    private String message = "";
+
+    /**
+     * 杩斿洖浠g爜
+     */
+    @ApiModelProperty(value = "杩斿洖浠g爜")
+    private Integer code = 0;
+
+    /**
+     * 杩斿洖鏁版嵁瀵硅薄 data
+     */
+    @ApiModelProperty(value = "杩斿洖鏁版嵁瀵硅薄")
+    private T result;
+
+    /**
+     * 鏃堕棿鎴�
+     */
+    @ApiModelProperty(value = "鏃堕棿鎴�")
+    private long timestamp = System.currentTimeMillis();
+
+    public Result() {
+    }
+
+    /**
+     * 鍏煎VUE3鐗坱oken澶辨晥涓嶈烦杞櫥褰曢〉闈�
+     * @param code
+     * @param message
+     */
+    public Result(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Result<T> success(String message) {
+        this.message = message;
+        this.code = CommonConstant.SC_OK_200;
+        this.success = true;
+        return this;
+    }
+
+    public static <T> Result<T> ok() {
+        Result<T> r = new Result<T>();
+        r.setSuccess(true);
+        r.setCode(CommonConstant.SC_OK_200);
+        return r;
+    }
+
+    public static <T> Result<T> ok(String msg) {
+        Result<T> r = new Result<T>();
+        r.setSuccess(true);
+        r.setCode(CommonConstant.SC_OK_200);
+        //Result OK(String msg)鏂规硶浼氶�犳垚鍏煎鎬ч棶棰� issues/I4IP3D
+        r.setResult((T) msg);
+        r.setMessage(msg);
+        return r;
+    }
+
+    public static <T> Result<T> ok(T data) {
+        Result<T> r = new Result<T>();
+        r.setSuccess(true);
+        r.setCode(CommonConstant.SC_OK_200);
+        r.setResult(data);
+        return r;
+    }
+
+    public static <T> Result<T> OK() {
+        Result<T> r = new Result<T>();
+        r.setSuccess(true);
+        r.setCode(CommonConstant.SC_OK_200);
+        return r;
+    }
+
+    /**
+     * 姝ゆ柟娉曟槸涓轰簡鍏煎鍗囩骇鎵�鍒涘缓
+     *
+     * @param msg
+     * @param <T>
+     * @return
+     */
+    public static <T> Result<T> OK(String msg) {
+        Result<T> r = new Result<T>();
+        r.setSuccess(true);
+        r.setCode(CommonConstant.SC_OK_200);
+        r.setMessage(msg);
+        //Result OK(String msg)鏂规硶浼氶�犳垚鍏煎鎬ч棶棰� issues/I4IP3D
+        r.setResult((T) msg);
+        return r;
+    }
+
+    public static <T> Result<T> OK(T data) {
+        Result<T> r = new Result<T>();
+        r.setSuccess(true);
+        r.setCode(CommonConstant.SC_OK_200);
+        r.setResult(data);
+        return r;
+    }
+
+    public static <T> Result<T> OK(String msg, T data) {
+        Result<T> r = new Result<T>();
+        r.setSuccess(true);
+        r.setCode(CommonConstant.SC_OK_200);
+        r.setMessage(msg);
+        r.setResult(data);
+        return r;
+    }
+
+    public static <T> Result<T> error(String msg, T data) {
+        Result<T> r = new Result<T>();
+        r.setSuccess(false);
+        r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500);
+        r.setMessage(msg);
+        r.setResult(data);
+        return r;
+    }
+
+    public static <T> Result<T> error(String msg) {
+        return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
+    }
+
+    public static <T> Result<T> error(int code, String msg) {
+        Result<T> r = new Result<T>();
+        r.setCode(code);
+        r.setMessage(msg);
+        r.setSuccess(false);
+        return r;
+    }
+
+    public Result<T> error500(String message) {
+        this.message = message;
+        this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
+        this.success = false;
+        return this;
+    }
+
+    /**
+     * 鏃犳潈闄愯闂繑鍥炵粨鏋�
+     */
+    public static <T> Result<T> noauth(String msg) {
+        return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg);
+    }
+
+    @JsonIgnore
+    private String onlTable;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/lxzn/config/Swagger2Config.java b/src/main/java/com/lxzn/config/Swagger2Config.java
new file mode 100644
index 0000000..cce2020
--- /dev/null
+++ b/src/main/java/com/lxzn/config/Swagger2Config.java
@@ -0,0 +1,183 @@
+package com.lxzn.config;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.lxzn.common.CommonConstant;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.util.ReflectionUtils;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
+import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider;
+import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author scott
+ */
+@Configuration
+@EnableSwagger2    //寮�鍚� Swagger2
+@EnableKnife4j     //寮�鍚� knife4j锛屽彲浠ヤ笉鍐�
+@Import(BeanValidatorPluginsConfiguration.class)
+public class Swagger2Config implements WebMvcConfigurer {
+
+    /**
+     *
+     * 鏄剧ずswagger-ui.html鏂囨。灞曠ず椤碉紝杩樺繀椤绘敞鍏wagger璧勬簮锛�
+     *
+     * @param registry
+     */
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+
+    /**
+     * swagger2鐨勯厤缃枃浠讹紝杩欓噷鍙互閰嶇疆swagger2鐨勪竴浜涘熀鏈殑鍐呭锛屾瘮濡傛壂鎻忕殑鍖呯瓑绛�
+     *
+     * @return Docket
+     */
+    @Bean(value = "defaultApi")
+    public Docket defaultApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗�
+                .apis(RequestHandlerSelectors.basePackage("com.lxzn"))
+                //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。
+                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(Collections.singletonList(securityScheme()))
+                .securityContexts(securityContexts())
+                .globalOperationParameters(setHeaderToken())
+                .groupName("default");
+    }
+
+    /***
+     * oauth2閰嶇疆
+     * 闇�瑕佸鍔爏wagger鎺堟潈鍥炶皟鍦板潃
+     * http://localhost:8888/webjars/springfox-swagger-ui/o2c.html
+     * @return
+     */
+    @Bean
+    SecurityScheme securityScheme() {
+        return new ApiKey(CommonConstant.X_ACCESS_TOKEN, CommonConstant.X_ACCESS_TOKEN, "header");
+    }
+
+    /**
+     * JWT token
+     * @return
+     */
+    private List<Parameter> setHeaderToken() {
+        ParameterBuilder tokenPar = new ParameterBuilder();
+        List<Parameter> pars = new ArrayList<>();
+        tokenPar.name(CommonConstant.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
+        pars.add(tokenPar.build());
+        return pars;
+    }
+
+    /**
+     * api鏂囨。鐨勮缁嗕俊鎭嚱鏁�,娉ㄦ剰杩欓噷鐨勬敞瑙e紩鐢ㄧ殑鏄摢涓�
+     *
+     * @return
+     */
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                // //澶ф爣棰�
+                .title("LXZN System Collect 鍚庡彴鏈嶅姟API鎺ュ彛鏂囨。")
+                // 鐗堟湰鍙�
+                .version("1.0")
+//				.termsOfServiceUrl("NO terms of service")
+                // 鎻忚堪
+                .description("鍚庡彴API鎺ュ彛")
+                // 浣滆��
+                .contact(new Contact("瑗垮畨鐏电鏈虹數鏅鸿兘绯荤粺鎶�鏈湁闄愬叕鍙�", "www.xalxzn.com", "zhangherong@xalxzn.com"))
+                .license("The Apache License, Version 2.0")
+                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
+                .build();
+    }
+
+    /**
+     * 鏂板 securityContexts 淇濇寔鐧诲綍鐘舵��
+     */
+    private List<SecurityContext> securityContexts() {
+        return new ArrayList(
+                Collections.singleton(SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
+                        .build())
+        );
+    }
+
+    private List<SecurityReference> defaultAuth() {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        return new ArrayList(
+                Collections.singleton(new SecurityReference(CommonConstant.X_ACCESS_TOKEN, authorizationScopes)));
+    }
+
+    /**
+     * 瑙e喅springboot2.6 鍜宻pringfox涓嶅吋瀹归棶棰�
+     * @return
+     */
+    @Bean
+    public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
+        return new BeanPostProcessor() {
+
+            @Override
+            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+                if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
+                    customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
+                }
+                return bean;
+            }
+
+            private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
+                List<T> copy = mappings.stream()
+                        .filter(mapping -> mapping.getPatternParser() == null)
+                        .collect(Collectors.toList());
+                mappings.clear();
+                mappings.addAll(copy);
+            }
+
+            @SuppressWarnings("unchecked")
+            private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
+                try {
+                    Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
+                    field.setAccessible(true);
+                    return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
+                } catch (IllegalArgumentException | IllegalAccessException e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+        };
+    }
+
+
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/controller/AssemblyCollectionJobController.java b/src/main/java/com/lxzn/modules/assembly2/controller/AssemblyCollectionJobController.java
new file mode 100644
index 0000000..7614212
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/controller/AssemblyCollectionJobController.java
@@ -0,0 +1,28 @@
+package com.lxzn.modules.assembly2.controller;
+
+import com.lxzn.common.Result;
+import com.lxzn.modules.assembly2.entity.TcOpstate;
+import com.lxzn.modules.assembly2.service.ITcOpstateService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Api(tags = "2#瑁呴厤绾块噰闆�")
+@RestController
+@RequestMapping("/assembly2/job")
+public class AssemblyCollectionJobController {
+    @Autowired
+    private ITcOpstateService tcOpstateService;
+
+    @ApiOperation(value = "2鍙疯閰嶇嚎閲囬泦-璁惧鐘舵��", notes = "2鍙疯閰嶇嚎閲囬泦-璁惧鐘舵��")
+    @GetMapping("/opstate")
+    public Result<?> testOpStateList(){
+        List<TcOpstate> list = tcOpstateService.list();
+        return Result.ok(list);
+    }
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/entity/T020Boltcheck.java b/src/main/java/com/lxzn/modules/assembly2/entity/T020Boltcheck.java
new file mode 100644
index 0000000..05d6e0b
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/entity/T020Boltcheck.java
@@ -0,0 +1,48 @@
+package com.lxzn.modules.assembly2.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-02
+ */
+@Getter
+@Setter
+@TableName("T020_BoltCheck")
+public class T020Boltcheck implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "RecordID", type = IdType.AUTO)
+    private Integer recordID;
+
+    private LocalDateTime recordTime;
+
+    private Integer modelID;
+
+    private Double length;
+
+    private Double lengthUL;
+
+    private Double lengthLL;
+
+    private Double pitchMAX;
+
+    private Double pitchMIN;
+
+    private Double pitchUL;
+
+    private Double pitchLL;
+
+    private String result;
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/entity/TcOpstate.java b/src/main/java/com/lxzn/modules/assembly2/entity/TcOpstate.java
new file mode 100644
index 0000000..fb68f98
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/entity/TcOpstate.java
@@ -0,0 +1,32 @@
+package com.lxzn.modules.assembly2.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-03
+ */
+@Getter
+@Setter
+@TableName("TC_OPState")
+public class TcOpstate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private LocalDateTime recordTime;
+
+    @TableId(value = "OPName", type = IdType.AUTO)
+    private String oPName;
+
+    private String state;
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/mapper/T020BoltcheckMapper.java b/src/main/java/com/lxzn/modules/assembly2/mapper/T020BoltcheckMapper.java
new file mode 100644
index 0000000..2ff2321
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/mapper/T020BoltcheckMapper.java
@@ -0,0 +1,16 @@
+package com.lxzn.modules.assembly2.mapper;
+
+import com.lxzn.modules.assembly2.entity.T020Boltcheck;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-02
+ */
+public interface T020BoltcheckMapper extends BaseMapper<T020Boltcheck> {
+
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/mapper/TcOpstateMapper.java b/src/main/java/com/lxzn/modules/assembly2/mapper/TcOpstateMapper.java
new file mode 100644
index 0000000..f5f785a
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/mapper/TcOpstateMapper.java
@@ -0,0 +1,16 @@
+package com.lxzn.modules.assembly2.mapper;
+
+import com.lxzn.modules.assembly2.entity.TcOpstate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-03
+ */
+public interface TcOpstateMapper extends BaseMapper<TcOpstate> {
+
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/mapper/xml/T020BoltcheckMapper.xml b/src/main/java/com/lxzn/modules/assembly2/mapper/xml/T020BoltcheckMapper.xml
new file mode 100644
index 0000000..01c7cc8
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/mapper/xml/T020BoltcheckMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.lxzn.modules.assembly2.mapper.T020BoltcheckMapper">
+
+</mapper>
diff --git a/src/main/java/com/lxzn/modules/assembly2/mapper/xml/TcOpstateMapper.xml b/src/main/java/com/lxzn/modules/assembly2/mapper/xml/TcOpstateMapper.xml
new file mode 100644
index 0000000..a9ff29f
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/mapper/xml/TcOpstateMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.lxzn.modules.assembly2.mapper.TcOpstateMapper">
+
+</mapper>
diff --git a/src/main/java/com/lxzn/modules/assembly2/service/IT020BoltcheckService.java b/src/main/java/com/lxzn/modules/assembly2/service/IT020BoltcheckService.java
new file mode 100644
index 0000000..51a07c3
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/service/IT020BoltcheckService.java
@@ -0,0 +1,16 @@
+package com.lxzn.modules.assembly2.service;
+
+import com.lxzn.modules.assembly2.entity.T020Boltcheck;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-02
+ */
+public interface IT020BoltcheckService extends IService<T020Boltcheck> {
+
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/service/ITcOpstateService.java b/src/main/java/com/lxzn/modules/assembly2/service/ITcOpstateService.java
new file mode 100644
index 0000000..b28672c
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/service/ITcOpstateService.java
@@ -0,0 +1,16 @@
+package com.lxzn.modules.assembly2.service;
+
+import com.lxzn.modules.assembly2.entity.TcOpstate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-03
+ */
+public interface ITcOpstateService extends IService<TcOpstate> {
+
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/service/impl/T020BoltcheckServiceImpl.java b/src/main/java/com/lxzn/modules/assembly2/service/impl/T020BoltcheckServiceImpl.java
new file mode 100644
index 0000000..f0e4e3a
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/service/impl/T020BoltcheckServiceImpl.java
@@ -0,0 +1,22 @@
+package com.lxzn.modules.assembly2.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.lxzn.modules.assembly2.entity.T020Boltcheck;
+import com.lxzn.modules.assembly2.mapper.T020BoltcheckMapper;
+import com.lxzn.modules.assembly2.service.IT020BoltcheckService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-02
+ */
+@Service
+@DS("assembly2")
+public class T020BoltcheckServiceImpl extends ServiceImpl<T020BoltcheckMapper, T020Boltcheck> implements IT020BoltcheckService {
+
+}
diff --git a/src/main/java/com/lxzn/modules/assembly2/service/impl/TcOpstateServiceImpl.java b/src/main/java/com/lxzn/modules/assembly2/service/impl/TcOpstateServiceImpl.java
new file mode 100644
index 0000000..aa45c7c
--- /dev/null
+++ b/src/main/java/com/lxzn/modules/assembly2/service/impl/TcOpstateServiceImpl.java
@@ -0,0 +1,22 @@
+package com.lxzn.modules.assembly2.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.lxzn.modules.assembly2.entity.TcOpstate;
+import com.lxzn.modules.assembly2.mapper.TcOpstateMapper;
+import com.lxzn.modules.assembly2.service.ITcOpstateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author baomidou
+ * @since 2025-09-03
+ */
+@Service
+@DS("assembly2")
+public class TcOpstateServiceImpl extends ServiceImpl<TcOpstateMapper, TcOpstate> implements ITcOpstateService {
+
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index f60e015..8d0ca43 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -42,14 +42,14 @@
           username: sa
           password: sa123
           driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
-        slave_1:
+        assembly2:
           url: jdbc:sqlserver://127.0.0.1:1433;databasename=XHJ-HUB3Line;nullCatalogMeansCurrent=true
           username: sa
           password: sa123
           driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
 #mybatis plus 璁剧疆
 mybatis-plus:
-  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml
+  mapper-locations: classpath*:com/lxzn/modules/**/xml/*Mapper.xml
   global-config:
     # 鍏抽棴MP3.0鑷甫鐨刡anner
     banner: false
@@ -62,4 +62,14 @@
     # 杩欎釜閰嶇疆浼氬皢鎵ц鐨剆ql鎵撳嵃鍑烘潵锛屽湪寮�鍙戞垨娴嬭瘯鐨勬椂鍊欏彲浠ョ敤
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     # 杩斿洖绫诲瀷涓篗ap,鏄剧ずnull瀵瑰簲鐨勫瓧娈�
-    call-setters-on-nulls: true
\ No newline at end of file
+    call-setters-on-nulls: true
+#swagger
+knife4j:
+  #寮�鍚寮洪厤缃�
+  enable: true
+  #寮�鍚敓浜х幆澧冨睆钄�
+  production: false
+  basic:
+    enable: false
+    username: jeecg
+    password: jeecg1314
\ No newline at end of file

--
Gitblit v1.9.3