From fc23bb2f40de2ed2af21a3824979350f9ffe1015 Mon Sep 17 00:00:00 2001 From: 李林 <z1292839451@163.com> Date: 星期一, 07 八月 2023 17:47:55 +0800 Subject: [PATCH] 仓库迁移 --- user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EnterpriseServiceImpl.java | 20 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java | 82 sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java | 16 .idea/aws.xml | 11 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java | 16 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/InstrumentMapper.java | 28 user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java | 34 framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyMetaObjectHandler.java | 22 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java | 51 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java | 100 .idea/misc.xml | 12 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java | 91 sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java | 83 sys/src/main/resources/application-prod.yml | 86 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/MultiRealmAuthenticator.java | 61 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/RawMaterialController.java | 57 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java | 70 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductMapper.java | 15 .idea/jarRepositories.xml | 20 framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MySqlInjector.java | 24 inspection-server/pom.xml | 41 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkDetectionService.java | 20 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/filter/JwtFilter.java | 170 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java | 41 user-server/src/main/java/com/yuanchu/limslaboratory/config/FeignConfig.java | 36 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java | 53 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java | 199 + inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionProductServiceImpl.java | 90 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Classify.java | 60 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java | 90 standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/StandardMapper.java | 24 user-server/src/main/java/com/yuanchu/limslaboratory/mapper/EnterpriseMapper.java | 16 .idea/compiler.xml | 28 standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java | 34 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java | 48 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/RawMaterial.java | 84 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java | 54 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java | 89 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Inspection.java | 89 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RawMaterialServiceImpl.java | 78 user-server/pom.xml | 49 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java | 85 sql/lims.sql | 528 +++ framework/src/main/java/com/yuanchu/limslaboratory/utils/RedisUtil.java | 622 +++ standard-server/src/main/resources/mapper/SpecificationsMapper.xml | 5 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java | 84 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java | 57 user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java | 39 framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBatisPlusConfig.java | 27 pom.xml | 232 + user-server/src/main/resources/mapper/RoleMapper.xml | 5 framework/src/main/java/com/yuanchu/limslaboratory/exception/MyFileException.java | 18 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java | 66 framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java | 113 framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java | 131 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMaterialMapper.java | 15 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java | 61 framework/src/main/java/com/yuanchu/limslaboratory/config/WebMvcConfig.java | 24 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java | 159 user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java | 84 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/InstrumentService.java | 44 framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBaseMapper.java | 15 laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml | 11 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java | 47 framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java | 215 + laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java | 75 standard-server/src/main/resources/mapper/ProductMapper.xml | 29 framework/src/main/java/com/yuanchu/limslaboratory/vo/Result.java | 53 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java | 70 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java | 89 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionProductController.java | 79 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/JwtToken.java | 28 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateMetricalInformationDto.java | 53 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java | 79 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateClassifyDto.java | 20 standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java | 27 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java | 27 laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml | 13 standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java | 34 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java | 61 user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java | 135 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java | 20 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java | 68 standard-server/src/main/resources/mapper/StandardMapper.xml | 23 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java | 65 laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml | 11 framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java | 122 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java | 59 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateEquipmentPointDto.java | 34 inspection-server/src/main/resources/mapper/RawMaterialMapper.xml | 37 inspection-server/src/main/resources/mapper/LinkDetectionMapper.xml | 5 user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserClient.java | 19 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlan.java | 76 .idea/encodings.xml | 13 framework/src/main/java/com/yuanchu/limslaboratory/config/MyCorsConfig.java | 37 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.java | 23 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java | 28 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java | 78 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtCredentialsMatcher.java | 34 inspection-server/src/main/resources/mapper/InspectionMapper.xml | 29 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkBasicInformationMapper.java | 37 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateInstrumentDto.java | 70 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/EquipmentPoint.java | 66 sys/src/main/java/com/yuanchu/limslaboratory/backup/MysqlDataBackup.java | 190 + inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectDetailVo.java | 94 user-server/src/main/java/com/yuanchu/limslaboratory/service/EnterpriseService.java | 16 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionProductService.java | 23 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java | 67 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java | 41 sys/src/main/resources/application.yml | 28 framework/src/main/java/com/yuanchu/limslaboratory/config/DruidConfig.java | 57 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/RawMaterialMapper.java | 30 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java | 29 framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java | 51 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java | 82 user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleController.java | 20 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionMaterialService.java | 15 .idea/.gitignore | 8 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java | 179 + inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMapper.java | 29 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionMaterial.java | 97 user-server/src/main/resources/mapper/UserMapper.xml | 44 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java | 22 standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java | 35 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java | 110 laboratory-server/src/main/resources/mapper/InstrumentMapper.xml | 25 standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java | 24 inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml | 53 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java | 70 user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java | 147 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialServiceImpl.java | 19 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InsProductVo.java | 66 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java | 76 user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java | 30 sys/src/main/java/com/yuanchu/limslaboratory/SysApplication.java | 17 standard-server/src/main/resources/mapper/MaterialMapper.xml | 70 user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java | 74 user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleMapper.java | 16 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java | 57 user-server/src/main/java/com/yuanchu/limslaboratory/service/RoleService.java | 16 inspection-server/src/main/resources/mapper/InspectionMaterialMapper.xml | 4 user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleServiceImpl.java | 20 .idea/vcs.xml | 6 inspection-server/src/main/resources/mapper/InspectionProductMapper.xml | 4 standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java | 33 sys/src/main/resources/logback-spring.xml | 236 + standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java | 42 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java | 103 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InstrumentServiceImpl.java | 89 user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java | 41 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java | 31 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java | 119 laboratory-server/pom.xml | 30 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/ClassifyService.java | 26 framework/pom.xml | 43 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java | 23 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialController.java | 23 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java | 26 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java | 139 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionProduct.java | 100 sys/src/main/resources/application-dev.yml | 85 user-server/src/main/java/com/yuanchu/limslaboratory/controller/EnterpriseController.java | 20 framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java | 77 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkDetectionMapper.java | 17 sys/src/main/resources/mysqldump.exe | 0 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/RawMaterialService.java | 41 laboratory-server/src/main/resources/mapper/ClassifyMapper.xml | 5 sys/pom.xml | 79 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java | 34 standard-server/pom.xml | 32 user-server/src/main/resources/mapper/EnterpriseMapper.xml | 5 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java | 78 172 files changed, 10,443 insertions(+), 0 deletions(-) diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 榛樿蹇界暐鐨勬枃浠� +/shelf/ +/workspace.xml +# 鍩轰簬缂栬緫鍣ㄧ殑 HTTP 瀹㈡埛绔姹� +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/aws.xml b/.idea/aws.xml new file mode 100644 index 0000000..b63b642 --- /dev/null +++ b/.idea/aws.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="accountSettings"> + <option name="activeRegion" value="us-east-1" /> + <option name="recentlyUsedRegions"> + <list> + <option value="us-east-1" /> + </list> + </option> + </component> +</project> \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..3516d6a --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CompilerConfiguration"> + <annotationProcessing> + <profile name="Maven default annotation processors profile" enabled="true"> + <sourceOutputDir name="target/generated-sources/annotations" /> + <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> + <outputRelativeToContentRoot value="true" /> + <module name="inspection-server" /> + <module name="framework" /> + <module name="sys" /> + <module name="standard-server" /> + <module name="laboratory-server" /> + <module name="user-server" /> + </profile> + </annotationProcessing> + </component> + <component name="JavacSettings"> + <option name="ADDITIONAL_OPTIONS_OVERRIDE"> + <module name="framework" options="-parameters" /> + <module name="inspection-server" options="-parameters" /> + <module name="laboratory-server" options="-parameters" /> + <module name="standard-server" options="-parameters" /> + <module name="sys" options="-parameters" /> + <module name="user-server" options="-parameters" /> + </option> + </component> +</project> \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..343cd9b --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> + <file url="file://$PROJECT_DIR$/framework/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/inspection-server/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/laboratory-server/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/standard-server/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/sys/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/user-server/src/main/java" charset="UTF-8" /> + <file url="PROJECT" charset="UTF-8" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..980588c --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="RemoteRepositoriesConfiguration"> + <remote-repository> + <option name="id" value="central" /> + <option name="name" value="Maven Central repository" /> + <option name="url" value="https://repo1.maven.org/maven2" /> + </remote-repository> + <remote-repository> + <option name="id" value="jboss.community" /> + <option name="name" value="JBoss Community repository" /> + <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> + </remote-repository> + <remote-repository> + <option name="id" value="central" /> + <option name="name" value="Central Repository" /> + <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" /> + </remote-repository> + </component> +</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0abcc97 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ExternalStorageConfigurationManager" enabled="true" /> + <component name="MavenProjectsManager"> + <option name="originalFiles"> + <list> + <option value="$PROJECT_DIR$/pom.xml" /> + </list> + </option> + </component> + <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK" /> +</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/framework/pom.xml b/framework/pom.xml new file mode 100644 index 0000000..9a79668 --- /dev/null +++ b/framework/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>lims-laboratory</artifactId> + <groupId>com.yuanchu</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>framework</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>framework</name> + <description>framework</description> + + <packaging>jar</packaging> + <dependencies> + <!--鏁版嵁搴撹繛鎺ユ睜--> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>druid</artifactId> + </dependency> + + <!-- mysql椹卞姩 --> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + </dependency> + + <!--Swagger3-Ui缇庡寲--> + <dependency> + <groupId>com.github.xiaoymin</groupId> + <artifactId>knife4j-spring-ui</artifactId> + </dependency> + + <!--redis jar鍖�--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-redis</artifactId> + </dependency> + </dependencies> + +</project> diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/config/DruidConfig.java b/framework/src/main/java/com/yuanchu/limslaboratory/config/DruidConfig.java new file mode 100644 index 0000000..75e7058 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/config/DruidConfig.java @@ -0,0 +1,57 @@ +package com.yuanchu.limslaboratory.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.support.http.StatViewServlet; +import com.alibaba.druid.support.http.WebStatFilter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class DruidConfig { + //鍔犺浇application.yaml涓殑Druid閰嶇疆 + @ConfigurationProperties(prefix = "spring.datasource") + @Bean + public DataSource druid(){ + return new DruidDataSource(); + } + + //閰嶇疆Druid鐨勭洃鎺� + //1銆侀厤缃竴涓鐞嗗悗鍙扮殑Servlet + @Bean + public ServletRegistrationBean statViewServlet(){ + ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); + Map<String,String> initParams = new HashMap<>(); + + initParams.put("loginUsername","root"); + initParams.put("loginPassword","123456"); + initParams.put("allow","");//榛樿灏辨槸鍏佽鎵�鏈夎闂� +// initParams.put("deny","192.168.15.21"); 绂佹璇P璁块棶 + + bean.setInitParameters(initParams); + return bean; + } + + //2銆侀厤缃竴涓獁eb鐩戞帶鐨刦ilter + @Bean + public FilterRegistrationBean webStatFilter(){ + FilterRegistrationBean bean = new FilterRegistrationBean(); + bean.setFilter(new WebStatFilter()); + + Map<String,String> initParams = new HashMap<>(); + initParams.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); + + bean.setInitParameters(initParams); + + bean.setUrlPatterns(Arrays.asList("/*")); + + return bean; + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/config/MyCorsConfig.java b/framework/src/main/java/com/yuanchu/limslaboratory/config/MyCorsConfig.java new file mode 100644 index 0000000..e9ccacb --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/config/MyCorsConfig.java @@ -0,0 +1,37 @@ +package com.yuanchu.limslaboratory.config; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +@Configuration +public class MyCorsConfig { + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1 璁剧疆璁块棶婧愬湴鍧� + corsConfiguration.addAllowedOrigin("*"); + // 2 璁剧疆璁块棶婧愯姹傚ご + corsConfiguration.addAllowedHeader("*"); + // 3 璁剧疆璁块棶婧愯姹傛柟娉� + corsConfiguration.addAllowedMethod("*"); + // 4 鏆撮湶鍝簺澶撮儴淇℃伅 +// corsConfiguration.addExposedHeader(JwtConstant.HEADER); + return corsConfiguration; + } + @Bean + public FilterRegistrationBean<CorsFilter> corsFilter() { +// log.info("璺ㄥ煙璁剧疆銆傘�傘�傘��"); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + // 5 瀵规帴鍙i厤缃法鍩熻缃� + source.registerCorsConfiguration("/**", buildConfig()); + //鏈夊涓猣ilter鏃舵澶勮缃敼CorsFilter鐨勪紭鍏堟墽琛岄『搴� + FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source)); + bean.setOrder(Ordered.HIGHEST_PRECEDENCE); + return bean; + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java b/framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java new file mode 100644 index 0000000..7e2671f --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java @@ -0,0 +1,122 @@ +package com.yuanchu.limslaboratory.config; + + +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Configuration +@EnableOpenApi +public class Swagger3 { + // 璺緞http://localhost:8080/doc.html + @Value("${swagger.enabled}") + private boolean enable; + + private final String swaggerPackage = "com.yuanchu.limslaboratory"; + + /** + * 娣诲姞鎽樿淇℃伅 + */ + private ApiInfo apiInfo() { + // 鐢ˋpiInfoBuilder杩涜瀹氬埗 + return new ApiInfoBuilder() + // 璁剧疆鏍囬 + .title("LIMS绠$悊绯荤粺") + // 鎻忚堪 + .description("LIMS绠$悊绯荤粺") + // 浣滆�呬俊鎭� + .contact(new Contact("Crunchy", null, null)) + // 鐗堟湰 + .version("鐗堟湰鍙�:V.1") + //鍗忚 + .license("The Apache License") + //鍗忚url + .licenseUrl("http://www.baidu.com") + .build(); + } + + /** + * 鍒涘缓API + * http:IP:绔彛鍙�/swagger-ui/index.html 鍘熺敓鍦板潃 + * http:IP:绔彛鍙�/doc.html bootStrap-UI鍦板潃 + */ + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.OAS_30).pathMapping("/") + // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛� + .enable(enable) + .apiInfo(apiInfo()) + // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず + .select() + // 鎵弿鎵�鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲� + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + + + // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ + .apis(RequestHandlerSelectors.basePackage(swaggerPackage)) + // 鎵弿鎵�鏈� .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.regex("(?!/ApiError.*).*")) + .paths(PathSelectors.any()) + .build() + // 鏀寔鐨勯�氳鍗忚闆嗗悎 + .protocols(newHashSet("https", "http")) + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()); + } + + /** + * 鏀寔鐨勯�氳鍗忚闆嗗悎 + * @param type1 + * @param type2 + * @return + */ + private Set<String> newHashSet(String type1, String type2){ + Set<String> set = new HashSet<>(); + set.add(type1); + set.add(type2); + return set; + } + + /** + * 璁よ瘉鐨勫畨鍏ㄤ笂涓嬫枃 + */ + private List<SecurityScheme> securitySchemes() { + List<SecurityScheme> securitySchemes = new ArrayList<>(); + securitySchemes.add((SecurityScheme) new ApiKey("token", "token", "header")); + return securitySchemes; + } + + /** + * 鎺堟潈淇℃伅鍏ㄥ眬搴旂敤 + */ + private List<SecurityContext> securityContexts() { + List<SecurityContext> securityContexts = new ArrayList<>(); + securityContexts.add(SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.any()).build()); + return securityContexts; + } + + private List<SecurityReference> defaultAuth() { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + List<SecurityReference> securityReferences = new ArrayList<>(); + securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); + return securityReferences; + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/config/WebMvcConfig.java b/framework/src/main/java/com/yuanchu/limslaboratory/config/WebMvcConfig.java new file mode 100644 index 0000000..241a68a --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/config/WebMvcConfig.java @@ -0,0 +1,24 @@ +package com.yuanchu.limslaboratory.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; + +@Configuration +public class WebMvcConfig extends WebMvcConfigurationSupport { + + @Value("${file.path}") + private String filePath; + + @Override + protected void addResourceHandlers(ResourceHandlerRegistry registry) { + //閰嶇疆鎷︽埅鍣ㄨ闂潤鎬佽祫婧� + registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + + //璁剧疆鏂囦欢铏氭嫙璺緞鏄犲皠 + registry.addResourceHandler("/img/**").addResourceLocations("file:"+filePath+"/"); + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/exception/MyFileException.java b/framework/src/main/java/com/yuanchu/limslaboratory/exception/MyFileException.java new file mode 100644 index 0000000..8c0033e --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/exception/MyFileException.java @@ -0,0 +1,18 @@ +package com.yuanchu.limslaboratory.exception; + +public class MyFileException extends RuntimeException{ + public MyFileException() { + } + + public MyFileException(String message) { + super(message); + } + + public MyFileException(Throwable cause) { + super(cause); + } + + public MyFileException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java b/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..e94b324 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java @@ -0,0 +1,215 @@ +package com.yuanchu.limslaboratory.handler; + +import com.yuanchu.limslaboratory.exception.MyFileException; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.vo.Result; +import lombok.extern.slf4j.Slf4j; +import org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException; +import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException; +import org.springframework.beans.ConversionNotSupportedException; +import org.springframework.beans.TypeMismatchException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.jdbc.BadSqlGrammarException; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.multipart.MultipartException; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.BindException; +import java.sql.SQLException; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + @Value("${spring.servlet.multipart.max-file-size}") + private String maxFileSize; + + @Value("${spring.servlet.multipart.max-request-size}") + private String maxRequestSize; + + @ExceptionHandler(SQLException.class) + public Result<?> handlerSQLException(SQLException e) + { + log.error(e.getMessage().toLowerCase(), e); + return Result.fail("鏁版嵁鎿嶄綔澶辫触锛佽鑱旂郴绠$悊鍛�"); + } + + /** + * 鍞竴鍊煎湪鏁版嵁搴撲腑閲嶅 + * Duplicate entry ' ' for key ' ' + * @param e锛氶噸澶嶉敭寮傚父 + * @return 199 + */ + @ExceptionHandler + public Result<?> DuplicateKeyException(DuplicateKeyException e) { + log.error(String.valueOf(e)); + String message = e.getCause().getMessage(); + String[] split = message.split("'"); + return Result.fail("閲嶅娣诲姞锛氥��" + split[1] + "銆戞搷浣滃け璐ワ紒"); + } + + @ExceptionHandler + public Result<?> NullPointerException(NullPointerException e){ + e.printStackTrace(); + return Result.fail("閮ㄥ垎鍙傛暟涓虹┖锛岃妫�鏌ワ紒"); + } + + /** 杩愯鏃跺紓甯� */ + @ExceptionHandler(RuntimeException.class) + public Result<?> runtimeExceptionHandler(RuntimeException e) { + e.printStackTrace(); + return Result.fail("杩愯鏃跺紓甯�"); + } + + /** 绫诲瀷杞崲寮傚父 */ + @ExceptionHandler(ClassCastException.class) + public Result<?> classCastExceptionHandler(ClassCastException e) { + e.printStackTrace(); + return Result.fail("绫诲瀷杞崲寮傚父"); + } + /** 鏂囦欢鏈壘鍒板紓甯� */ + @ExceptionHandler(FileNotFoundException.class) + public Result<?> FileNotFoundException(FileNotFoundException e) { + e.printStackTrace(); + return Result.fail("鏂囦欢鏈壘鍒板紓甯�"); + } + /** 鏁板瓧鏍煎紡寮傚父 */ + @ExceptionHandler(NumberFormatException.class) + public Result<?> NumberFormatException(NumberFormatException e) { + e.printStackTrace(); + return Result.fail("鏁板瓧鏍煎紡寮傚父"); + } + /** 瀹夊叏寮傚父 */ + @ExceptionHandler(SecurityException.class) + public Result<?> SecurityException(SecurityException e) { + e.printStackTrace(); + return Result.fail("瀹夊叏寮傚父"); + } + + /** 绫诲瀷涓嶅瓨鍦ㄥ紓甯� */ + @ExceptionHandler(TypeNotPresentException.class) + public Result<?> TypeNotPresentException(TypeNotPresentException e) { + e.printStackTrace(); + return Result.fail("绫诲瀷涓嶅瓨鍦ㄥ紓甯�"); + } + + /** IO寮傚父 */ + @ExceptionHandler(IOException.class) + public Result<?> iOExceptionHandler(IOException e) { + e.printStackTrace(); + return Result.fail("IO寮傚父"); + } + + /** 鏈煡鏂规硶寮傚父 */ + @ExceptionHandler(NoSuchMethodException.class) + public Result<?> noSuchMethodExceptionHandler(NoSuchMethodException e) { + e.printStackTrace(); + return Result.fail("鏈煡鏂规硶寮傚父"); + } + + /** 鏁扮粍瓒婄晫寮傚父 */ + @ExceptionHandler(IndexOutOfBoundsException.class) + public Result<?> indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException e) { + e.printStackTrace(); + return Result.fail("鏁扮粍瓒婄晫寮傚父"); + } + /** sql璇硶閿欒寮傚父 */ + @ExceptionHandler(BadSqlGrammarException.class) + public Result<?> BadSqlGrammarException(BadSqlGrammarException e) { + e.printStackTrace(); + return Result.fail("sql璇硶閿欒寮傚父"); + } + + /** 鏃犳硶娉ㄥ叆bean寮傚父 */ + @ExceptionHandler(NoSuchBeanDefinitionException.class) + public Result<?> NoSuchBeanDefinitionException(NoSuchBeanDefinitionException e) { + e.printStackTrace(); + return Result.fail("鏃犳硶娉ㄥ叆bean"); + } + + /** Http娑堟伅涓嶅彲璇诲紓甯� */ + @ExceptionHandler({HttpMessageNotReadableException.class}) + public Result<?> requestNotReadable(HttpMessageNotReadableException e) { + e.printStackTrace(); + return Result.fail("Http娑堟伅涓嶅彲璇�"); + } + + /** 400閿欒 */ + @ExceptionHandler({TypeMismatchException.class}) + public Result<?> requestTypeMismatch(TypeMismatchException e) { + e.printStackTrace(); + return Result.fail("鏈嶅姟鍣ㄥ紓甯�"); + } + + /** 500閿欒 */ + @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class}) + public Result<?> server500(RuntimeException e) { + e.printStackTrace(); + return Result.fail("鏈嶅姟鍣ㄥ紓甯�"); + } + + /** 鏍堟孩鍑� */ + @ExceptionHandler({StackOverflowError.class}) + public Result<?> requestStackOverflow(StackOverflowError e) { + e.printStackTrace(); + return Result.fail("鏍堟孩鍑哄紓甯�"); + } + + /** 闄ゆ暟涓嶈兘涓�0 */ + @ExceptionHandler({ArithmeticException.class}) + public Result<?> arithmeticException(ArithmeticException e) { + e.printStackTrace(); + return Result.fail("闄ゆ暟涓嶈兘涓�0寮傚父"); + } + + /** + *鏂囦欢杩囧ぇ鎶ラ敊鎻愮ず + */ + @ExceptionHandler({MultipartException.class}) + public Result<?> fileUploadExceptionHandler(MultipartException e) { + String msg; + Throwable rootCause = e.getRootCause(); + if (rootCause instanceof FileSizeLimitExceededException) { + msg="涓婁紶鏂囦欢杩囧ぇ銆愬崟涓枃浠跺ぇ灏忎笉寰楄秴杩�" + maxFileSize + "銆�"; + }else if(rootCause instanceof SizeLimitExceededException){ + msg="涓婁紶鏂囦欢杩囧ぇ銆愭�讳笂浼犲ぇ灏忎笉寰楄秴杩�" + maxRequestSize + "銆�"; + }else { + msg="鏂囦欢涓婁紶澶辫触銆愭湇鍔″櫒寮傚父銆�"; + } + return Result.fail(msg); + } + + /** 鏂囦欢鍚庣紑鍚嶄笉閫氳繃杩斿洖鎻愮ず */ + @ExceptionHandler({MyFileException.class}) + public Result<?> myFileException(Exception e) { + return Result.fail("鎶辨瓑涓嶆敮鎸併��" + e.getMessage() +"銆戝悗缂�鐨勬枃浠讹紒"); + } + + /** + * 鍙傛暟妫�楠� + */ + @ExceptionHandler({MethodArgumentNotValidException.class}) + public Result<?> methodArgumentNotValidException(MethodArgumentNotValidException e) { + List<ObjectError> allErrors = e.getBindingResult().getAllErrors(); + String message = allErrors.stream().map(s -> s.getDefaultMessage()).collect(Collectors.joining(";")); + return Result.fail(message); + } + + /** 鍏朵粬閿欒 */ + @ExceptionHandler({Exception.class}) + public Result<?> exception(Exception e) { + e.printStackTrace(); + return Result.fail("缃戠粶杩炴帴澶辫触锛岃閫�鍑哄悗鍐嶈瘯"); + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBaseMapper.java b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBaseMapper.java new file mode 100644 index 0000000..cd69aeb --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBaseMapper.java @@ -0,0 +1,15 @@ +package com.yuanchu.limslaboratory.mybatis_config; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + * 鑷畾涔夋坊鍔爉ybatis-plus鎵归噺娣诲姞 + * @param <T> + */ +public interface MyBaseMapper <T> extends BaseMapper<T> { + + int insertBatchSomeColumn(List<T> entityList); +} + diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBatisPlusConfig.java b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBatisPlusConfig.java new file mode 100644 index 0000000..f944f17 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyBatisPlusConfig.java @@ -0,0 +1,27 @@ +package com.yuanchu.limslaboratory.mybatis_config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +public class MyBatisPlusConfig { + + /** + * 闇�瑕侀厤缃嫤鎴櫒锛屼笉鐒跺湪AddDevice涓殑total鏃犳硶鑾峰彇鍒� + * @return + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor(){ + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 涔愯閿� + interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + // 鍒嗛〉閰嶇疆 + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyMetaObjectHandler.java b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyMetaObjectHandler.java new file mode 100644 index 0000000..aee591a --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MyMetaObjectHandler.java @@ -0,0 +1,22 @@ +package com.yuanchu.limslaboratory.mybatis_config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +public class MyMetaObjectHandler implements MetaObjectHandler { + @Override + public void insertFill(MetaObject metaObject) { + this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤) + this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤) + } + + @Override + public void updateFill(MetaObject metaObject) { + // update鐨勬椂鍊欎娇鐢紝鏇存柊鐨勬椂鍊欏己鍒惰繘琛屽~鍏� + this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘) + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MySqlInjector.java b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MySqlInjector.java new file mode 100644 index 0000000..aec9276 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/mybatis_config/MySqlInjector.java @@ -0,0 +1,24 @@ +package com.yuanchu.limslaboratory.mybatis_config; + +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 鎵归噺娣诲姞 + */ +@Component +public class MySqlInjector extends DefaultSqlInjector { + + @Override + public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) { + List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo); + //澧炲姞鑷畾涔夋柟娉曪紝瀛楁娉ㄨВ涓婁笉绛変簬FieldFill.DEFAULT鐨勫瓧娈垫墠浼氭彃鍏� + methodList.add(new InsertBatchSomeColumn(t->!t.isLogicDelete())); + return methodList; + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java new file mode 100644 index 0000000..1fd71d9 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java @@ -0,0 +1,113 @@ +package com.yuanchu.limslaboratory.utils; + +import com.yuanchu.limslaboratory.exception.MyFileException; +import lombok.extern.slf4j.Slf4j; +import org.apache.tomcat.util.http.fileupload.IOUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.FileSystemUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.PostConstruct; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * 淇濆瓨鏂囦欢宸ュ叿 + */ +@Slf4j +@Component +public class FileSaveUtil { + + // 鍙杫ml涓殑璺緞 + / + private static String FILE_PATH; + + private static String[] ALLOWED; + + @Value("${file.path}") + private String file; + + @Value("${file.allowed}") + private String[] allowed; + + @PostConstruct + public void getFile() { + FILE_PATH = this.file; + } + + @PostConstruct + public void getAllowed(){ + ALLOWED = this.allowed; + } + /** + * 瀛樺偍鏂囦欢涓诲嚱鏁� + * @param file 鏂囦欢浜岃繘鍒舵祦 + * @return 杩斿洖鏂囦欢鍚嶇О鐢ㄤ簬瀛樺偍鏁版嵁搴� + */ + public static String StoreFile(MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + // 鐢熸垚闅忔満鍚嶇О锛氭椂闂確闅忔満6浣嶆暟瀛� + String FileName = System.currentTimeMillis() + "_" + MyUtil.getNumber(6); + String suffix = null; + if (originalFilename != null) { + suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); + // 濡傛灉鍚庣紑鍚嶄笉閫氳繃鎶涘嚭寮傚父 + if (!isFileAllowed(suffix)){ + throw new MyFileException(suffix); + } + } + // 鍚嶇О鎷兼帴 + String fileName = FileName + suffix; + // 杩涜瀛樺偍 + try { + storeFileWithFileName(file.getBytes(), fileName); + } catch (IOException e) { + throw new RuntimeException(e); + } + return fileName; + } + + public static Boolean DeleteFile(String fileName) { + return FileSystemUtils.deleteRecursively(new File(FILE_PATH + "/" + fileName)); + } + /** + * 瀛樺偍鏂囦欢鍑芥暟 + * @param content 鏂囦欢浜岃繘鍒舵祦 + * @param fileName 鏂囦欢鍚嶇О + */ + private static void storeFileWithFileName(byte[] content, String fileName) { + // 瀛樺偍璺緞 + String path = FILE_PATH + java.io.File.separatorChar; + // 鐩綍涓嶅瓨鍦ㄥ垯鍒涘缓 + java.io.File file = new java.io.File(path); + if (!file.exists()) { + file.mkdirs(); + } + // 寮�濮嬪瓨鍌� + try (FileOutputStream os = new FileOutputStream(path + fileName); + ByteArrayInputStream is = new ByteArrayInputStream(content)) { + IOUtils.copy(is, os); + } catch (IOException e) { + MyUtil.PrintLog("瀛樺偍鏂囦欢寮傚父锛�" + e); + } + } + + /** + * 鍒ゆ柇鏂囦欢鏄惁琚厑璁镐笂浼� + * + * @param fileName 鏂囦欢鍚� + * @return 鍏佽true, 鍚﹀垯false + */ + private static boolean isFileAllowed(String fileName) { + // 鑾峰彇鍚庣紑鍚� + String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); + for (String allow : ALLOWED) { + if (allow.equals(suffixName)) { + return true; + } + } + return false; + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java new file mode 100644 index 0000000..f272754 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java @@ -0,0 +1,131 @@ +package com.yuanchu.limslaboratory.utils; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * JSON瑙f瀽澶勭悊 + * + * @author 寮犲 + */ +@Component +public class JackSonUtil { + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectWriter OBJECT_WRITER = OBJECT_MAPPER.writerWithDefaultPrettyPrinter(); + + public static void marshal(File file, Object value) throws Exception { + try { + OBJECT_WRITER.writeValue(file, value); + } catch (JsonGenerationException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } + + public static void marshal(OutputStream os, Object value) throws Exception { + try { + OBJECT_WRITER.writeValue(os, value); + } catch (JsonGenerationException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } + + public static String marshal(Object value) throws Exception { + try { + return OBJECT_WRITER.writeValueAsString(value); + } catch (JsonGenerationException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } + + public static byte[] marshalBytes(Object value) throws Exception { + try { + return OBJECT_WRITER.writeValueAsBytes(value); + } catch (JsonGenerationException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } + + public static <T> T unmarshal(File file, Class<T> valueType) throws Exception { + try { + return OBJECT_MAPPER.readValue(file, valueType); + } catch (JsonParseException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } + + public static <T> T unmarshal(InputStream is, Class<T> valueType) throws Exception { + try { + return OBJECT_MAPPER.readValue(is, valueType); + } catch (JsonParseException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } + + /** + * 瀛楃涓茶浆瀵硅薄 + * @param str + * @param valueType + * @return + * @param <T> + * @throws Exception + */ + public static <T> T unmarshal(String str, Class<T> valueType) throws Exception { + try { + return OBJECT_MAPPER.readValue(str, valueType); + } catch (JsonParseException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } + + public static <T> T unmarshal(byte[] bytes, Class<T> valueType) throws Exception { + try { + if (bytes == null) { + bytes = new byte[0]; + } + return OBJECT_MAPPER.readValue(bytes, 0, bytes.length, valueType); + } catch (JsonParseException e) { + throw new Exception(e); + } catch (JsonMappingException e) { + throw new Exception(e); + } catch (IOException e) { + throw new Exception(e); + } + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java new file mode 100644 index 0000000..a9e8ade --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java @@ -0,0 +1,77 @@ +package com.yuanchu.limslaboratory.utils; + +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; + +@Component +public class MyUtil<T> { + + /** + * 鑷畾涔夎皟璇曞伐鍏风被 + * @return + */ + public static void PrintLog(String str){ + // 绫诲悕 + String className = Thread.currentThread().getStackTrace()[2].getClassName(); + // 鍑芥暟鍚� + String methodName = Thread.currentThread().getStackTrace()[2].getMethodName(); + System.out.println("\033[1;94m" + className + "-->" + methodName + "-->" + str + "\033[0m"); + } + + /** + * 鏃ユ湡宸ュ叿绫� + * @return + */ + public static String MyDateFormat(){ + //鑾峰彇鏃ユ湡 + //瀵� import java.util.Date; 涓嬬殑鍖� + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + return sdf.format(date); + } + + /** + * 鑾峰彇闅忔満鍔犲瘑鐩� + * @param n 浣嶆暟 + * @return 杩斿洖闅忔満鍔犲瘑鐩� + */ + public static String getSalt(int n) { + char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!@#$%^&*()+-=/[];~.".toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < n; i++) { + char c = chars[new Random().nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + /** + * 鑾峰彇闅忔満鏁板瓧 + * @param n 浣嶆暟 + * @return 杩斿洖闅忔満鍊� + */ + public static String getNumber(int n) { + char[] chars = "1234567890".toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < n; i++) { + char c = chars[new Random().nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + public static String getTimeSixNumberCode(String prefix){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String format = simpleDateFormat.format(new Date()); + String timeStr = format.replace("-", ""); + long incrNum = RedisUtil.incr("num", 1); + if(incrNum == 1){ + RedisUtil.expire("num", 60 * 60 * 24); + } + String sixIncr = String.format("%06d", incrNum); + return prefix + timeStr + sixIncr; + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/RedisUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/RedisUtil.java new file mode 100644 index 0000000..cab09bf --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/RedisUtil.java @@ -0,0 +1,622 @@ +package com.yuanchu.limslaboratory.utils; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Component +public class RedisUtil { + private static RedisTemplate<String, Object> redisTemplate; + public static RedisTemplate<String, Object> getRedisTemplate() { + return redisTemplate; + } + @Autowired + private RedisUtil(RedisConnectionFactory redisConnectionFactory){ + // redisTemplate妯℃澘鍒濆鍖� + redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + + // 灏嗗璞″簭鍒楀寲 + ObjectMapper om=new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, + ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + + // String鐨勫簭鍒楀寲 + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + // json搴忓垪鍖栭厤缃� + Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer<>(Object.class); + jackson2JsonRedisSerializer.setObjectMapper(om); + //key閲囩敤String鐨勫簭鍒楀寲鏂瑰紡 + redisTemplate.setKeySerializer(stringRedisSerializer); + //hash鐨刱ey涔熼噰鐢⊿tring 鐨勫簭鍒楀寲鏂瑰紡 + redisTemplate.setHashKeySerializer(stringRedisSerializer); + //value鐨勫簭鍒楀寲鏂瑰紡閲囩敤jackson鐨勬柟寮� + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); +// //hash鐨剉alue搴忓垪鍖栨柟寮忛噰鐢╦ackson + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.afterPropertiesSet(); + } + + // =============================common============================ + /** + * 鎸囧畾缂撳瓨澶辨晥鏃堕棿 + * @param key 閿� + * @param time 鏃堕棿(绉�) + */ + public static boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 鏍规嵁key 鑾峰彇杩囨湡鏃堕棿 + * @param key 閿� 涓嶈兘涓簄ull + * @return 鏃堕棿(绉�) 杩斿洖0浠h〃涓烘案涔呮湁鏁� + */ + public static long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + + /** + * 鍒ゆ柇key鏄惁瀛樺湪 + * @param key 閿� + * @return true 瀛樺湪 false涓嶅瓨鍦� + */ + public static boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鍒犻櫎缂撳瓨 + * @param key 鍙互浼犱竴涓�� 鎴栧涓� + */ +// @SuppressWarnings("unchecked") + public static void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete(Arrays.asList(key)); +// redisTemplate.delete(CollectionUtils.arrayToList(key)); + } + } + } + + /** + * 鑾峰彇骞跺垹闄ょ紦瀛� + * @param key 閿� + * @return 鍊� + */ + public static Object getAndDelete(String key) { + try{ + return key == null ? null : get(key); + }finally { + del(key); + } + } + + // ============================String============================= + + /** + * 鏅�氱紦瀛樿幏鍙� + * @param key 閿� + * @return 鍊� + */ + public static Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 鏅�氱紦瀛樻斁鍏� + * @param key 閿� + * @param value 鍊� + * @return true鎴愬姛 false澶辫触 + */ + + public static boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鏅�氱紦瀛樻斁鍏ュ苟璁剧疆鏃堕棿 + * @param key 閿� + * @param value 鍊� + * @param time 鏃堕棿(绉�) time瑕佸ぇ浜�0 濡傛灉time灏忎簬绛変簬0 灏嗚缃棤闄愭湡 + * @return true鎴愬姛 false 澶辫触 + */ + + public static boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES); + } else { + // 鍙慨鏀瑰弬鏁颁笉淇敼ttl + redisTemplate.opsForValue().set(key, value, 0); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 閫掑 + * @param key 閿� + * @param delta 瑕佸鍔犲嚑(澶т簬0) + */ + public static long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("閫掑鍥犲瓙蹇呴』澶т簬0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + + /** + * 閫掑噺 + * @param key 閿� + * @param delta 瑕佸噺灏戝嚑(灏忎簬0) + */ + public static long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("閫掑噺鍥犲瓙蹇呴』澶т簬0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + + // ================================Map================================= + + /** + * HashGet + * @param key 閿� 涓嶈兘涓簄ull + * @param item 椤� 涓嶈兘涓簄ull + */ + public static Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 鑾峰彇hashKey瀵瑰簲鐨勬墍鏈夐敭鍊� + * @param key 閿� + * @return 瀵瑰簲鐨勫涓敭鍊� + */ + public static Map<Object, Object> hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * @param key 閿� + * @param map 瀵瑰簲澶氫釜閿�� + */ + public static boolean hmset(String key, Map<String, Object> map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * HashSet 骞惰缃椂闂� + * @param key 閿� + * @param map 瀵瑰簲澶氫釜閿�� + * @param time 鏃堕棿(绉�) + * @return true鎴愬姛 false澶辫触 + */ + public static boolean hmset(String key, Map<String, Object> map, long time) { + try { + if (time > 0) { + redisTemplate.opsForHash().putAll(key, map); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鍚戜竴寮爃ash琛ㄤ腑鏀惧叆鏁版嵁,濡傛灉涓嶅瓨鍦ㄥ皢鍒涘缓 + * + * @param key 閿� + * @param item 椤� + * @param value 鍊� + * @return true 鎴愬姛 false澶辫触 + */ + public static boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 鍚戜竴寮爃ash琛ㄤ腑鏀惧叆鏁版嵁,濡傛灉涓嶅瓨鍦ㄥ皢鍒涘缓 + * + * @param key 閿� + * @param item 椤� + * @param value 鍊� + * @param time 鏃堕棿(绉�) 娉ㄦ剰:濡傛灉宸插瓨鍦ㄧ殑hash琛ㄦ湁鏃堕棿,杩欓噷灏嗕細鏇挎崲鍘熸湁鐨勬椂闂� + * @return true 鎴愬姛 false澶辫触 + */ + public static boolean hset(String key, String item, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForHash().put(key, item, value); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 鍒犻櫎hash琛ㄤ腑鐨勫�� + * + * @param key 閿� 涓嶈兘涓簄ull + * @param item 椤� 鍙互浣垮涓� 涓嶈兘涓簄ull + */ + public static void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + + /** + * 鍒ゆ柇hash琛ㄤ腑鏄惁鏈夎椤圭殑鍊� + * + * @param key 閿� 涓嶈兘涓簄ull + * @param item 椤� 涓嶈兘涓簄ull + * @return true 瀛樺湪 false涓嶅瓨鍦� + */ + public static boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + + /** + * hash閫掑 濡傛灉涓嶅瓨鍦�,灏变細鍒涘缓涓�涓� 骞舵妸鏂板鍚庣殑鍊艰繑鍥� + * + * @param key 閿� + * @param item 椤� + * @param by 瑕佸鍔犲嚑(澶т簬0) + */ + public static double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + + /** + * hash閫掑噺 + * + * @param key 閿� + * @param item 椤� + * @param by 瑕佸噺灏戣(灏忎簬0) + */ + public static double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + + // ============================set============================= + + /** + * 鏍规嵁key鑾峰彇Set涓殑鎵�鏈夊�� + * @param key 閿� + */ + public static Set<Object> sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 鏍规嵁value浠庝竴涓猻et涓煡璇�,鏄惁瀛樺湪 + * + * @param key 閿� + * @param value 鍊� + * @return true 瀛樺湪 false涓嶅瓨鍦� + */ + public static boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 灏嗘暟鎹斁鍏et缂撳瓨 + * + * @param key 閿� + * @param values 鍊� 鍙互鏄涓� + * @return 鎴愬姛涓暟 + */ + public static long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 灏唖et鏁版嵁鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param time 鏃堕棿(绉�) + * @param values 鍊� 鍙互鏄涓� + * @return 鎴愬姛涓暟 + */ + public static long sSetAndTime(String key, long time, Object... values) { + try { + Long count = (long)values.length; + if (time > 0) { + count = redisTemplate.opsForSet().add(key, values); + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 鑾峰彇set缂撳瓨鐨勯暱搴� + * + * @param key 閿� + */ + public static long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 绉婚櫎鍊间负value鐨� + * + * @param key 閿� + * @param values 鍊� 鍙互鏄涓� + * @return 绉婚櫎鐨勪釜鏁� + */ + + public static long setRemove(String key, Object... values) { + try { + return redisTemplate.opsForSet().remove(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + // ===============================list================================= + + /** + * 鑾峰彇list缂撳瓨鐨勫唴瀹� + * + * @param key 閿� + * @param start 寮�濮� + * @param end 缁撴潫 0 鍒� -1浠h〃鎵�鏈夊�� + */ + public static List<Object> lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 鑾峰彇list缂撳瓨鐨勯暱搴� + * + * @param key 閿� + */ + public static long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 閫氳繃绱㈠紩 鑾峰彇list涓殑鍊� + * + * @param key 閿� + * @param index 绱㈠紩 index>=0鏃讹紝 0 琛ㄥご锛�1 绗簩涓厓绱狅紝渚濇绫绘帹锛沬ndex<0鏃讹紝-1锛岃〃灏撅紝-2鍊掓暟绗簩涓厓绱狅紝渚濇绫绘帹 + */ + public static Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param value 鍊� + */ + public static boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * @param key 閿� + * @param value 鍊� + * @param time 鏃堕棿(绉�) + */ + public static boolean lSet(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForList().rightPush(key, value); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param value 鍊� + * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触 + */ + public static boolean lSet(String key, List<Object> value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param value 鍊� + * @param time 鏃堕棿(绉�) + * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触 + */ + public static boolean lSet(String key, List<Object> value, long time) { + try { + if (time > 0) { + redisTemplate.opsForList().rightPushAll(key, value); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鏍规嵁绱㈠紩淇敼list涓殑鏌愭潯鏁版嵁 + * + * @param key 閿� + * @param index 绱㈠紩 + * @param value 鍊� + * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触 + */ + + public static boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 绉婚櫎N涓�间负value + * + * @param key 閿� + * @param count 绉婚櫎澶氬皯涓� + * @param value 鍊� + * @return 绉婚櫎鐨勪釜鏁� + */ + + public static long lRemove(String key, long count, Object value) { + try { + return redisTemplate.opsForList().remove(key, count, value); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } +} + diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java new file mode 100644 index 0000000..96ba602 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java @@ -0,0 +1,51 @@ +package com.yuanchu.limslaboratory.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class SpringUtil implements ApplicationContextAware { + private static ApplicationContext context; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + context = applicationContext; + } + + public static void set(ApplicationContext applicationContext) { + context = applicationContext; + } + + /** + * 閫氳繃瀛楄妭鐮佽幏鍙� + * @param beanClass + * @param <T> + * @return + */ + public static <T> T getBean(Class<T> beanClass) { + return context.getBean(beanClass); + } + + /** + * 閫氳繃BeanName鑾峰彇 + * @param beanName + * @param <T> + * @return + */ + public static <T> T getBean(String beanName) { + return (T) context.getBean(beanName); + } + + /** + * 閫氳繃beanName鍜屽瓧鑺傜爜鑾峰彇 + * @param name + * @param beanClass + * @param <T> + * @return + */ + public static <T> T getBean(String name, Class<T> beanClass) { + return context.getBean(name, beanClass); + } +} diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/vo/Result.java b/framework/src/main/java/com/yuanchu/limslaboratory/vo/Result.java new file mode 100644 index 0000000..ab0385c --- /dev/null +++ b/framework/src/main/java/com/yuanchu/limslaboratory/vo/Result.java @@ -0,0 +1,53 @@ +package com.yuanchu.limslaboratory.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Result<T> { + + @ApiModelProperty(value = "鍝嶅簲鐮侊細200鎴愬姛锛�201澶辫触") + private int code; + + @ApiModelProperty(value = "鍝嶅簲娑堟伅") + private String message; + + @ApiModelProperty(value = "鍝嶅簲鍙傛暟") + private T data; + + public static <T> Result<T> success(){ + return new Result<>(200, "success",null); + } + + public static <T> Result<T> success(String message){ + return new Result<>(200, message,null); + } + + public static <T> Result<T> success(T data){ + return new Result<>(200, "success",data); + } + + public static <T> Result<T> success(String message, T data){ + return new Result<>(200, message,data); + } + + public static <T> Result<T> fail(){ + return new Result<>(201, "fail", null); + } + + public static <T> Result<T> fail(String message){ + return new Result<>(201, message, null); + } + + public static <T> Result<T> fail(Integer code){ + return new Result<>(code, "fail", null); + } + + public static <T> Result<T> fail(Integer code, String message){ + return new Result<>(code, message, null); + } +} diff --git a/inspection-server/pom.xml b/inspection-server/pom.xml new file mode 100644 index 0000000..8a07947 --- /dev/null +++ b/inspection-server/pom.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>lims-laboratory</artifactId> + <groupId>com.yuanchu</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>inspection-server</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>inspection-server</name> + <description>inspection-server</description> + + <packaging>jar</packaging> + + <dependencies> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>framework</artifactId> + <version>${project.parent.version}</version> + </dependency> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>standard-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>laboratory-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + <dependency> + <groupId>cn.hutool</groupId> + <artifactId>hutool-all</artifactId> + <version>5.8.12</version> + </dependency> + </dependencies> +</project> diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java new file mode 100644 index 0000000..dd191cd --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java @@ -0,0 +1,139 @@ +package com.yuanchu.limslaboratory.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; + +import java.text.ParseException; +import java.util.*; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.yuanchu.limslaboratory.pojo.Inspection; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; +import com.yuanchu.limslaboratory.service.LinkBasicInformationService; +import com.yuanchu.limslaboratory.service.RawMaterialService; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.service.InspectionService; +import javax.annotation.Resource; + +/** + * 鐢宠琛�(Inspection)琛ㄦ帶鍒跺眰 + * + * @author zss + * @since 2023-08-03 13:03:36 + */ +@Api(tags = "璇曢獙绠$悊-->妫�楠岀敵璇�") +@RestController +@RequestMapping("/inspection") +public class InspectionController { + + @Autowired + private InspectionService inspectionService; + + @Resource + RawMaterialService rawMaterialService; + + @Resource + LinkBasicInformationService linkBasicInformationService; + + @ApiOperation(value = "鏌ヨ妫�楠岀敵璇峰崟鍒楄〃") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "message", value = "鐢宠鍗曞彿/鍘熸潗鏂欏悕绉�", dataTypeClass = String.class) + }) + @GetMapping("/selectInspectsList") + public Result selectInspectsList(int pageSize, int countSize, String message) { + IPage<Map<String, Object>> inspectionPage = inspectionService.selectInspectsList(new Page<Object>(pageSize, countSize), message); + Map<String, Object> map = new HashMap<>(); + map.put("total", inspectionPage.getTotal()); + map.put("row", inspectionPage.getRecords()); + return Result.success(map); + } + + + @ApiOperation(value = "鏌ヨ鎵�鏈夋姤妫�") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "type", value = "绫诲瀷", dataTypeClass = Integer.class, required = true) + }) + @GetMapping("/selectAll") + public Result selectAll(Integer type) { + switch (type) { + case 0 : + //鍘熸潗鏂� + return Result.success(rawMaterialService.selectRawmaAll()); + case 1 : + //濮旀墭鍗� + return Result.success(linkBasicInformationService.selectLinkAll()); + case 2 : + //鎴愬搧妫�楠� + return Result.success("璇疯緭鍏ユ楠屼俊鎭�!"); + } + return Result.fail("绫诲瀷閿欒!"); + } + + + @ApiOperation(value = "閫夋嫨鍘熸潗鏂欐姤妫�") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "id", value = "鍘熸潗鏂欐姤妫�鍗昳d", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "startTime", value = "妫�楠屽紑濮嬫棩鏈�", dataTypeClass = String.class, required = true), + @ApiImplicitParam(name = "endTime", value = "妫�楠岀粨鏉熸棩鏈�", dataTypeClass = String.class, required = true) + }) + @GetMapping("/selectRawmaById") + public Result selectRawmaById(Integer id, String startTime, String endTime) throws ParseException { + return Result.success(rawMaterialService.selectRawmaById(id,startTime,endTime)); + } + + + @ApiOperation(value = "閫夋嫨濮旀墭鎶ユ鍜屾牱鍝�") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "bid", value = "濮旀墭鎶ユ鍗昳d", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "did", value = "濮旀墭鎶ユ鏍峰搧id", dataTypeClass = Integer.class, required = true) + }) + @GetMapping("/selectLinkByid") + public Result selectLinkByid(Integer bid, Integer did) { + return Result.success(linkBasicInformationService.selectLinkByid(bid, did)); + } + + + @ApiOperation(value = "鏂板妫�楠屽崟") + @PostMapping("/addInspect") + public Result addInspect(@RequestHeader("token") String token, @RequestBody InspectionVo inspectionVo) throws Exception { + Object object = RedisUtil.get(token); + Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class); + return Result.success(inspectionService.addInspect((Integer) unmarshal.get("id"), inspectionVo)); + } + + @ApiOperation(value = "鏍规嵁妫�楠屽崟id鏌ヨ鍘熸潗鏂欐楠屽崟璇︽儏") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true) + }) + @GetMapping("/selectInspectsListById") + public Result selectInspectsListById(Integer id) { + return Result.success(inspectionService.selectInspectsListById(id)); + } + + @ApiOperation(value = "涓婃姤(鏇存柊妫�楠岀姸鎬�)") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true) + }) + @PostMapping("/updateInspectsById") + public Result updateInspectsById(Integer id) { + //濡傛灉宸茬粡涓婃姤浜嗕笉鑳藉啀涓�娆′笂鎶� + Inspection inspection = inspectionService.getById(id); + if (ObjectUtils.isNotEmpty(inspection.getInspectionStatus())) { + return Result.fail("宸茬粡涓婃姤杩囦簡,涓嶈兘鍐嶆涓婃姤!"); + } + return Result.success(inspectionService.updateInspectsById(id)); + } + + +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialController.java new file mode 100644 index 0000000..63ace1b --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialController.java @@ -0,0 +1,23 @@ +package com.yuanchu.limslaboratory.controller; + +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.yuanchu.limslaboratory.service.InspectionMaterialService; + +/** + * (鏍峰搧)妫�楠屽崟閲岄潰鐨勭墿鏂�(InspectionMaterial)琛ㄦ帶鍒跺眰 + * + * @author zss + * @since 2023-08-03 13:04:28 + */ +@Api(tags = "(鏍峰搧)妫�楠屽崟閲岄潰鐨勭墿鏂欐帴鍙�") +@RestController +@RequestMapping("/inspectionMaterial") +public class InspectionMaterialController { + + @Autowired + private InspectionMaterialService inspectionMaterialService; + +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionProductController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionProductController.java new file mode 100644 index 0000000..8203159 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionProductController.java @@ -0,0 +1,79 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.yuanchu.limslaboratory.pojo.InspectionProduct; +import com.yuanchu.limslaboratory.pojo.vo.InsProductVo; +import com.yuanchu.limslaboratory.service.InstrumentService; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.service.InspectionProductService; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * 鐢宠鍗曚笅鐗╂枡涓殑椤圭洰(InspectionProduct)琛ㄦ帶鍒跺眰 + * + * @author zss + * @since 2023-08-03 13:04:54 + */ +@Api(tags = "璇曢獙绠$悊-->妫�楠岀敵璇�-->妫�楠岄」鐩�") +@RestController +@RequestMapping("/inspectionProduct") +public class InspectionProductController { + + @Autowired + private InspectionProductService inspectionProductService; + + @Resource + InstrumentService instrumentService; + + @ApiOperation(value = "鏌ヨ鎵�鏈夎澶�") + @GetMapping("/selectInstrument") + public Result selectInstrument() { + return Result.success(instrumentService.selectInstrument()); + } + + @ApiOperation("閫夋嫨璁惧淇℃伅") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "id", value = "璁惧ID", dataTypeClass = Integer.class, required = true) + }) + @GetMapping("/selectInstrumentById") + public Result selectInstrumentById(Integer id) { + String equipmentName = instrumentService.getById(id).getEquipmentName(); + return Result.success(equipmentName); + } + + + @ApiOperation(value = "鏇存柊妫�楠岄」鐩�") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "testValue", value = "妫�娴嬪��", dataTypeClass = String.class, required = true), + @ApiImplicitParam(name = "required", value = "鏍囧噯鍊�", dataTypeClass = String.class, required = true), + @ApiImplicitParam(name = "internal", value = "鍐呮帶鍊�", dataTypeClass = String.class, required = true), + @ApiImplicitParam(name = "name", value = "椤圭洰鍚嶇О", dataTypeClass = String.class, required = true), + @ApiImplicitParam(name = "inspectionMaterialId", value = "鍐呮帶鍊�", dataTypeClass = Integer.class, required = true) + }) + @PostMapping("/updateInsProduct") + public Result updateInsProduct(@RequestHeader("token") String token, @RequestBody InspectionProduct inspectionProduct) throws Exception { + Object object = RedisUtil.get(token); + Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class); + Integer userId = (Integer) unmarshal.get("id"); + return Result.success(inspectionProductService.updateInsProduct(userId,inspectionProduct)); + } + +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java new file mode 100644 index 0000000..22de441 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java @@ -0,0 +1,68 @@ +package com.yuanchu.limslaboratory.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.service.LinkBasicInformationService; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +@Api(tags = "鎶ユ绠$悊-->濮旀墭妫�楠�") +@RestController +@RequestMapping("/link-basic-table") +public class LinkBasicInformationController { + + @Autowired + private LinkBasicInformationService linkBasicInformationService; + + @ApiOperation("閾炬帴-->鑾峰彇閾炬帴") + @GetMapping("/link") + public Result<?> getLink() { + Object link1 = null; + try { + link1 = RedisUtil.get("link"); + } catch (Exception e) { + String uuid = IdWorker.get32UUID(); + RedisUtil.set("link", uuid, 60 * 24); + return Result.success("success", uuid); + } + return Result.success(link1); + } + + @ApiOperation(value = "鍒嗛〉琛ㄦ牸") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "entrustCoding", value = "濮旀墭缂栧彿", dataTypeClass = String.class), + @ApiImplicitParam(name = "sampleName", value = "鏍峰搧鍚嶇О", dataTypeClass = String.class), + @ApiImplicitParam(name = "entrusted", value = "濮旀墭鍗曚綅", dataTypeClass = String.class), + @ApiImplicitParam(name = "inspectionStatus", value = "妫�楠岀姸鎬�", dataTypeClass = Integer.class) + }) + @GetMapping("/page") + public Result<?> getLinkBasicPage(Integer pageNo, Integer pageSize, String entrustCoding, String sampleName, String entrusted, Integer inspectionStatus) { + IPage<Map<String, Object>> linkBasicPage = linkBasicInformationService.getLinkBasicPage(new Page<Object>(pageNo, pageSize), entrustCoding, sampleName, entrusted, inspectionStatus); + Map<String, Object> map = new HashMap<>(); + map.put("total", linkBasicPage.getTotal()); + map.put("row", linkBasicPage.getRecords()); + return Result.success(map); + } +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java new file mode 100644 index 0000000..82c0065 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java @@ -0,0 +1,82 @@ +package com.yuanchu.limslaboratory.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.yuanchu.limslaboratory.pojo.LinkBasicInformation; +import com.yuanchu.limslaboratory.pojo.Material; +import com.yuanchu.limslaboratory.service.LinkBasicInformationService; +import com.yuanchu.limslaboratory.service.MaterialService; +import com.yuanchu.limslaboratory.service.StandardService; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +@Api(tags = "鎶ユ绠$悊-->濮旀墭妫�楠�") +@RestController +@RequestMapping("/link-basic") +public class LinkDetectionController { + + @Autowired + private LinkBasicInformationService linkBasicInformationService; + + @Autowired + private MaterialService materialService; + + @Autowired + private StandardService standardService; + + @ApiOperation("閾炬帴-->鑾峰彇鏍峰搧鍚嶇О") + @GetMapping("/material") + public Result<?> getMaterialIdAndName(@RequestHeader("link") String link) { + String redisLink = RedisUtil.get("link").toString(); + if (redisLink.equals(link)){ + LambdaQueryWrapper<Material> wrapper = new LambdaQueryWrapper<>(); + wrapper.select(Material::getId, Material::getName, Material::getCode); + List<Map<String, Object>> maps = materialService.listMaps(wrapper); + return Result.success(maps); + } + return Result.fail("鎶辨瓑閾炬帴閿欒鎴栧凡杩囨湡锛�"); + } + + @ApiOperation("閾炬帴-->鑾峰彇瑙勬牸鍨嬪彿") + @GetMapping("/specification") + public Result<?> getSpecificationIdAndName(@RequestHeader("link") String link, String materialId) { + String redisLink = RedisUtil.get("link").toString(); + if (redisLink.equals(link)){ + List<Map<String, Object>> specificationIdAndName = standardService.getSpecificationIdAndName(materialId); + return Result.success(specificationIdAndName); + } + return Result.fail("鎶辨瓑閾炬帴閿欒鎴栧凡杩囨湡锛�"); + } + + @ApiOperation("閾炬帴-->娣诲姞妫�楠岀敵璇峰崟") + @PostMapping("/addInspection") + public Result<?> addLinkBasicInformation(@RequestHeader("link") String link, @RequestBody LinkBasicInformation linkBasicInformation) { + String redisLink = RedisUtil.get("link").toString(); + if (redisLink.equals(link)){ + String code = linkBasicInformationService.addLinkBasicInformation(linkBasicInformation); + if (!ObjectUtils.isEmpty(code)){ + return Result.success("娣诲姞鎴愬姛锛�", code); + } else { + return Result.fail("娣诲姞澶辫触!"); + } + } + return Result.fail("鎶辨瓑閾炬帴閿欒鎴栧凡杩囨湡锛�"); + + } +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/RawMaterialController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/RawMaterialController.java new file mode 100644 index 0000000..a5d2ce3 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/RawMaterialController.java @@ -0,0 +1,57 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.RawMaterial; +import com.yuanchu.limslaboratory.service.RawMaterialService; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +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.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-28 + */ +@Api(tags = "鎶ユ绠$悊-->鍘熸潗鏂欐姤妫�-->椤甸潰鐗堟湰琛�") +@RestController +@RequestMapping("/raw-material") +public class RawMaterialController { + + @Autowired + private RawMaterialService rawMaterialService; + + @ApiOperation("鏌ヨ鎵�鏈夋楠岃鍒掑垎閰�") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "materialCoding", value = "鏉愭枡缂栫爜", dataTypeClass = String.class), + @ApiImplicitParam(name = "materialName", value = "鏉愭枡鍚嶇О", dataTypeClass = String.class), + @ApiImplicitParam(name = "condition", value = "鐘舵��", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "createTime", value = "鏉ユ枡鏃ユ湡", dataTypeClass = String.class) + }) + @GetMapping("/selectAll") + public Result<?> selectRawMaterial(Integer pageSize, Integer pageNo, String materialCoding, String materialName, Integer condition, String createTime) { + IPage<RawMaterial> iPage = rawMaterialService.selectRawMaterial(materialCoding, materialName, condition, createTime, new Page<Objects>(pageNo, pageSize)); + Map<String, Object> map = new HashMap<>(); + map.put("row", iPage.getRecords()); + map.put("total", iPage.getTotal()); + return Result.success(map); + } +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMapper.java new file mode 100644 index 0000000..dd00306 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMapper.java @@ -0,0 +1,29 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Inspection; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; + +import java.util.List; +import java.util.Map; + +/** + * 鐢宠琛�(Inspection)琛ㄦ暟鎹簱璁块棶灞� + * + * @author zss + * @since 2023-08-03 13:03:36 + */ +public interface InspectionMapper extends BaseMapper<Inspection> { + + + /** + * 鏌ヨ妫�楠岀敵璇峰崟鍒楄〃 + * @param page + * @param message + * @return + */ + IPage<Map<String, Object>> selectInspectsList(Page<Object> page, String message); +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMaterialMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMaterialMapper.java new file mode 100644 index 0000000..3145666 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMaterialMapper.java @@ -0,0 +1,15 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yuanchu.limslaboratory.pojo.InspectionMaterial; + +/** + * (鏍峰搧)妫�楠屽崟閲岄潰鐨勭墿鏂�(InspectionMaterial)琛ㄦ暟鎹簱璁块棶灞� + * + * @author zss + * @since 2023-08-03 13:04:28 + */ +public interface InspectionMaterialMapper extends BaseMapper<InspectionMaterial> { + +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductMapper.java new file mode 100644 index 0000000..f73d82b --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductMapper.java @@ -0,0 +1,15 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yuanchu.limslaboratory.pojo.InspectionProduct; + +/** + * 鐢宠鍗曚笅鐗╂枡涓殑椤圭洰(InspectionProduct)琛ㄦ暟鎹簱璁块棶灞� + * + * @author zss + * @since 2023-08-03 13:04:54 + */ +public interface InspectionProductMapper extends BaseMapper<InspectionProduct> { + +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkBasicInformationMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkBasicInformationMapper.java new file mode 100644 index 0000000..95e0c2a --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkBasicInformationMapper.java @@ -0,0 +1,37 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.LinkBasicInformation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +public interface LinkBasicInformationMapper extends BaseMapper<LinkBasicInformation> { + + IPage<Map<String, Object>> getLinkBasicPage(Page<Object> page, String entrustCoding, String sampleName, String entrusted, Integer inspectionStatus); + + /** + * 鏌ヨ鎵�鏈夊鎵樼敵璇峰拰鏍峰搧 + * @return + */ + List<Map<String, Object>> selectLinkAll(); + + /** + * 閫夋嫨濮旀墭鐢宠鍜屾牱鍝� + * @param bid + * @param did + * @return + */ + InspectionVo selectLinkByid(Integer bid, Integer did); +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkDetectionMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkDetectionMapper.java new file mode 100644 index 0000000..7e6da26 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/LinkDetectionMapper.java @@ -0,0 +1,17 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.yuanchu.limslaboratory.mybatis_config.MyBaseMapper; +import com.yuanchu.limslaboratory.pojo.LinkDetection; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +public interface LinkDetectionMapper extends MyBaseMapper<LinkDetection> { + +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/RawMaterialMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/RawMaterialMapper.java new file mode 100644 index 0000000..567cf9f --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/RawMaterialMapper.java @@ -0,0 +1,30 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.RawMaterial; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-28 + */ +public interface RawMaterialMapper extends BaseMapper<RawMaterial> { + + IPage<RawMaterial> selectRawMaterial(String materialCoding, String materialName, Integer condition, String createTime, Page<Objects> page); + + + List<RawMaterial> selectRawmaAll(); + + InspectionVo selectRawmaById(Integer id); +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Inspection.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Inspection.java new file mode 100644 index 0000000..3af517c --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Inspection.java @@ -0,0 +1,89 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.*; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.io.Serializable; + +/** + * 鐢宠琛�(Inspection)琛ㄥ疄浣撶被 + * + * @author zss + * @since 2023-08-03 13:04:05 + */ +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Builder +@TableName("inspection") +public class Inspection implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 鐢宠鍗曠紪鍙� + **/ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 鐢宠鍗曠紪鐮� + **/ + private String code; + + /** + * 妫�楠岀被鍨� 0锛氬師鏉愭枡锛�1锛氫骇鍝侊紱2锛氬崐鎴愬搧锛� + **/ + private Integer type; + + /** + * 妫�楠岀姸鎬侊細1锛氬悎鏍硷紱0锛氫笉鍚堟牸 + **/ + private Integer inspectionStatus; + + /** + * ${column.comment} + **/ + private Integer state; + + /** + * 鐧昏鏃ユ湡 + **/ + @TableField(fill = FieldFill.INSERT) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date createTime; + + /** + * ${column.comment} + **/ + @TableField(fill = FieldFill.INSERT_UPDATE) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date updateTime; + + /** + * 鍏宠仈 鐧昏浜猴紙鐢ㄦ埛id锛� + **/ + private Integer userId; + + /** + * 妫�楠屽紑濮嬫棩鏈� + **/ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date startTime; + + /** + * 妫�楠岀粨鏉熸棩鏈� + **/ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date endTime; +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionMaterial.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionMaterial.java new file mode 100644 index 0000000..55311dc --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionMaterial.java @@ -0,0 +1,97 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.*; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.io.Serializable; + +/** + * (鏍峰搧)妫�楠屽崟閲岄潰鐨勭墿鏂�(InspectionMaterial)琛ㄥ疄浣撶被 + * + * @author zss + * @since 2023-08-03 13:04:28 + */ +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Builder +@TableName("inspection_material") +public class InspectionMaterial implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + **/ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 鐗╂枡缂栫爜 + **/ + private String code; + + /** + * 鐗╂枡鍚嶇О + **/ + private String name; + + /** + * 鎶ユ鏁伴噺-鐗╂枡鏁伴噺 + **/ + private Integer num; + + /** + * 鍗曚綅 + **/ + private String unit; + + /** + * 渚涘簲鍟� + **/ + private String supplier; + + /** + * 瑙勬牸鍚嶇О-鍨嬪彿鍚嶇О + **/ + private String specifications; + + /** + * 鏉ユ枡鏃ユ湡 + **/ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date formTime; + + /** + * ${column.comment} + **/ + private Integer state; + + /** + * ${column.comment} + **/ + @TableField(fill = FieldFill.INSERT) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date createTime; + + /** + * ${column.comment} + **/ + @TableField(fill = FieldFill.INSERT_UPDATE) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date updateTime; + + /** + * 鍏宠仈 鐢宠鍗昳d + **/ + private Integer inspectionId; +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionProduct.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionProduct.java new file mode 100644 index 0000000..978a274 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/InspectionProduct.java @@ -0,0 +1,100 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.*; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.io.Serializable; + +/** + * 鐢宠鍗曚笅鐗╂枡涓殑椤圭洰(InspectionProduct)琛ㄥ疄浣撶被 + * + * @author zss + * @since 2023-08-03 13:04:55 + */ +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Builder +@TableName("inspection_product") +public class InspectionProduct implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 椤圭洰id + **/ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 椤圭洰鍚嶇О + **/ + private String name; + + /** + * 鍗曚綅 + **/ + private String unit; + + /** + * 瑕佹眰鍊� + **/ + private String required; + + /** + * 鍐呮帶鍊� + **/ + private String internal; + + /** + * 妫�娴嬪�� + **/ + private String testValue; + + /** + * 缁撹 0锛氫笉鍚堟牸锛�1锛氬悎鏍� + **/ + private Integer testState; + + /** + * ${column.comment} + **/ + private Integer state; + + /** + * ${column.comment} + **/ + @TableField(fill = FieldFill.INSERT) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date createTime; + + /** + * ${column.comment} + **/ + @TableField(fill = FieldFill.INSERT_UPDATE) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date updateTime; + + /** + * 鍏宠仈 鎶ユ鐗╂枡id + **/ + private Integer inspectionMaterialId; + + /** + * 鍏宠仈 鐢ㄦ埛id 璇曢獙鍛� + **/ + private Integer userId; + + /** + * 鍏宠仈 璁惧id + **/ + private Integer instrumentId; +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java new file mode 100644 index 0000000..60e4a5a --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java @@ -0,0 +1,89 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="LinkBasicInformation瀵硅薄", description="") +public class LinkBasicInformation implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭鑷", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "濮旀墭缂栫爜", hidden = true) + private String entrustCoding; + + @ApiModelProperty(value = "濮旀墭鍗曚綅", required = true, example = "闃块噷宸村反") + private String entrusted; + + @ApiModelProperty(value = "鑱旂郴浜�", required = true, example = "灏忛粦") + private String contacts; + + @ApiModelProperty(value = "鑱旂郴鐢佃瘽", required = true, example = "12321423432") + private String contactNumber; + + @ApiModelProperty(value = "鑱旂郴鍦板潃", required = true, example = "姹熻嫃鍗楅��") + private String contactAddress; + + @ApiModelProperty(value = "瀹屾垚鏈熼檺", required = true, example = "2023-08-03", dataType = "date") + private Date completionDeadline; + + @ApiModelProperty(value = "閫佹牱鏃堕棿", required = true, example = "2023-08-03", dataType = "date") + private Date inspectionTime; + + @ApiModelProperty(value = "閫佹牱鏂瑰紡:1閫佹牱;2涓婇棬", required = true, example = "1") + private Integer sampleDeliveryMode; + + @ApiModelProperty(value = "閫佹牱浜猴細濡傛灉閫佹牱鏂瑰紡閫夋嫨浜嗛�佹牱锛岄偅涔堝繀濉�", example = "灏忕櫧") + private String sampleSender; + + @ApiModelProperty(value = "閫佹牱浜虹數璇濓細濡傛灉閫佹牱鏂瑰紡閫夋嫨浜嗛�佹牱锛岄偅涔堝繀濉�", example = "123456789676") + private String sampleDeliveryPhone; + + @ApiModelProperty(value = "鎶ュ憡鏁�", required = true, example = "23") + private Integer reportNumber; + + @ApiModelProperty(value = "濮旀墭澶囨敞", example = "濮旀墭澶囨敞YPBH123456789YPBH123456789YPBH123456789") + private String entrustRemarks; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @TableField(exist = false) + @ApiModelProperty(value = "妫�楠屼俊鎭�") + private List<LinkDetection> linkDetectionList; +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java new file mode 100644 index 0000000..e62f2a8 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java @@ -0,0 +1,82 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="LinkDetection瀵硅薄", description="") +public class LinkDetection implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "鏍峰搧缂栧彿", required = true, example = "YPBH123456789") + private String sampleNumber; + + @ApiModelProperty(value = "鏍峰搧鍚嶇О", required = true, example = "鍙戝姩鏈�") + private String sampleName; + + @ApiModelProperty(value = "瑙勬牸鍨嬪彿", required = true, example = "GGXH-AAAAA") + private String specificationsModels; + + @NotBlank(message = "璇峰~鍐欏崟浣嶏紒") + @ApiModelProperty(value = "鍗曚綅", required = true, example = "鐧惧害") + private String unit; + + @NotNull(message = "璇峰~鍐欐牱鍝佹暟閲忥紒") + @ApiModelProperty(value = "鏍峰搧鏁伴噺", required = true, example = "20") + private Integer samplesNumber; + + @NotBlank(message = "璇曢獙涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "璇曢獙", required = true, example = "鍋氭ⅵ") + private String experiment; + + @ApiModelProperty(value = "澶囨敞", example = "閫氳繃浜�") + private String remarks; + + @ApiModelProperty(value = "LinkBasicInformation瀵硅薄Id", hidden = true) + private Integer linkBasicId; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @ApiModelProperty(value = "妫�楠屾棩鏈�", hidden = true) + private Date dateSurvey; + + @ApiModelProperty(value = "妫�楠岀姸鎬�", hidden = true) + private Integer inspectionStatus; +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/RawMaterial.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/RawMaterial.java new file mode 100644 index 0000000..372dd04 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/RawMaterial.java @@ -0,0 +1,84 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="RawMaterial瀵硅薄", description="") +public class RawMaterial implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "渚涘簲鍟嗗悕绉�") + private String supplierName; + + @ApiModelProperty(value = "鏉愭枡缂栫爜") + private String materialCoding; + + @ApiModelProperty(value = "鏉愭枡鍚嶇О") + private String materialName; + + @ApiModelProperty(value = "瑙勬牸鍨嬪彿") + private String specificationsModels; + + @ApiModelProperty(value = "鍗曚綅") + private String unit; + + @ApiModelProperty(value = "鏁伴噺") + private Integer quantity; + + @ApiModelProperty(value = "鎶ユ鏃ユ湡") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDateTime inspectionDate; + + @ApiModelProperty(value = "妫�楠屼汉") + private String surveyor; + + @ApiModelProperty(value = "妫�楠屾棩鏈�") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDateTime dateSurvey; + + @ApiModelProperty(value = "鐘舵��0:寰呮娴�;1:宸叉娴�") + private Integer condition; + +// @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; + + +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InsProductVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InsProductVo.java new file mode 100644 index 0000000..089d728 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InsProductVo.java @@ -0,0 +1,66 @@ +package com.yuanchu.limslaboratory.pojo.vo; + + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class InsProductVo implements Serializable { + + /** + * 椤圭洰鍚嶇О + **/ + @JsonSerialize + private String name; + + /** + * 鍗曚綅 + **/ + @JsonSerialize + private String unit; + + /** + * 鏍囧噯鍊� + **/ + @JsonSerialize + private String required; + + /** + * 鍐呮帶鍊� + **/ + @JsonSerialize + private String internal; + + /** + * 妫�娴嬪�� + **/ + @JsonSerialize + private String testValue; + + /** + * 缁撹 0锛氫笉鍚堟牸锛�1锛氬悎鏍� + **/ + @JsonSerialize + private Integer testState; + + /** + * 璁惧鍚嶇О + **/ + @JsonSerialize + private String instrumentName; + + /** + * 鍏宠仈 鐢宠鍗昳d + **/ + @JsonSerialize + private Integer inspectionMaterialId; + + /** + * 妫�楠屽憳 + **/ + @JsonSerialize + private String userName; +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectDetailVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectDetailVo.java new file mode 100644 index 0000000..16a58cb --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectDetailVo.java @@ -0,0 +1,94 @@ +package com.yuanchu.limslaboratory.pojo.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Data +//鏌ヨ妫�楠屽崟璇︽儏(妫�楠屽熀鏈俊鎭互鍙婃楠岄」鐩俊鎭�) +public class InspectDetailVo implements Serializable { + + /* 妫�楠岃鎯� */ + /** + * 鏉ユ枡鏃ユ湡 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date formTime; + + /** + * 渚涘簲鍟� + **/ + @JsonSerialize + private String supplier; + + /** + * 鍘熸潗鏂欑紪鐮� + */ + @JsonSerialize + private String code; + + /** + * 鍘熸潗鏂欏悕绉� + */ + @JsonSerialize + private String name; + + /** + * 鍨嬪彿瑙勬牸 + */ + @JsonSerialize + private String specifications; + + /** + * 鍗曚綅 + */ + @JsonSerialize + private String unit; + + /** + * 鏁伴噺 + */ + @JsonSerialize + private Integer num; + + /** + * 妫�楠屽紑濮嬫棩鏈� + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date startTime; + + + /** + * 妫�楠岀粨鏉熸棩鏈� + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date endTime; + + + /** + * 鎶ユ浜猴紙褰撳墠鐢ㄦ埛鍚嶏級 + */ + @JsonSerialize + private String userName; + + /* 妫�楠岄」鐩� */ + @JsonSerialize + private List<InsProductVo> insProducts; + + /* 妫�楠岀粨璁� */ + /** + * 鍚堟牸鐘舵�� 0锛氫笉鍚堟牸锛�1锛氬悎鏍� + */ + @JsonSerialize + private Integer inspectionStatus; +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java new file mode 100644 index 0000000..f804333 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java @@ -0,0 +1,76 @@ +package com.yuanchu.limslaboratory.pojo.vo; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; +import java.util.Date; +//鏂板妫�楠屽崟 +@Data +public class InspectionVo implements Serializable { + + /** + *妫�楠岀被鍨� 0锛氬師鏉愭枡锛�1锛氫骇鍝侊紱2锛氬崐鎴愬搧锛� + **/ + @JsonSerialize + private Integer type; + + /** + * 鏉ユ枡鏃ユ湡 + **/ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date formTime; + + /** + * 渚涘簲鍟� + **/ + @JsonSerialize + private String supplier; + + /** + * 鐗╂枡缂栫爜 + **/ + @JsonSerialize + private String mcode; + + /** + * 鐗╂枡鍚嶇О + **/ + @JsonSerialize + private String name; + + /** + * 瑙勬牸鍚嶇О-鍨嬪彿鍚嶇О + **/ + @JsonSerialize + private String specifications; + + /** + * 鍗曚綅 + **/ + @JsonSerialize + private String unit; + + /** + * 鎶ユ鏁伴噺-鐗╂枡鏁伴噺 + **/ + @JsonSerialize + private Integer num; + + /** + * 妫�楠屽紑濮嬫棩鏈� + **/ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date startTime; + + /** + * 妫�楠岀粨鏉熸棩鏈� + **/ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date endTime; +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionMaterialService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionMaterialService.java new file mode 100644 index 0000000..3c65806 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionMaterialService.java @@ -0,0 +1,15 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.InspectionMaterial; + +/** + * (鏍峰搧)妫�楠屽崟閲岄潰鐨勭墿鏂�(InspectionMaterial)琛ㄦ湇鍔℃帴鍙� + * + * @author zss + * @since 2023-08-03 13:04:28 + */ +public interface InspectionMaterialService extends IService<InspectionMaterial> { + +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionProductService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionProductService.java new file mode 100644 index 0000000..3a367c5 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionProductService.java @@ -0,0 +1,23 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.InspectionProduct; +import com.yuanchu.limslaboratory.pojo.vo.InsProductVo; + +/** + * 鐢宠鍗曚笅鐗╂枡涓殑椤圭洰(InspectionProduct)琛ㄦ湇鍔℃帴鍙� + * + * @author zss + * @since 2023-08-03 13:04:54 + */ +public interface InspectionProductService extends IService<InspectionProduct> { + + /** + * 鏇存柊妫�楠岄」鐩� + * @param userId + * @param inspectionProduct + * @return + */ + boolean updateInsProduct(Integer userId, InspectionProduct inspectionProduct); +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java new file mode 100644 index 0000000..e95c474 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java @@ -0,0 +1,53 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.Inspection; +import com.yuanchu.limslaboratory.pojo.vo.InspectDetailVo; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; + +import java.util.List; +import java.util.Map; + +/** + * 鐢宠琛�(Inspection)琛ㄦ湇鍔℃帴鍙� + * + * @author zss + * @since 2023-08-03 13:03:36 + */ +public interface InspectionService extends IService<Inspection> { + + + /** + *鏌ヨ妫�楠岀敵璇峰崟鍒楄〃 + * @param page + * @param message + * @return + */ + IPage<Map<String, Object>> selectInspectsList(Page<Object> page, String message); + + /** + * 鏂板妫�楠岀敵璇疯〃 + * @param id + * @param + * @return + */ + Integer addInspect(Integer id, InspectionVo inspectionVo); + + + /** + *鏍规嵁妫�楠屽崟id鏌ヨ鍘熸潗鏂欐楠屽崟璇︽儏 + * @param id + * @return + */ + InspectDetailVo selectInspectsListById(Integer id); + + /** + * 涓婃姤(鏇存柊妫�楠屽崟妫�楠岀粨鏋�) + * @param id + * @return + */ + boolean updateInspectsById(Integer id); +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java new file mode 100644 index 0000000..02b7207 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java @@ -0,0 +1,41 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.LinkBasicInformation; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +public interface LinkBasicInformationService extends IService<LinkBasicInformation> { + + @Transactional(rollbackFor = Exception.class) + String addLinkBasicInformation(LinkBasicInformation linkBasicInformation); + + IPage<Map<String, Object>> getLinkBasicPage(Page<Object> page, String entrustCoding, String sampleName, String entrusted, Integer inspectionStatus); + + /** + *鏌ヨ鎵�鏈夊鎵樻楠屽拰鏍峰搧 + * @return + */ + List<Map<String, Object>> selectLinkAll(); + + /** + * 鏍规嵁濮旀墭妫�楠宨d鍜屾牱鍝乮d鏌ヨ濮旀墭妫�楠屽拰鏍峰搧 + * @param bid + * @param did + * @return + */ + InspectionVo selectLinkByid(Integer bid, Integer did); +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkDetectionService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkDetectionService.java new file mode 100644 index 0000000..ecd44e5 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkDetectionService.java @@ -0,0 +1,20 @@ +package com.yuanchu.limslaboratory.service; + +import com.yuanchu.limslaboratory.pojo.LinkDetection; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +public interface LinkDetectionService extends IService<LinkDetection> { + + // 鎵归噺娣诲姞 + void insertListData(Integer id, List<LinkDetection> linkDetectionList); +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/RawMaterialService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/RawMaterialService.java new file mode 100644 index 0000000..143225f --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/RawMaterialService.java @@ -0,0 +1,41 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.RawMaterial; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; + +import java.text.ParseException; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-28 + */ +public interface RawMaterialService extends IService<RawMaterial> { + + IPage<RawMaterial> selectRawMaterial(String materialCoding, String materialName, Integer condition, String createTime, Page<Objects> page); + + /** + * 鏌ヨ鍘熸潗鏂欐楠� + * + * @return + */ + List<RawMaterial> selectRawmaAll(); + + /** + * 閫夋嫨鍘熸潗鏂欐姤妫� + * + * @param id + * @return + */ + InspectionVo selectRawmaById(Integer id, String startTime, String endTime) throws ParseException; +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialServiceImpl.java new file mode 100644 index 0000000..60be3c0 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialServiceImpl.java @@ -0,0 +1,19 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.mapper.InspectionMaterialMapper; +import com.yuanchu.limslaboratory.pojo.InspectionMaterial; +import com.yuanchu.limslaboratory.service.InspectionMaterialService; +import org.springframework.stereotype.Service; + +/** + * (鏍峰搧)妫�楠屽崟閲岄潰鐨勭墿鏂�(InspectionMaterial)琛ㄦ湇鍔″疄鐜扮被 + * + * @author zss + * @since 2023-08-03 13:04:28 + */ +@Service +public class InspectionMaterialServiceImpl extends ServiceImpl<InspectionMaterialMapper, InspectionMaterial> implements InspectionMaterialService { + +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionProductServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionProductServiceImpl.java new file mode 100644 index 0000000..c07063c --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionProductServiceImpl.java @@ -0,0 +1,90 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.mapper.InspectionProductMapper; +import com.yuanchu.limslaboratory.pojo.InspectionProduct; +import com.yuanchu.limslaboratory.pojo.vo.InsProductVo; +import com.yuanchu.limslaboratory.service.InspectionProductService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 鐢宠鍗曚笅鐗╂枡涓殑椤圭洰(InspectionProduct)琛ㄦ湇鍔″疄鐜扮被 + * + * @author zss + * @since 2023-08-03 13:04:54 + */ +@Service +public class InspectionProductServiceImpl extends ServiceImpl<InspectionProductMapper, InspectionProduct> implements InspectionProductService { + + @Resource + InspectionProductMapper inspectionProductMapper; + + //鏇存柊妫�楠岄」鐩� + @Override + public boolean updateInsProduct(Integer userId, InspectionProduct inspectionProduct) { + //璧嬪�兼楠屽憳id + inspectionProduct.setUserId(userId); + //鍒ゆ柇妫�娴嬪�兼槸鍚︽弧瓒虫爣鍑嗗�煎拰鍐呮帶鍊肩殑瑕佹眰,濡傛灉涓嶆弧瓒冲垯妫�楠岀粨璁轰负涓嶅悎鏍�0 + String testValue = inspectionProduct.getTestValue();//妫�楠屽�� + String required = inspectionProduct.getRequired();//鏍囧噯鍊� + String internal = inspectionProduct.getInternal();//鍐呮帶鍊� + inspectionProduct.setTestState(checkValues(required, internal, testValue)); + //鏍规嵁妫�楠岄」鐩悕鍜屽叧鑱旂殑妫�楠岀墿鏂檌d鏉ユ煡璇㈡楠岄」鐩殑鏁版嵁 + LambdaUpdateWrapper<InspectionProduct> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(InspectionProduct::getInspectionMaterialId, inspectionProduct.getInspectionMaterialId()) + .eq(InspectionProduct::getName, inspectionProduct.getName()); + inspectionProductMapper.update(inspectionProduct, updateWrapper); + return true; + } + + /*鍒ゆ柇妫�娴嬪�兼槸鍚︽弧瓒虫爣鍑嗗�煎拰鍐呮帶鍊肩殑瑕佹眰,濡傛灉涓嶆弧瓒冲垯妫�楠岀粨璁轰负涓嶅悎鏍�*/ + private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) { + boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr); + boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr); + + if (isStandardValueSatisfied && isControlValueSatisfied) { + return 1; + } else { + return 0; + } + } + + private boolean isValueSatisfied(String valueStr, String detectionValueStr) { + String substring = valueStr.substring(1, 2); + if (substring.equals("=")) { + String operator = valueStr.substring(0, 2); + Double standardValue = Double.parseDouble(valueStr.substring(2)); + Double detectionValue = Double.parseDouble(detectionValueStr); + switch (operator) { + case ">=": + return detectionValue >= standardValue; + case "<=": + return detectionValue <= standardValue; + default: + return false; + } + } else { + String operator = valueStr.substring(0, 1); + Double standardValue = Double.parseDouble(valueStr.substring(1)); + Double detectionValue = Double.parseDouble(detectionValueStr); + switch (operator) { + case ">": + return detectionValue > standardValue; + case "鈮�": + return detectionValue >= standardValue; + case "鈮�": + return detectionValue <= standardValue; + case "<": + return detectionValue < standardValue; + case "=": + return detectionValue.equals(standardValue); + default: + return false; + } + } + } +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java new file mode 100644 index 0000000..444d70c --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java @@ -0,0 +1,199 @@ +package com.yuanchu.limslaboratory.service.impl; + +import cn.hutool.core.lang.Snowflake; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.mapper.*; +import com.yuanchu.limslaboratory.pojo.*; +import com.yuanchu.limslaboratory.pojo.vo.InsProductVo; +import com.yuanchu.limslaboratory.pojo.vo.InspectDetailVo; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; +import com.yuanchu.limslaboratory.service.*; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 鐢宠琛�(Inspection)琛ㄦ湇鍔″疄鐜扮被 + * + * @author zss + * @since 2023-08-03 13:03:36 + */ +@Service +public class InspectionServiceImpl extends ServiceImpl<InspectionMapper, Inspection> implements InspectionService { + + @Resource + InspectionMapper inspectionMapper; + + @Resource + InspectionMaterialMapper inspectionMaterialMapper; + + @Resource + InspectionProductService inspectionProductService; + + @Resource + InspectionProductMapper inspectionProductMapper; + + @Resource + MaterialMapper materialMapper; + + @Resource + StandardService standardService; + + @Resource + SpecificationsService specificationsService; + + @Resource + ProductMapper productMapper; + + @Resource + InstrumentService instrumentService; + + @Resource + UserMapper userMapper; + + /** + * 鏌ヨ妫�楠岀敵璇峰崟鍒楄〃 + * + * @param message + * @return + */ + @Override + public IPage<Map<String, Object>> selectInspectsList(Page<Object> page, String message) { + return inspectionMapper.selectInspectsList(page, message); + } + + /** + * 鏂板妫�楠岀敵璇疯〃 + * + * @param id + * @param + * @return + */ + @Override + public Integer addInspect(Integer id, InspectionVo inspectionVo) { + /*鏂板妫�楠岀敵璇疯〃*/ + Inspection inspection = Inspection.builder() + .startTime(inspectionVo.getStartTime()) + .endTime(inspectionVo.getEndTime()) + .type(inspectionVo.getType()) + .code(new Snowflake(1, 1).nextIdStr()) + .userId(id) + .build(); + inspectionMapper.insert(inspection); + /*鏂板妫�楠屾牱鍝佽〃*/ + InspectionMaterial inspectionMaterial = InspectionMaterial.builder() + .code(inspectionVo.getMcode()) + .name(inspectionVo.getName()) + .num(inspectionVo.getNum()) + .unit(inspectionVo.getUnit()) + .supplier(inspectionVo.getSupplier()) + .specifications(inspectionVo.getSpecifications()) + .formTime(inspectionVo.getFormTime()) + .inspectionId(inspection.getId()) + .build(); + inspectionMaterialMapper.insert(inspectionMaterial); + /*鏂板妫�楠岄」鐩〃*/ + //鑾峰彇鐗╂枡id + Material material = materialMapper.selectOne(Wrappers.<Material>query() + .eq("name", inspectionVo.getName()) + .eq("code", inspectionVo.getMcode())); + //鑾峰彇瑙勬牸鍚嶇О鍜屽瀷鍙峰悕绉� + String specification = inspectionVo.getSpecifications(); + String[] split = specification.split("-"); + String stName = split[0]; + String spName = split[1]; + //鑾峰彇瑙勬牸id + Standard standard = standardService.getOne(Wrappers.<Standard>query() + .eq("name", stName) + .eq("material_id", material.getId())); + //鑾峰彇鍨嬪彿id + Specifications specifications = specificationsService.getOne(Wrappers.<Specifications>query() + .eq("name", spName) + .eq("standard_id", standard.getId())); + //鏍规嵁鍨嬪彿id鏌ヨ椤圭洰淇℃伅 + List<Product> productList = productMapper.selectList(Wrappers.<Product>query().eq("specifications_id", specifications.getId())); + ArrayList<InspectionProduct> list = new ArrayList<>(); + for (Product product : productList) { + InspectionProduct rawInsProduct = InspectionProduct.builder() + .name(product.getName()) + .unit(product.getUnit()) + .required(product.getRequired()) + .internal(product.getInternal()) + .inspectionMaterialId(material.getId()) + .build(); + list.add(rawInsProduct); + } + //妫�楠岄」鐩壒閲忔坊鍔� + inspectionProductService.saveBatch(list); + return inspection.getId(); + } + + //鏍规嵁妫�楠屽崟id鏌ヨ鍘熸潗鏂欐楠屽崟璇︽儏 + @Override + public InspectDetailVo selectInspectsListById(Integer id) { + /*灏嗘楠屽崟鍩烘湰淇℃伅鏌ヨ鍑烘潵骞跺皝瑁呭埌RawInspectVo瀵硅薄涓�*/ + Inspection inspection = inspectionMapper.selectById(id); + InspectDetailVo inspectDetailVo = new InspectDetailVo(); + //鎶ユ浜� + User user = userMapper.selectById(inspection.getUserId()); + inspectDetailVo.setUserName(user.getName()); + //鎶ユ寮�濮嬫椂闂村拰缁撴潫鏃堕棿 + inspectDetailVo.setStartTime(inspection.getStartTime()); + inspectDetailVo.setEndTime(inspection.getEndTime()); + //妫�楠岀粨璁� + inspectDetailVo.setInspectionStatus(inspection.getInspectionStatus()); + //鏌ヨ妫�楠岀墿鏂� + InspectionMaterial inspectionMaterial = inspectionMaterialMapper.selectOne(Wrappers.<InspectionMaterial>query().eq("inspection_id", id)); + //鏉ユ枡鏃ユ湡,渚涘簲鍟嗗悕绉�,鍘熸潗鏂欑紪鐮�,鍘熸潗鏂欏悕绉�,瑙勬牸鍨嬪彿,鍗曚綅,鏁伴噺 + BeanUtils.copyProperties(inspectionMaterial, inspectDetailVo); + /*鏌ヨ妫�楠屽崟閲岄潰鐨勬楠岄」鐩�,骞跺皝瑁呭埌RawInspectVo瀵硅薄涓�*/ + LambdaQueryWrapper<InspectionProduct> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(InspectionProduct::getInspectionMaterialId, inspectionMaterial.getId()); + List<InspectionProduct> inspectionProducts = inspectionProductMapper.selectList(queryWrapper); + //杩欓噷鏌ュ埌鐨勮澶噄d鍜屾楠屽憳id瑕佹煡璇㈠悕绉� + List<InsProductVo> insProductVos = inspectionProducts.stream().map(insProduct -> { + //灏嗕竴涓璞$殑鍊艰祴鍊肩粰鍙︿竴涓璞� + InsProductVo insProductVo = new InsProductVo(); + BeanUtils.copyProperties(insProduct, insProductVo); + //鑾峰彇璁惧鍚�(鍓嶆彁鏄鏋滃瓨鍦�) + if (insProduct.getInstrumentId() != null) { + String equipmentName = instrumentService.getById(insProduct.getInstrumentId()).getEquipmentName(); + insProductVo.setInstrumentName(equipmentName); + } + //鑾峰彇鐢ㄦ埛鍚�(鍓嶆彁鏄鏋滃瓨鍦�) + if (insProduct.getUserId() != null) { + String userName = userMapper.selectById(insProduct.getUserId()).getName(); + insProductVo.setUserName(userName); + } + //椤圭洰鍏宠仈鐗╂枡id + insProductVo.setInspectionMaterialId(inspectionMaterial.getId()); + return insProductVo; + }).collect(Collectors.toList()); + inspectDetailVo.setInsProducts(insProductVos); + return inspectDetailVo; + } + + //鏇存柊妫�楠屽崟妫�楠岀粨鏋� + @Override + public boolean updateInspectsById(Integer id) { + //鏇存柊妫�楠屽崟閲岄潰鐨勬楠岀姸鎬佸拰妫�楠岀粨璁� + InspectDetailVo inspectDetailVo = selectInspectsListById(id); + Inspection inspection = Inspection.builder() + .id(id) + .inspectionStatus(inspectDetailVo.getInspectionStatus()) + .build(); + inspectionMapper.updateById(inspection); + //鐢熸垚鎶ュ憡鍗� + + return true; + } +} + diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java new file mode 100644 index 0000000..59be02e --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java @@ -0,0 +1,66 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.LinkBasicInformation; +import com.yuanchu.limslaboratory.mapper.LinkBasicInformationMapper; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; +import com.yuanchu.limslaboratory.service.LinkBasicInformationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.service.LinkDetectionService; +import com.yuanchu.limslaboratory.utils.MyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +@Service +public class LinkBasicInformationServiceImpl extends ServiceImpl<LinkBasicInformationMapper, LinkBasicInformation> implements LinkBasicInformationService { + + @Resource + private LinkBasicInformationMapper linkBasicInformationMapper; + + @Autowired + private LinkDetectionService linkDetectionService; + + @Override + public String addLinkBasicInformation(LinkBasicInformation linkBasicInformation) { + String code = MyUtil.getTimeSixNumberCode("SL"); + linkBasicInformation.setEntrustCoding(code); + int insert = linkBasicInformationMapper.insert(linkBasicInformation); + if (insert == 1) { + linkDetectionService.insertListData(linkBasicInformation.getId(), linkBasicInformation.getLinkDetectionList()); + return code; + } + return null; + } + + @Override + public IPage<Map<String, Object>> getLinkBasicPage(Page<Object> page, String entrustCoding, String sampleName, String entrusted, Integer inspectionStatus) { + return linkBasicInformationMapper.getLinkBasicPage(page, entrustCoding, sampleName, entrusted, inspectionStatus); + } + + //鏌ヨ鎵�鏈夊鎵樻楠屽拰鏍峰搧 + @Override + public List<Map<String, Object>> selectLinkAll() { + return linkBasicInformationMapper.selectLinkAll(); + } + + //鏍规嵁濮旀墭妫�楠宨d鍜屾牱鍝乮d鏌ヨ濮旀墭妫�楠屽拰鏍峰搧 + @Override + public InspectionVo selectLinkByid(Integer bid, Integer did) { + InspectionVo inspectionVo = linkBasicInformationMapper.selectLinkByid(bid, did); + inspectionVo.setType(1); + return inspectionVo; + } +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java new file mode 100644 index 0000000..87a1700 --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java @@ -0,0 +1,34 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.yuanchu.limslaboratory.pojo.LinkDetection; +import com.yuanchu.limslaboratory.mapper.LinkDetectionMapper; +import com.yuanchu.limslaboratory.service.LinkDetectionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-08-03 + */ +@Service +public class LinkDetectionServiceImpl extends ServiceImpl<LinkDetectionMapper, LinkDetection> implements LinkDetectionService { + + @Resource + private LinkDetectionMapper linkDetectionMapper; + + // 鎵归噺娣诲姞 + @Override + public void insertListData(Integer id, List<LinkDetection> linkDetectionList) { + for (LinkDetection linkDetection:linkDetectionList){ + linkDetection.setLinkBasicId(id); + } + linkDetectionMapper.insertBatchSomeColumn(linkDetectionList); + } +} diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RawMaterialServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RawMaterialServiceImpl.java new file mode 100644 index 0000000..2722a1a --- /dev/null +++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RawMaterialServiceImpl.java @@ -0,0 +1,78 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.yuanchu.limslaboratory.pojo.RawMaterial; +import com.yuanchu.limslaboratory.mapper.RawMaterialMapper; +import com.yuanchu.limslaboratory.pojo.vo.InspectionVo; +import com.yuanchu.limslaboratory.service.RawMaterialService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-28 + */ +@Service +public class RawMaterialServiceImpl extends ServiceImpl<RawMaterialMapper, RawMaterial> implements RawMaterialService { + + @Resource + private RawMaterialMapper rawMaterialMapper; + + /** + * 鍒嗛〉鏌ヨ + * + * @param materialCoding + * @param materialName + * @param condition + * @param createTime + * @param page + * @return + */ + @Override + public IPage<RawMaterial> selectRawMaterial(String materialCoding, String materialName, Integer condition, String createTime, Page<Objects> page) { + return rawMaterialMapper.selectRawMaterial(materialCoding, materialName, condition, createTime, page); + } + + /** + * 鏌ヨ鎵�鏈夊師鏉愭枡鎶ユ鍗� + * + * @return + */ + @Override + public List<RawMaterial> selectRawmaAll() { + return rawMaterialMapper.selectRawmaAll(); + } + + /** + * 閫夋嫨鍘熸潗鏂欐姤妫� + * + * @param id + * @return + */ + @Override + public InspectionVo selectRawmaById(Integer id, String startTime, String endTime) throws ParseException { + InspectionVo inspectionVo = rawMaterialMapper.selectRawmaById(id); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + inspectionVo.setStartTime(formatter.parse(startTime)); + inspectionVo.setEndTime(formatter.parse(endTime)); + inspectionVo.setType(0); + return inspectionVo; + } +} diff --git a/inspection-server/src/main/resources/mapper/InspectionMapper.xml b/inspection-server/src/main/resources/mapper/InspectionMapper.xml new file mode 100644 index 0000000..6d7526d --- /dev/null +++ b/inspection-server/src/main/resources/mapper/InspectionMapper.xml @@ -0,0 +1,29 @@ +<?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.yuanchu.limslaboratory.mapper.InspectionMapper"> + <select id="selectInspectsList" resultType="map"> + select i.id, + i.code icode, + type, + DATE_FORMAT(`form_time`,'%Y-%m-%d'), + supplier, + im.code mcode, + im.name, + specifications, + unit, + num, + DATE_FORMAT(i.`create_time`,'%Y-%m-%d'), + u.name userName, + inspection_status, + DATE_FORMAT(i.`start_time`,'%Y-%m-%d'), + DATE_FORMAT(i.`end_time`,'%Y-%m-%d') + from lims_laboratory.inspection i + join lims_laboratory.user u on i.user_id = u.id + join lims_laboratory.inspection_material im on i.id = im.inspection_id + where i.state=1 + <if test="message!=null"> + and i.code like concat('%', #{message}, '%') + or im.name like concat('%', #{message}, '%') + </if> + </select> +</mapper> \ No newline at end of file diff --git a/inspection-server/src/main/resources/mapper/InspectionMaterialMapper.xml b/inspection-server/src/main/resources/mapper/InspectionMaterialMapper.xml new file mode 100644 index 0000000..d9f6112 --- /dev/null +++ b/inspection-server/src/main/resources/mapper/InspectionMaterialMapper.xml @@ -0,0 +1,4 @@ +<?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.yuanchu.limslaboratory.mapper.InspectionMaterialMapper"> +</mapper> \ No newline at end of file diff --git a/inspection-server/src/main/resources/mapper/InspectionProductMapper.xml b/inspection-server/src/main/resources/mapper/InspectionProductMapper.xml new file mode 100644 index 0000000..93e3111 --- /dev/null +++ b/inspection-server/src/main/resources/mapper/InspectionProductMapper.xml @@ -0,0 +1,4 @@ +<?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.yuanchu.limslaboratory.mapper.InspectionProductMapper"> +</mapper> \ No newline at end of file diff --git a/inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml b/inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml new file mode 100644 index 0000000..d659b1d --- /dev/null +++ b/inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml @@ -0,0 +1,53 @@ +<?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.yuanchu.limslaboratory.mapper.LinkBasicInformationMapper"> + + <select id="getLinkBasicPage" resultType="map"> + SELECT l.`id`, l.`entrust_coding`, l.`entrusted`, d.`samples_number`, d.`sample_name`, d.`specifications_models`, + DATE_FORMAT(l.`inspection_time`,'%Y-%m-%d') inspectionTime, DATE_FORMAT(l.`completion_deadline`,'%Y-%m-%d') inspectionTime, l.`contacts`, d.`date_survey`, d.`inspection_status` + FROM link_basic_information l, link_detection d + WHERE l.`id` = d.`link_basic_id` + AND l.`state` = 1 + <if test="entrustCoding != null and entrustCoding != null"> + AND l.`entrust_coding` like concat('%', #{entrustCoding}, '%') + </if> + <if test="sampleName != null and sampleName != null"> + AND d.`sample_name` like concat('%', #{sampleName}, '%') + </if> + <if test="entrusted != null and entrusted != null"> + AND l.`contacts` like concat('%', #{entrusted}, '%') + </if> + <if test="inspectionStatus != null and inspectionStatus != null"> + AND d.`inspection_status` = #{inspectionStatus} + </if> + </select> + + <select id="selectLinkAll" resultType="java.util.Map"> + SELECT l.`id`, l.`entrust_coding`, l.`entrusted`, d.`samples_number`, d.`sample_name`, d.`specifications_models`, + DATE_FORMAT(l.`inspection_time`,'%Y-%m-%d') inspectionTime, l.`completion_deadline`, l.`contacts`, d.`date_survey`, d.`inspection_status` + FROM lims_laboratory.link_basic_information l, lims_laboratory.link_detection d + WHERE l.`id` = d.`link_basic_id` + AND l.`state` = 1 + </select> + + <select id="selectLinkByid" resultType="com.yuanchu.limslaboratory.pojo.vo.InspectionVo"> + SELECT l.`inspection_time` formTime, + l.`entrusted` supplier, + d.`sample_number` mcode, + d.`sample_name` name, + d.`specifications_models` specifications, + d.`unit`, + d.`samples_number` num, + d.date_survey startTime, + l.completion_deadline endTime + FROM lims_laboratory.link_basic_information l, lims_laboratory.link_detection d + WHERE l.`id` = d.`link_basic_id` + AND l.`state` = 1 + <if test="bid!=null"> + and l.id=#{bid} + </if> + <if test="did!=null"> + and d.id=#{did} + </if> + </select> +</mapper> diff --git a/inspection-server/src/main/resources/mapper/LinkDetectionMapper.xml b/inspection-server/src/main/resources/mapper/LinkDetectionMapper.xml new file mode 100644 index 0000000..192de47 --- /dev/null +++ b/inspection-server/src/main/resources/mapper/LinkDetectionMapper.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.yuanchu.limslaboratory.mapper.LinkDetectionMapper"> + +</mapper> diff --git a/inspection-server/src/main/resources/mapper/RawMaterialMapper.xml b/inspection-server/src/main/resources/mapper/RawMaterialMapper.xml new file mode 100644 index 0000000..5cffc9a --- /dev/null +++ b/inspection-server/src/main/resources/mapper/RawMaterialMapper.xml @@ -0,0 +1,37 @@ +<?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.yuanchu.limslaboratory.mapper.RawMaterialMapper"> + + <select id="selectRawMaterial" resultType="com.yuanchu.limslaboratory.pojo.RawMaterial"> + SELECT * + FROM raw_material r + where r.state = 1 + <if test="materialCoding != null and materialCoding != ''"> + AND r.`material_coding` LIKE CONCAT('%',#{materialCoding},'%') + </if> + <if test="materialName != null and materialName != ''"> + AND r.`material_name` LIKE CONCAT('%',#{materialName},'%') + </if> + <if test="condition != null and condition != ''"> + AND r.`condition` = #{condition} + </if> + <if test="createTime != null and createTime != ''"> + AND DATE_FORMAT(r.`create_time`,'%Y-%m-%d') = #{createTime} + </if> + </select> + <select id="selectRawmaAll" resultType="com.yuanchu.limslaboratory.pojo.RawMaterial"> + select * from lims_laboratory.raw_material where state=1 + </select> + + <select id="selectRawmaById" resultType="com.yuanchu.limslaboratory.pojo.vo.InspectionVo"> + select create_time formTime, + supplier_name supplier, + material_coding mcode, + material_name name, + specifications_models specifications, + unit , + quantity num + from lims_laboratory.raw_material + where id=#{id} + </select> +</mapper> diff --git a/laboratory-server/pom.xml b/laboratory-server/pom.xml new file mode 100644 index 0000000..865f62c --- /dev/null +++ b/laboratory-server/pom.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>lims-laboratory</artifactId> + <groupId>com.yuanchu</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>laboratory-server</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>laboratory-server</name> + <description>laboratory-server</description> + <packaging>jar</packaging> + + <dependencies> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>framework</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>user-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + </dependencies> +</project> diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java new file mode 100644 index 0000000..614814b --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java @@ -0,0 +1,78 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.yuanchu.limslaboratory.pojo.Classify; +import com.yuanchu.limslaboratory.pojo.dto.UpdateClassifyDto; +import com.yuanchu.limslaboratory.service.ClassifyService; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Api(tags = "瀹為獙瀹�-->1銆佽澶囧彴璐�-->1銆佸垎绫绘ā鍧�") +@RestController +@RequestMapping("/classify") +public class ClassifyController { + + @Autowired + private ClassifyService classifyService; + + @ApiOperation("娣诲姞鍒嗙被") + @PostMapping("/add") + public Result<?> addClassifyInformation(@RequestBody Classify classify) { + Integer isAddClassifySuccess = classifyService.addClassifyInformation(classify); + if (isAddClassifySuccess == 1) { + return Result.success("娣诲姞鍒嗙被銆�"+ classify.getSonName() +"銆戞垚鍔燂紒"); + } else if (isAddClassifySuccess == 2) { + return Result.fail("鎶辨瓑閲嶅娣诲姞鍒嗙被鍚嶇О銆�"+ classify.getSonName() +"銆戯紝娣诲姞澶辫触锛�"); + } + return Result.fail("娣诲姞鍒嗙被銆�"+ classify.getSonName() +"銆戝け璐ワ紒"); + } + + @ApiOperation("鍒嗙被渚ц竟鏍忓垪琛細濡傛灉sonName涓虹┖锛屽垯甯︾潃father_name鐨処d杩涜鐐瑰嚮鎿嶄綔") + @GetMapping("/list") + @ApiImplicitParams(value = { + @ApiImplicitParam(value = "鍒嗙被鍚嶇О", name = "classifyName", dataTypeClass = String.class) + }) + public Result<?> getListClassifyInformation(String classifyName) { + return Result.success(classifyService.getListClassifyInformation(classifyName)); + } + + @ApiOperation("鍒犻櫎鍒嗙被") + @DeleteMapping("/delete") + @ApiImplicitParams(value = { + @ApiImplicitParam(value = "鍒嗙被Id", name = "classifyId", dataTypeClass = String.class) + }) + public Result<?> deleteClassifyInformation(String classifyId) { + Boolean isDeleteSuccess = classifyService.deleteClassifyInformation(classifyId); + if (isDeleteSuccess){ + return Result.success("鍒犻櫎鍒嗙被鎴愬姛锛�"); + } + return Result.fail("鍒犻櫎鍒嗙被澶辫触锛�"); + } + + @ApiOperation("鏇存柊鍒嗙被") + @PutMapping("/update") + public Result<?> updateClassifyInformation(@RequestBody UpdateClassifyDto updateClassifyDto) throws Exception { + Classify classify = JackSonUtil.unmarshal(JackSonUtil.marshal(updateClassifyDto), Classify.class); + Boolean isUpdateClassifySuccess = classifyService.updateClassifyInformation(classify); + if (isUpdateClassifySuccess){ + return Result.success("鏇存柊鍒嗙被鎴愬姛锛�"); + } + return Result.fail("鏇存柊鍒嗙被澶辫触锛�"); + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java new file mode 100644 index 0000000..7849ec4 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java @@ -0,0 +1,91 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.EquipmentPoint; +import com.yuanchu.limslaboratory.pojo.dto.UpdateEquipmentPointDto; +import com.yuanchu.limslaboratory.service.EquipmentPointService; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Api(tags = "瀹為獙瀹�-->1銆佽澶囧彴璐�-->3銆佽澶囩爜鐐�") +@RestController +@RequestMapping("/equipment-point") +public class EquipmentPointController { + + @Autowired + private EquipmentPointService equipmentPointService; + + @ApiOperation("娣诲姞璁惧鐮佺偣") + @PostMapping("/add") + public Result<?> addEquipmentPointInformation(@RequestHeader("X-Token") String token, @RequestBody EquipmentPoint equipmentPoint) throws Exception { + Object object = RedisUtil.get(token); + Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class); + equipmentPoint.setUserId((Integer) unmarshal.get("id")); + Integer isInsertSuccess = equipmentPointService.addEquipmentPointInformation(equipmentPoint); + if (isInsertSuccess == 1){ + return Result.success("娣诲姞銆�"+ equipmentPoint.getEquipmentPointName() +"銆戞垚鍔燂紒"); + } + return Result.fail("娣诲姞銆�"+ equipmentPoint.getEquipmentPointName() +"銆戝け璐ワ紒璁惧鐮佺偣缂栫爜閲嶅锛�"); + } + + @ApiOperation("鏍规嵁浠櫒Id鏌ヨ瀵瑰簲璁惧鐮佺偣鏁版嵁") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "InstrumentId", value = "浠櫒妯″潡Id", dataTypeClass = String.class, required = true) + }) + @GetMapping("/list") + public Result<?> getListEquipmentPointInformation(String InstrumentId) { + List<Map<String, Object>> list = equipmentPointService.getListEquipmentPointInformation(InstrumentId); + return Result.success(list); + } + + @ApiOperation("鏍规嵁鐮佺偣Id鍒犻櫎鏁版嵁") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "equipmentPointId", value = "璁惧鐮佺偣Id", dataTypeClass = Integer.class, required = true) + }) + @DeleteMapping("/delete") + public Result<?> deleteEquipmentPointInformation(Integer equipmentPointId) { + Integer isDeleteSuccess = equipmentPointService.deleteEquipmentPointInformation(equipmentPointId); + if (isDeleteSuccess == 1){ + return Result.success("鍒犻櫎鎴愬姛锛�"); + } + return Result.fail("鍒犻櫎澶辫触锛�"); + } + + @ApiOperation("鏍规嵁鐮佺偣Id鏇存柊鏁版嵁") + @PutMapping("/update") + public Result<?> updateEquipmentPointInformation(@RequestHeader("X-Token") String token, @RequestBody UpdateEquipmentPointDto updateEquipmentPointDto) throws Exception { + Object object = RedisUtil.get(token); + Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class); + EquipmentPoint equipmentPoint = JackSonUtil.unmarshal(JackSonUtil.marshal(updateEquipmentPointDto), EquipmentPoint.class); + equipmentPoint.setUserId((Integer) unmarshal.get("id")); + Integer isUpdateSuccess = equipmentPointService.updateEquipmentPointInformation(equipmentPoint); + if (isUpdateSuccess == 1){ + return Result.success("鏇存柊鎴愬姛锛�"); + } + return Result.fail("鏇存柊澶辫触锛�"); + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java new file mode 100644 index 0000000..ad3e993 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java @@ -0,0 +1,119 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.yuanchu.limslaboratory.pojo.dto.UpdateInstrumentDto; +import com.yuanchu.limslaboratory.service.InstrumentService; +import com.yuanchu.limslaboratory.service.UserService; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Api(tags = "瀹為獙瀹�-->1銆佽澶囧彴璐�-->2銆佷华鍣ㄦā鍧�") +@RestController +@RequestMapping("/instrument") +public class InstrumentController { + + @Autowired + private InstrumentService instrumentService; + + @Autowired + private UserService userService; + + @ApiOperation("娣诲姞浠櫒璁惧") + @PostMapping("/add") + public Result<?> addInstrumentInformation(@RequestHeader("X-Token") String token, @RequestBody Instrument instrument) throws Exception { + Object object = RedisUtil.get(token); + Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class); + instrument.setCreateUserId((Integer) unmarshal.get("id")); + Integer isInsertSuccess = instrumentService.addInstrumentInformation(instrument); + if (isInsertSuccess == 1){ + return Result.success("娣诲姞銆�" + instrument.getEquipmentName() + "銆戞垚鍔�!"); + } + return Result.fail("浠櫒璁惧缂栧彿閲嶅锛屾坊鍔犮��" + instrument.getEquipmentName() + "銆戝け璐�! "); + } + + @ApiOperation("鏍规嵁鍒嗙被Id锛氬垎椤靛垪琛ㄥ睍绀�") + @GetMapping("/list") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "classifyId", value = "鍒嗙被Id", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "conditions", value = "鏌ヨ鐘舵��:榛樿鍏ㄩ儴", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "whetherWhether", value = "鏄惁宸茶繃鏈�", dataTypeClass = Boolean.class), + @ApiImplicitParam(name = "numberOrNameOrSpecifications", value = "缂栧彿/璁惧鍚嶇О/瑙勬牸鍨嬪彿", dataTypeClass = String.class) + }) + public Result<?> getListInstrumentInformation(Integer pageNo, + Integer pageSize, + Integer conditions, + Integer classifyId, + Boolean whetherWhether, + String numberOrNameOrSpecifications) { + IPage<Map<String, Object>> pageList = instrumentService.getListInstrumentInformation(conditions, whetherWhether, numberOrNameOrSpecifications, + classifyId, new Page<Objects>(pageNo, pageSize)); + Map<String, Object> map = new HashMap<>(); + map.put("row", pageList.getRecords()); + map.put("total", pageList.getTotal()); + return Result.success(map); + } + + @ApiOperation("鍒犻櫎浠櫒鏁版嵁") + @DeleteMapping("/delete") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "instrumentId", value = "浠櫒Id", dataTypeClass = String.class, required = true) + }) + public Result<?> deleteInstrumentInformation(String instrumentId) { + Boolean isDeleteSuccess = instrumentService.deleteInstrumentInformation(instrumentId); + if (isDeleteSuccess){ + return Result.success("鍒犻櫎浠櫒鎴愬姛锛�"); + } + return Result.fail("鍒犻櫎浠櫒澶辫触锛�"); + } + + @ApiOperation("娣诲姞浠櫒鏃朵繚绠′汉涓嬫媺妗嗘暟鎹�") + @GetMapping("/get_user") + public Result<?> getMapUserInformation() { + return Result.success(userService.getUserNameAndId()); + } + + @ApiOperation("鏍规嵁浠櫒Id鑾峰彇淇℃伅鐢ㄤ簬缂栬緫") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "InstrumentId", value = "鍒嗙被Id", dataTypeClass = Integer.class, required = true) + }) + @GetMapping("/get_instrument") + public Result<?> getIdInstrumentInformation(Integer InstrumentId) { + Instrument idInstrumentInformation = instrumentService.getIdInstrumentInformation(InstrumentId); + return Result.success(idInstrumentInformation); + } + + @ApiOperation("鏍规嵁浠櫒Id鏇存柊鏁版嵁") + @PutMapping("/update") + public Result<?> updateEquipmentPointInformation(@RequestBody UpdateInstrumentDto updateInstrumentDto) throws Exception { + Instrument instrument = JackSonUtil.unmarshal(JackSonUtil.marshal(updateInstrumentDto), Instrument.class); + Integer isUpdateSuccess = instrumentService.updateEquipmentPointInformation(instrument); + if (isUpdateSuccess == 1){ + return Result.success("鏇存柊銆�" + instrument.getEquipmentName() + "銆戞垚鍔�!"); + } + return Result.fail("浠櫒璁惧缂栧彿閲嶅锛屾洿鏂般��" + instrument.getEquipmentName() + "銆戝け璐�! "); + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java new file mode 100644 index 0000000..bc6ea21 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java @@ -0,0 +1,70 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.yuanchu.limslaboratory.pojo.MeteringPlan; +import com.yuanchu.limslaboratory.service.MeteringPlanService; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-27 + */ +@Api(tags = "瀹為獙瀹�-->2銆佽閲忕鐞�") +@RestController +@RequestMapping("/metering-plan") +public class MeteringPlanController { + + @Autowired + private MeteringPlanService meteringPlanService; + + @ApiOperation("娣诲姞璁¢噺璁″垝") + @PostMapping("/add") + public Result<?> addMeteringPlanInformation(@RequestBody MeteringPlan meteringPlan) { + Integer isInsertSuccess = meteringPlanService.addMeteringPlanInformation(meteringPlan); + if (isInsertSuccess == 1){ + return Result.success("娣诲姞璁¢噺璁″垝鎴愬姛!"); + } + return Result.fail("娣诲姞璁¢噺璁″垝澶辫触! "); + } + + @ApiOperation("璁¢噺璁″垝鍒嗛〉鏌ヨ") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "measureCodeOrNameOrUnit", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true) + }) + @GetMapping("/plan_page_list") + public Result<?> pagingQueryOfMeteringPlan(Integer pageNo, Integer pageSize, String measureCodeOrNameOrUnit) { + IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeteringPlan(measureCodeOrNameOrUnit, new Page<Objects>(pageNo, pageSize)); + return Result.success(page); + } + + @ApiOperation("璁¢噺鍙拌处鍒嗛〉鏌ヨ") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true) + }) + @GetMapping("/standing_page_list") + public Result<?> pagingQueryOfMeasurementLedger(Integer pageNo, Integer pageSize) { + IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeasurementLedger(new Page<Objects>(pageNo, pageSize)); + return Result.success(page); + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java new file mode 100644 index 0000000..a409b73 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java @@ -0,0 +1,90 @@ +package com.yuanchu.limslaboratory.controller; + +import com.yuanchu.limslaboratory.pojo.MetricalInformation; +import com.yuanchu.limslaboratory.pojo.dto.UpdateMetricalInformationDto; +import com.yuanchu.limslaboratory.service.MetricalInformationService; +import com.yuanchu.limslaboratory.service.UserService; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Api(tags = "瀹為獙瀹�-->1銆佽澶囧彴璐�-->4銆佽閲忎俊鎭�") +@RestController +@RequestMapping("/metrical-information") +public class MetricalInformationController { + + @Autowired + private MetricalInformationService metricalInformationService; + + @Autowired + private UserService userService; + + @ApiOperation("娣诲姞璁¢噺淇℃伅") + @PostMapping("/add") + public Result<?> addMetricalInformation(MetricalInformation metricalInformation, + @RequestPart(value = "file", required = false) MultipartFile file) { + Integer isInsertSuccess = metricalInformationService.addEquipmentPointInformation(metricalInformation, file); + if (isInsertSuccess == 1){ + return Result.success("娣诲姞銆�"+ metricalInformation.getMeasurementUnit() +"銆戞垚鍔燂紒"); + } + return Result.fail("娣诲姞銆�"+ metricalInformation.getMeasurementUnit() +"銆戝け璐ワ紒璁惧鐮佺偣缂栫爜閲嶅锛�"); + } + + @ApiOperation("鏌ヨ鎵�鏈夎閲忎俊鎭暟鎹�") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "InstrumentId", value = "浠櫒妯″潡Id", dataTypeClass = String.class, required = true) + }) + @GetMapping("/list") + public Result<?> getListMetricalInformation(String InstrumentId) { + List<Map<String, Object>> list = metricalInformationService.getListEquipmentPointInformation(InstrumentId); + return Result.success(list); + } + + @ApiOperation("鏍规嵁璁¢噺淇℃伅Id鍒犻櫎鏁版嵁") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "metricalInformationId", value = "璁¢噺淇℃伅Id", dataTypeClass = Integer.class, required = true) + }) + @DeleteMapping("/delete") + public Result<?> deleteMetricalInformation(Integer metricalInformationId) { + Integer isDeleteSuccess = metricalInformationService.deleteMetricalInformation(metricalInformationId); + if (isDeleteSuccess == 1){ + return Result.success("鍒犻櫎鎴愬姛锛�"); + } + return Result.fail("鍒犻櫎澶辫触锛�"); + } + + @ApiOperation("鏍规嵁璁¢噺淇℃伅Id鏇存柊鏁版嵁") + @PutMapping("/update") + public Result<?> updateMetricalInformation(UpdateMetricalInformationDto updateMetricalInformationDto, + @RequestPart(value = "file", required = false) MultipartFile file) throws Exception { + MetricalInformation metricalInformation = JackSonUtil.unmarshal(JackSonUtil.marshal(updateMetricalInformationDto), MetricalInformation.class); + Integer isUpdateSuccess = metricalInformationService.updateMetricalInformation(metricalInformation, file); + if (isUpdateSuccess == 1){ + return Result.success("鏇存柊鎴愬姛锛�"); + } + return Result.fail("鏇存柊澶辫触锛�"); + } + + @ApiOperation("娣诲姞璁¢噺淇℃伅鏃惰礋璐d汉涓嬫媺妗嗘暟鎹�") + @GetMapping("/get_user") + public Result<?> getMapUserInformation() { + return Result.success(userService.getUserNameAndId()); + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java new file mode 100644 index 0000000..4d2856c --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java @@ -0,0 +1,16 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.yuanchu.limslaboratory.pojo.Classify; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface ClassifyMapper extends BaseMapper<Classify> { + +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java new file mode 100644 index 0000000..5918e89 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java @@ -0,0 +1,23 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.EquipmentPoint; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface EquipmentPointMapper extends BaseMapper<EquipmentPoint> { + + List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId); +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/InstrumentMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/InstrumentMapper.java new file mode 100644 index 0000000..944bd9d --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/InstrumentMapper.java @@ -0,0 +1,28 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface InstrumentMapper extends BaseMapper<Instrument> { + + IPage<Map<String, Object>> getListInstrumentInformation(Integer conditions,Boolean whetherWhether, String numberOrNameOrSpecifications, Integer classifyId, Page<Objects> page); + + //鏌ヨ鎵�鏈夎澶囦俊鎭� + List<Map> selectInstrument(); + +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java new file mode 100644 index 0000000..3153a71 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java @@ -0,0 +1,22 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.MeteringPlan; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-27 + */ +public interface MeteringPlanMapper extends BaseMapper<MeteringPlan> { + + IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page); +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java new file mode 100644 index 0000000..ef27ce7 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java @@ -0,0 +1,20 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.yuanchu.limslaboratory.pojo.MetricalInformation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface MetricalInformationMapper extends BaseMapper<MetricalInformation> { + + List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId); +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Classify.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Classify.java new file mode 100644 index 0000000..019c5e4 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Classify.java @@ -0,0 +1,60 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Classify瀵硅薄", description="") +public class Classify implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "鍒嗙被涓婚敭", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "鍒嗙被鐖跺悕绉�", example = "娓╁害娴嬮噺浠〃") + private String fatherName; + + @NotBlank(message = "鍚嶇О涓嶅厑璁镐负绌猴紒") + @ApiModelProperty(value = "鍒嗙被瀛愬悕绉�", example = "浣撴俯璁�",required = true) + private String sonName; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; + + +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/EquipmentPoint.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/EquipmentPoint.java new file mode 100644 index 0000000..0d9a4f5 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/EquipmentPoint.java @@ -0,0 +1,66 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="EquipmentPoint瀵硅薄", description="") +public class EquipmentPoint implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "浠櫒Id 鍏宠仈", example = "1", required = true) + private Integer instrumentId; + + @ApiModelProperty(value = "鐢ㄦ埛Id 鍏宠仈", hidden = true) + private Integer userId; + + @ApiModelProperty(value = "鐮佺偣缂栧彿", example = "Area-1", required = true) + private String equipmentPoint; + + @ApiModelProperty(value = "鐮佺偣鍚嶇О", example = "瀵间綋灞忚斀锛堝鍘氶潰绉級", required = true) + private String equipmentPointName; + + @ApiModelProperty(value = "鍗曚綅", example = "mm", required = true) + private String unit; + + @ApiModelProperty(value = "鎻忚堪", example = "鐤簡锛屽仛涓嶄簡") + private String descriptiveness; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java new file mode 100644 index 0000000..4c7b28b --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java @@ -0,0 +1,110 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Instrument瀵硅薄", description="") +public class Instrument implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "鍒嗙被ID 鍏宠仈", example = "1", required = true) + private Integer classifyId; + + @ApiModelProperty(value = "淇濈浜猴細鐢ㄦ埛琛ㄥ叧鑱擨d", example = "9", required = true) + private Integer userId; + + @ApiModelProperty(value = "淇濈浜猴細鐢ㄦ埛琛ㄥ叧鑱擨d", hidden = true) + @TableField(value = "") + private Integer createUserId; + + @ApiModelProperty(value = "浠櫒璁惧缂栧彿", example = "JSTC-W1-00001", required = true) + private String equipmentCode; + + @ApiModelProperty(value = "浠櫒璁惧鍚嶇О", example = "鏁板瓧鐢垫ˉ", required = true) + private String equipmentName; + + @ApiModelProperty(value = "榛樿1锛�1锛氳繍琛屻��2锛氭晠闅溿��3锛氭姤淇��4锛氭淇��5锛氬緟鏈�", example = "1", required = true) + private Integer conditions; + + @ApiModelProperty(value = "瑙勬牸鍨嬪彿", example = "WCDMS-1", required = true) + private String specificationsModels; + + @ApiModelProperty(value = "娴嬮噺鑼冨洿", example = "12姣背") + private String measuringRange; + + @ApiModelProperty(value = "璇樊", example = "0.000001寰背") + private String errorRate; + + @ApiModelProperty(value = "鐢熶骇鍘傚", example = "姹熻嫃榈烽洀") + private String manufacturer; + + @ApiModelProperty(value = "鍒拌揣鏃ユ湡", example = "2001-07-06", dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date arrivalDate; + + @ApiModelProperty(value = "楠屾敹鏃ユ湡", example = "2060-07-06", dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date acceptanceDate; + + @ApiModelProperty(value = "瀛樻斁鍦�", example = "鍦扮悆浜氭床涓浗姹熻嫃鍗楅��") + private String storagePlace; + + @ApiModelProperty(value = "鏄惁鏀寔鏁伴噰锛�1锛氭敮鎸侊紱0锛氫笉鏀寔", example = "1") + private Integer whetherDataAcquisition; + + @ApiModelProperty(value = "鏄惁闇�瑕佷华鍣ㄨ澶囪閲忥細濡傛灉闇�瑕佽閲忓懆鏈熷繀濉紱濡傛灉涓嶉渶瑕佽閲忓懆鏈熶笉蹇呭~.1锛氶渶瑕侊紱0锛氫笉闇�瑕�", example = "0") + private Integer equipmentMeasurement; + + @ApiModelProperty(value = "璁¢噺鎴鏈夋晥鏈燂細涓巈quipmentMeasurement鐩稿叧鑱�", example = "12") + private Integer termValidity; + + @ApiModelProperty(value = "鎻忚堪", example = "鐤媯鏄熸湡浜旓紒锛侊紒") + private String descriptiveness; + + @JsonIgnore + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date createTime; + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + private Date updateTime; + + @JsonIgnore + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; + +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlan.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlan.java new file mode 100644 index 0000000..9bb3814 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlan.java @@ -0,0 +1,76 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-27 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="MeteringPlan瀵硅薄", description="") +public class MeteringPlan implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "Id涓婚敭", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "璁¢噺璐熻矗浜� 鍏宠仈鐢ㄦ埛琛�", example = "10", required = true) + private Integer measurePerson; + + @ApiModelProperty(value = "鍒涘缓浜� 鍏宠仈鐢ㄦ埛琛�", example = "21", required = true) + @TableField("create_Person") + private Integer createPerson; + + @ApiModelProperty(value = "璁″垝鍗曞彿", hidden = true) + private String plannedOrderNumber; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME) + @ApiModelProperty(value = "寮�濮嬫棩鏈�", example = "2023-07-06", required = true, dataType = "date") + private Date beginTime; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME) + @ApiModelProperty(value = "缁撴潫鏃ユ湡", example = "2023-07-06", required = true, dataType = "date") + private Date endTime; + + @ApiModelProperty(value = "璁″垝鐘舵�侊細涓夌锛�1锛氬凡瀹屾垚锛�2锛氬緟鎻愪氦锛�3锛氭湭瀹屾垚", example = "1", required = true) + private Integer planningStatus; + + @ApiModelProperty(value = "璁¢噺鍗曚綅", example = "GB") + private String unit; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; + +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java new file mode 100644 index 0000000..5ee2a7c --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java @@ -0,0 +1,84 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="MetricalInformation瀵硅薄", description="") +public class MetricalInformation implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "鐢ㄦ埛鍏宠仈Id", example = "7", required = true) + private Integer userId; + + @ApiModelProperty(value = "浠櫒鍏宠仈Id", example = "1", required = true) + private Integer instrumentId; + + @ApiModelProperty(value = "璁¢噺鍗曚綅", example = "GB", required = true) + private String measurementUnit; + + @ApiModelProperty(value = "寮�濮嬫棩鏈�", example = "2023-07-06", required = true, dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME) + private Date beginDate; + + @ApiModelProperty(value = "缁撴潫鏃ユ湡", example = "2026-07-06", required = true, dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME) + private Date endDate; + + @ApiModelProperty(value = "涓嶇‘瀹氬害", example = "0.3%", required = true) + private String uncertainty; + + @ApiModelProperty(value = "缁撴灉: 1锛氬悎鏍硷紱2锛氱煫姝e悗鍙敤锛�3锛氫笉鍚堟牸", example = "1", required = true) + private Integer result; + + @ApiModelProperty(value = "鎬ц兘鎸囨爣", example = "10086") + private String performanceIndex; + + @ApiModelProperty(value = "澶囨敞", example = "10086.com") + private String remarks; + + @ApiModelProperty(value = "鏂囦欢璺緞", hidden = true) + private String filePath; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; + +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateClassifyDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateClassifyDto.java new file mode 100644 index 0000000..3a672de --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateClassifyDto.java @@ -0,0 +1,20 @@ +package com.yuanchu.limslaboratory.pojo.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="UpdateClassifyDto瀵硅薄", description="") +public class UpdateClassifyDto { + @ApiModelProperty(value = "鍒嗙被涓婚敭", example = "1", required = true) + private Integer id; + + @ApiModelProperty(value = "鍒嗙被鐖跺悕绉�", example = "娓╁害娴嬮噺浠〃") + private String fatherName; + + @ApiModelProperty(value = "鍒嗙被瀛愬悕绉�", example = "浣撴俯璁�",required = true) + private String sonName; +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateEquipmentPointDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateEquipmentPointDto.java new file mode 100644 index 0000000..61069dd --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateEquipmentPointDto.java @@ -0,0 +1,34 @@ +package com.yuanchu.limslaboratory.pojo.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="UpdateEquipmentPointDto瀵硅薄", description="") +public class UpdateEquipmentPointDto { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭", example = "1", required = true) + private Integer id; + + @ApiModelProperty(value = "浠櫒Id 鍏宠仈", example = "1", required = true) + private Integer instrumentId; + + @ApiModelProperty(value = "鐮佺偣缂栧彿", example = "Area-1", required = true) + private String equipmentPoint; + + @ApiModelProperty(value = "鐮佺偣鍚嶇О", example = "瀵间綋灞忚斀锛堝鍘氶潰绉級", required = true) + private String equipmentPointName; + + @ApiModelProperty(value = "鍗曚綅", example = "mm", required = true) + private String unit; + + @ApiModelProperty(value = "鎻忚堪", example = "鐤簡锛屽仛涓嶄簡") + private String descriptiveness; +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateInstrumentDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateInstrumentDto.java new file mode 100644 index 0000000..675cb7a --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateInstrumentDto.java @@ -0,0 +1,70 @@ +package com.yuanchu.limslaboratory.pojo.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="UpdateInstrumentDto瀵硅薄", description="") +public class UpdateInstrumentDto { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "璁¢噺淇℃伅涓婚敭",example = "1", required = true) + private Integer id; + + @ApiModelProperty(value = "鍒嗙被ID 鍏宠仈", example = "1", required = true) + private Integer classifyId; + + @ApiModelProperty(value = "淇濈浜猴細鐢ㄦ埛琛ㄥ叧鑱擨d", example = "9", required = true) + private Integer userId; + + @ApiModelProperty(value = "浠櫒璁惧缂栧彿", example = "JSTC-W1-00001", required = true) + private String equipmentCode; + + @ApiModelProperty(value = "浠櫒璁惧鍚嶇О", example = "鏁板瓧鐢垫ˉ", required = true) + private String equipmentName; + + @ApiModelProperty(value = "榛樿1锛�1锛氳繍琛屻��2锛氭晠闅溿��3锛氭姤淇��4锛氭淇��5锛氬緟鏈�", example = "1", required = true) + private Integer conditions; + + @ApiModelProperty(value = "瑙勬牸鍨嬪彿", example = "WCDMS-1", required = true) + private String specificationsModels; + + @ApiModelProperty(value = "娴嬮噺鑼冨洿", example = "12姣背") + private String measuringRange; + + @ApiModelProperty(value = "璇樊", example = "0.000001寰背") + private String errorRate; + + @ApiModelProperty(value = "鐢熶骇鍘傚", example = "姹熻嫃榈烽洀") + private String manufacturer; + + @ApiModelProperty(value = "鍒拌揣鏃ユ湡", example = "2001-07-06", dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date arrivalDate; + + @ApiModelProperty(value = "楠屾敹鏃ユ湡", example = "2060-07-06", dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date acceptanceDate; + + @ApiModelProperty(value = "瀛樻斁鍦�", example = "鍦扮悆浜氭床涓浗姹熻嫃鍗楅��") + private String storagePlace; + + @ApiModelProperty(value = "鏄惁鏀寔鏁伴噰锛�1锛氭敮鎸侊紱0锛氫笉鏀寔", example = "1") + private Integer whetherDataAcquisition; + + @ApiModelProperty(value = "鏄惁闇�瑕佷华鍣ㄨ澶囪閲忥細濡傛灉闇�瑕佽閲忓懆鏈熷繀濉紱濡傛灉涓嶉渶瑕佽閲忓懆鏈熶笉蹇呭~.1锛氶渶瑕侊紱0锛氫笉闇�瑕�", example = "0") + private Integer equipmentMeasurement; + + @ApiModelProperty(value = "璁¢噺鎴鏈夋晥鏈燂細涓巈quipmentMeasurement鐩稿叧鑱�", example = "12") + private Integer termValidity; + + @ApiModelProperty(value = "鎻忚堪", example = "鐤媯鏄熸湡浜旓紒锛侊紒") + private String descriptiveness; +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateMetricalInformationDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateMetricalInformationDto.java new file mode 100644 index 0000000..f209cd1 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdateMetricalInformationDto.java @@ -0,0 +1,53 @@ +package com.yuanchu.limslaboratory.pojo.dto; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="UpdateMetricalInformationDto瀵硅薄", description="") +public class UpdateMetricalInformationDto { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "涓婚敭") + private Integer id; + + @ApiModelProperty(value = "鐢ㄦ埛鍏宠仈Id", example = "7", required = true) + private Integer userId; + + @ApiModelProperty(value = "璁¢噺鍗曚綅", example = "GB", required = true) + private String measurementUnit; + + @ApiModelProperty(value = "寮�濮嬫棩鏈�", example = "2023-07-06", required = true, dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME) + private Date beginDate; + + @ApiModelProperty(value = "缁撴潫鏃ユ湡", example = "2026-07-06", required = true, dataType = "date") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME) + private Date endDate; + + @ApiModelProperty(value = "涓嶇‘瀹氬害", example = "0.3%", required = true) + private String uncertainty; + + @ApiModelProperty(value = "缁撴灉: 1锛氬悎鏍硷紱2锛氱煫姝e悗鍙敤锛�3锛氫笉鍚堟牸", example = "1", required = true) + private Integer result; + + @ApiModelProperty(value = "鎬ц兘鎸囨爣", example = "10086") + private String performanceIndex; + + @ApiModelProperty(value = "澶囨敞", example = "10086.com") + private String remarks; + + @ApiModelProperty(value = "鏂囦欢璺緞", hidden = true) + private String filePath; +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/ClassifyService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/ClassifyService.java new file mode 100644 index 0000000..a297357 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/ClassifyService.java @@ -0,0 +1,26 @@ +package com.yuanchu.limslaboratory.service; + +import com.yuanchu.limslaboratory.pojo.Classify; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface ClassifyService extends IService<Classify> { + + Integer addClassifyInformation(Classify classify); + + List<Map<String, Object>> getListClassifyInformation(String classifyName); + + Boolean deleteClassifyInformation(String classifyId); + + Boolean updateClassifyInformation(Classify classify); +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java new file mode 100644 index 0000000..4861c63 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java @@ -0,0 +1,29 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.EquipmentPoint; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface EquipmentPointService extends IService<EquipmentPoint> { + + Integer addEquipmentPointInformation(EquipmentPoint equipmentPoint); + + List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId); + + Integer deleteEquipmentPointInformation(Integer equipmentPointId); + + Integer updateEquipmentPointInformation(EquipmentPoint equipmentPoint); +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/InstrumentService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/InstrumentService.java new file mode 100644 index 0000000..00c22c1 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/InstrumentService.java @@ -0,0 +1,44 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface InstrumentService extends IService<Instrument> { + + Integer addInstrumentInformation(Instrument instrument); + + Boolean deleteInstrumentInformation(String instrumentId); + + IPage<Map<String, Object>> getListInstrumentInformation(Integer conditions, Boolean whetherWhether, String numberOrNameOrSpecifications, + Integer classifyId, Page<Objects> page); + + /** + * 鏇存柊浠櫒鏁版嵁鐨勬椂鍊欓渶瑕佽幏鍙栨墍鏈夋暟鎹� + * @param instrumentId + * @return + */ + Instrument getIdInstrumentInformation(Integer instrumentId); + + Integer updateEquipmentPointInformation(Instrument instrument); + + /** + * 鏌ヨ鎵�鏈夎澶囦俊鎭� + * @return + */ + List<Map> selectInstrument(); + +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java new file mode 100644 index 0000000..5302b0c --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java @@ -0,0 +1,26 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.MeteringPlan; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-27 + */ +public interface MeteringPlanService extends IService<MeteringPlan> { + + Integer addMeteringPlanInformation(MeteringPlan meteringPlan); + + IPage<Map<String, Object>> pagingQueryOfMeteringPlan(String measureCodeOrNameOrUnit, Page<Objects> page); + + IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page); +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java new file mode 100644 index 0000000..eb8ad69 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java @@ -0,0 +1,27 @@ +package com.yuanchu.limslaboratory.service; + +import com.yuanchu.limslaboratory.pojo.MetricalInformation; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +public interface MetricalInformationService extends IService<MetricalInformation> { + + Integer addEquipmentPointInformation(MetricalInformation metricalInformation, MultipartFile file); + + List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId); + + Integer deleteMetricalInformation(Integer metricalInformationId); + + Integer updateMetricalInformation(MetricalInformation metricalInformation, MultipartFile file); +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java new file mode 100644 index 0000000..66d8c86 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java @@ -0,0 +1,85 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.yuanchu.limslaboratory.pojo.Classify; +import com.yuanchu.limslaboratory.mapper.ClassifyMapper; +import com.yuanchu.limslaboratory.service.ClassifyService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Service +public class ClassifyServiceImpl extends ServiceImpl<ClassifyMapper, Classify> implements ClassifyService { + + @Resource + private ClassifyMapper classifyMapper; + + @Override + public Integer addClassifyInformation(Classify classify) { + LambdaQueryWrapper<Classify> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Classify::getFatherName, classify.getFatherName()); + wrapper.eq(Classify::getSonName, classify.getSonName()); + wrapper.eq(Classify::getState, 1); + Classify classify1 = classifyMapper.selectOne(wrapper); + if (ObjectUtils.isEmpty(classify1)){ + return classifyMapper.insert(classify); + } else { + return 2; + } + } + + @Override + public List<Map<String, Object>> getListClassifyInformation(String classifyName) { + LambdaQueryWrapper<Classify> wrapper = new LambdaQueryWrapper<>(); + if (!ObjectUtils.isEmpty(classifyName)){ + wrapper.like(Classify::getFatherName, classifyName); + } + wrapper.groupBy(Classify::getFatherName); + wrapper.select(Classify::getId, Classify::getFatherName); + List<Map<String, Object>> maps = classifyMapper.selectMaps(wrapper); + for (Map<String, Object> map : maps){ + LambdaQueryWrapper<Classify> wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(Classify::getFatherName, map.get("father_name")); + wrapper1.isNotNull(Classify::getSonName); + wrapper1.select(Classify::getId, Classify::getSonName); + List<Map<String, Object>> maps1 = classifyMapper.selectMaps(wrapper1); + if (!ObjectUtils.isEmpty(maps1)){ + map.put("children", maps1); + map.remove("id"); + } else { + map.put("children", null); + } + } + return maps; + } + + @Override + public Boolean deleteClassifyInformation(String classifyId) { + LambdaUpdateWrapper<Classify> wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(Classify::getId, classifyId); + wrapper.set(Classify::getState, 0); + int isDeleteSuccess = classifyMapper.update(new Classify(), wrapper); + return isDeleteSuccess > 0; + } + + @Override + public Boolean updateClassifyInformation(Classify classify) { + LambdaUpdateWrapper<Classify> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Classify::getId, classify.getId()); + int isUpdateClassifySuccess = classifyMapper.update(classify, updateWrapper); + return isUpdateClassifySuccess > 0; + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java new file mode 100644 index 0000000..94dc21a --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java @@ -0,0 +1,75 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.EquipmentPoint; +import com.yuanchu.limslaboratory.mapper.EquipmentPointMapper; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.yuanchu.limslaboratory.service.EquipmentPointService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Service +public class EquipmentPointServiceImpl extends ServiceImpl<EquipmentPointMapper, EquipmentPoint> implements EquipmentPointService { + + @Resource + private EquipmentPointMapper equipmentPointMapper; + + @Override + public Integer addEquipmentPointInformation(EquipmentPoint equipmentPoint) { + LambdaQueryWrapper<EquipmentPoint> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EquipmentPoint::getEquipmentPoint, equipmentPoint.getEquipmentPoint()); + wrapper.eq(EquipmentPoint::getState, 1); + wrapper.eq(EquipmentPoint::getInstrumentId, equipmentPoint.getInstrumentId()); + wrapper.select(EquipmentPoint::getEquipmentPoint); + EquipmentPoint equipmentPoint1 = equipmentPointMapper.selectOne(wrapper); + if (ObjectUtils.isEmpty(equipmentPoint1)){ + return equipmentPointMapper.insert(equipmentPoint); + } + return 0; + } + + @Override + public List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId) { + return equipmentPointMapper.getListEquipmentPointInformation(InstrumentId); + } + + @Override + public Integer deleteEquipmentPointInformation(Integer equipmentPointId) { + LambdaUpdateWrapper<EquipmentPoint> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipmentPoint::getId, equipmentPointId); + updateWrapper.set(EquipmentPoint::getState, 0); + return equipmentPointMapper.update(new EquipmentPoint(), updateWrapper); + } + + @Override + public Integer updateEquipmentPointInformation(EquipmentPoint equipmentPoint) { + LambdaQueryWrapper<EquipmentPoint> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EquipmentPoint::getEquipmentPoint, equipmentPoint.getEquipmentPoint()); + wrapper.eq(EquipmentPoint::getState, 1); + wrapper.select(EquipmentPoint::getId, EquipmentPoint::getId); + EquipmentPoint equipmentPoint1 = equipmentPointMapper.selectOne(wrapper); + if (ObjectUtils.isEmpty(equipmentPoint1)){ + return equipmentPointMapper.updateById(equipmentPoint); + } else if (equipmentPoint.getId().equals(equipmentPoint1.getId())){ + return equipmentPointMapper.updateById(equipmentPoint); + } + return 0; + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InstrumentServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InstrumentServiceImpl.java new file mode 100644 index 0000000..5e91307 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InstrumentServiceImpl.java @@ -0,0 +1,89 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.yuanchu.limslaboratory.mapper.InstrumentMapper; +import com.yuanchu.limslaboratory.service.InstrumentService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.utils.MyUtil; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Service +public class InstrumentServiceImpl extends ServiceImpl<InstrumentMapper, Instrument> implements InstrumentService { + + @Resource + private InstrumentMapper instrumentMapper; + + @Override + public Integer addInstrumentInformation(Instrument instrument) { + LambdaQueryWrapper<Instrument> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Instrument::getEquipmentCode, instrument.getEquipmentCode()); + wrapper.eq(Instrument::getState, 1); + wrapper.select(Instrument::getEquipmentCode); + Instrument instrument1 = instrumentMapper.selectOne(wrapper); + if (ObjectUtils.isEmpty(instrument1)){ + return instrumentMapper.insert(instrument); + } + return 0; + } + + @Override + public Boolean deleteInstrumentInformation(String instrumentId) { + LambdaUpdateWrapper<Instrument> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Instrument::getId, instrumentId); + updateWrapper.set(Instrument::getState, 0); + int isUpdateSuccess = instrumentMapper.update(new Instrument(), updateWrapper); + return isUpdateSuccess > 0; + } + + @Override + public IPage<Map<String, Object>> getListInstrumentInformation(Integer conditions, Boolean whetherWhether, String numberOrNameOrSpecifications, + Integer classifyId, Page<Objects> page) { + return instrumentMapper.getListInstrumentInformation(conditions, whetherWhether, numberOrNameOrSpecifications, classifyId, page); + } + + @Override + public Instrument getIdInstrumentInformation(Integer instrumentId) { + LambdaQueryWrapper<Instrument> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Instrument::getId, instrumentId); + return instrumentMapper.selectOne(wrapper); + } + + @Override + public Integer updateEquipmentPointInformation(Instrument instrument) { + LambdaQueryWrapper<Instrument> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Instrument::getEquipmentCode, instrument.getEquipmentCode()); + wrapper.eq(Instrument::getState, 1); + wrapper.select(Instrument::getEquipmentCode, Instrument::getId); + Instrument instrument1 = instrumentMapper.selectOne(wrapper); + if (ObjectUtils.isEmpty(instrument1)){ + return instrumentMapper.updateById(instrument); + } else if (instrument.getId().equals(instrument1.getId())){ + return instrumentMapper.updateById(instrument); + } + return 0; + } + + //鏌ヨ鎵�鏈夎澶囦俊鎭� + @Override + public List<Map> selectInstrument() { + return instrumentMapper.selectInstrument(); + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java new file mode 100644 index 0000000..1a5f4a8 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java @@ -0,0 +1,51 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Instrument; +import com.yuanchu.limslaboratory.pojo.MeteringPlan; +import com.yuanchu.limslaboratory.mapper.MeteringPlanMapper; +import com.yuanchu.limslaboratory.service.MeteringPlanService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-27 + */ +@Service +public class MeteringPlanServiceImpl extends ServiceImpl<MeteringPlanMapper, MeteringPlan> implements MeteringPlanService { + + @Resource + private MeteringPlanMapper meteringPlanMapper; + + @Override + public Integer addMeteringPlanInformation(MeteringPlan meteringPlan) { + String timeSixNumber = MyUtil.getTimeSixNumberCode("P"); + meteringPlan.setPlannedOrderNumber(timeSixNumber); + return meteringPlanMapper.insert(meteringPlan); + } + + @Override + public IPage<Map<String, Object>> pagingQueryOfMeteringPlan(String measureCodeOrNameOrUnit, Page<Objects> page) { + return null; + } + + @Override + public IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page) { + return meteringPlanMapper.pagingQueryOfMeasurementLedger(page); + } +} diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java new file mode 100644 index 0000000..74ed4a4 --- /dev/null +++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java @@ -0,0 +1,70 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.yuanchu.limslaboratory.pojo.MetricalInformation; +import com.yuanchu.limslaboratory.mapper.MetricalInformationMapper; +import com.yuanchu.limslaboratory.service.MetricalInformationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.utils.FileSaveUtil; +import com.yuanchu.limslaboratory.utils.MyUtil; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-20 + */ +@Service +public class MetricalInformationServiceImpl extends ServiceImpl<MetricalInformationMapper, MetricalInformation> implements MetricalInformationService { + + @Resource + private MetricalInformationMapper metricalInformationMapper; + + @Override + public Integer addEquipmentPointInformation(MetricalInformation metricalInformation, MultipartFile file) { + if (!ObjectUtils.isEmpty(file)){ + String fileName = FileSaveUtil.StoreFile(file); + metricalInformation.setFilePath(fileName); + } + return metricalInformationMapper.insert(metricalInformation); + } + + @Override + public List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId) { + return metricalInformationMapper.getListEquipmentPointInformation(InstrumentId); + } + + @Override + public Integer deleteMetricalInformation(Integer metricalInformationId) { + LambdaUpdateWrapper<MetricalInformation> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(MetricalInformation::getId, metricalInformationId); + updateWrapper.set(MetricalInformation::getState, 0); + return metricalInformationMapper.update(new MetricalInformation(), updateWrapper); + } + + @Override + public Integer updateMetricalInformation(MetricalInformation metricalInformation, MultipartFile file) { + if (!ObjectUtils.isEmpty(file)){ + String fileName = FileSaveUtil.StoreFile(file); + metricalInformation.setFilePath(fileName); + LambdaQueryWrapper<MetricalInformation> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MetricalInformation::getId, metricalInformation.getId()); + wrapper.select(MetricalInformation::getFilePath); + MetricalInformation metricalInformation1 = metricalInformationMapper.selectOne(wrapper); + if (!ObjectUtils.isEmpty(metricalInformation1.getFilePath())){ + FileSaveUtil.DeleteFile(metricalInformation1.getFilePath()); + } + } + return metricalInformationMapper.updateById(metricalInformation); + } +} diff --git a/laboratory-server/src/main/resources/mapper/ClassifyMapper.xml b/laboratory-server/src/main/resources/mapper/ClassifyMapper.xml new file mode 100644 index 0000000..f6e5f1c --- /dev/null +++ b/laboratory-server/src/main/resources/mapper/ClassifyMapper.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.yuanchu.limslaboratory.mapper.ClassifyMapper"> + +</mapper> diff --git a/laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml b/laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml new file mode 100644 index 0000000..c64e216 --- /dev/null +++ b/laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml @@ -0,0 +1,11 @@ +<?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.yuanchu.limslaboratory.mapper.EquipmentPointMapper"> + + <select id="getListEquipmentPointInformation" resultType="map"> + SELECT e.`id`, e.`equipment_point` equipmentPoint, e.`equipment_point_name` equipmentPointName, e.`unit`,u.`name`, DATE_FORMAT(e.`update_time`, '%Y-%m-%d') updateTime, e.`descriptiveness` + FROM equipment_point e, `user` u + WHERE e.`user_id` = u.`id` + AND e.`instrument_id` = #{InstrumentId} + </select> +</mapper> diff --git a/laboratory-server/src/main/resources/mapper/InstrumentMapper.xml b/laboratory-server/src/main/resources/mapper/InstrumentMapper.xml new file mode 100644 index 0000000..ee31f57 --- /dev/null +++ b/laboratory-server/src/main/resources/mapper/InstrumentMapper.xml @@ -0,0 +1,25 @@ +<?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.yuanchu.limslaboratory.mapper.InstrumentMapper"> + + <select id="getListInstrumentInformation" resultType="map"> + SELECT i.`id`, i.`equipment_code`, i.`equipment_name`, i.`specifications_models`, u.`name`, + DATE_FORMAT(DATE_ADD(i.`create_time`, INTERVAL i.`term_validity` MONTH), '%Y-%m-%d') termValidity, i.`conditions`, i.`storage_place` + FROM instrument i, `user` u + WHERE i.`state` = 1 + AND i.`classify_id` = #{classifyId} + <if test="conditions != null"> + AND i.`conditions` = #{conditions} + </if> + <if test="numberOrNameOrSpecifications != null and numberOrNameOrSpecifications != ''"> + AND CONCAT(i.`equipment_code`, i.`equipment_name`, i.`specifications_models`) LIKE CONCAT('%',#{numberOrNameOrSpecifications},'%') + </if> + <if test="whetherWhether == true"> + AND DATE_FORMAT(DATE_ADD(i.`create_time`, INTERVAL i.`term_validity` MONTH), '%Y-%m-%d') <![CDATA[<]]> NOW() + </if> + AND i.`user_id` = u.`id` + </select> + <select id="selectInstrument" resultType="Map"> + select id,equipment_name from lims_laboratory.instrument + </select> +</mapper> diff --git a/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml b/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml new file mode 100644 index 0000000..ca6ab6b --- /dev/null +++ b/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml @@ -0,0 +1,11 @@ +<?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.yuanchu.limslaboratory.mapper.MeteringPlanMapper"> + + <select id="pagingQueryOfMeasurementLedger" resultType="map"> + SELECT i.`equipment_code`, i.`equipment_name`, i.`specifications_models`, m.`create_time`, m.`uncertainty`, + m.`end_date`, i.`term_validity`, i.`storage_place`, i.`conditions` + FROM instrument i, metrical_information m + WHERE i.`id` = m.`instrument_id` + </select> +</mapper> diff --git a/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml b/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml new file mode 100644 index 0000000..21de131 --- /dev/null +++ b/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml @@ -0,0 +1,13 @@ +<?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.yuanchu.limslaboratory.mapper.MetricalInformationMapper"> + + <select id="getListEquipmentPointInformation" resultType="map"> + SELECT m.`id`, u.`name`, m.`measurement_unit`, DATE_FORMAT(m.`begin_date`, '%Y-%m-%d') beginDate, DATE_FORMAT(m.`end_date`, '%Y-%m-%d') endDate, + m.`uncertainty`, m.`result`, m.`performance_index`, m.`remarks`, m.`file_path`, DATE_FORMAT(m.`create_time`, '%Y-%m-%d') createDate + FROM metrical_information m, `user` u + WHERE m.`user_id` = u.`id` + AND m.`state` = 1 + AND m.`instrument_id` = #{InstrumentId} + </select> +</mapper> diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..b6025a8 --- /dev/null +++ b/pom.xml @@ -0,0 +1,232 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-parent</artifactId> + <version>2.7.3</version> + <relativePath/> <!-- lookup parent from repository --> + </parent> + <groupId>com.yuanchu</groupId> + <artifactId>lims-laboratory</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>lims-laboratory</name> + <description>lims-laboratory</description> + <packaging>pom</packaging> + + <modules> + <module>user-server</module> + <module>sys</module> + <module>framework</module> + <module>standard-server</module> + <module>inspection-server</module> + <module>laboratory-server</module> + </modules> + + <properties> + <java.version>1.8</java.version> + <log4j.version>1.2.17</log4j.version> + <mysql.version>8.0.28</mysql.version> + <jwt.version>4.4.0</jwt.version> + <swagger.version>3.0.0</swagger.version> + <knife4j-spring-ui.version>3.0.3</knife4j-spring-ui.version> + <druid.version>1.2.18</druid.version> + <mybatis-plus.version>3.5.3.1</mybatis-plus.version> + <openfeign.version>3.1.3</openfeign.version> + <feign-okhttp.version>11.0</feign-okhttp.version> + <shiro.version>1.5.3</shiro.version> + + <!-- 鎵撳寘鍚庡鍑虹殑璺緞 --> + <package.path>${project.build.directory}/LIMS</package.path> + </properties> + + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + </dependency> + + <!--鐑儴缃瞐--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-devtools</artifactId> + <scope>runtime</scope> + <optional>true</optional> + </dependency> + + <!--lombok--> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + </dependency> + + <!--Swagger3--> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-boot-starter</artifactId> + <version>${swagger.version}</version> + </dependency> + + <!--mybatis-plus--> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-boot-starter</artifactId> + <version>${mybatis-plus.version}</version> + </dependency> + + <!--鍚庣娉ㄩ噴妫�楠屽伐鍏�--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + </dependencies> + <dependencyManagement> + <dependencies> + <!--log4j--> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j.version}</version> + </dependency> + + <!--mysql--> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>${mysql.version}</version> + </dependency> + + <!--鏁版嵁搴撹繛鎺ユ睜--> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>druid</artifactId> + <version>${druid.version}</version> + </dependency> + + <!--Swagger3-Ui缇庡寲--> + <dependency> + <groupId>com.github.xiaoymin</groupId> + <artifactId>knife4j-spring-ui</artifactId> + <version>${knife4j-spring-ui.version}</version> + </dependency> + + <!--mybatis-plus浠g爜鐢熸垚鍣�--> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-generator</artifactId> + <version>${mybatis-plus.version}</version> + </dependency> + + <!--feign--> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-openfeign</artifactId> + <version>${openfeign.version}</version> + </dependency> + + <!--okhttp--> + <dependency> + <groupId>io.github.openfeign</groupId> + <artifactId>feign-okhttp</artifactId> + <version>${feign-okhttp.version}</version> + </dependency> + + <!--瀹夊叏妗嗘灦shiro--> + <dependency> + <groupId>org.apache.shiro</groupId> + <artifactId>shiro-spring-boot-starter</artifactId> + <version>${shiro.version}</version> + </dependency> + + <!--jwt--> + <dependency> + <groupId>com.auth0</groupId> + <artifactId>java-jwt</artifactId> + <version>${jwt.version}</version> + </dependency> + </dependencies> + </dependencyManagement> + + <build> + <plugins> + <!-- 涓婄嚎閮ㄧ讲 JAR鍚姩鍒嗙渚濊禆lib鍜岄厤缃� --> + <!-- 鎵撳寘jar --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <!-- 涓嶆墦鍖呰祫婧愭枃浠� --> + <excludes> + <exclude>*.**</exclude> + </excludes> + <archive> + <manifest> + <addClasspath>true</addClasspath> + <!-- MANIFEST.MF 涓� Class-Path 鍔犲叆鍓嶇紑 --> + <classpathPrefix>lib/</classpathPrefix> + <!-- jar鍖呬笉鍖呭惈鍞竴鐗堟湰鏍囪瘑 --> + <useUniqueVersions>false</useUniqueVersions> + <!-- 鎸囧畾鍏ュ彛绫� --> + <mainClass>com.yuanchu.limslaboratory.SysApplication</mainClass> + </manifest> + <!-- 鎸囧畾閰嶇疆鏂囦欢鐩綍锛岃繖鏍穓ar杩愯鏃朵細鍘绘壘鍒板悓鐩綍涓嬬殑conf鏂囦欢澶逛笅鏌ユ壘 --> + <manifestEntries> + <Class-Path>conf/</Class-Path> + </manifestEntries> + </archive> + <outputDirectory>${package.path}</outputDirectory> + </configuration> + </plugin> + <!-- 鎷疯礉渚濊禆 copy-dependencies --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy-dependencies</id> + <phase>package</phase> + <goals> + <goal>copy-dependencies</goal> + </goals> + <configuration> + <outputDirectory>${package.path}/lib/ </outputDirectory> + </configuration> + </execution> + </executions> + </plugin> + <!-- 鎷疯礉璧勬簮鏂囦欢 copy-resources --> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <executions> + <execution> + <id>copy-resources</id> + <phase>package</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <resources> + <resource> + <directory>src/main/resources</directory> + <!-- 鎸囧畾鍙備笌鏋勫缓鐨剅esource --> + <includes> + <include>*.**</include> + <!--鎺掗櫎application-dev.yml鏂囦欢--> + </includes> + </resource> + </resources> + <outputDirectory>${package.path}/conf</outputDirectory> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> diff --git a/sql/lims.sql b/sql/lims.sql new file mode 100644 index 0000000..fee83e7 --- /dev/null +++ b/sql/lims.sql @@ -0,0 +1,528 @@ +/* +SQLyog Ultimate v13.1.1 (64 bit) +MySQL - 5.7.32-log : Database - lims_laboratory +********************************************************************* +*/ + +/*!40101 SET NAMES utf8 */; + +/*!40101 SET SQL_MODE=''*/; + +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +CREATE DATABASE /*!32312 IF NOT EXISTS*/`lims_laboratory` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; + +USE `lims_laboratory`; + +/*Table structure for table `classify` */ + +DROP TABLE IF EXISTS `classify`; + +CREATE TABLE `classify` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '鍒嗙被涓婚敭', + `father_name` varchar(25) NOT NULL COMMENT '鍒嗙被鐖跺悕绉�', + `son_name` varchar(25) DEFAULT NULL COMMENT '鍒嗙被瀛愬悕绉�', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '閫昏緫鍒犻櫎', + `create_time` datetime NOT NULL COMMENT '鍒涘缓鏃堕棿', + `update_time` datetime NOT NULL COMMENT '鏇存柊鏃堕棿', + `version` int(1) NOT NULL DEFAULT '1' COMMENT '涔愯閿�', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `classify` */ + +insert into `classify`(`id`,`father_name`,`son_name`,`state`,`create_time`,`update_time`,`version`) values +(1,'娓╁害娴嬮噺浠〃','浣撴俯璁�',1,'2023-07-21 10:42:26','2023-07-21 14:14:54',1), +(3,'浣撴俯璁�',NULL,1,'2023-07-21 10:48:51','2023-07-21 10:48:51',1), +(5,'浣撴俯',NULL,1,'2023-07-21 10:53:32','2023-07-21 10:53:32',1), +(10,'浣撴俯','浣撴俯',0,'2023-07-21 11:16:51','2023-07-21 13:45:52',1), +(12,'浣撴俯','浣撴俯璁�',1,'2023-07-21 11:16:51','2023-07-21 11:16:51',1), +(13,'浣撴俯','浣撴俯',1,'2023-07-21 13:50:52','2023-07-21 13:50:52',1); + +/*Table structure for table `enterprise` */ + +DROP TABLE IF EXISTS `enterprise`; + +CREATE TABLE `enterprise` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '浼佷笟缂栧彿', + `name` varchar(20) NOT NULL COMMENT '浼佷笟鍚嶅瓧', + `byname` varchar(20) NOT NULL COMMENT '浼佷笟绠�绉�', + `link_name` varchar(10) NOT NULL COMMENT '鑱旂郴浜哄悕瀛�', + `link_phone` varchar(11) NOT NULL COMMENT '鑱旂郴浜虹數璇�', + `create_time` datetime NOT NULL COMMENT '鍒涘缓鏃堕棿', + `update_time` datetime NOT NULL COMMENT '鏇存柊鏃堕棿', + `version` int(1) NOT NULL DEFAULT '1' COMMENT '閿�', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `enterprise` */ + +insert into `enterprise`(`id`,`name`,`byname`,`link_name`,`link_phone`,`create_time`,`update_time`,`version`) values +(1,'涓ぉ绉戞妧缃戠粶鏈夐檺鍏徃','涓ぉ绉戞妧','鏉庢灄','18400000000','2023-07-07 10:51:38','2023-07-07 10:51:41',1); + +/*Table structure for table `equipment_point` */ + +DROP TABLE IF EXISTS `equipment_point`; + +CREATE TABLE `equipment_point` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭', + `instrument_id` int(10) NOT NULL COMMENT '浠櫒Id 鍏宠仈', + `user_id` int(10) NOT NULL COMMENT '鐢ㄦ埛Id 鍏宠仈', + `equipment_point` varchar(25) NOT NULL COMMENT '鐮佺偣缂栧彿', + `equipment_point_name` varchar(25) NOT NULL COMMENT '鐮佺偣鍚嶇О', + `unit` varchar(20) NOT NULL COMMENT '鍗曚綅', + `descriptiveness` varchar(100) DEFAULT '--' COMMENT '鎻忚堪', + `create_time` datetime NOT NULL COMMENT '鍒涘缓鏃ユ湡', + `update_time` datetime NOT NULL COMMENT '鏇存柊鏃ユ湡', + `state` int(11) NOT NULL DEFAULT '1' COMMENT '閫昏緫鍒犻櫎', + `version` int(11) DEFAULT '1' COMMENT '涔愯閿�', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `equipment_point` */ + +insert into `equipment_point`(`id`,`instrument_id`,`user_id`,`equipment_point`,`equipment_point_name`,`unit`,`descriptiveness`,`create_time`,`update_time`,`state`,`version`) values +(1,1,7,'Area-1','瀵间綋灞忚斀锛堝鍘氶潰绉級','mm','鐤簡锛屽仛涓嶄簡','2023-07-24 14:40:01','2023-07-24 17:23:15',1,1), +(2,1,7,'Area-2','瀵间綋灞忚斀锛堝鍘氶潰绉級','mm','澶洶浜�','2023-07-24 14:40:01','2023-07-24 15:03:44',1,1); + +/*Table structure for table `inspection` */ + +DROP TABLE IF EXISTS `inspection`; + +CREATE TABLE `inspection` ( + `id` varchar(25) NOT NULL COMMENT '鎶ユ缂栧彿', + `type` int(1) NOT NULL COMMENT '0锛氬師鏉愭枡锛�1锛氫骇鍝侊紱2锛氬崐鎴愬搧锛�', + `inspection_status` int(1) NOT NULL DEFAULT '0' COMMENT '鎶ユ鐘舵�� 1锛氬凡妫�楠岋紱0鏈楠�', + `qualified_state` int(1) DEFAULT NULL COMMENT '鏄惁鍚堟牸 1锛氭槸锛�0鍚�', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '1锛氬緟鎻愪氦锛�2锛氬凡鎻愪氦锛�0锛氬凡浣滃簾', + `create_time` datetime NOT NULL COMMENT '鎶ユ鏃堕棿', + `update_time` datetime NOT NULL, + `version` int(1) DEFAULT '1', + `user_name` varchar(25) NOT NULL COMMENT '鎶ユ浜�', + `inspect_user_id` int(10) DEFAULT NULL COMMENT '鍏宠仈 妫�楠屼汉锛堢敤鎴穒d锛�', + `inspect_start_time` datetime DEFAULT NULL COMMENT '妫�楠屽紑濮嬫棩鏈�', + `inspect_end_time` datetime DEFAULT NULL COMMENT '妫�楠岀粨鏉熸棩鏈�', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +/*Data for the table `inspection` */ + +insert into `inspection`(`id`,`type`,`inspection_status`,`qualified_state`,`state`,`create_time`,`update_time`,`version`,`user_name`,`inspect_user_id`,`inspect_start_time`,`inspect_end_time`) values +('1680929494813868034',0,0,NULL,1,'2023-07-17 21:16:36','2023-07-17 21:16:36',1,'娴嬭瘯浜哄憳',NULL,NULL,NULL), +('1680929899014750210',0,0,NULL,1,'2023-07-17 21:18:13','2023-07-17 21:18:13',1,'娴嬭瘯浜哄憳',NULL,NULL,NULL), +('1681215775833042945',0,0,NULL,1,'2023-07-18 16:14:11','2023-07-18 16:14:11',1,'娴嬭瘯浜哄憳',NULL,NULL,NULL); + +/*Table structure for table `inspection_material_list` */ + +DROP TABLE IF EXISTS `inspection_material_list`; + +CREATE TABLE `inspection_material_list` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'id', + `material_id` varchar(25) NOT NULL COMMENT '鐗╂枡id', + `material_num` int(10) NOT NULL COMMENT '鎶ユ鏁伴噺-鐗╂枡鏁伴噺', + `material_supplier` varchar(25) NOT NULL COMMENT '渚涘簲鍟�', + `material_name` varchar(25) NOT NULL COMMENT '鐗╂枡鍚嶇О', + `material_location` varchar(25) NOT NULL COMMENT '鐗╂枡瀛樻斁鍦�', + `material_batch` varchar(25) NOT NULL COMMENT '鐗╂枡鎵规', + `material_reel_number` varchar(25) NOT NULL COMMENT '鐗╂枡鐩樺彿', + `specifications_serial_number` varchar(50) NOT NULL COMMENT '瑙勬牸鍚嶇О/鍨嬪彿鍚嶇О', + `specifications_voltage_level` varchar(30) DEFAULT NULL COMMENT '鐢靛帇绛夌骇', + `specifications_cross_section` varchar(30) DEFAULT NULL COMMENT '涓荤嚎蹇冩埅闈�', + `specifications_number_of_cores` varchar(30) DEFAULT NULL COMMENT '涓荤嚎鑺姱鏁�', + `specifications_instruct` varchar(30) DEFAULT NULL COMMENT '鐢熶骇鎸囦护鍙�', + `notes` varchar(100) DEFAULT NULL COMMENT '澶囨敞', + `state` int(1) NOT NULL DEFAULT '1', + `create_time` datetime NOT NULL COMMENT '鎶ユ鏃堕棿', + `update_time` datetime NOT NULL, + `version` int(1) DEFAULT '1', + `inspection_id` varchar(25) NOT NULL COMMENT '鍏宠仈 鎶ユ鍗昳d', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `inspection_material_list` */ + +insert into `inspection_material_list`(`id`,`material_id`,`material_num`,`material_supplier`,`material_name`,`material_location`,`material_batch`,`material_reel_number`,`specifications_serial_number`,`specifications_voltage_level`,`specifications_cross_section`,`specifications_number_of_cores`,`specifications_instruct`,`notes`,`state`,`create_time`,`update_time`,`version`,`inspection_id`) values +(1,'1680929494813868034',100,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','娴嬭瘯瑙勬牸/dsahj1','1','1','1','1',NULL,1,'2023-07-17 21:16:36','2023-07-17 21:16:36',1,'1681215775833042945'), +(2,'1680929899014750210',100,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','娴嬭瘯瑙勬牸/dsahj1','1','1','1','1',NULL,1,'2023-07-17 21:18:13','2023-07-17 21:18:13',1,'1681215775833042945'), +(3,'1681499095783407618',100,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','23123','3424','2131','2','123','312',1,'2023-07-19 11:00:00','2023-07-19 11:00:00',1,'1681215775833042945'), +(4,'1',10,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','','','瑙勬牸/鍨嬪彿','','','',1,'2023-07-19 13:59:46','2023-07-19 13:59:46',1,'1681215775833042945'), +(5,'1',10,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','','','瑙勬牸/鍨嬪彿','','','',1,'2023-07-19 14:00:51','2023-07-19 14:00:51',1,'1681215775833042945'), +(6,'1',10,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','','','瑙勬牸/鍨嬪彿','','','',0,'2023-07-19 14:01:46','2023-07-19 14:01:46',1,'1681215775833042945'), +(7,'1',10,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','','','瑙勬牸/鍨嬪彿','','','',0,'2023-07-19 14:02:47','2023-07-19 14:02:47',1,'1681215775833042945'), +(8,'1',10,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','瑙勬牸/鍨嬪彿','5','2','4','3','1',1,'2023-07-19 14:25:56','2023-07-19 14:39:23',1,'1681215775833042945'), +(9,'1',10,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','瑙勬牸/鍨嬪彿','5','2','4','3','1',1,'2023-07-19 15:17:56','2023-07-19 15:17:56',1,'1681215775833042945'), +(13,'1',10,'涓ぉ','鐢电嚎鐢电紗','鍦颁笅涓�灞�','1','123','瑙勬牸/鍨嬪彿','5','2','4','3','1',0,'2023-07-19 15:44:51','2023-07-20 11:07:27',1,'1681215775833042945'); + +/*Table structure for table `inspection_product_list` */ + +DROP TABLE IF EXISTS `inspection_product_list`; + +CREATE TABLE `inspection_product_list` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '椤圭洰id', + `name` varchar(25) NOT NULL COMMENT '椤圭洰鍚嶇О', + `method` varchar(25) NOT NULL COMMENT '璇曢獙鏂规硶', + `ask` varchar(30) DEFAULT NULL COMMENT '璇曢獙瑕佹眰', + `unit` varchar(20) NOT NULL COMMENT '鍗曚綅', + `required` varchar(20) NOT NULL COMMENT '鎷涙爣浜鸿姹傚��', + `internal` varchar(20) NOT NULL COMMENT '鍐呮帶鍊�', + `start_time` datetime DEFAULT NULL COMMENT '寮�濮嬫棩鏈�', + `end_time` datetime DEFAULT NULL COMMENT '缁撴潫鏃ユ湡', + `state` int(1) NOT NULL DEFAULT '1', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` int(1) DEFAULT '1', + `inspection_material_list_id` int(10) NOT NULL COMMENT '鍏宠仈 鎶ユ鐗╂枡id', + `user_id` int(10) NOT NULL COMMENT '鍏宠仈 鐢ㄦ埛id 璇曢獙鍛�', + `instrument_id` int(10) DEFAULT NULL COMMENT '鍏宠仈 璁惧id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `inspection_product_list` */ + +insert into `inspection_product_list`(`id`,`name`,`method`,`ask`,`unit`,`required`,`internal`,`start_time`,`end_time`,`state`,`create_time`,`update_time`,`version`,`inspection_material_list_id`,`user_id`,`instrument_id`) values +(2,'椤圭洰涓�','灏鸿〃娴嬮噺',NULL,'绫�','>=1','>1',NULL,NULL,1,'2023-07-17 21:16:36','2023-07-17 21:16:36',1,1,1,NULL), +(3,'椤圭洰涓�','灏鸿〃娴嬮噺',NULL,'绫�','>=1','>1',NULL,NULL,1,'2023-07-17 21:18:13','2023-07-17 21:18:13',1,2,1,NULL), +(4,'椤圭洰浜�','娴嬭瘯鏂规硶',NULL,'浜烘皯甯�','>1','>2',NULL,NULL,1,'2023-07-17 21:18:13','2023-07-17 21:18:13',1,3,1,NULL), +(5,'椤圭洰涓�','灏鸿〃娴嬮噺',NULL,'绫�','>=1','>1',NULL,NULL,0,'2023-07-19 15:44:51','2023-07-20 11:07:27',1,0,1,NULL), +(6,'椤圭洰浜�','娴嬭瘯鏂规硶',NULL,'浜烘皯甯�','>1','>2',NULL,NULL,0,'2023-07-19 15:44:51','2023-07-20 11:07:27',1,0,1,NULL); + +/*Table structure for table `inspection_records` */ + +DROP TABLE IF EXISTS `inspection_records`; + +CREATE TABLE `inspection_records` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '璁板綍id', + `method` varchar(25) NOT NULL COMMENT '妫�娴嬫柟娉�', + `num` int(10) NOT NULL COMMENT '妫�娴嬬殑鏍峰搧鏁伴噺', + `value` varchar(25) NOT NULL COMMENT '妫�娴嬪��', + `submit_state` int(1) NOT NULL DEFAULT '0' COMMENT '鎻愪氦鐘舵�� 0锛氬緟鎻愪氦锛�1锛氬緟瀹℃牳锛�2锛氬凡閫氳繃', + `state` int(1) NOT NULL DEFAULT '1', + `create_time` datetime NOT NULL COMMENT '妫�娴嬫棩鏈�', + `update_time` datetime NOT NULL, + `version` int(1) DEFAULT NULL, + `inspection_product_list_id` int(10) NOT NULL COMMENT '鍏宠仈 鏍峰搧涓嬬殑椤圭洰id', + `user_name` int(10) DEFAULT NULL COMMENT '鍏宠仈 瀹℃壒浜猴紙鐢ㄦ埛鍚嶇О锛�', + `approval_time` datetime DEFAULT NULL COMMENT '瀹℃壒鏃ユ湡', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +/*Data for the table `inspection_records` */ + +/*Table structure for table `instrument` */ + +DROP TABLE IF EXISTS `instrument`; + +CREATE TABLE `instrument` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭', + `classify_id` int(10) NOT NULL COMMENT '鍒嗙被ID 鍏宠仈', + `user_id` int(10) NOT NULL COMMENT '鐢ㄦ埛鍏宠仈 淇濈浜�', + `equipment_code` varchar(25) NOT NULL COMMENT '浠櫒璁惧缂栧彿', + `equipment_name` varchar(25) NOT NULL COMMENT '浠櫒璁惧鍚嶇О', + `conditions` int(1) NOT NULL COMMENT '榛樿1锛�1锛氳繍琛屻��2锛氭晠闅溿��3锛氭姤淇��4锛氭淇��5锛氬緟鏈�', + `specifications_models` varchar(25) NOT NULL COMMENT '瑙勬牸鍨嬪彿', + `measuring_range` varchar(25) DEFAULT '--' COMMENT '娴嬮噺鑼冨洿', + `error_rate` varchar(10) DEFAULT '--' COMMENT '璇樊', + `manufacturer` varchar(50) DEFAULT '--' COMMENT '鐢熶骇鍘傚', + `arrival_date` datetime DEFAULT NULL COMMENT '鍒拌揣鏃ユ湡', + `acceptance_date` datetime DEFAULT NULL COMMENT '楠屾敹鏃ユ湡', + `storage_place` varchar(100) DEFAULT '--' COMMENT '瀛樻斁鍦�', + `whether_data_acquisition` int(1) NOT NULL COMMENT '鏄惁鏀寔鏁伴噰', + `equipment_measurement` int(1) NOT NULL COMMENT '鏄惁闇�瑕佷华鍣ㄨ澶囪閲忥細濡傛灉闇�瑕佽閲忓懆鏈熷繀濉紱濡傛灉涓嶉渶瑕佽閲忓懆鏈熶笉蹇呭~', + `term_validity` int(11) NOT NULL COMMENT '璁¢噺鎴鏈夋晥鏈�', + `descriptiveness` varchar(100) DEFAULT '--' COMMENT '鎻忚堪', + `create_time` datetime NOT NULL COMMENT '鍒涘缓鏃堕棿', + `update_time` datetime NOT NULL COMMENT '鏇存柊鏃堕棿', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '閫昏緫鍒犻櫎', + `version` int(1) DEFAULT '1' COMMENT '涔愯閿�', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `instrument` */ + +insert into `instrument`(`id`,`classify_id`,`user_id`,`equipment_code`,`equipment_name`,`conditions`,`specifications_models`,`measuring_range`,`error_rate`,`manufacturer`,`arrival_date`,`acceptance_date`,`storage_place`,`whether_data_acquisition`,`equipment_measurement`,`term_validity`,`descriptiveness`,`create_time`,`update_time`,`state`,`version`) values +(1,1,9,'JSTC-W1-00001','鏁板瓧鐢垫ˉ',1,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2023-07-21 15:15:23','2023-07-24 17:10:17',1,1), +(2,1,9,'JSTC-W1-00002','鏁板瓧鐢垫ˉ',1,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2023-07-21 15:17:56','2023-07-21 15:58:35',1,1), +(3,1,10,'JSTC-W1-00003','鏁板瓧鐢垫ˉ',3,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2020-01-09 15:18:02','2023-07-21 15:18:02',1,1), +(4,1,11,'JSTC-W1-00004','鏁板瓧鐢垫ˉ',2,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2023-07-21 15:18:10','2023-07-21 15:18:10',1,1), +(5,1,12,'JSTC-W1-00005','鏁板瓧鐢垫ˉ',4,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2023-07-21 15:18:15','2023-07-21 15:18:15',1,1), +(6,1,13,'JSTC-W1-00006','A鏁板瓧鐢垫ˉ',1,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2023-07-21 15:18:19','2023-07-21 15:18:19',1,1), +(7,1,14,'JSTC-W1-00007','鏁板瓧鐢垫ˉ',5,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2023-07-21 15:18:23','2023-07-21 15:18:23',1,1), +(8,1,9,'JSTC-W1-00008','鏁板瓧鐢垫ˉ',1,'WCDMS-1','12姣背','0.000001寰背','姹熻嫃榈烽洀','2001-07-06 00:00:00','2060-07-06 00:00:00','鍦扮悆浜氭床涓浗姹熻嫃鍗楅��',1,0,12,'鐤媯鏄熸湡浜旓紒锛侊紒','2023-07-24 14:16:07','2023-07-24 14:16:07',1,1); + +/*Table structure for table `material` */ + +DROP TABLE IF EXISTS `material`; + +CREATE TABLE `material` ( + `id` varchar(25) NOT NULL COMMENT '鐗╂枡id', + `name` varchar(25) NOT NULL COMMENT '鐗╂枡鍚嶇О', + `supplier` varchar(25) NOT NULL COMMENT '渚涘簲鍟�', + `location` varchar(25) NOT NULL COMMENT '鐗╂枡瀛樻斁鍦�', + `num` int(10) NOT NULL COMMENT '鐗╂枡鏁伴噺', + `batch` varchar(25) NOT NULL COMMENT '鎵规', + `reel_number` varchar(25) NOT NULL COMMENT '鐩樺彿', + `state` int(1) NOT NULL DEFAULT '1', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` int(1) NOT NULL DEFAULT '1', + `specifications_id` int(10) NOT NULL COMMENT '鍏宠仈 瑙勬牸id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +/*Data for the table `material` */ + +insert into `material`(`id`,`name`,`supplier`,`location`,`num`,`batch`,`reel_number`,`state`,`create_time`,`update_time`,`version`,`specifications_id`) values +('11111111111111','22222222222','1111111111','1111111',1111111,'111111','1111111',0,'2023-07-20 15:19:11','2023-07-21 13:04:12',1,1), +('112233445566','鎵嬫満','test','test',1,'2','3',1,'2023-07-21 13:29:57','2023-07-21 13:29:57',1,1), +('11223456','test','鑵捐','浠撳簱涓�锛屼簩鍙锋灦',200,'2','152453211563232',1,'2023-07-21 13:51:21','2023-07-21 13:51:21',1,1), +('12345','testmaterial','test','test',1,'123','1',0,'2023-07-21 13:08:44','2023-07-21 13:13:54',1,1), +('123456','test','test','test',1,'1','1',0,'2023-07-21 13:14:49','2023-07-21 13:20:20',1,1), +('152423211563212','鎵嬫満','鐧惧害','浠撳簱涓�锛屼簩鍙锋灦',200,'1','152453211563212',0,'2023-07-17 14:22:57','2023-07-21 13:28:54',1,1), +('152453211563211','鐭冲ご','鐧惧害','浠撳簱涓�锛屼笁鍙锋灦',200,'1','152453211563212',0,'2023-07-17 14:14:03','2023-07-21 13:42:15',1,1), +('152453211563212','鐭冲ご','鐧惧害','浠撳簱涓�锛屼簩鍙锋灦',200,'1','152453211563212',1,'2023-07-21 13:41:49','2023-07-21 13:41:49',1,1), +('152453211563222','鐭冲ご','鐧惧害','浠撳簱涓�锛屼笁鍙锋灦',200,'1','152453211563212',1,'2023-07-17 14:14:03','2023-07-20 11:09:36',1,4), +('152453211563233','鐭冲ご','鐧惧害','浠撳簱涓�锛屼笁鍙锋灦',200,'1','152453211563212',1,'2023-07-17 14:14:03','2023-07-20 11:00:29',1,4), +('218469124614','1122333','test','test',1,'1','1',1,'2023-07-21 13:31:00','2023-07-21 13:31:00',1,1), +('22222222','2222222','22222222','22222222',22222222,'2222222222','2222222',0,'2023-07-20 15:20:20','2023-07-21 13:21:25',1,1); + +/*Table structure for table `metrical_information` */ + +DROP TABLE IF EXISTS `metrical_information`; + +CREATE TABLE `metrical_information` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭', + `user_id` int(10) NOT NULL COMMENT '鐢ㄦ埛鍏宠仈Id', + `measurement_unit` varchar(15) NOT NULL COMMENT '璁¢噺鍗曚綅', + `begin_date` datetime NOT NULL COMMENT '寮�濮嬫棩鏈�', + `end_date` datetime NOT NULL COMMENT '缁撴潫鏃ユ湡', + `uncertainty` varchar(20) NOT NULL COMMENT '涓嶇‘瀹氬害', + `result` int(1) NOT NULL COMMENT '缁撴灉 1锛氬悎鏍硷紱2锛氱煫姝e悗鍙敤锛�3锛氫笉鍚堟牸', + `performance_index` varchar(100) DEFAULT NULL COMMENT '鎬ц兘鎸囨爣', + `remarks` varchar(100) DEFAULT NULL COMMENT '澶囨敞', + `file_path` varchar(50) DEFAULT NULL COMMENT '鏂囦欢璺緞', + `create_time` datetime NOT NULL COMMENT '鍒涘缓鏃堕棿', + `update_time` datetime NOT NULL COMMENT '鏇存柊鏃堕棿', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '閫昏緫鍒犻櫎', + `version` int(1) DEFAULT '1' COMMENT '涔愯閿�', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `metrical_information` */ + +insert into `metrical_information`(`id`,`user_id`,`measurement_unit`,`begin_date`,`end_date`,`uncertainty`,`result`,`performance_index`,`remarks`,`file_path`,`create_time`,`update_time`,`state`,`version`) values +(1,7,'1','2023-07-25 00:00:00','2023-07-25 00:00:00','1',1,'1','1','1690255123954_131493.png','2023-07-25 10:43:30','2023-07-25 13:50:24',1,1), +(2,7,'2','2023-07-25 00:00:00','2023-07-25 00:00:00','2',2,'2','2','1690264656523_540845.png','2023-07-25 11:18:44','2023-07-25 13:57:37',1,1); + +/*Table structure for table `plan` */ + +DROP TABLE IF EXISTS `plan`; + +CREATE TABLE `plan` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '璁″垝缂栧彿', + `results` int(10) DEFAULT NULL COMMENT '妫�楠岀粨鏋� 0锛氭湭瀹屾垚锛�1锛氬凡瀹屾垚锛�', + `thing` varchar(50) DEFAULT NULL COMMENT '璇曢獙璇存槑', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '1锛氬緟璁ら锛�2锛氬緟鍒嗛厤锛�3锛氬凡鍒嗛厤锛�4锛氳秴鏈熷緟鍒嗛厤锛�5锛氬凡瀹屾垚锛�0锛氬凡浣滃簾', + `create_time` datetime NOT NULL COMMENT '浠诲姟鐧昏鏃堕棿', + `update_time` datetime NOT NULL, + `version` int(1) DEFAULT '1', + `inspection_id` varchar(25) NOT NULL COMMENT '鍏宠仈 鎶ユid(鐢宠鍗曠紪鍙�)', + `user_id` int(10) DEFAULT NULL COMMENT '鍏宠仈 鐢ㄦ埛id(璐熻矗浜篿d)', + `device_id` int(10) DEFAULT NULL COMMENT '鍏宠仈 璁惧id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +/*Data for the table `plan` */ + +/*Table structure for table `product` */ + +DROP TABLE IF EXISTS `product`; + +CREATE TABLE `product` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '娴嬭瘯鏍囧噯id', + `name` varchar(25) NOT NULL COMMENT '娴嬭瘯鏍囧噯鍚嶇О', + `method` varchar(25) NOT NULL COMMENT '璇曢獙鏂规硶', + `father` varchar(20) DEFAULT NULL COMMENT '娴嬭瘯鏍囧噯鐖剁被', + `unit` varchar(20) NOT NULL COMMENT '鍗曚綅', + `required` varchar(20) NOT NULL COMMENT '鎷涙爣浜鸿姹傚��', + `internal` varchar(20) NOT NULL COMMENT '鍐呮帶鍊�', + `state` int(1) NOT NULL DEFAULT '1', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` int(1) NOT NULL DEFAULT '1', + `user_id` int(10) NOT NULL COMMENT '鍏宠仈 鐢ㄦ埛id', + `material_id` varchar(25) NOT NULL COMMENT '鍏宠仈 鐗╂枡id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `product` */ + +insert into `product`(`id`,`name`,`method`,`father`,`unit`,`required`,`internal`,`state`,`create_time`,`update_time`,`version`,`user_id`,`material_id`) values +(1,'鍗曚綅闀垮害璐ㄩ噺','--','閾濆寘閽㈣姱閾濈粸绾�','km','<=0.3458','<=0.3458',0,'2023-07-17 14:56:22','2023-07-21 13:28:54',1,7,'152423211563212'), +(2,'鍗曚綅瀹藉害璐ㄩ噺','--','閾濆寘閽㈣姱閾濈粸绾�','km','<=0.3458','<=0.3458',1,'2023-07-17 14:56:22','2023-07-20 11:09:36',1,7,'152453211563222'), +(3,'鍗曚綅瀹藉害璐ㄩ噺','--',NULL,'km','<=0.3458','<=0.3458',1,'2023-07-17 14:56:22','2023-07-20 11:09:36',1,7,'152453211563222'), +(4,'濂藉1','鎺у埗鍙橀噺娉�','1111111','濂藉1','2000','100',0,'2023-07-20 16:05:38','2023-07-21 13:04:12',1,7,'11111111111111'), +(5,'濂藉濂藉','---','鏂扮殑鐖堕」鐩�','濂藉濂藉','200','100',0,'2023-07-20 16:10:19','2023-07-21 13:04:12',1,7,'11111111111111'), +(6,'濂藉濂藉','---','鏂扮殑鐖堕」鐩�','濂藉濂藉','200','100',0,'2023-07-20 16:11:39','2023-07-21 13:04:12',1,7,'11111111111111'), +(7,'1111111','test',NULL,'test','12','123',1,'2023-07-21 13:31:34','2023-07-21 13:31:34',1,7,'112233445566'), +(8,'111111','1',NULL,'11','1','1',1,'2023-07-21 13:33:06','2023-07-21 13:33:06',1,7,'112233445566'), +(9,'鍗曚綅闀垮害璐ㄩ噺','--','閾濆寘閽㈣姱閾濈粸绾�','km','<=0.3458','<=0.3458',1,'2023-07-21 13:39:28','2023-07-21 13:39:28',1,7,'152453211563212'), +(10,'鍗曚綅闀垮害璐ㄩ噺','--','閾濆寘閽㈣姱閾濈粸绾�','km','<=0.3458','<=0.3458',0,'2023-07-21 13:42:01','2023-07-21 14:19:34',1,7,'152453211563212'), +(11,'1111111111','1111','閾濆寘閽㈣姱閾濈粸绾�','cm','11','111',0,'2023-07-21 13:48:25','2023-07-21 14:20:50',1,7,'152453211563212'), +(12,'11111111','1','閾濆寘閽㈣姱閾濈粸绾�','1111','1','1',0,'2023-07-21 13:48:59','2023-07-21 14:19:04',1,7,'112233445566'), +(13,'11111','--','11111111','km','<=0.3458','<=0.3458',1,'2023-07-21 13:52:21','2023-07-21 13:52:21',1,7,'11223456'), +(14,'12345','--','11111111','km','<=0.3458','<=0.3458',0,'2023-07-21 13:53:58','2023-07-21 13:56:17',1,7,'11223456'), +(15,'11111111111111','1','閾濆寘閽㈣姱閾濈粸绾�','111','11','1',0,'2023-07-21 14:23:10','2023-07-21 14:23:22',1,7,'152453211563212'); + +/*Table structure for table `role` */ + +DROP TABLE IF EXISTS `role`; + +CREATE TABLE `role` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '瑙掕壊id', + `name` varchar(30) NOT NULL COMMENT '瑙掕壊鍚�', + `power` int(1) NOT NULL COMMENT '0锛氭棤鏉冮檺锛�1锛氭湁鏉冮檺', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` int(10) NOT NULL COMMENT '涔愯閿�', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `role` */ + +insert into `role`(`id`,`name`,`power`,`state`,`create_time`,`update_time`,`version`) values +(1,'鏅�氫汉鍛�',1,1,'2023-07-07 11:30:06','2023-07-07 11:30:11',1); + +/*Table structure for table `serial_number` */ + +DROP TABLE IF EXISTS `serial_number`; + +CREATE TABLE `serial_number` ( + `id` varchar(25) NOT NULL COMMENT '鍨嬪彿缂栧彿', + `name` varchar(25) NOT NULL COMMENT '鍨嬪彿鍚嶇О', + `state` int(1) NOT NULL DEFAULT '1', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` int(1) NOT NULL DEFAULT '1', + `standards_id` varchar(15) NOT NULL COMMENT '鍏宠仈瀛楁 鏍囧噯id', + `user_id` int(10) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +/*Data for the table `serial_number` */ + +insert into `serial_number`(`id`,`name`,`state`,`create_time`,`update_time`,`version`,`standards_id`,`user_id`) values +('111222','鍨嬪彿1',0,'2023-07-20 15:01:08','2023-07-20 15:20:09',1,'111',7), +('230711000002','鍏夌氦2.0.1',1,'2023-07-11 22:34:11','2023-07-20 09:28:19',1,'230711000001',7), +('ModelNumber001','鍏夌氦2.0.1',1,'2023-07-20 10:51:01','2023-07-20 10:51:01',1,'230711000002',7), +('ModelNumber002','鍏夌氦2.0.2',1,'2023-07-18 13:36:13','2023-07-20 09:28:19',1,'230711000001',7), +('ModelNumber003','鍏夌氦2.0.3',1,'2023-07-18 13:36:23','2023-07-20 10:54:11',1,'230711000002',7), +('num1','鍏夌氦2.0.3',1,'2023-07-20 14:18:24','2023-07-20 14:18:24',1,'230711000002',7), +('num2','鍏夌氦2.0.4',1,'2023-07-20 14:19:34','2023-07-20 14:19:34',1,'230711000002',7), +('PleasantGoat','1345',1,'2023-07-18 13:46:49','2023-07-20 10:22:42',1,'230711000002',7), +('spiritless','78915',1,'2023-07-18 13:46:24','2023-07-18 13:46:24',1,'230711000004',7); + +/*Table structure for table `specifications` */ + +DROP TABLE IF EXISTS `specifications`; + +CREATE TABLE `specifications` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '瑙勬牸id', + `number` varchar(25) NOT NULL COMMENT '瑙勬牸缂栧彿', + `name` varchar(25) NOT NULL COMMENT '浜у搧瑙勬牸', + `instruct` varchar(25) DEFAULT NULL COMMENT '鐢熶骇鎸囦护鍙�', + `voltage_level` varchar(30) DEFAULT NULL COMMENT '鐢靛帇绛夌骇', + `cross_section` varchar(30) DEFAULT NULL COMMENT '涓荤嚎蹇冩埅闈�', + `number_of_cores` varchar(30) DEFAULT NULL COMMENT '涓荤嚎鑺姱鏁�', + `spe_state` int(1) NOT NULL DEFAULT '-1' COMMENT '瑙勬牸鐘舵�� 0锛氬仠鐢紱1锛氭甯革紱-1锛氳崏绋�', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL COMMENT '鏇存柊鏃堕棿', + `version` int(1) NOT NULL DEFAULT '1', + `vel` varchar(15) NOT NULL DEFAULT 'V1.0' COMMENT '瑙勬牸鐗堟湰', + `serial_id` varchar(25) NOT NULL COMMENT '鍏宠仈瀛楁 鍨嬪彿id', + `user_id` int(10) NOT NULL COMMENT '鍏宠仈瀛楁 鐢ㄦ埛id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `specifications` */ + +insert into `specifications`(`id`,`number`,`name`,`instruct`,`voltage_level`,`cross_section`,`number_of_cores`,`spe_state`,`state`,`create_time`,`update_time`,`version`,`vel`,`serial_id`,`user_id`) values +(1,'111','ab','test','1','test','test',0,1,'2023-07-12 00:00:12','2023-07-21 09:52:22',1,'V1.0','230711000002',7), +(2,'abc','AB','abc','abc','abc','abc',0,1,'2023-07-12 00:00:12','2023-07-20 16:34:38',1,'V1.0','230711000002',7), +(4,'abc','AB','abc','abc','abc','abc',1,1,'2023-07-12 00:00:12','2023-07-20 11:00:29',1,'V1.0','ModelNumber003',7), +(5,'abc','AB','abc','abc','abc','abc',1,1,'2023-07-12 00:00:12','2023-07-20 10:22:42',1,'V1.0','PleasantGoat',7), +(6,'modelId','AB','test','test','test','test',-1,1,'2023-07-20 13:42:40','2023-07-20 13:42:40',1,'V1.0','230711000002',7), +(7,'modelID1','test','test','test','test','test',-1,1,'2023-07-20 14:02:26','2023-07-20 14:02:26',1,'V1.0','230711000002',7), +(8,'modelId2','test11','test','test','test','test',-1,1,'2023-07-20 14:03:54','2023-07-20 14:03:54',1,'V1.0','230711000002',7), +(9,'111222','鍏夌氦2.0.3','test','test','test','test',-1,1,'2023-07-20 14:55:12','2023-07-20 14:55:12',1,'V1.0','230711000002',7); + +/*Table structure for table `standards` */ + +DROP TABLE IF EXISTS `standards`; + +CREATE TABLE `standards` ( + `id` varchar(15) NOT NULL COMMENT '鏍囧噯缂栧彿 yyMMdd000001(000001++)', + `name` varchar(25) NOT NULL COMMENT '鏍囧噯鍚嶇О', + `eng_name` varchar(25) NOT NULL COMMENT '鑻辨枃鍚嶇О', + `type` int(1) NOT NULL COMMENT '0锛氬師鏉愭枡锛�1锛氱數绾跨數缂�', + `state` int(1) NOT NULL DEFAULT '1' COMMENT '閫昏緫瀛楁 0锛氬垹闄わ紱1锛氭甯�', + `create_time` datetime NOT NULL COMMENT '鐢熸晥鏃ユ湡', + `update_time` datetime NOT NULL COMMENT '鏇存柊鏃ユ湡', + `version` int(1) NOT NULL DEFAULT '1', + `user_id` int(10) NOT NULL COMMENT '鍏宠仈瀛楁 鏇存柊浜篿d', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +/*Data for the table `standards` */ + +insert into `standards`(`id`,`name`,`eng_name`,`type`,`state`,`create_time`,`update_time`,`version`,`user_id`) values +('111','123131313','164654565',0,0,'2023-07-20 13:26:55','2023-07-20 15:20:09',1,7), +('112233445566','楸奸奔','fish',1,0,'2023-07-20 10:54:12','2023-07-20 15:19:41',1,7), +('230711000001','灏忕櫧','OpticalFibre',1,1,'2023-07-11 21:27:04','2023-07-20 09:28:19',1,6), +('230711000002','鏉愭枡','OpticalFibrw',1,1,'2023-07-11 21:27:04','2023-07-20 10:22:42',1,6), +('230711000003','鏄剧ず灞�','Monitor',2,1,'2023-07-18 13:43:52','2023-07-18 13:43:52',1,7), +('230711000004','灏忛粦','Black',2,1,'2023-07-18 13:44:29','2023-07-18 13:44:29',1,7); + +/*Table structure for table `user` */ + +DROP TABLE IF EXISTS `user`; + +CREATE TABLE `user` ( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '鐢ㄦ埛id', + `account` varchar(20) NOT NULL COMMENT '璐﹀彿', + `password` varchar(100) NOT NULL COMMENT '瀵嗙爜', + `name` varchar(20) NOT NULL COMMENT '濮撳悕', + `phone` varchar(11) DEFAULT NULL COMMENT '鎵嬫満鍙�', + `email` varchar(30) DEFAULT NULL COMMENT '閭', + `age` int(3) DEFAULT NULL COMMENT '骞撮緞', + `job_state` int(1) NOT NULL DEFAULT '1' COMMENT '鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0', + `info` varchar(100) DEFAULT NULL COMMENT '涓�х鍚�', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` int(1) NOT NULL DEFAULT '1', + `role_id` int(10) NOT NULL, + `enterprise_id` int(10) NOT NULL COMMENT '鍏宠仈 浼佷笟ID', + PRIMARY KEY (`id`), + UNIQUE KEY `account_unique` (`account`) +) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4; + +/*Data for the table `user` */ + +insert into `user`(`id`,`account`,`password`,`name`,`phone`,`email`,`age`,`job_state`,`info`,`create_time`,`update_time`,`version`,`role_id`,`enterprise_id`) values +(7,'123456','123456','灏忓皬','12345678981','12345678@qq.com',23,1,NULL,'2023-07-11 09:14:50','2023-07-11 09:14:50',1,1,1), +(9,'1388967','123456','楸奸奔','19727565533','1981343953@qq.com',18,1,NULL,'2023-07-13 14:51:41','2023-07-13 14:51:41',1,1,1), +(10,'1111111','123456','鍙彯褰�','17726824629','13958368246@gmail.com',13,1,NULL,'2023-07-13 14:57:23','2023-07-13 14:57:23',1,0,1), +(11,'135686632','123456','鍙彯褰�','13795639054','19813438642@qq.com',18,1,NULL,'2023-07-13 14:58:45','2023-07-13 14:58:45',1,1,1), +(12,'333','123456','楸奸奔','72398','2144',36,1,NULL,'2023-07-13 15:21:34','2023-07-13 15:21:34',1,0,1), +(13,'199999','123456','楸奸奔','2154364646','18913908',34,1,NULL,'2023-07-13 15:22:16','2023-07-13 15:22:16',1,1,1), +(14,'8957824','123456','寮犱笁','23875185298','2222222872',13,1,NULL,'2023-07-13 15:29:13','2023-07-13 15:29:13',1,1,1), +(21,'45612345','123456','灏忛粦','12345678981','12345678@qq.com',23,1,NULL,'2023-07-17 10:36:23','2023-07-17 10:36:23',1,1,1), +(23,'4561278345','123456','灏忛粦','12345678981','12345678@qq.com',23,1,NULL,'2023-07-17 11:28:50','2023-07-17 11:28:50',1,1,1); + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/standard-server/pom.xml b/standard-server/pom.xml new file mode 100644 index 0000000..617d5f9 --- /dev/null +++ b/standard-server/pom.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>lims-laboratory</artifactId> + <groupId>com.yuanchu</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>standard-server</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>standard-library</name> + <description>standard-library</description> + + <packaging>jar</packaging> + + <dependencies> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>framework</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>user-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + </dependencies> + +</project> diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java new file mode 100644 index 0000000..8a89867 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java @@ -0,0 +1,65 @@ +package com.yuanchu.limslaboratory.controller; + +import com.yuanchu.limslaboratory.pojo.dto.AddMaterialDto; +import com.yuanchu.limslaboratory.service.MaterialService; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +@Api(tags = "鏍囧噯搴�-->1銆佺墿鏂�") +@RestController +@RequestMapping("/material") +public class MaterialController { + + @Autowired + private MaterialService materialService; + + @ApiOperation("娣诲姞鐗╂枡") + @PostMapping("/add") + public Result<?> addMaterialInformation(@Validated @RequestBody AddMaterialDto addMaterialDto) { + Integer isMaterialSuccess = materialService.addMaterialInformation(addMaterialDto); + if (isMaterialSuccess == 1) { + return Result.success("娣诲姞鐗╂枡銆�"+ addMaterialDto.getMaterialName() +"銆戞垚鍔燂紒"); + } + return Result.fail("娣诲姞鐗╂枡銆�"+ addMaterialDto.getMaterialName() +"銆戝け璐ワ紒"); + } + + @ApiOperation("鏍规嵁鐗╂枡ID鍒犻櫎鐗╂枡") + @DeleteMapping("/delete") + @ApiImplicitParams(value = { + @ApiImplicitParam(value = "鐗╂枡ID", name = "materialId", dataTypeClass = Integer.class) + }) + public Result<?> deleteMaterialInformation(Integer materialId) { + Integer isDeleteMaterialSuccess = materialService.deleteMaterialInformation(materialId); + if (isDeleteMaterialSuccess == 1) { + return Result.success("鍒犻櫎鎴愬姛锛�"); + } + return Result.fail("鍒犻櫎澶辫触锛�"); + } + + @ApiOperation(value = "鏍囧噯搴�-->鐗╂枡-->渚ц竟鏍忓洓绾у睍寮�", tags = "猸愨瓙猸愬悗绔皟鏁�") + @ApiImplicitParams(value = { + @ApiImplicitParam(value = "鍨嬪彿/鍨嬪彿鍚嶇О", name = "specificationName", dataTypeClass = String.class) + }) + @GetMapping("/list") + public Result<?> getFourLevelInformation(String specificationName) { + List<Map<String, Object>> fourLevelInformation = materialService.getFourLevelInformation(specificationName); + return Result.success(fourLevelInformation); + } +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java new file mode 100644 index 0000000..5853e6a --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java @@ -0,0 +1,57 @@ +package com.yuanchu.limslaboratory.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.service.ProductService; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +@Api(tags = "鏍囧噯搴�-->4銆侀」鐩�") +@RestController +@RequestMapping("/product") +public class ProductController { + + @Autowired + private ProductService productService; + + @ApiOperation("1銆佸垎椤垫煡璇㈤」鐩�") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "specificationsId", value = "瑙勬牸鍨嬪彿ID", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(value = "鍘熸潗鏂欑紪鐮�/鍘熸潗鏂欏悕绉�", name = "productCodeOrName", dataTypeClass = String.class) + }) + @GetMapping("/page") + public Result<?> pageProductInformation(Integer pageNo, Integer pageSize, Integer specificationsId, String productCodeOrName) { + IPage<Map<String, Object>> maps = productService.pageProductInformation(productCodeOrName, specificationsId, new Page<Objects>(pageNo, pageSize)); + Map<String, Object> map = new HashMap<>(); + map.put("row", maps.getRecords()); + map.put("total", maps.getTotal()); + return Result.success(map); + } + + @ApiOperation("2銆佹牴鎹埗绫绘煡瀛愮被") + @ApiImplicitParams(value = { + @ApiImplicitParam(value = "鐖剁被鍚嶇О", name = "fatherName", dataTypeClass = String.class) + }) + @GetMapping("/father") + public Result<?> pageFatherNameProductInformation(String fatherName) { + List<Map<String, Object>> maps = productService.pageFatherNameProductInformation(fatherName); + return Result.success(maps); + } +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java new file mode 100644 index 0000000..4be696a --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java @@ -0,0 +1,54 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.yuanchu.limslaboratory.pojo.dto.AddSpecifications; +import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto; +import com.yuanchu.limslaboratory.service.SpecificationsService; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +@Api(tags = "鏍囧噯搴�-->3銆佷骇鍝佽鏍�") +@RestController +@RequestMapping("/specifications") +public class SpecificationsController { + + @Autowired + private SpecificationsService specificationsService; + + @ApiOperation("娣诲姞鐗╂枡") + @PostMapping("/add") + public Result<?> addSpecificationsInformation(@Validated @RequestBody AddSpecifications addSpecifications) { + Integer isMaterialSuccess = specificationsService.addSpecificationsInformation(addSpecifications); + if (isMaterialSuccess == 1) { + return Result.success("娣诲姞鐗╂枡銆�"+ addSpecifications.getSpecificationsName() +"銆戞垚鍔燂紒"); + } + return Result.fail("娣诲姞鐗╂枡銆�"+ addSpecifications.getSpecificationsName() +"銆戝け璐ワ紒"); + } + + @ApiOperation("鍒犻櫎浜у搧瑙勬牸") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "specificationsId", value = "瑙勬牸Id", dataTypeClass = Integer.class, required = true) + }) + @DeleteMapping("/delete") + public Result<?> deleteSpecificationsInformation(Integer specificationsId) { + Integer isStandardsSuccess = specificationsService.deleteSpecifications(specificationsId); + if (isStandardsSuccess == 1) { + return Result.success("鍒犻櫎鎴愬姛锛�"); + } + return Result.fail("鍒犻櫎澶辫触锛�"); + } +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java new file mode 100644 index 0000000..665f006 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java @@ -0,0 +1,47 @@ +package com.yuanchu.limslaboratory.controller; + +import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto; +import com.yuanchu.limslaboratory.service.StandardService; +import com.yuanchu.limslaboratory.vo.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +@Api(tags = "鏍囧噯搴�-->2銆佹爣鍑�") +@RestController +@RequestMapping("/standards") +public class StandardController { + + @Autowired + private StandardService standardService; + + @ApiOperation("娣诲姞鐗╂枡") + @PostMapping("/add") + public Result<?> addStandardInformation(@Validated @RequestBody AddStandardDto addStandardDto) { + Integer isMaterialSuccess = standardService.addStandardInformation(addStandardDto); + if (isMaterialSuccess == 1) { + return Result.success("娣诲姞鐗╂枡銆�"+ addStandardDto.getStandardName() +"銆戞垚鍔燂紒"); + } + return Result.fail("娣诲姞鐗╂枡銆�"+ addStandardDto.getStandardName() +"銆戝け璐ワ紒"); + } + + @ApiOperation("鏍规嵁ID鍒犻櫎鏁版嵁") + @DeleteMapping("/delete") + public Result<?> deleteStandardsInformation(Integer standardsId) { + Integer isDeleteMaterialSuccess = standardService.deleteStandardInformation(standardsId); + if (isDeleteMaterialSuccess == 1) { + return Result.success("鍒犻櫎鎴愬姛锛�"); + } + return Result.fail("鍒犻櫎澶辫触锛�"); + } +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java new file mode 100644 index 0000000..0408808 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java @@ -0,0 +1,27 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.yuanchu.limslaboratory.pojo.Material; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +public interface MaterialMapper extends BaseMapper<Material> { + + //鏌ヨ鐗╂枡淇℃伅 + List<Map> selectMaterialLimit(int num1,int num2, int type); + + //鏍规嵁鐗╂枡id鏌ヨ鐗╂枡淇℃伅 + Map selectMaterialById(String materialId); + + // 鍥涚骇鏍� + List<Map<String, Object>> FourTree(String specificationsName); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java new file mode 100644 index 0000000..cbf5b02 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java @@ -0,0 +1,34 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Product; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +public interface ProductMapper extends BaseMapper<Product> { + + //鏍规嵁鐗╂枡id鏌ヨ妫�楠岄」鐩� + List<Map> selectProductByMaterialId(int materialId); + + IPage<Map<String, Object>> pageProductInformation(String productCodeOrName, Integer specificationsId, Page<Objects> page); + + Map<String, Object> selectOneChildren(Object father); + + Map<String, Object> getProductInformation(Integer productId); + + //閫氳繃椤圭洰鍚嶆煡璇㈤」鐩殑璇曢獙鏂规硶 + List<Map> selectInstrumentByProname(String name); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java new file mode 100644 index 0000000..3db0724 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java @@ -0,0 +1,24 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Specifications; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +public interface SpecificationsMapper extends BaseMapper<Specifications> { + + Map<String, Object> selectSNameSNName(int materialId); + + IPage<Map<String, Objects>> listSpecificationsInformation(String specificationsName, String serialNumberId, Page<Objects> page); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/StandardMapper.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/StandardMapper.java new file mode 100644 index 0000000..8450941 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/StandardMapper.java @@ -0,0 +1,24 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Standard; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +public interface StandardMapper extends BaseMapper<Standard> { + + IPage<Map<String, Object>> listPageStandardsInformation(Page<Object> page, String idOrNameOfStandards); + + List<Map<String, Object>> getSpecificationIdAndName(String materialId); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java new file mode 100644 index 0000000..f76bc42 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java @@ -0,0 +1,61 @@ +package com.yuanchu.limslaboratory.pojo; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +@Accessors(chain = true) +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Material瀵硅薄", description="") +public class Material implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "鐗╂枡id", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "鐗╂枡缂栫爜", hidden = true) + private String code; + + @ApiModelProperty(value = "鐗╂枡鍚嶇О", example = "鐭冲ご", required = true) + private String name; + + @ApiModelProperty(value = "0锛氬師鏉愭枡锛�1锛氭垚鍝侊紱2锛氬崐鎴愬搧", example = "1", required = true) + private Integer type; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java new file mode 100644 index 0000000..707d80e --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java @@ -0,0 +1,70 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Product瀵硅薄", description="") +public class Product implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "椤圭洰id", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "椤圭洰鍚嶇О", example = "鍗曚綅闀垮害璐ㄩ噺", required = true) + private String name; + + @ApiModelProperty(value = "椤圭洰鐖剁被", example = "閾濆寘閽㈣姱閾濈粸绾�") + private String father; + + @ApiModelProperty(value = "鍗曚綅", example = "km", required = true) + private String unit; + + @ApiModelProperty(value = "鏍囧噯鍊�", example = "<=0.3458", required = true) + private String required; + + @ApiModelProperty(value = "鍐呮帶鍊�", example = "<=0.3458", required = true) + private String internal; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + private Integer version; + + @ApiModelProperty(value = "鍏宠仈 鐗╂枡id", example = "1", hidden = true) + private Integer specifications_id; + + +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java new file mode 100644 index 0000000..def7e4d --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java @@ -0,0 +1,61 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Specifications瀵硅薄", description="瑙勬牸") +public class Specifications implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "鍨嬪彿id", hidden = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "浜у搧鍨嬪彿鍚嶇О", example = "AB", required = true) + private String name; + + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + @TableLogic(value = "1", delval = "0") + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + @Version + private Integer version; + + @ApiModelProperty(value = "鍏宠仈瀛楁 瑙勬牸id", hidden = true) + private Integer standardId; + +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java new file mode 100644 index 0000000..d4345d8 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java @@ -0,0 +1,59 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Standards瀵硅薄", description="鏍囧噯") +public class Standard implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "瑙勬牸缂栧彿 yyMMdd000001(000001++)", example = "230711000001", required = true) + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "瑙勬牸鍚嶇О", example = "鍏夌氦", required = true) + private String name; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true) + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @ApiModelProperty(value = "涔愯閿�", hidden = true) + @Version + private Integer version; + + @ApiModelProperty(value = "鐗╂枡Id", hidden = true) + private Integer materialId; + +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java new file mode 100644 index 0000000..d3ce5ae --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java @@ -0,0 +1,31 @@ +package com.yuanchu.limslaboratory.pojo.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="AddMaterialDto瀵硅薄", description="") +public class AddMaterialDto { + + @NotNull(message = "鐗╂枡绫诲瀷涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "0锛氬師鏉愭枡锛�1锛氭垚鍝侊紱2锛氬崐鎴愬搧", example = "1", required = true) + private Integer type; + + @NotBlank(message = "鐗╂枡鍚嶇О涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "鐗╂枡鍚嶇О", example = "鐭冲ご", required = true) + private String materialName; + + @NotBlank(message = "鏍囧噯鍚嶇О涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "鏍囧噯鍚嶇О", example = "鍏夌氦", required = true) + private String standardName; + + @NotBlank(message = "浜у搧瑙勬牸鍚嶇О涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "浜у搧瑙勬牸鍚嶇О", example = "AB", required = true) + private String specificationsName; +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.java new file mode 100644 index 0000000..413c9bd --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.java @@ -0,0 +1,23 @@ +package com.yuanchu.limslaboratory.pojo.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="AddSpecifications瀵硅薄", description="") +public class AddSpecifications { + + @NotNull(message = "鏍囧噯ID涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "鏍囧噯id", example = "1", required = true) + private Integer standardId; + + @NotBlank(message = "浜у搧瑙勬牸鍚嶇О涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "浜у搧瑙勬牸鍚嶇О", example = "AB", required = true) + private String specificationsName; +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java new file mode 100644 index 0000000..2fe0eb6 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java @@ -0,0 +1,28 @@ +package com.yuanchu.limslaboratory.pojo.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="AddStandardDto瀵硅薄", description="") +public class AddStandardDto { + + @NotNull(message = "鐗╂枡ID涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "鐗╂枡id", example = "1", required = true) + private Integer materialId; + + @NotBlank(message = "鏍囧噯鍚嶇О涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "鏍囧噯鍚嶇О", example = "鍏夌氦", required = true) + private String standardName; + + @NotBlank(message = "浜у搧瑙勬牸鍚嶇О涓嶈兘涓虹┖锛�") + @ApiModelProperty(value = "浜у搧瑙勬牸鍚嶇О", example = "AB", required = true) + private String specificationsName; + +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java new file mode 100644 index 0000000..56e5501 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java @@ -0,0 +1,42 @@ +package com.yuanchu.limslaboratory.service; + +import com.yuanchu.limslaboratory.pojo.Material; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.dto.AddMaterialDto; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +public interface MaterialService extends IService<Material> { + + List<Map> selectMaterialLimit(int pageSize,int countSize, int type); + + + /** + * 鍒犻櫎绛変簬MaterialId鐨勬暟鎹� + * @param materialId + * @return + */ + @Transactional(rollbackFor = Exception.class) + Integer deleteMaterialInformation(Integer materialId); + + /** + * 涓夌骇娣诲姞鍙傛暟 + */ + @Transactional(rollbackFor = Exception.class) + Integer addMaterialInformation(AddMaterialDto addMaterialDto); + + /** + * 鍥涚骇鍒嗗眰鏄剧ず + */ + List<Map<String, Object>> getFourLevelInformation(String specificationName); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java new file mode 100644 index 0000000..8fbb6af --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java @@ -0,0 +1,34 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Product; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +public interface ProductService extends IService<Product> { + void deleteProductInformation(List<Integer> SpecificationsId); + + IPage<Map<String, Object>> pageProductInformation(String productCodeOrName, Integer specificationsId, Page<Objects> page); + + List<Map<String, Object>> pageFatherNameProductInformation(String fatherName); + + /** + * 閫氳繃椤圭洰鍚嶆煡璇㈤」鐩殑璇曢獙鏂规硶 + * @param name + * @return + */ + List<Map> selectInstrumentByProname(String name); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java new file mode 100644 index 0000000..5da007f --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java @@ -0,0 +1,33 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.yuanchu.limslaboratory.pojo.Specifications; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.Standard; +import com.yuanchu.limslaboratory.pojo.dto.AddSpecifications; +import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +public interface SpecificationsService extends IService<Specifications> { + /** + * 澶氳〃鍒犻櫎锛岃〃鏍煎垎鍒湁锛歋pecification --> Material --> Product + * @param specificationsId + * @return + */ + @Transactional(rollbackFor = Exception.class) + Integer deleteSpecifications(Integer specificationsId); + + List<Integer> StandardIdDeleteSpecifications(List<Integer> deleteStandard); + + Integer addSpecificationsInformation(AddSpecifications addStandardDto); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java new file mode 100644 index 0000000..6e68274 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java @@ -0,0 +1,35 @@ +package com.yuanchu.limslaboratory.service; + +import com.yuanchu.limslaboratory.pojo.Standard; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto; +import io.swagger.models.auth.In; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +public interface StandardService extends IService<Standard> { + + /** + * 鏍规嵁鏍囧噯Id鍒犻櫎鏁版嵁 + * @param materialId + * @return + */ + List<Integer> deleteStandardsInformation(Integer materialId); + + @Transactional(rollbackFor = Exception.class) + Integer deleteStandardInformation(Integer standardsId); + + Integer addStandardInformation(AddStandardDto addStandardDto); + + List<Map<String, Object>> getSpecificationIdAndName(String materialId); +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java new file mode 100644 index 0000000..4b75748 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java @@ -0,0 +1,103 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.yuanchu.limslaboratory.pojo.Material; +import com.yuanchu.limslaboratory.mapper.MaterialMapper; +import com.yuanchu.limslaboratory.pojo.Specifications; +import com.yuanchu.limslaboratory.pojo.Standard; +import com.yuanchu.limslaboratory.pojo.dto.AddMaterialDto; +import com.yuanchu.limslaboratory.service.MaterialService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.service.ProductService; +import com.yuanchu.limslaboratory.service.SpecificationsService; +import com.yuanchu.limslaboratory.service.StandardService; +import com.yuanchu.limslaboratory.utils.MyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +@Service +public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> implements MaterialService { + + @Resource + private MaterialMapper materialMapper; + + @Autowired + private StandardService standardService; + + @Autowired + private SpecificationsService specificationsService; + + @Autowired + private ProductService productService; + + //鏌ヨ鐗╂枡淇℃伅 + @Override + public List<Map> selectMaterialLimit(int pageSize, int countSize, int type) { + return materialMapper.selectMaterialLimit((pageSize - 1) * countSize,pageSize * countSize, type); + } + + + + @Override + public Integer deleteMaterialInformation(Integer materialId) { + LambdaUpdateWrapper<Material> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Material::getId, materialId); + updateWrapper.set(Material::getState, 0); + int isDeleteSuccess = materialMapper.update(new Material(), updateWrapper); + if (isDeleteSuccess == 1){ + List<Integer> isDeleteStandard = standardService.deleteStandardsInformation(materialId); + if (!ObjectUtils.isEmpty(isDeleteStandard)){ + List<Integer> idDeleteSpecifications = specificationsService.StandardIdDeleteSpecifications(isDeleteStandard); + if (!ObjectUtils.isEmpty(idDeleteSpecifications)){ + productService.deleteProductInformation(idDeleteSpecifications); + } + } + return 1; + } + return 0; + } + + @Override + public Integer addMaterialInformation(AddMaterialDto addMaterialDto) { + Material material = new Material() + .setCode("BZ" + IdWorker.getIdStr()) + .setName(addMaterialDto.getMaterialName()) + .setType(addMaterialDto.getType()); + int isInsertSuccess = materialMapper.insert(material); + if (isInsertSuccess > 0){ + Standard standard = new Standard() + .setMaterialId(material.getId()) + .setName(addMaterialDto.getStandardName()); + boolean save = standardService.save(standard); + if (save){ + Specifications specifications = new Specifications() + .setName(addMaterialDto.getSpecificationsName()) + .setStandardId(standard.getId()); + boolean save1 = specificationsService.save(specifications); + if (save1) + return 1; + } + } + return 0; + } + + @Override + public List<Map<String, Object>> getFourLevelInformation(String specificationName) { + return materialMapper.FourTree(specificationName); + } +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java new file mode 100644 index 0000000..b82da28 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java @@ -0,0 +1,79 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.Product; +import com.yuanchu.limslaboratory.mapper.ProductMapper; +import com.yuanchu.limslaboratory.service.ProductService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.utils.MyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import com.yuanchu.limslaboratory.service.UserService; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-17 + */ +@Service +public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService { + + @Resource + private ProductMapper productMapper; + + @Override + public void deleteProductInformation(List<Integer> SpecificationsId) { + for (Integer materialId : SpecificationsId){ + LambdaUpdateWrapper<Product> wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(Product::getSpecifications_id, materialId); + wrapper.set(Product::getState, 0); + productMapper.update(new Product(), wrapper); + } + } + + @Override + public IPage<Map<String, Object>> pageProductInformation(String productCodeOrName, Integer specificationsId, Page<Objects> page) { + IPage<Map<String, Object>> iPage = productMapper.pageProductInformation(productCodeOrName, specificationsId, page); + List<Map<String, Object>> maps = iPage.getRecords(); + maps.forEach(map -> { + int num = Integer.parseInt(map.get("num").toString()); + boolean children = false; + if (num > 1){ + children = true; + } else { + Map<String, Object> product = productMapper.selectOneChildren(map.get("father")); + map.putAll(product); + } + map.put("children", children); + map.remove("num"); + }); + return iPage; + } + + @Override + public List<Map<String, Object>> pageFatherNameProductInformation(String fatherName) { + LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Product::getFather, fatherName); + wrapper.select(Product::getId, Product::getName, Product::getUnit, Product::getRequired, Product::getInternal); + return productMapper.selectMaps(wrapper); + } + + //閫氳繃椤圭洰鍚嶆煡璇㈤」鐩殑璇曢獙鏂规硶 + @Override + public List<Map> selectInstrumentByProname(String name) { + return productMapper.selectInstrumentByProname(name); + } +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java new file mode 100644 index 0000000..93be8b1 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java @@ -0,0 +1,78 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.yuanchu.limslaboratory.pojo.Specifications; +import com.yuanchu.limslaboratory.mapper.SpecificationsMapper; +import com.yuanchu.limslaboratory.pojo.dto.AddSpecifications; +import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto; +import com.yuanchu.limslaboratory.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +@Service +public class SpecificationsServiceImpl extends ServiceImpl<SpecificationsMapper, Specifications> implements SpecificationsService { + + @Resource + private SpecificationsMapper specificationsMapper; + + @Autowired + private ProductService productService; + + @Override + public Integer deleteSpecifications(Integer specificationsId) { + LambdaUpdateWrapper<Specifications> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Specifications::getId, specificationsId); + updateWrapper.set(Specifications::getState, 0); + List<Integer> list = new ArrayList<>(); + list.add(specificationsId); + int isDeleteSuccess = specificationsMapper.update(new Specifications(), updateWrapper); + if (isDeleteSuccess == 1){ + productService.deleteProductInformation(list); + return 1; + } + return 0; + } + + @Override + public List<Integer> StandardIdDeleteSpecifications(List<Integer> deleteStandard) { + List<Integer> list = new ArrayList<>(); + for (Integer standard : deleteStandard){ + LambdaQueryWrapper<Specifications> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Specifications::getStandardId, standard); + wrapper.select(Specifications::getId); + List<Specifications> maps1 = specificationsMapper.selectList(wrapper); + for (Specifications specifications:maps1){ + LambdaUpdateWrapper<Specifications> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Specifications::getId, specifications.getId()); + updateWrapper.set(Specifications::getState, 0); + specificationsMapper.update(new Specifications(), updateWrapper); + list.add(specifications.getId()); + } + } + return list; + } + + @Override + public Integer addSpecificationsInformation(AddSpecifications addStandardDto) { + Specifications specifications = new Specifications() + .setName(addStandardDto.getSpecificationsName()) + .setStandardId(addStandardDto.getStandardId()); + return specificationsMapper.insert(specifications); + } +} diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java new file mode 100644 index 0000000..7b13059 --- /dev/null +++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java @@ -0,0 +1,100 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.yuanchu.limslaboratory.mapper.StandardMapper; +import com.yuanchu.limslaboratory.pojo.Material; +import com.yuanchu.limslaboratory.pojo.Specifications; +import com.yuanchu.limslaboratory.pojo.Standard; +import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto; +import com.yuanchu.limslaboratory.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-11 + */ +@Service +public class StandardServiceImpl extends ServiceImpl<StandardMapper, Standard> implements StandardService { + + @Resource + private StandardMapper standardMapper; + + @Lazy + @Autowired + private SpecificationsService specificationsService; + + @Autowired + private ProductService productService; + + + @Override + public List<Integer> deleteStandardsInformation(Integer materialId) { + LambdaQueryWrapper<Standard> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Standard::getMaterialId, materialId); + wrapper.select(Standard::getId); + List<Integer> list = new ArrayList<>(); + List<Standard> standards = standardMapper.selectList(wrapper); + for (Standard standard : standards){ + LambdaUpdateWrapper<Standard> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Standard::getMaterialId, materialId); + updateWrapper.set(Standard::getState, 0); + standardMapper.update(new Standard(), updateWrapper); + list.add(standard.getId()); + } + return list; + } + + @Override + public Integer deleteStandardInformation(Integer standardsId) { + LambdaUpdateWrapper<Standard> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Standard::getId, standardsId); + updateWrapper.set(Standard::getState, 0); + List<Integer> list = new ArrayList<>(); + int isDeleteSuccess = standardMapper.update(new Standard(), updateWrapper); + if (isDeleteSuccess == 1){ + list.add(standardsId); + List<Integer> idDeleteSpecifications = specificationsService.StandardIdDeleteSpecifications(list); + if (!ObjectUtils.isEmpty(idDeleteSpecifications)){ + productService.deleteProductInformation(idDeleteSpecifications); + } + return 1; + } + return 0; + } + + @Override + public Integer addStandardInformation(AddStandardDto addStandardDto) { + Standard standard = new Standard() + .setMaterialId(addStandardDto.getMaterialId()) + .setName(addStandardDto.getStandardName()); + int save = standardMapper.insert(standard); + if (save == 1){ + Specifications specifications = new Specifications() + .setName(addStandardDto.getSpecificationsName()) + .setStandardId(standard.getId()); + boolean save1 = specificationsService.save(specifications); + if (save1) + return 1; + } + return 0; + } + + @Override + public List<Map<String, Object>> getSpecificationIdAndName(String materialId) { + return standardMapper.getSpecificationIdAndName(materialId); + } +} diff --git a/standard-server/src/main/resources/mapper/MaterialMapper.xml b/standard-server/src/main/resources/mapper/MaterialMapper.xml new file mode 100644 index 0000000..661b8fd --- /dev/null +++ b/standard-server/src/main/resources/mapper/MaterialMapper.xml @@ -0,0 +1,70 @@ +<?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.yuanchu.limslaboratory.mapper.MaterialMapper"> + + <select id="selectMaterialLimit" resultType="Map"> + select id,code, name + from lims_laboratory.material + where state = 1 + and type = #{type} + order by create_time desc + limit #{num1},#{num2} + </select> + <select id="selectMaterialById" resultType="Map"> + select m.id, + m.num, + m.supplier, + m.name, + m.location, + m.batch, + m.reel_number reelNumber, + concat(s.name, '/', sn.name) specificationSerialNum, + s.voltage_level voltageLevel, + s.cross_section crossSection, + s.number_of_cores numberOfCores, + s.instruct + from lims_laboratory.material m, + lims_laboratory.specifications s, + lims_laboratory.serial_number sn + where m.specifications_id = s.id + and s.serial_id = sn.id + and m.id=#{materialId} + </select> + + <resultMap id="OneLevelTreeMap" type="Map"> + <id property="id" column="materialId"/> + <result property="name" column="materialName"/> + <collection property="children" resultMap="TwoLevelTreeMap" javaType="List"/> + </resultMap> + + <resultMap id="TwoLevelTreeMap" type="Map"> + <id property="id" column="standardId"/> + <result property="name" column="standardName"/> + <collection property="children" resultMap="ThreeLevelTreeMap" javaType="List"/> + </resultMap> + + <resultMap id="ThreeLevelTreeMap" type="Map"> + <id property="id" column="specificationsId"/> + <result property="name" column="specificationsName"/> + <collection property="children" resultMap="FourLevelTreeMap" javaType="List"/> + </resultMap> + + <resultMap id="FourLevelTreeMap" type="Map"> + <id property="id" column="productId"/> + <result property="name" column="productName"/> + </resultMap> + + <select id="FourTree" resultMap="OneLevelTreeMap"> + SELECT m.`id` materialId, m.`name` materialName, s.`id` standardId, s.`name` standardName, + f.`id` specificationsId, f.`name` specificationsName, p.`id` productId, p.`name` productName + FROM material m + LEFT JOIN (SELECT s.`id`, s.`name`, s.`material_id` FROM standard s WHERE s.`state` = 1) s ON m.id = s.`material_id` + LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1 + <if test="specificationsName != null and specificationsName != ''"> + AND f.`name` = #{specificationsName} + </if> + ) f ON s.`id` = f.`standard_id` + LEFT JOIN (SELECT p.`id`, p.`name`, p.`specifications_id` FROM product p WHERE p.`state` = 1) p ON f.`id` = p.`specifications_id` + WHERE m.`state` = 1 + </select> +</mapper> diff --git a/standard-server/src/main/resources/mapper/ProductMapper.xml b/standard-server/src/main/resources/mapper/ProductMapper.xml new file mode 100644 index 0000000..e7d4c70 --- /dev/null +++ b/standard-server/src/main/resources/mapper/ProductMapper.xml @@ -0,0 +1,29 @@ +<?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.yuanchu.limslaboratory.mapper.ProductMapper"> + + <select id="pageProductInformation" resultType="map"> + SELECT COUNT(1) num, p.`father` + FROM product p + WHERE p.`specifications_id` = #{specificationsId} + <if test="productCodeOrName != null and productCodeOrName != ''"> + AND p.`father` = #{productCodeOrName} + </if> + GROUP BY p.`father` + </select> + + <select id="selectOneChildren" resultType="map"> + SELECT p.`id`, p.`name`, p.`unit`, p.`required`, p.`internal` + FROM product p + WHERE p.`father` = #{father} + </select> + <select id="selectProductByMaterialId" resultType="Map"> + select p.name,unit,required,internal + from lims_laboratory.product p, + lims_laboratory.specifications sp, + lims_laboratory.standard st + where specifications_id=sp.id + and standard=st.id + and material_id=#{materialId} + </select> +</mapper> diff --git a/standard-server/src/main/resources/mapper/SpecificationsMapper.xml b/standard-server/src/main/resources/mapper/SpecificationsMapper.xml new file mode 100644 index 0000000..4daa5c5 --- /dev/null +++ b/standard-server/src/main/resources/mapper/SpecificationsMapper.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.yuanchu.limslaboratory.mapper.SpecificationsMapper"> + +</mapper> diff --git a/standard-server/src/main/resources/mapper/StandardMapper.xml b/standard-server/src/main/resources/mapper/StandardMapper.xml new file mode 100644 index 0000000..b232854 --- /dev/null +++ b/standard-server/src/main/resources/mapper/StandardMapper.xml @@ -0,0 +1,23 @@ +<?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.yuanchu.limslaboratory.mapper.StandardMapper"> + + <resultMap id="BaseResultMap" type="java.util.Map"> + <id property="specificationsId" column="specificationsId" jdbcType="INTEGER"/> + <result property="specificationsName" column="specificationsName" jdbcType="VARCHAR"/> + <collection property="children" resultMap="BaseResultMapChildren" javaType="java.util.List"/> + </resultMap> + <resultMap id="BaseResultMapChildren" type="java.util.Map"> + <id property="modelId" column="modelId" jdbcType="INTEGER"/> + <result property="modelName" column="modelName" jdbcType="VARCHAR"/> + </resultMap> + + <select id="getSpecificationIdAndName" resultMap="BaseResultMap"> + SELECT s.`id` specificationsId, s.`name` specificationsName, f.id modelId, f.name modelName + FROM standard s + LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1) f + ON s.`id` = f.`standard_id` + WHERE s.`material_id` = #{materialId} + AND s.`state` = 1 + </select> +</mapper> diff --git a/sys/pom.xml b/sys/pom.xml new file mode 100644 index 0000000..effbb79 --- /dev/null +++ b/sys/pom.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>lims-laboratory</artifactId> + <groupId>com.yuanchu</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>sys</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>sys</name> + <description>sys</description> + + <packaging>jar</packaging> + + <dependencies> + <!--鍩虹妗嗘灦绫�--> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>framework</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <!--鐢ㄦ埛鏈嶅姟妯″潡--> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>user-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <!--鏍囧噯搴撴ā鍧�--> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>standard-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <!--妫�楠屾ā鍧�--> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>inspection-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <!--瀹為獙瀹ゆā鍧�--> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>laboratory-server</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <!--druid--> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>druid</artifactId> + </dependency> + + <!--mybatis-plus浠g爜鐢熸垚鍣�--> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-generator</artifactId> + </dependency> + + <!-- framework: mybatis-plus浠g爜鐢熸垚闇�瑕佷竴涓ā鏉垮紩鎿� --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-freemarker</artifactId> + </dependency> + + <!--mysql--> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + </dependency> + </dependencies> + +</project> diff --git a/sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java b/sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java new file mode 100644 index 0000000..0807851 --- /dev/null +++ b/sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java @@ -0,0 +1,83 @@ +package com.yuanchu.limslaboratory; + +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; + +import java.util.Collections; +import java.util.Scanner; + +// 婕旂ず渚嬪瓙锛屾墽琛� main 鏂规硶鎺у埗鍙拌緭鍏ユā鍧楄〃鍚嶅洖杞﹁嚜鍔ㄧ敓鎴愬搴旈」鐩洰褰曚腑 +public class CodeGenerator { + + public static String database_url = "jdbc:mysql://localhost:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"; + public static String database_username = "root"; + public static String database_password= "123456"; + public static String author = "姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃"; + public static String model_name = "/inspect-server"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲 + public static String setParent = "com.yuanchu.mom"; // 鍖呰矾寰� + public static void main(String[] args) { + String projectPath = System.getProperty("user.dir"); + System.out.println(projectPath+"==================="); + FastAutoGenerator.create(database_url, database_username, database_password) + // 鍏ㄥ眬閰嶇疆 + .globalConfig(builder -> { + builder.author(author) // 璁剧疆浣滆�� + .commentDate("yyyy-MM-dd hh:mm:ss") //娉ㄩ噴鏃ユ湡 + .outputDir(projectPath + model_name + "/src/main/java") // 鎸囧畾杈撳嚭鐩綍 + .disableOpenDir() //绂佹鎵撳紑杈撳嚭鐩綍锛岄粯璁ゆ墦寮� + ; + }) + // 鍖呴厤缃� + .packageConfig(builder -> { + builder.entity("pojo"); + builder.parent(setParent) // 璁剧疆鐖跺寘鍚� + .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + model_name + "/src/main/resources/mapper")); // 璁剧疆mapperXml鐢熸垚璺緞 + }) + // 绛栫暐閰嶇疆 + .strategyConfig(builder -> { + builder.addInclude(scanner("琛ㄥ悕锛屽涓┖鏍煎垎鍓�").split(" ")) // 璁剧疆闇�瑕佺敓鎴愮殑琛ㄥ悕 + .addTablePrefix("sys_") // 璁剧疆杩囨护琛ㄥ墠缂� + // Entity 绛栫暐閰嶇疆 + .entityBuilder() + .enableLombok() //寮�鍚� Lombok + .naming(NamingStrategy.underline_to_camel) //鏁版嵁搴撹〃鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐锛氫笅鍒掔嚎杞┘宄板懡 + .columnNaming(NamingStrategy.underline_to_camel) //鏁版嵁搴撹〃瀛楁鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐锛氫笅鍒掔嚎杞┘宄板懡 + // Mapper 绛栫暐閰嶇疆 + .mapperBuilder() + .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠� + // Service 绛栫暐閰嶇疆 + .serviceBuilder() + .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠� + .formatServiceFileName("%sService") //鏍煎紡鍖� service 鎺ュ彛鏂囦欢鍚嶇О锛�%s杩涜鍖归厤琛ㄥ悕锛屽 UserService + .formatServiceImplFileName("%sServiceImpl") //鏍煎紡鍖� service 瀹炵幇绫绘枃浠跺悕绉帮紝%s杩涜鍖归厤琛ㄥ悕锛屽 UserServiceImpl + // Controller 绛栫暐閰嶇疆 + .controllerBuilder() + .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠� + ; + }) + .execute(); + } + + /** + * <p> + * 璇诲彇鎺у埗鍙板唴瀹� + * </p> + */ + public static String scanner(String tip) { + Scanner scanner = new Scanner(System.in); + StringBuilder help = new StringBuilder(); + help.append("璇疯緭鍏�" + tip + "锛�"); + System.out.println(help.toString()); + if (scanner.hasNext()) { + String ipt = scanner.next(); + + if (StringUtils.isNotBlank(ipt)) { + return ipt; + } + } + throw new MybatisPlusException("璇疯緭鍏ユ纭殑" + tip + "锛�"); + } +} diff --git a/sys/src/main/java/com/yuanchu/limslaboratory/SysApplication.java b/sys/src/main/java/com/yuanchu/limslaboratory/SysApplication.java new file mode 100644 index 0000000..8485701 --- /dev/null +++ b/sys/src/main/java/com/yuanchu/limslaboratory/SysApplication.java @@ -0,0 +1,17 @@ +package com.yuanchu.limslaboratory; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication +@MapperScan("com.yuanchu.limslaboratory.mapper")// 鎵弿Mybatis涓殑mapper鍖� +@EnableFeignClients("com.yuanchu.limslaboratory.clients") // 鎵弿feign鎺ュ彛鎵�鍦ㄥ寘 閲嶈 +public class SysApplication { + + public static void main(String[] args) { + SpringApplication.run(SysApplication.class, args); + } + +} diff --git a/sys/src/main/java/com/yuanchu/limslaboratory/backup/MysqlDataBackup.java b/sys/src/main/java/com/yuanchu/limslaboratory/backup/MysqlDataBackup.java new file mode 100644 index 0000000..2ed3705 --- /dev/null +++ b/sys/src/main/java/com/yuanchu/limslaboratory/backup/MysqlDataBackup.java @@ -0,0 +1,190 @@ +package com.yuanchu.limslaboratory.backup; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +@EnableScheduling +@Slf4j +public class MysqlDataBackup { + /** + * 鏁版嵁搴撶増鏈槸鍚︿负 8.0 + 锛坒alse=鍚� true=鏄級锛� mysql8+ 闇�瑕佸弬鏁� --column-statistics=0 锛� mysql8- 涓嶉渶瑕� + */ + Boolean isDbVersion8 = false; + + /** + * 澶囦唤鍛戒护 + * USERNAME 璐﹀彿 + * PASSWORD 瀵嗙爜 + * SERVERPATH 鏈嶅姟鍣↖P/鍩熷悕 + * DBNAME 鏁版嵁搴撳悕绉� + * FILEPATH 澶囦唤鏂囦欢瀛樻斁鍦板潃+鍚嶇О + * 璇存槑 + * cmdCompression 锛� 闇�鍘嬬缉 锛堟湰鍦版垨鏈嶅姟鍣ㄩ渶瀹夎 mysqldump 鍛戒护(瀹夎mysql鑷甫鎮g嫭绔嬪畨瑁�) + gzip 鍛戒护(鐙珛瀹夎)锛� + * cmd 锛� 涓嶅帇缂� (鏈湴鎴栨湇鍔″櫒闇�瀹夎 mysqldump 鍛戒护(瀹夎mysql鑷甫鎮g嫭绔嬪畨瑁�) + * --column-statistics=0 mysql8 娣诲姞璇ュ弬鏁�, 闈瀖ysql8 涓嶆坊鍔�, 鍚﹀垯灏嗗嚭閿� + */ + String cmdMysql8 = "mysqldump --column-statistics=0 -u{USERNAME} -p{PASSWORD} -h{SERVERPATH} -P3306 --databases {DBNAME}"; // > {FILEPATH}.sql + String cmd = "mysqldump -u{USERNAME} -p{PASSWORD} -h{SERVERPATH} -P3306 --databases {DBNAME}"; // > {FILEPATH}.sql + + /** + * 澶囦唤 sql 瀛樻斁鐩綍(鐩稿璺緞, 娉ㄦ剰鍙兘闇�瑕佸湪 MvcConfig 閰嶇疆璁块棶鏉冮檺) + */ + @Value("${backup.path}") + private String filePath; + + @Value("${spring.datasource.url}") + private String dbUrl; + + @Value("${spring.datasource.username}") + private String dbUserName; + + @Value("${spring.datasource.password}") + private String dbPassWord; + + @Value("${backup.destiny}") + private Integer destiny; + + @Value("${backup.mysqldump}") + private String mysqldump; + + /** + * 姣忓ぉ鏅氫笂23鐐�05绉掓墽琛� 銆� 0 0 4 1/1 * ? 銆� + * 娴嬭瘯 20 绉掍竴娆°�� 0/20 * * * * ? 銆慇Scheduled(cron = "5 * 23 * * ?") + */ + @Scheduled(cron = "5 0 23 * * ?") + private void configureTasks() { + log.info("銆愬浠芥暟鎹簱銆�--START"); + String dbUrl2 = dbUrl.replace("jdbc:mysql://", ""); + + // 鑾峰彇鏁版嵁搴撳悕绉� + String dbName = dbUrl2.substring(dbUrl2.lastIndexOf("/") + 1, dbUrl2.indexOf("?")); + // 鑾峰彇鏁版嵁搴撳湴鍧� + String serverPath = dbUrl2.substring(0, dbUrl2.lastIndexOf(":")); + // 鏁版嵁搴撹处鍙� + String username = dbUserName; + // 鏁版嵁搴撳瘑鐮� + String password = dbPassWord; + + // 澶囦唤鏂囦欢鐩綍+鍚嶇О 澶囦唤鏂囦欢瀛樻斁鐩綍+鍚嶇О(鍚嶇О = 鏁版嵁搴撳悕+鏃堕棿瀛楃涓�.sql) + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String format = simpleDateFormat.format(new Date()); + String timeStr = format + .replaceAll("-", "_") + .replaceAll(" ", "_") + .replaceAll(":", ""); + timeStr = timeStr.substring(0, 15); + String pathFileName = filePath + "/" + dbName + "_" + timeStr + ".sql"; + String newCmd = ""; + if (isDbVersion8) { + newCmd = cmdMysql8; + } else { + newCmd = cmd; + } + // 鎵ц鍛戒护 + newCmd = newCmd.replace("{USERNAME}", username) + .replace("{PASSWORD}", password) + .replace("{SERVERPATH}", serverPath) + .replace("{DBNAME}", dbName) + .replace("{FILEPATH}", pathFileName); + PrintWriter printWriter = null; + BufferedReader bufferedReader = null; + try { + // 鍒涘缓瀛樻斁sql鐨勬枃浠� + existsFile(new File(pathFileName)); + printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(pathFileName), "utf8")); + Process process = null; + String property = System.getProperty("os.name"); + System.out.println(property); + if (property.indexOf("Linux") != -1) { + // linux + process = Runtime.getRuntime().exec(new String[]{"bash", "-c", newCmd}); + } else { + // 鏈湴win + String mysqldumpPath = "cmd /c " + mysqldump + "/" + newCmd; + System.out.println(mysqldumpPath); + process = Runtime.getRuntime().exec(mysqldumpPath); + } + InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8"); + bufferedReader = new BufferedReader(inputStreamReader); + String line; + while ((line = bufferedReader.readLine()) != null) { + printWriter.println(line); + } + // 姝ゆ浼氭墽琛岃繃闀挎椂闂�,鐩村埌澶囦唤瀹屾垚 + printWriter.flush(); + printWriter.close(); + //0 琛ㄧず绾跨▼姝e父缁堟銆� + if (process.waitFor() == 0) { + // 绾跨▼姝e父鎵ц + log.info("銆愬浠芥暟鎹簱銆慡UCCESS锛孲QL鏂囦欢锛歿}", pathFileName); + } + } catch (Exception e) { + e.printStackTrace(); + log.info("銆愬浠芥暟鎹簱銆慒AILURE"); + } finally { + try { + if (bufferedReader != null) { + bufferedReader.close(); + } + if (printWriter != null) { + printWriter.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + log.info("銆愬浠芥暟鎹簱銆�--END"); + } + + + /** + * 姣忓ぉ鏅氫笂23鐐�0鍒�10绉掓墽琛� 銆� 0 0 4 1/1 * ? 銆� + * 娴嬭瘯 20 绉掍竴娆°�� 0/20 * * * * ? 銆� + */ + @Scheduled(cron = "6 0 23 * * ?") + private void TimerDeleteFile(){ + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("d"); + Integer currentDay = Integer.valueOf(sdf.format(date)); + File file = new File(filePath); + File[] files = file.listFiles(); + if (files != null) { + for(File f : files){ + if(f.isFile()){//鑻ユ槸鏂囦欢锛岀洿鎺ユ墦鍗� + String[] splitFile = f.getName().split("_"); + Integer fileDay = Integer.valueOf(splitFile[splitFile.length - 2]); + Integer i = currentDay - fileDay; + if (i.equals(destiny)){ + f.delete(); + log.info("澶囦唤sql鏂囦欢杩囧杩涜鍒犻櫎锛�"); + } + } + } + } + } + + /** + * 鍒ゆ柇鏂囦欢鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓 + */ + private static void existsFile(File file) { + // 鍒ゆ柇鏂囦欢璺緞鏄惁瀛樺湪,涓嶅瓨鍦ㄦ柊寤� + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/sys/src/main/resources/application-dev.yml b/sys/src/main/resources/application-dev.yml new file mode 100644 index 0000000..7dc4eaa --- /dev/null +++ b/sys/src/main/resources/application-dev.yml @@ -0,0 +1,85 @@ +swagger: + enabled: true + +# 鏃ュ織閰嶇疆 +logging: + config: classpath:logback-spring.xml + # 鏃ュ織瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ + file-location: log + +# 鏁版嵁搴撳浠借矾寰� +backup: + # 鏁版嵁搴撳浠借矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ + path: E:/webapp/backup + # 鏁版嵁搴撳浠藉ぉ鏁� + destiny: 7 + # 鏁版嵁搴撳浠藉伐鍏疯矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ + mysqldump: E:\JavaCode\WMS\WMS_Admin\src\main\resources + +# 鐓х墖瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ +file: + path: E:/webapp/images + # 涓婁紶鏂囦欢鍏佽鐨勬墿灞曞悕 + allowed: png,jpg,jpeg,gif + +# 榈烽洀绠$悊绯荤粺瀵嗛挜 +login: + userID: c8b1aaacec366c24e5d18c7eea9e551b + secret: 701C85FCE0F7CFD714C2052D77098DC7f407b0ee79210bcef51787a0eb8ec7a5 + +# 榈烽洀缃戠粶IP鎴栬�呭煙鍚� +customer: + url: http://114.132.189.42:8011 + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 寮�鍚痬ybatis-plus鏃ュ織 + +# 鏁版嵁婧愰厤缃� +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + username: root + password: 123456 + druid: + # Druid鏁版嵁婧愰厤缃� + initialSize: 5 # 鍒濆杩炴帴鏁� + minIdle: 10 # 鏈�灏忚繛鎺ユ睜鏁伴噺 + maxActive: 20 # 鏈�澶ц繛鎺ユ睜鏁伴噺 + maxWait: 60000 # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� + timeBetweenEvictionRunsMillis: 60000 # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 + minEvictableIdleTimeMillis: 300000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + maxEvictableIdleTimeMillis: 900000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + validationQuery: SELECT 1 FROM DUAL # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁� + testWhileIdle: true #鐢宠杩炴帴鐨勬椂鍊欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堛�� + testOnBorrow: false #閰嶇疆浠庤繛鎺ユ睜鑾峰彇杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆� + testOnReturn: false #閰嶇疆鍚戣繛鎺ユ睜褰掕繕杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆� + poolPreparedStatements: true #鎵撳紑PsCache锛屽苟涓旀寚瀹氭瘡涓繛鎺ヤ笂PSCache鐨勫ぇ灏� + maxPoolPreparedStatementPerConnectionSize: 20 + filters: stat,wall,log4j # 閰嶇疆鐩戞帶缁熻鎷︽埅鐨刦ilters锛屽幓鎺夊悗鐩戞帶鐣岄潰sql鏃犳硶缁熻锛�'wall'鐢ㄤ簬闃茬伀澧� + useGlobalDataSourceStat: true #鍚堝苟澶氫釜DruidDatasource鐨勭洃鎺ф暟鎹� + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500; #閫氳繃connectProperties灞炴�ф潵鎵撳紑mergesql鍔熻兘缃楁參sQL璁板綍 + redis: + # redis鏁版嵁搴撶储寮�(榛樿涓�0)锛屾垜浠娇鐢ㄧ储寮曚负3鐨勬暟鎹簱锛岄伩鍏嶅拰鍏朵粬鏁版嵁搴撳啿绐� + database: 0 + # redis鏈嶅姟鍣ㄥ湴鍧�锛堥粯璁や负localhost锛� + host: localhost + # redis绔彛锛堥粯璁や负6379锛� + port: 6380 + # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級 + password: null + # redis杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶆绉掞級 + timeout: 5 + # redis杩炴帴姹犻厤缃� + pool: + # 鏈�澶у彲鐢ㄨ繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級 + max-active: 8 + # 鏈�澶х┖闂茶繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級 + max-idle: 8 + # 鏈�灏忕┖闂茶繛鎺ユ暟锛堥粯璁や负0锛岃鍊煎彧鏈変负姝f暟鎵嶆湁鐢級 + min-idle: 0 + # 浠庤繛鎺ユ睜涓幏鍙栬繛鎺ユ渶澶х瓑寰呮椂闂达紙榛樿涓�-1锛屽崟浣嶄负姣锛岃礋鏁拌〃绀烘棤闄愶級 + max-wait: -1 + diff --git a/sys/src/main/resources/application-prod.yml b/sys/src/main/resources/application-prod.yml new file mode 100644 index 0000000..fda93ce --- /dev/null +++ b/sys/src/main/resources/application-prod.yml @@ -0,0 +1,86 @@ +swagger: + enabled: false + +# 鏃ュ織閰嶇疆 +logging: + config: classpath:logback-spring.xml + # 鏃ュ織瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ + file-location: /javaWork/LIMS/log + +# 鏁版嵁搴撳浠借矾寰� +backup: + # 鏁版嵁搴撳浠借矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ + path: /javaWork/LIMS/backup + # 鏁版嵁搴撳浠藉ぉ鏁�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ + destiny: 7 + # 鏁版嵁搴撳浠藉伐鍏疯矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ + mysqldump: /javaWork/LIMS/conf + +# 鐓х墖璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ +file: + path: /javaWork/LIMS/images + # 涓婁紶鏂囦欢鍏佽鐨勬墿灞曞悕 + allowed: png,jpg,jpeg,gif + +# 榈烽洀缃戠粶IP鎴栬�呭煙鍚�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ +customer: + url: http://114.132.189.42:8011 + +login: + userID: c8b1aaacec366c24e5d18c7eea9e551b + secret: 701C85FCE0F7CFD714C2052D77098DC7f407b0ee79210bcef51787a0eb8ec7a5 + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl # 鍏抽棴mybatis-plus鏃ュ織 + +# 鏁版嵁婧愰厤缃� +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.jdbc.Driver + url: jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + username: root + password: 123456 + druid: + # Druid鏁版嵁婧愰厤缃� + initialSize: 5 # 鍒濆杩炴帴鏁� + minIdle: 10 # 鏈�灏忚繛鎺ユ睜鏁伴噺 + maxActive: 20 # 鏈�澶ц繛鎺ユ睜鏁伴噺 + maxWait: 60000 # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� + timeBetweenEvictionRunsMillis: 60000 # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 + minEvictableIdleTimeMillis: 300000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + maxEvictableIdleTimeMillis: 900000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + validationQuery: SELECT 1 FROM DUAL # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁� + testWhileIdle: true #鐢宠杩炴帴鐨勬椂鍊欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堛�� + testOnBorrow: false #閰嶇疆浠庤繛鎺ユ睜鑾峰彇杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆� + testOnReturn: false #閰嶇疆鍚戣繛鎺ユ睜褰掕繕杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆� + poolPreparedStatements: true #鎵撳紑PsCache锛屽苟涓旀寚瀹氭瘡涓繛鎺ヤ笂PSCache鐨勫ぇ灏� + maxPoolPreparedStatementPerConnectionSize: 20 + filters: stat,wall,log4j # 閰嶇疆鐩戞帶缁熻鎷︽埅鐨刦ilters锛屽幓鎺夊悗鐩戞帶鐣岄潰sql鏃犳硶缁熻锛�'wall'鐢ㄤ簬闃茬伀澧� + useGlobalDataSourceStat: true #鍚堝苟澶氫釜DruidDatasource鐨勭洃鎺ф暟鎹� + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500; #閫氳繃connectProperties灞炴�ф潵鎵撳紑mergesql鍔熻兘缃楁參sQL璁板綍 + + +redis: + # redis鏁版嵁搴撶储寮�(榛樿涓�0)锛屾垜浠娇鐢ㄧ储寮曚负3鐨勬暟鎹簱锛岄伩鍏嶅拰鍏朵粬鏁版嵁搴撳啿绐� + database: 0 + # redis鏈嶅姟鍣ㄥ湴鍧�锛堥粯璁や负loaclhost锛� + host: 127.0.0.1 + # redis绔彛锛堥粯璁や负6379锛� + port: 6379 + # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級 + # password: + # redis杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶆绉掞級 + timeout: 0 + # redis杩炴帴姹犻厤缃� + pool: + # 鏈�澶у彲鐢ㄨ繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級 + max-active: 8 + # 鏈�澶х┖闂茶繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級 + max-idle: 8 + # 鏈�灏忕┖闂茶繛鎺ユ暟锛堥粯璁や负0锛岃鍊煎彧鏈変负姝f暟鎵嶆湁鐢級 + min-idle: 0 + # 浠庤繛鎺ユ睜涓幏鍙栬繛鎺ユ渶澶х瓑寰呮椂闂达紙榛樿涓�-1锛屽崟浣嶄负姣锛岃礋鏁拌〃绀烘棤闄愶級 + max-wait: -1 + diff --git a/sys/src/main/resources/application.yml b/sys/src/main/resources/application.yml new file mode 100644 index 0000000..cc247aa --- /dev/null +++ b/sys/src/main/resources/application.yml @@ -0,0 +1,28 @@ +server: + port: 1234 + +spring: + servlet: + multipart: + max-file-size: 20MB # 鍗曚釜鏂囦欢澶у皬 + max-request-size: 1024MB # 涓�娆¤姹傛枃浠舵�诲ぇ灏� + profiles: + active: dev + +mybatis-plus: + type-aliases-package: com.yuanchu.limslaboratory.pojo + mapper-locations: classpath*:/mapper/*.xml + global-config: + banner: off # 鍏抽棴mybatis-plus鍚姩鍥炬爣 + +feign: + client: + config: + default: + connectTimeout: 2000 + readTimeout: 3000 + loggerLevel: FULL + httpclient: + enabled: false # 鍏抽棴 httpclient + okhttp: + enabled: true # 寮�鍚� okhttp diff --git a/sys/src/main/resources/logback-spring.xml b/sys/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..9c97a9f --- /dev/null +++ b/sys/src/main/resources/logback-spring.xml @@ -0,0 +1,236 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- 鏃ュ織绾у埆浠庝綆鍒伴珮鍒嗕负TRACE < DEBUG < INFO < WARN < ERROR < FATAL锛屾瘮濡�: 濡傛灉璁剧疆涓篧ARN锛屽垯浣庝簬WARN鐨勪俊鎭兘涓嶄細杈撳嚭 --> +<!-- scan:褰撴灞炴�ц缃负true鏃讹紝閰嶇疆鏂囨。濡傛灉鍙戠敓鏀瑰彉锛屽皢浼氳閲嶆柊鍔犺浇锛岄粯璁ゅ�间负true --> +<!-- scanPeriod:璁剧疆鐩戞祴閰嶇疆鏂囨。鏄惁鏈変慨鏀圭殑鏃堕棿闂撮殧锛屽鏋滄病鏈夌粰鍑烘椂闂村崟浣嶏紝榛樿鍗曚綅鏄绉掋�傚綋scan涓簍rue鏃讹紝姝ゅ睘鎬х敓鏁堛�傞粯璁ょ殑鏃堕棿闂撮殧涓�1鍒嗛挓銆� --> +<!-- debug:褰撴灞炴�ц缃负true鏃讹紝灏嗘墦鍗板嚭logback鍐呴儴鏃ュ織淇℃伅锛屽疄鏃舵煡鐪媗ogback杩愯鐘舵�併�傞粯璁ゅ�间负false銆� --> +<configuration scan="true" scanPeriod="10 seconds"> + <contextName>logback</contextName> + + <!-- name鐨勫�兼槸鍙橀噺鐨勫悕绉帮紝value鐨勫�兼椂鍙橀噺瀹氫箟鐨勫�笺�傞�氳繃瀹氫箟鐨勫�间細琚彃鍏ュ埌logger涓婁笅鏂囦腑銆傚畾涔夊悗锛屽彲浠ヤ娇鈥�${}鈥濇潵浣跨敤鍙橀噺銆� --> + <springProperty scope="context" name="logs" source="logging.file-location" default="/var/log/myapp"/> + <property name="log.path" value="${logs}"/> + + <!--0. 鏃ュ織鏍煎紡鍜岄鑹叉覆鏌� --> + <!-- 褰╄壊鏃ュ織渚濊禆鐨勬覆鏌撶被 --> + <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> + <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> + <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> + <!-- 褰╄壊鏃ュ織鏍煎紡 --> + <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> + + <!--1. 杈撳嚭鍒版帶鍒跺彴--> + <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> + <!--姝ゆ棩蹇梐ppender鏄负寮�鍙戜娇鐢紝鍙厤缃渶搴曠骇鍒紝鎺у埗鍙拌緭鍑虹殑鏃ュ織绾у埆鏄ぇ浜庢垨绛変簬姝ょ骇鍒殑鏃ュ織淇℃伅--> + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <level>debug</level> + </filter> + <encoder> + <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> + <!-- 璁剧疆瀛楃闆� --> + <charset>UTF-8</charset> + </encoder> + </appender> + + <!--2. 杈撳嚭鍒版枃妗�--> + <!-- 2.1 level涓� DEBUG 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑� --> + <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 --> + <file>${log.path}/debug.log</file> + <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡--> + <encoder> + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> + <charset>UTF-8</charset> <!-- 璁剧疆瀛楃闆� --> + </encoder> + <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 --> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <!-- 鏃ュ織褰掓。 --> + <fileNamePattern>${log.path}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>100MB</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> + <!--鏃ュ織鏂囨。淇濈暀澶╂暟--> + <maxHistory>60</maxHistory> + </rollingPolicy> + <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍debug绾у埆鐨� --> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <level>debug</level> + <onMatch>ACCEPT</onMatch> + <onMismatch>DENY</onMismatch> + </filter> + </appender> + + <!-- 2.2 level涓� INFO 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑� --> + <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 --> + <file>${log.path}/info.log</file> + <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡--> + <encoder> + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> + <charset>UTF-8</charset> + </encoder> + <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 --> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <!-- 姣忓ぉ鏃ュ織褰掓。璺緞浠ュ強鏍煎紡 --> + <fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>100MB</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> + <!--鏃ュ織鏂囨。淇濈暀澶╂暟--> + <maxHistory>60</maxHistory> + </rollingPolicy> + <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍info绾у埆鐨� --> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <level>info</level> + <onMatch>ACCEPT</onMatch> + <onMismatch>DENY</onMismatch> + </filter> + </appender> + + <!-- 2.3 level涓� WARN 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑� --> + <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 --> + <file>${log.path}/warn.log</file> + <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡--> + <encoder> + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> + <charset>UTF-8</charset> <!-- 姝ゅ璁剧疆瀛楃闆� --> + </encoder> + <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 --> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>${log.path}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>100MB</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> + <!--鏃ュ織鏂囨。淇濈暀澶╂暟--> + <maxHistory>60</maxHistory> + </rollingPolicy> + <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍warn绾у埆鐨� --> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <level>warn</level> + <onMatch>ACCEPT</onMatch> + <onMismatch>DENY</onMismatch> + </filter> + </appender> + + <!-- 2.4 level涓� ERROR 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑� --> + <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 --> + <file>${log.path}/error.log</file> + <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡--> + <encoder> + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> + <charset>UTF-8</charset> <!-- 姝ゅ璁剧疆瀛楃闆� --> + </encoder> + <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 --> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>100MB</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> + <!--鏃ュ織鏂囨。淇濈暀澶╂暟--> + <maxHistory>60</maxHistory> + </rollingPolicy> + <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍ERROR绾у埆鐨� --> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <level>ERROR</level> + <onMatch>ACCEPT</onMatch> + <onMismatch>DENY</onMismatch> + </filter> + </appender> + + <!-- 2.5 鎵�鏈� 闄や簡DEBUG绾у埆鐨勫叾瀹冮珮浜嶥EBUG鐨� 鏃ュ織锛岃褰曞埌涓�涓枃浠� --> + <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 --> + <file>${log.path}/all.log</file> + <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡--> + <encoder> + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> + <charset>UTF-8</charset> <!-- 姝ゅ璁剧疆瀛楃闆� --> + </encoder> + <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 --> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>${log.path}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>100MB</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> + <!--鏃ュ織鏂囨。淇濈暀澶╂暟--> + <maxHistory>60</maxHistory> + </rollingPolicy> + <!-- 姝ゆ棩蹇楁枃妗h褰曢櫎浜咲EBUG绾у埆鐨勫叾瀹冮珮浜嶥EBUG鐨� --> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <level>DEBUG</level> + <onMatch>DENY</onMatch> + <onMismatch>ACCEPT</onMismatch> + </filter> + </appender> + + <!-- + <logger>鐢ㄦ潵璁剧疆鏌愪竴涓寘鎴栬�呭叿浣撶殑鏌愪竴涓被鐨勬棩蹇楁墦鍗扮骇鍒�� + 浠ュ強鎸囧畾<appender>銆�<logger>浠呮湁涓�涓猲ame灞炴�э紝 + 涓�涓彲閫夌殑level鍜屼竴涓彲閫夌殑addtivity灞炴�с�� + name:鐢ㄦ潵鎸囧畾鍙楁logger绾︽潫鐨勬煇涓�涓寘鎴栬�呭叿浣撶殑鏌愪竴涓被銆� + level:鐢ㄦ潵璁剧疆鎵撳嵃绾у埆锛屽ぇ灏忓啓鏃犲叧锛歍RACE, DEBUG, INFO, WARN, ERROR, ALL 鍜� OFF锛� + 杩樻湁涓�涓壒娈婂�糏NHERITED鎴栬�呭悓涔夎瘝NULL锛屼唬琛ㄥ己鍒舵墽琛屼笂绾х殑绾у埆銆� + 濡傛灉鏈缃灞炴�э紝閭d箞褰撳墠logger灏嗕細缁ф壙涓婄骇鐨勭骇鍒�� + addtivity:鏄惁鍚戜笂绾ogger浼犻�掓墦鍗颁俊鎭�傞粯璁ゆ槸true銆� + <logger name="org.springframework.web" level="info"/> + <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> + --> + + <!-- + 浣跨敤mybatis鐨勬椂鍊欙紝sql璇彞鏄痙ebug涓嬫墠浼氭墦鍗帮紝鑰岃繖閲屾垜浠彧閰嶇疆浜唅nfo锛屾墍浠ユ兂瑕佹煡鐪媠ql璇彞鐨勮瘽锛屾湁浠ヤ笅涓ょ鎿嶄綔锛� + 绗竴绉嶆妸<root level="info">鏀规垚<root level="DEBUG">杩欐牱灏变細鎵撳嵃sql锛屼笉杩囪繖鏍锋棩蹇楅偅杈逛細鍑虹幇寰堝鍏朵粬娑堟伅 + 绗簩绉嶅氨鏄崟鐙粰dao涓嬬洰褰曢厤缃甦ebug妯″紡锛屼唬鐮佸涓嬶紝杩欐牱閰嶇疆sql璇彞浼氭墦鍗帮紝鍏朵粬杩樻槸姝e父info绾у埆锛� + 銆恖ogging.level.org.mybatis=debug logging.level.dao=debug銆� + --> + + <!-- + root鑺傜偣鏄繀閫夎妭鐐癸紝鐢ㄦ潵鎸囧畾鏈�鍩虹鐨勬棩蹇楄緭鍑虹骇鍒紝鍙湁涓�涓猯evel灞炴�� + level:鐢ㄦ潵璁剧疆鎵撳嵃绾у埆锛屽ぇ灏忓啓鏃犲叧锛歍RACE, DEBUG, INFO, WARN, ERROR, ALL 鍜� OFF锛� + 涓嶈兘璁剧疆涓篒NHERITED鎴栬�呭悓涔夎瘝NULL銆傞粯璁ゆ槸DEBUG + 鍙互鍖呭惈闆朵釜鎴栧涓厓绱狅紝鏍囪瘑杩欎釜appender灏嗕細娣诲姞鍒拌繖涓猯ogger銆� + --> + + + + + <!-- 4 鏈�缁堢殑绛栫暐锛� + 鍩烘湰绛栫暐(root绾�) + 鏍规嵁profile鍦ㄥ惎鍔ㄦ椂, logger鏍囩涓畾鍒跺寲package鏃ュ織绾у埆(浼樺厛绾ч珮浜庝笂闈㈢殑root绾�)--> + <springProfile name="dev"> + <root level="info"> + <appender-ref ref="CONSOLE" /> + <appender-ref ref="DEBUG_FILE" /> + <appender-ref ref="INFO_FILE" /> + <appender-ref ref="WARN_FILE" /> + <appender-ref ref="ERROR_FILE" /> + <appender-ref ref="ALL_FILE" /> + </root> + <logger name="com.yuanchu.limslaboratory.SysApplication" level="debug"/> <!-- 寮�鍙戠幆澧�, 鎸囧畾鏌愬寘鏃ュ織涓篸ebug绾� --> + </springProfile> + + <springProfile name="test"> + <root level="info"> + <appender-ref ref="CONSOLE" /> + <appender-ref ref="DEBUG_FILE" /> + <appender-ref ref="INFO_FILE" /> + <appender-ref ref="WARN_FILE" /> + <appender-ref ref="ERROR_FILE" /> + <appender-ref ref="ALL_FILE" /> + </root> + <logger name="com.yuanchu.limslaboratory.SysApplication" level="info"/> <!-- 娴嬭瘯鐜, 鎸囧畾鏌愬寘鏃ュ織涓篿nfo绾� --> + </springProfile> + + <springProfile name="prod"> + <root level="info"> + <!-- 鐢熶骇鐜鏈�濂戒笉閰嶇疆console鍐欐枃浠� --> + <appender-ref ref="DEBUG_FILE" /> + <appender-ref ref="INFO_FILE" /> + <appender-ref ref="WARN_FILE" /> + <appender-ref ref="ERROR_FILE" /> + <appender-ref ref="ALL_FILE" /> + </root> + <logger name="com.yuanchu.limslaboratory" level="warn"/> <!-- 鐢熶骇鐜, 鎸囧畾鏌愬寘鏃ュ織涓簑arn绾� --> + <logger name="com.yuanchu.limslaboratory.SysApplication" level="info"/> <!-- 鐗瑰畾鏌愪釜绫绘墦鍗癷nfo鏃ュ織, 姣斿application鍚姩鎴愬姛鍚庣殑鎻愮ず璇� --> + </springProfile> + +</configuration> diff --git a/sys/src/main/resources/mysqldump.exe b/sys/src/main/resources/mysqldump.exe new file mode 100644 index 0000000..9f4ce5e --- /dev/null +++ b/sys/src/main/resources/mysqldump.exe Binary files differ diff --git a/sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java b/sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java new file mode 100644 index 0000000..9d91f2b --- /dev/null +++ b/sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java @@ -0,0 +1,16 @@ +package com.yuanchu.limslaboratory; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SysApplicationTests { + + @Test + void contextLoads() { + String newString = String.format("%06d", 77); + System.out.println("newString === " + newString); + + } +} + + diff --git a/user-server/pom.xml b/user-server/pom.xml new file mode 100644 index 0000000..a1f86af --- /dev/null +++ b/user-server/pom.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>lims-laboratory</artifactId> + <groupId>com.yuanchu</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>user-server</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>user-server</name> + <description>user-server</description> + + <packaging>jar</packaging> + <dependencies> + <dependency> + <groupId>com.yunchu.limslaboratory</groupId> + <artifactId>framework</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <!--feign--> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-openfeign</artifactId> + </dependency> + + <!--okhttp--> + <dependency> + <groupId>io.github.openfeign</groupId> + <artifactId>feign-okhttp</artifactId> + </dependency> + + <!--瀹夊叏妗嗘灦shiro--> + <dependency> + <groupId>org.apache.shiro</groupId> + <artifactId>shiro-spring-boot-starter</artifactId> + </dependency> + + <!--jwt--> + <dependency> + <groupId>com.auth0</groupId> + <artifactId>java-jwt</artifactId> + </dependency> + </dependencies> + +</project> diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserClient.java b/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserClient.java new file mode 100644 index 0000000..8a3df54 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserClient.java @@ -0,0 +1,19 @@ +package com.yuanchu.limslaboratory.clients; + +import com.yuanchu.limslaboratory.vo.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Map; + +@FeignClient(value = "userservice", url = "${customer.url}") +public interface UserClient { + + @PostMapping("/business/login") + Result<?> BusynessUserLogin(@RequestBody Map<String, Object> mapData); + + @PostMapping("/business/code") + Result<?> BusynessUserLoginToken(@RequestParam("code") String code); +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java b/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java new file mode 100644 index 0000000..7b1ead7 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java @@ -0,0 +1,74 @@ +package com.yuanchu.limslaboratory.clients; + +import com.yuanchu.limslaboratory.pojo.User; +import com.yuanchu.limslaboratory.shiro.utils.JwtUtils; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.Result; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@Component +public class UserLoginUtils { + + @Resource + private UserClient userClient; + + @Value("${login.userID}") + private String LoginUserID; + + @Value("${login.secret}") + private String LoginSecret; + + public Result<Map<String, Object>> LoginExamine(User user){ + Map<String, Object> mapData = new HashMap<>(); + mapData.put("LoginUserID", LoginUserID); + mapData.put("LoginSecret", LoginSecret); + Result<?> code = userClient.BusynessUserLogin(mapData); + if (code.getCode() == 200){ + Result<?> result = userClient.BusynessUserLoginToken(code.getData().toString()); + if (result.getCode() == 200){ + Map data = (Map) result.getData(); + String token = data.get("token").toString(); + data.remove("token"); + HashMap<String, Object> mapRedis = new HashMap<>(); + mapRedis.put("id", user.getId()); + mapRedis.put("account", user.getAccount()); + mapRedis.put("name", user.getName()); + mapRedis.put("enterpriseId", user.getEnterpriseId()); + mapRedis.put("data", data); + //瀛樺叆redis,浜屼釜灏忔椂鍚庡垹闄� + RedisUtil.set(token, mapRedis, 120); + // 灏嗙鍙戠殑 JWT token 杩斿洖缁欏墠绔� + HashMap<String, Object> map = new HashMap<>(); + String refresh = JwtUtils.sign(user.getAccount()); + map.put("token", token); + map.put("refresh", refresh); + RedisUtil.set(user.getAccount(), map, 168); + return Result.success(map); + } else { + return Result.fail(result.getMessage()); + } + } else { + return Result.fail(code.getMessage()); + } + } + + +// public Result<Map<String, Object>> LoginExamine(User user){ +// String token = JwtUtils.sign(user.getAccount()); +// //瀛樺叆redis,浜屼釜灏忔椂鍚庡垹闄� +// RedisUtil.set(token, user, 2); +// // 灏嗙鍙戠殑 JWT token 杩斿洖缁欏墠绔� +// HashMap<String, Object> map = new HashMap<>(); +// String refresh = JwtUtils.sign(user.getAccount()); +// map.put("token", token); +// map.put("refresh", refresh); +// RedisUtil.set(user.getAccount(), map, 120); +// return Result.success(map); +// } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/config/FeignConfig.java b/user-server/src/main/java/com/yuanchu/limslaboratory/config/FeignConfig.java new file mode 100644 index 0000000..52abac8 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/config/FeignConfig.java @@ -0,0 +1,36 @@ +package com.yuanchu.limslaboratory.config; + + +import feign.Feign; +import okhttp3.OkHttpClient; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.cloud.commons.httpclient.OkHttpClientFactory; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignAutoConfiguration; +import org.springframework.cloud.openfeign.support.FeignHttpClientProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +@Configuration +@ConditionalOnClass(Feign.class) +@AutoConfigureBefore(FeignAutoConfiguration.class) +public class FeignConfig { + + private OkHttpClient okHttpClient; + + + //娉ㄥ叆okhttp + @Bean + public OkHttpClient okHttpClient(OkHttpClientFactory okHttpClientFactory, + FeignHttpClientProperties httpClientProperties) { + this.okHttpClient = okHttpClientFactory.createBuilder(httpClientProperties.isDisableSslValidation()).connectTimeout(httpClientProperties.getConnectionTimeout(),TimeUnit.SECONDS) + .followRedirects(httpClientProperties.isFollowRedirects()) + .build(); + return this.okHttpClient; + } + +} + diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/EnterpriseController.java b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/EnterpriseController.java new file mode 100644 index 0000000..65ecfc8 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/EnterpriseController.java @@ -0,0 +1,20 @@ +package com.yuanchu.limslaboratory.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@RestController +@RequestMapping("/enterprise") +public class EnterpriseController { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleController.java b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleController.java new file mode 100644 index 0000000..0191900 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleController.java @@ -0,0 +1,20 @@ +package com.yuanchu.limslaboratory.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@RestController +@RequestMapping("/role") +public class RoleController { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java new file mode 100644 index 0000000..9efad92 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java @@ -0,0 +1,147 @@ +package com.yuanchu.limslaboratory.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.clients.UserLoginUtils; +import com.yuanchu.limslaboratory.pojo.Enterprise; +import com.yuanchu.limslaboratory.pojo.User; +import com.yuanchu.limslaboratory.service.UserService; +import com.yuanchu.limslaboratory.shiro.realm.ShiroRealm; +import com.yuanchu.limslaboratory.utils.JackSonUtil; +import com.yuanchu.limslaboratory.utils.MyUtil; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.utils.SpringUtil; +import com.yuanchu.limslaboratory.vo.NewPersonnelVo; +import com.yuanchu.limslaboratory.vo.PagePersonnelVo; +import com.yuanchu.limslaboratory.vo.Result; +import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo; +import io.swagger.annotations.*; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@RestController +@RequestMapping("/user") +@Api(tags = "鐢ㄦ埛妯″潡") +public class UserController { + + @Autowired + private UserService userService; + + @ApiOperation("鐢ㄦ埛鐧诲綍") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "account", value = "璐﹀彿", dataTypeClass = String.class, required = true), + @ApiImplicitParam(name = "password", value = "瀵嗙爜", dataTypeClass = String.class, required = true) + }) + @PostMapping("/login") + public Result<?> userLogin(String account, String password){ + boolean loginSuccess = false; + Subject subject = SecurityUtils.getSubject(); + if (!subject.isAuthenticated()) { + UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(account, password); + try { + subject.login(usernamePasswordToken); + loginSuccess = true; + } catch (UnknownAccountException e) { + return Result.fail(202, "娌℃湁鎵惧埌璇ヨ处鍙凤紝璇锋鏌ヨ緭鍏ワ紒"); + } catch (IncorrectCredentialsException e) { + return Result.fail(202, "瀵嗙爜涓嶅尮閰嶏紝璇锋鏌ヨ緭鍏ワ紒"); + } + } + if (loginSuccess) { + // 鑾峰彇shiroRealm涓殑鏁版嵁 + ShiroRealm bean = SpringUtil.getBean(ShiroRealm.class); + User user = bean.user; + user.setPassword(null); + UserLoginUtils bean1 = SpringUtil.getBean(UserLoginUtils.class); + return bean1.LoginExamine(user); + }else { + return Result.fail("鐧诲綍澶辫触"); + } + } + + @ApiOperation("鐧诲綍-->鑾峰彇鐢ㄦ埛淇℃伅") + @GetMapping("/info") + public Result<?> getUserInfo(@RequestHeader("X-Token") String token){ + //鏍规嵁token鑾峰彇鐢ㄦ埛淇℃伅 + Map<String,Object> data = userService.getUserInfo(token); + if (data != null){ + return Result.success(data); + } + return Result.fail(202,"鐢ㄦ埛鐧诲綍淇℃伅鏃犳晥锛岃閲嶆柊鐧诲綍"); + } + + @PostMapping("/getUserById") + @ApiOperation("鑾峰彇鎸囧畾鐢ㄦ埛id鐨勭敤鎴蜂俊鎭拰浼佷笟淇℃伅") + public Result<?> getUserById(@RequestHeader("X-Token") String token) throws Exception { + Object o = RedisUtil.get(token); + Map<String, Object> unmarshal = null; + if (!ObjectUtils.isEmpty(o)){ + unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(o), Map.class); + Map<String, String> map = userService.selectUserByUserId((Integer) unmarshal.get("id")); + return Result.success(map); + } + return Result.fail("Token閿欒锛�"); + } + + @PostMapping("/add_new_personnel") + @ApiOperation("瀹為獙瀹ょ鐞�-->浜哄憳绠$悊-->鏂板浜哄憳") + public Result<?> addNewPersonnel(@RequestHeader("X-Token") String token, @RequestBody NewPersonnelVo newPersonnelVo) throws Exception { + Object redisUserMessage = RedisUtil.get(token); + Map<String, Object> user = null; + Integer isAddSuccess = 0; + if (!ObjectUtils.isEmpty(redisUserMessage)) { + user = JackSonUtil.unmarshal(JackSonUtil.marshal(redisUserMessage), Map.class); + newPersonnelVo.setPassword("123456"); + isAddSuccess = userService.addNewPersonnel(newPersonnelVo, user.get("enterpriseId").toString()); + } + + if (isAddSuccess == 1){ + return Result.success("娣诲姞銆�" + newPersonnelVo.getName() + "銆戞垚鍔燂紝榛樿瀵嗙爜涓猴細" + newPersonnelVo.getPassword()); + } + return Result.fail("娣诲姞澶辫触锛�"); + } + + @PutMapping("/update_new_personnel") + @ApiOperation("瀹為獙瀹ょ鐞�-->浜哄憳绠$悊-->缂栬緫鎿嶄綔") + public Result<?> updateNewPersonnel(@RequestBody UpdatePersonnelVo updatePersonnelVo) { + Integer isUpdateSuccess = userService.updateNewPersonnel(updatePersonnelVo); + if (isUpdateSuccess == 1){ + return Result.success("鏇存柊銆�" + updatePersonnelVo.getName() + "銆戞垚鍔�"); + } + return Result.fail("鏇存柊銆�" + updatePersonnelVo.getName() + "銆戝け璐�"); + } + + @GetMapping("/list_new_personnel") + @ApiOperation("瀹為獙瀹ょ鐞�-->浜哄憳绠$悊-->鍒嗛〉鏌ヨ") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true), + @ApiImplicitParam(name = "name", value = "浜哄憳鍚嶇О", dataTypeClass = String.class) + }) + public Result<Map<String, Object>> getNewPersonnelPage(Integer pageNo, Integer pageSize, String name) { + IPage<PagePersonnelVo> PageList = userService.getNewPersonnelPage(name, new Page<Objects>(pageNo, pageSize)); + Map<String, Object> map = new HashMap<>(); + map.put("row", PageList.getRecords()); + map.put("total", PageList.getTotal()); + return Result.success(map); + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/EnterpriseMapper.java b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/EnterpriseMapper.java new file mode 100644 index 0000000..9b927b0 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/EnterpriseMapper.java @@ -0,0 +1,16 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.yuanchu.limslaboratory.pojo.Enterprise; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +public interface EnterpriseMapper extends BaseMapper<Enterprise> { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleMapper.java b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleMapper.java new file mode 100644 index 0000000..764ad21 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleMapper.java @@ -0,0 +1,16 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.yuanchu.limslaboratory.pojo.Role; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +public interface RoleMapper extends BaseMapper<Role> { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java new file mode 100644 index 0000000..232f21d --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java @@ -0,0 +1,30 @@ +package com.yuanchu.limslaboratory.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.User; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yuanchu.limslaboratory.vo.PagePersonnelVo; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +public interface UserMapper extends BaseMapper<User> { + Map<String, String> selectUserByUserId(int userId); + + IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page); + + List<Map> selectUser(); +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java new file mode 100644 index 0000000..3248894 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java @@ -0,0 +1,67 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Enterprise瀵硅薄", description="") +public class Enterprise implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "浼佷笟缂栧彿") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "浼佷笟鍚嶅瓧") + private String name; + + @ApiModelProperty(value = "浼佷笟绠�绉�") + private String byname; + + @ApiModelProperty(value = "鑱旂郴浜哄悕瀛�") + private String linkName; + + @ApiModelProperty(value = "鑱旂郴浜虹數璇�") + private String linkPhone; + + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8") + private Date updateTime; + + @Version + @ApiModelProperty(value = "閿�") + private Integer version; + + + public Enterprise(String name, String byname, String linkName, String linkPhone) { + this.name = name; + this.byname = byname; + this.linkName = linkName; + this.linkPhone = linkPhone; + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java new file mode 100644 index 0000000..c568112 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java @@ -0,0 +1,57 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Role瀵硅薄", description="") +public class Role implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "瑙掕壊id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "瑙掕壊鍚�") + private String name; + + @ApiModelProperty(value = "0锛氭棤鏉冮檺锛�1锛氭湁鏉冮檺") + private Integer power; + + @TableLogic(value = "1", delval = "0") + @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0") + private Integer state; + + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8") + private Date updateTime; + + @Version + @ApiModelProperty(value = "涔愯閿�") + private Integer version; + + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java new file mode 100644 index 0000000..14cea5b --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java @@ -0,0 +1,89 @@ +package com.yuanchu.limslaboratory.pojo; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.sun.jmx.snmp.Timestamp; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@Accessors(chain = true) +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="User瀵硅薄", description="") +public class User implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "鐢ㄦ埛id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "璐﹀彿") + private String account; + + @ApiModelProperty(value = "瀵嗙爜") + private String password; + + @ApiModelProperty(value = "濮撳悕") + private String name; + + @ApiModelProperty(value = "鎵嬫満鍙�") + private String phone; + + @ApiModelProperty(value = "閭") + private String email; + + @ApiModelProperty(value = "骞撮緞") + private Integer age; + + @ApiModelProperty(value = "涓�х鍚�") + private String info; + + @ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0") + private Integer jobState; + + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @Version + private Integer version; + + @ApiModelProperty(value = "鍏宠仈 瑙掕壊id") + private Integer roleId; + + @ApiModelProperty(value = "鍏宠仈 浼佷笟id") + private Integer enterpriseId; + + public User(String account, String name, String phone, String email, String info) { + this.account = account; + this.name = name; + this.phone = phone; + this.email = email; + this.info = info; + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/EnterpriseService.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/EnterpriseService.java new file mode 100644 index 0000000..677779d --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/EnterpriseService.java @@ -0,0 +1,16 @@ +package com.yuanchu.limslaboratory.service; + +import com.yuanchu.limslaboratory.pojo.Enterprise; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +public interface EnterpriseService extends IService<Enterprise> { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/RoleService.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/RoleService.java new file mode 100644 index 0000000..f301dfb --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/RoleService.java @@ -0,0 +1,16 @@ +package com.yuanchu.limslaboratory.service; + +import com.yuanchu.limslaboratory.pojo.Role; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +public interface RoleService extends IService<Role> { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java new file mode 100644 index 0000000..7128e26 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java @@ -0,0 +1,84 @@ +package com.yuanchu.limslaboratory.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.User; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.limslaboratory.vo.NewPersonnelVo; +import com.yuanchu.limslaboratory.vo.PagePersonnelVo; +import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +public interface UserService extends IService<User> { + /** + * 閫氳繃鐢ㄦ埛id鑾峰彇鐢ㄦ埛淇℃伅 + * @param userId + * @return + */ + Map<String, String> selectUserByUserId(int userId); + + User AccordingUsernameSelectAll(String account); + + /** + * 娣诲姞鐢ㄦ埛 + * @param newPersonnelVo + * @param enterpriseId + * @return + */ + Integer addNewPersonnel(NewPersonnelVo newPersonnelVo, String enterpriseId); + + /** + * 鏇存柊鐢ㄦ埛鍩烘湰淇℃伅 + * @param updatePersonnelVo + * @return + */ + Integer updateNewPersonnel(UpdatePersonnelVo updatePersonnelVo); + + /** + * 鍒嗛〉鏌ヨ鎵�鏈夌敤鎴蜂俊鎭� + * @param name + * @param page + * @return + */ + IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page); + + /** + * 鐧诲綍鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅涓庣郴缁熻秴鏃舵椂闂存彁閱� + * @param token + * @return + */ + Map<String, Object> getUserInfo(String token); + + /** + * 鏍规嵁Id鏌ヨ鏄惁瀛樺湪璇ョ敤鎴� + */ + Boolean userIsNull(Integer Id); + + /** + * 鏍规嵁鐢ㄦ埛Id鏌ヨ鐢ㄦ埛鍚嶇О + * @param userId 鐢ㄦ埛Id + * @return + */ + String selectByUserId(Integer userId); + + /** + * 鏌ヨ鎵�鏈夌敤鎴蜂俊鎭� + * @return + */ + List<Map> selectUser(); + + /** + * 鑾峰彇鎵�鏈夌敤鎴风殑鍚嶇О涓嶪d + */ + List<Map<String, Object>> getUserNameAndId(); +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EnterpriseServiceImpl.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EnterpriseServiceImpl.java new file mode 100644 index 0000000..227ae2f --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EnterpriseServiceImpl.java @@ -0,0 +1,20 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.yuanchu.limslaboratory.pojo.Enterprise; +import com.yuanchu.limslaboratory.mapper.EnterpriseMapper; +import com.yuanchu.limslaboratory.service.EnterpriseService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@Service +public class EnterpriseServiceImpl extends ServiceImpl<EnterpriseMapper, Enterprise> implements EnterpriseService { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleServiceImpl.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..ba4584e --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleServiceImpl.java @@ -0,0 +1,20 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.yuanchu.limslaboratory.pojo.Role; +import com.yuanchu.limslaboratory.mapper.RoleMapper; +import com.yuanchu.limslaboratory.service.RoleService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@Service +public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService { + +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..744ad7e --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java @@ -0,0 +1,135 @@ +package com.yuanchu.limslaboratory.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.limslaboratory.pojo.User; +import com.yuanchu.limslaboratory.mapper.UserMapper; +import com.yuanchu.limslaboratory.service.UserService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import com.yuanchu.limslaboratory.vo.NewPersonnelVo; +import com.yuanchu.limslaboratory.vo.PagePersonnelVo; +import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2023-07-07 + */ +@Service +public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { + + @Resource + private UserMapper userMapper; + + @Override + public Map<String, Object> getUserInfo(String token) { + //鏍规嵁token鑾峰彇鐢ㄦ埛淇℃伅 + Object obj = RedisUtil.get(token); + if (!ObjectUtils.isEmpty(obj)){ + Map loginUser = (Map) obj; + Map map = (Map)loginUser.get("data"); + Object residualTime = map.get("residualTime"); + int i = Integer.parseInt(residualTime.toString()); + String remind = null; + if (i <= 30) { + remind = "鎮ㄦ墍浣跨敤鐨勭郴缁熷嵆灏嗚繃鏈燂紒璇疯仈绯荤鐞嗗憳锛�"; + } + Map<String, Object> data = new HashMap<>(); + data.put("name",loginUser.get("name")); + data.put("remind", remind); + return data; + } + return null; + } + + @Override + public Boolean userIsNull(Integer Id) { + LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>(); + userLambdaQueryWrapper.eq(User::getId, Id); + userLambdaQueryWrapper.select(User::getName); + User user = userMapper.selectOne(userLambdaQueryWrapper); + return !ObjectUtils.isEmpty(user); + } + + @Override + public String selectByUserId(Integer userId) { + LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(User::getId, userId); + wrapper.select(User::getName); + User user = userMapper.selectOne(wrapper); + return user.getName(); + } + + @Override + public List<Map> selectUser() { + return userMapper.selectUser(); + } + + @Override + public List<Map<String, Object>> getUserNameAndId() { + LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); + wrapper.select(User::getId, User::getName); + return userMapper.selectMaps(wrapper); + } + + @Override + public Map<String, String> selectUserByUserId(int userId) { + return userMapper.selectUserByUserId(userId); + } + + @Override + public User AccordingUsernameSelectAll(String account) { + LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(User::getAccount, account); + wrapper.select(User::getPassword, User::getId, User::getName, User::getAccount, User::getEnterpriseId); + return userMapper.selectOne(wrapper); + } + + @Override + public Integer addNewPersonnel(NewPersonnelVo newPersonnelVo, String enterpriseId) { + User user = new User() + .setName(newPersonnelVo.getName()) + .setAccount(newPersonnelVo.getAccount()) + .setAge(newPersonnelVo.getAge()) + .setPhone(newPersonnelVo.getPhone()) + .setEmail(newPersonnelVo.getEmail()) + .setRoleId(newPersonnelVo.getRole_id()) + .setPassword(newPersonnelVo.getPassword()) + .setEnterpriseId(Integer.valueOf(enterpriseId)); + return userMapper.insert(user); + } + + @Override + public Integer updateNewPersonnel(UpdatePersonnelVo updatePersonnelVo) { + User user = new User() + .setName(updatePersonnelVo.getName()) + .setAccount(updatePersonnelVo.getAccount()) + .setAge(updatePersonnelVo.getAge()) + .setPhone(updatePersonnelVo.getPhone()) + .setEmail(updatePersonnelVo.getEmail()) + .setRoleId(updatePersonnelVo.getRole_id()) + .setPassword(updatePersonnelVo.getPassword()) + .setJobState(updatePersonnelVo.getJobState()); + LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(User::getId, updatePersonnelVo.getId()); + return userMapper.update(user, updateWrapper); + } + + @Override + public IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page) { + return userMapper.getNewPersonnelPage(name, page); + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/JwtToken.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/JwtToken.java new file mode 100644 index 0000000..e4872db --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/JwtToken.java @@ -0,0 +1,28 @@ +package com.yuanchu.limslaboratory.shiro; + +import com.yuanchu.limslaboratory.shiro.utils.JwtUtils; +import org.apache.shiro.authc.AuthenticationToken; + +public class JwtToken implements AuthenticationToken { + private static final long serialVersionUID = 1L; + + // 鍔犲瘑鍚庣殑 JWT token涓� + private String token; + + private String account; + + public JwtToken(String token) { + this.token = token; + this.account = JwtUtils.getClaimFiled(token, "account"); + } + + @Override + public Object getPrincipal() { + return this.account; + } + + @Override + public Object getCredentials() { + return token; + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/MultiRealmAuthenticator.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/MultiRealmAuthenticator.java new file mode 100644 index 0000000..4110709 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/MultiRealmAuthenticator.java @@ -0,0 +1,61 @@ +package com.yuanchu.limslaboratory.shiro; + +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.pam.AuthenticationStrategy; +import org.apache.shiro.authc.pam.ModularRealmAuthenticator; +import org.apache.shiro.realm.Realm; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Collection; + +public class MultiRealmAuthenticator extends ModularRealmAuthenticator { + private static final Logger log = LoggerFactory.getLogger(MultiRealmAuthenticator.class); + + @Override + protected AuthenticationInfo doMultiRealmAuthentication(Collection<Realm> realms, AuthenticationToken token) + throws AuthenticationException { + AuthenticationStrategy strategy = getAuthenticationStrategy(); + + AuthenticationInfo aggregate = strategy.beforeAllAttempts(realms, token); + + if (log.isTraceEnabled()) { + log.trace("Iterating through {} realms for PAM authentication", realms.size()); + } + AuthenticationException authenticationException = null; + for (Realm realm : realms) { + + aggregate = strategy.beforeAttempt(realm, token, aggregate); + + if (realm.supports(token)) { + + log.trace("Attempting to authenticate token [{}] using realm [{}]", token, realm); + + AuthenticationInfo info = null; + try { + info = realm.getAuthenticationInfo(token); + } catch (AuthenticationException e) { + authenticationException = e; + if (log.isDebugEnabled()) { + String msg = "Realm [" + realm + + "] threw an exception during a multi-realm authentication attempt:"; + log.debug(msg, e); + } + } + + aggregate = strategy.afterAttempt(realm, token, info, aggregate, authenticationException); + + } else { + log.debug("Realm [{}] does not support token {}. Skipping realm.", realm, token); + } + } + if (authenticationException != null) { + throw authenticationException; + } + aggregate = strategy.afterAllAttempts(token, aggregate); + + return aggregate; + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java new file mode 100644 index 0000000..3109653 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java @@ -0,0 +1,179 @@ +package com.yuanchu.limslaboratory.shiro.config; + +import com.yuanchu.limslaboratory.shiro.filter.JwtFilter; +import com.yuanchu.limslaboratory.shiro.MultiRealmAuthenticator; +import com.yuanchu.limslaboratory.shiro.realm.JwtRealm; +import com.yuanchu.limslaboratory.shiro.realm.ShiroRealm; +import com.yuanchu.limslaboratory.shiro.utils.JwtCredentialsMatcher; +import org.apache.shiro.authc.credential.CredentialsMatcher; +import org.apache.shiro.authc.credential.HashedCredentialsMatcher; +import org.apache.shiro.authc.pam.AuthenticationStrategy; +import org.apache.shiro.authc.pam.FirstSuccessfulStrategy; +import org.apache.shiro.authc.pam.ModularRealmAuthenticator; +import org.apache.shiro.authz.Authorizer; +import org.apache.shiro.authz.ModularRealmAuthorizer; +import org.apache.shiro.crypto.hash.Md5Hash; +import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; +import org.apache.shiro.mgt.DefaultSubjectDAO; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.mgt.SessionStorageEvaluator; +import org.apache.shiro.realm.Realm; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.servlet.Filter; +import java.util.*; + +@Configuration +public class ShiroConfig { + + /** + * 涓嶅悜 Spring瀹瑰櫒涓敞鍐� JwtFilter Bean锛岄槻姝� Spring 灏� JwtFilter 娉ㄥ唽涓哄叏灞�杩囨护鍣� + * 鍏ㄥ眬杩囨护鍣ㄤ細瀵规墍鏈夎姹傝繘琛屾嫤鎴紝鑰屾湰渚嬩腑鍙渶瑕佹嫤鎴櫎 /login 鍜� /logout 澶栫殑璇锋眰 + * 鍙︿竴绉嶇畝鍗曞仛娉曟槸锛氱洿鎺ュ幓鎺� jwtFilter()涓婄殑 @Bean 娉ㄨВ + */ + @Bean + public FilterRegistrationBean<Filter> registration(JwtFilter filter) { + FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<Filter>(filter); + registration.setEnabled(false); + return registration; + } + + //ShiroFilter杩囨护鎵�鏈夎姹� + @Bean + public ShiroFilterFactoryBean getShiroFilterFactoryBean(SecurityManager securityManager) { + ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); + //缁橲hiroFilter閰嶇疆瀹夊叏绠$悊鍣� + shiroFilterFactoryBean.setSecurityManager(securityManager); + + // 娣诲姞 jwt 涓撶敤杩囨护鍣紝鎷︽埅闄� /login 鍜� /logout 澶栫殑璇锋眰 + Map<String, Filter> filterMap = new LinkedHashMap<>(); + filterMap.put("jwtFilter", new JwtFilter()); + shiroFilterFactoryBean.setFilters(filterMap); + + //閰嶇疆绯荤粺鍏叡璧勬簮 + Map<String, String> map = new HashMap<String, String>(); + + // swagger鏀捐 + map.put("/doc.html", "anon"); + map.put("/webjars/**/**", "anon"); + map.put("/swagger-resources", "anon"); + map.put("/api-docs", "anon"); + map.put("/v3/**", "anon"); + + map.put("/link-basic/*", "anon"); + map.put("/user/login/**","anon");//琛ㄧず杩欎釜涓哄叕鍏辫祫婧� 涓�瀹氭槸鍦ㄥ彈闄愯祫婧愪笂闈� +// map.put("/**","jwtFilter");//琛ㄧず杩欎釜璧勬簮闇�瑕佽璇佸拰鎺堟潈 + + shiroFilterFactoryBean.setFilterChainDefinitionMap(map); + + return shiroFilterFactoryBean; + } + + /** + * 閰嶇疆 ModularRealmAuthenticator + */ + @Bean + public ModularRealmAuthenticator authenticator() { + ModularRealmAuthenticator authenticator = new MultiRealmAuthenticator(); + // 璁剧疆澶� Realm鐨勮璇佺瓥鐣ワ紝榛樿 AtLeastOneSuccessfulStrategy + AuthenticationStrategy strategy = new FirstSuccessfulStrategy(); + authenticator.setAuthenticationStrategy(strategy); + return authenticator; + } + + + /** + * 绂佺敤session, 涓嶄繚瀛樼敤鎴风櫥褰曠姸鎬併�備繚璇佹瘡娆¤姹傞兘閲嶆柊璁よ瘉 + */ + @Bean + protected SessionStorageEvaluator sessionStorageEvaluator() { + DefaultSessionStorageEvaluator sessionStorageEvaluator = new DefaultSessionStorageEvaluator(); + sessionStorageEvaluator.setSessionStorageEnabled(false); + return sessionStorageEvaluator; + } + + /** + * 閰嶇疆 SecurityManager锛氭潈闄愮鐞嗗櫒 + */ + @Bean + public DefaultWebSecurityManager securityManager() { + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + + // 1.韬唤楠岃瘉鍣� + securityManager.setAuthenticator(authenticator()); + + // 2.绠$悊Realm + List<Realm> realms = new ArrayList<Realm>(16); + realms.add(JwtRealm()); + realms.add(shiroRealm()); + securityManager.setRealms(realms); // 閰嶇疆澶氫釜realm + + // 3.鍏抽棴shiro鑷甫鐨剆ession + DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO(); + subjectDAO.setSessionStorageEvaluator(sessionStorageEvaluator()); + securityManager.setSubjectDAO(subjectDAO); + + return securityManager; + } + + // 鍒涘缓鑷畾涔塕ealm + @Bean + public Realm shiroRealm() { + ShiroRealm realm = new ShiroRealm(); +// HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher(); +//// //璁剧疆浣跨敤MD5鍔犲瘑绠楁硶 +//// credentialsMatcher.setHashAlgorithmName(Md5Hash.ALGORITHM_NAME); +//// //鏁e垪娆℃暟 +//// credentialsMatcher.setHashIterations(1024); +// realm.setCredentialsMatcher(credentialsMatcher); + return realm; + } + + @Bean + public Realm JwtRealm(){ + JwtRealm jwtRealm = new JwtRealm(); + // 璁剧疆鍔犲瘑绠楁硶 + CredentialsMatcher credentialsMatcher = new JwtCredentialsMatcher(); + // 璁剧疆鍔犲瘑娆℃暟 + jwtRealm.setCredentialsMatcher(credentialsMatcher); + return jwtRealm; + } + + + // 浠ヤ笅涓変腑bean閫氱敤锛屽浐瀹氶厤缃� + + /** + * 浜ょ敱 Spring 鏉ヨ嚜鍔ㄥ湴绠$悊 Shiro-Bean 鐨勭敓鍛藉懆鏈� + */ + @Bean + public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + } + + /** + * 涓� Spring-Bean 寮�鍚 Shiro 娉ㄨВ鐨勬敮鎸� + */ + @Bean + public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { + AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); + authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); + return authorizationAttributeSourceAdvisor; + } + + /** + * 寮�鍚疉OP鏂规硶绾ф潈闄愭鏌� + */ + @Bean + public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); + advisorAutoProxyCreator.setProxyTargetClass(true); + return advisorAutoProxyCreator; + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/filter/JwtFilter.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/filter/JwtFilter.java new file mode 100644 index 0000000..a03022e --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/filter/JwtFilter.java @@ -0,0 +1,170 @@ +package com.yuanchu.limslaboratory.shiro.filter; + +import com.yuanchu.limslaboratory.shiro.JwtToken; +import com.yuanchu.limslaboratory.shiro.utils.JwtUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; +import org.apache.shiro.web.util.WebUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +@Component +public class JwtFilter extends BasicHttpAuthenticationFilter { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + public Integer code; + public String message; + + /** + * 鍓嶇疆澶勭悊 + */ + @Override + protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = WebUtils.toHttp(request); + HttpServletResponse httpServletResponse = WebUtils.toHttp(response); + // 璺ㄥ煙鏃朵細棣栧厛鍙戦�佷竴涓猳ption璇锋眰锛岃繖閲屾垜浠粰option璇锋眰鐩存帴杩斿洖姝e父鐘舵�� + if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) { + httpServletResponse.setStatus(HttpStatus.OK.value()); + return false; + } + return super.preHandle(request, response); + } + + /** + * 鍚庣疆澶勭悊 + */ + @Override + protected void postHandle(ServletRequest request, ServletResponse response) { + // 娣诲姞璺ㄥ煙鏀寔 + this.fillCorsHeader(WebUtils.toHttp(request), WebUtils.toHttp(response)); + } + + /** + * 杩囨护鍣ㄦ嫤鎴姹傜殑鍏ュ彛鏂规硶 + * 杩斿洖 true 鍒欏厑璁歌闂� + * 杩斿洖false 鍒欑姝㈣闂紝浼氳繘鍏� onAccessDenied() + */ + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + // 濡傛灉token涓虹┖涓嶈閫氳繃 + String header = ((HttpServletRequest) request).getHeader(JwtUtils.AUTH_HEADER); + if (ObjectUtils.isEmpty(header)){ + code = 503; + message = "STS token瑙g爜杩囩▼涓紝鐢变簬鍐呴儴璋冪敤澶辫触瀵艰嚧瑙g爜澶辫触锛岃绋嶅悗鍐嶈瘯銆�"; + return false; + } + boolean allowed = false; + try { + // 妫�娴婬eader閲岀殑 JWT token鍐呭鏄惁姝g‘锛屽皾璇曚娇鐢� token杩涜鐧诲綍 + allowed = executeLogin(request, response); + } catch (IllegalStateException e) { // not found any token + log.error("Not found any token"); + } catch (Exception e) { + log.error("Error occurs when login", e); + } + return allowed || super.isPermissive(mappedValue); + } + + + /** + * 韬唤楠岃瘉,妫�鏌� JWT token 鏄惁鍚堟硶 + */ + @Override + protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception { + AuthenticationToken token = createToken(request, response); + if (token == null) { + String msg = "createToken method implementation returned null. A valid non-null AuthenticationToken " + + "must be created in order to execute a login attempt."; + throw new IllegalStateException(msg); + } + + try { + Subject subject = getSubject(request, response); + subject.login(token); // 浜ょ粰 Shiro 鍘昏繘琛岀櫥褰曢獙璇� + return onLoginSuccess(token, subject, request, response); + } catch (AuthenticationException e) { + return onLoginFailure(token, e, request, response); + } + } + + /** + * 浠� Header 閲屾彁鍙� JWT token + */ + @Override + protected AuthenticationToken createToken(ServletRequest servletRequest, ServletResponse servletResponse) { + HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; + String authorization = httpServletRequest.getHeader(JwtUtils.AUTH_HEADER); + JwtToken token = new JwtToken(authorization); + return token; + } + + /** + * isAccessAllowed()鏂规硶杩斿洖false锛屼細杩涘叆璇ユ柟娉曪紝琛ㄧず鎷掔粷璁块棶 + */ + @Override + protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception { + HttpServletResponse httpResponse = WebUtils.toHttp(servletResponse); + httpResponse.setCharacterEncoding("UTF-8"); + httpResponse.setContentType("application/json;charset=UTF-8"); + httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); + PrintWriter writer = httpResponse.getWriter(); + writer.write("{\"errCode\": "+ code +", \"msg\": \"" + message +"\"}"); + fillCorsHeader(WebUtils.toHttp(servletRequest), httpResponse); + return false; + } + + /** + * Shiro 鍒╃敤 JWT token 鐧诲綍鎴愬姛锛屼細杩涘叆璇ユ柟娉� + */ + @Override + protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, + ServletResponse response) { + HttpServletResponse httpResponse = WebUtils.toHttp(response); + String newToken = null; + if (token instanceof JwtToken) { + newToken = JwtUtils.refreshTokenExpired(token.getCredentials().toString(), JwtUtils.SECRET); + } + if (newToken != null) + httpResponse.setHeader(JwtUtils.AUTH_HEADER, newToken); + return true; + } + + /** + * Shiro 鍒╃敤 JWT token 鐧诲綍澶辫触锛屼細杩涘叆璇ユ柟娉� + */ + @Override + protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, + ServletResponse response) { + // 姝ゅ鐩存帴杩斿洖 false 锛屼氦缁欏悗闈㈢殑 onAccessDenied()鏂规硶杩涜澶勭悊 + String error = e.getClass().toString().split("\\.")[4]; + if (error.equals("IncorrectCredentialsException")) { + code = 10010; + } else { + code = 401; + } + message = e.getMessage(); + return false; + } + + /** + * 娣诲姞璺ㄥ煙鏀寔 + */ + protected void fillCorsHeader(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { + httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin")); + httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,HEAD"); + httpServletResponse.setHeader("Access-Control-Allow-Headers", + httpServletRequest.getHeader("Access-Control-Request-Headers")); + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java new file mode 100644 index 0000000..d75fd50 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java @@ -0,0 +1,48 @@ +package com.yuanchu.limslaboratory.shiro.realm; + +import com.yuanchu.limslaboratory.pojo.User; +import com.yuanchu.limslaboratory.shiro.JwtToken; +import com.yuanchu.limslaboratory.utils.RedisUtil; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; + +public class JwtRealm extends AuthorizingRealm { + /** + * 闄愬畾杩欎釜 Realm 鍙鐞嗘垜浠嚜瀹氫箟鐨� JwtToken + */ + @Override + public boolean supports(AuthenticationToken token) { + return token instanceof JwtToken; + } + + /** + * 姝ゅ鐨� SimpleAuthenticationInfo 鍙繑鍥炰换鎰忓�硷紝瀵嗙爜鏍¢獙鏃朵笉浼氱敤鍒板畠 + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { + JwtToken jwtToken = (JwtToken) authcToken; + if (jwtToken.getPrincipal() == null) { + throw new AccountException("Token鍙傛暟寮傚父锛�"); + } + // 褰撳墠鐢ㄦ埛 + String account = jwtToken.getPrincipal().toString(); + // 褰撳墠鐢ㄦ埛鐨則oken + String credentials = (String)jwtToken.getCredentials(); + User user = (User) RedisUtil.get(credentials); + // 鐢ㄦ埛涓嶅瓨鍦� + if (user == null) { + throw new UnknownAccountException("鐢ㄦ埛涓嶅瓨鍦紒"); + } + SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, account, getName()); + return info; + } + + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); + return info; + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java new file mode 100644 index 0000000..24b24b1 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java @@ -0,0 +1,41 @@ +package com.yuanchu.limslaboratory.shiro.realm; + +import com.yuanchu.limslaboratory.pojo.User; +import com.yuanchu.limslaboratory.service.UserService; +import com.yuanchu.limslaboratory.utils.SpringUtil; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.springframework.util.ObjectUtils; + +public class ShiroRealm extends AuthorizingRealm { + + public User user; + + /** + * 闄愬畾杩欎釜 Realm 鍙鐞� UsernamePasswordToken + */ + @Override + public boolean supports(AuthenticationToken token) { + return token instanceof UsernamePasswordToken; + } + + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return null; + } + + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) { + String principal = (String) authenticationToken.getPrincipal(); + //鑾峰彇UserService瀵硅薄 + UserService userService = SpringUtil.getBean(UserService.class); + user = userService.AccordingUsernameSelectAll(principal); + if (!ObjectUtils.isEmpty(user)) { + return new SimpleAuthenticationInfo(user.getAccount(), user.getPassword(), this.getName()); + } else { + throw new UnknownAccountException(); + } + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtCredentialsMatcher.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtCredentialsMatcher.java new file mode 100644 index 0000000..a04c5b6 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtCredentialsMatcher.java @@ -0,0 +1,34 @@ +package com.yuanchu.limslaboratory.shiro.utils; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTVerificationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.credential.CredentialsMatcher; +import org.springframework.stereotype.Component; + +@Component +public class JwtCredentialsMatcher implements CredentialsMatcher { + /** + * JwtCredentialsMatcher鍙渶楠岃瘉JwtToken鍐呭鏄惁鍚堟硶 + */ + @Override + public boolean doCredentialsMatch(AuthenticationToken authenticationToken, AuthenticationInfo authenticationInfo) { + + String token = authenticationToken.getCredentials().toString(); + String account = authenticationToken.getPrincipal().toString(); + try { + Algorithm algorithm = Algorithm.HMAC256(JwtUtils.getSecret()); + JWTVerifier verifier = JWT.require(algorithm).withClaim("account", account).build(); + verifier.verify(token); + return true; + } catch (JWTVerificationException e) { + + } catch (Exception e){ + e.printStackTrace(); + } + return false; + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java new file mode 100644 index 0000000..68ae14f --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java @@ -0,0 +1,159 @@ +package com.yuanchu.limslaboratory.shiro.utils; + + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTCreator; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTCreationException; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.exceptions.JWTVerificationException; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import javax.annotation.PostConstruct; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Component +public class JwtUtils { + private static String staticSecret; + + @Value("${login.secret}") + private String secret; + + @PostConstruct + public void getApiToken() { + staticSecret = this.secret; + } + + public static String getSecret() { + // lockie.zou + return staticSecret; + } + + // 杩囨湡鏃堕棿 2 灏忔椂 + private static final long EXPIRE_TIME = 2 * 60 * 60 * 1000; + //鑷繁瀹氬埗瀵嗛挜 + public static final String SECRET = "J-(t]Poe9P"; + + //璇锋眰澶� + public static final String AUTH_HEADER = "X-Token"; // X-Authorization-With + + /** + * 楠岃瘉token鏄惁姝g‘ + * @param token + * @return + */ + public static boolean verify(String token){ + try{ + String account = getClaimFiled(token, "account"); + if (account == null){ + return false; + } + Algorithm algorithm = Algorithm.HMAC256(getSecret()); + JWTVerifier verifier = JWT.require(algorithm).withClaim("account",account).build(); + verifier.verify(token); + return true; + } catch (JWTVerificationException exception){ + return false; + } catch (Exception e){ + e.printStackTrace(); + return false; + } + } + + /** + * 鑾峰緱token涓殑鑷畾涔変俊鎭�,涓�鑸槸鑾峰彇token鐨剈sername锛屾棤闇�secret瑙e瘑涔熻兘鑾峰緱 + * @param token + * @param filed + * @return + */ + public static String getClaimFiled(String token, String filed){ + try{ + if (!ObjectUtils.isEmpty(token)){ + DecodedJWT jwt = JWT.decode(token); + return jwt.getClaim(filed).asString(); + } + return null; + } catch (JWTDecodeException e){ + return null; + } + } + + /** + * 鐢熸垚绛惧悕,鍑嗙‘鍦拌鏄敓鎴恡oken + * @return + */ + public static String sign(String account){ + try{ + Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); + Algorithm algorithm = Algorithm.HMAC256(SECRET); + //闄勫甫username,nickname淇℃伅 + return JWT.create() + .withClaim("account",account) + .withExpiresAt(date) + .sign(algorithm); + } catch (JWTCreationException e){ + e.printStackTrace(); + return null; + } catch (Exception e){ + e.printStackTrace(); + return null; + } + } + + /** + * 鑾峰彇token鐨勭鍙戞椂闂� + * @param token + * @return + */ + public static Date getIssueAt(String token){ + try{ + DecodedJWT jwt = JWT.decode(token); + return jwt.getIssuedAt(); + } catch (JWTDecodeException e){ + e.printStackTrace(); + return null; + } + } + + /** + * 楠岃瘉token鏄惁杩囨湡 + * @param token + * @return + */ + public static boolean isTokenExpired(String token){ + Date now = Calendar.getInstance().getTime(); + DecodedJWT jwt = JWT.decode(token); + return jwt.getExpiresAt().before(now); + } + + /** + * 鍒锋柊token鐨勬湁鏁堟湡 + * @param token + * @param secret + * @return + */ + public static String refreshTokenExpired(String token, String secret){ + DecodedJWT jwt = JWT.decode(token); //瑙f瀽token + Map<String, Claim> claims = jwt.getClaims(); //鑾峰彇token鐨勫弬鏁颁俊鎭� + + try{ + Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); + Algorithm algorithm = Algorithm.HMAC256(secret); + JWTCreator.Builder builder = JWT.create().withExpiresAt(date); + for(Map.Entry<String,Claim> entry : claims.entrySet()){ + builder.withClaim(entry.getKey(),entry.getValue().asString()); + } + return builder.sign(algorithm); + } catch (JWTCreationException e){ + e.printStackTrace(); + return null; + } + } +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java new file mode 100644 index 0000000..095138e --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java @@ -0,0 +1,34 @@ +package com.yuanchu.limslaboratory.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="NewPersonnelVo瀵硅薄", description="鐢ㄤ簬瀵硅鑹茬鐞嗙殑娣诲姞") +public class NewPersonnelVo { + + @ApiModelProperty(value = "濮撳悕", example = "灏忛粦", required = true) + private String name; + + @ApiModelProperty(value = "璐﹀彿", example = "45612345", required = true) + private String account; + + @ApiModelProperty(value = "0锛氭棤鏉冮檺锛�1锛氭湁鏉冮檺", example = "1", required = true) + private Integer role_id; + + @ApiModelProperty(value = "骞撮緞", example = "23") + private Integer age; + + @ApiModelProperty(value = "骞撮緞", example = "23", hidden = true) + private String password; + + @ApiModelProperty(value = "鎵嬫満鍙�", example = "12345678981") + private String phone; + + @ApiModelProperty(value = "閭", example = "12345678@qq.com") + private String email; +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java new file mode 100644 index 0000000..b5564c0 --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java @@ -0,0 +1,39 @@ +package com.yuanchu.limslaboratory.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="UpdatePersonnelVo瀵硅薄", description="鐢ㄤ簬瀵硅鑹茬鐞嗙殑鏇存柊") +public class PagePersonnelVo { + + @ApiModelProperty(value = "涓婚敭ID", example = "1", required = true) + private String id; + + @ApiModelProperty(value = "濮撳悕", example = "灏忛粦", required = true) + private String username; + + @ApiModelProperty(value = "瑙掕壊鏉冮檺", example = "灏忛粦", required = true) + private String roleName; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty(value = "骞撮緞", example = "23") + private Integer age; + + @ApiModelProperty(value = "鎵嬫満鍙�", example = "12345678981") + private String phone; + + @ApiModelProperty(value = "閭", example = "12345678@qq.com") + private String email; + + @ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0", example = "0") + private Integer jobState; +} diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java new file mode 100644 index 0000000..2c6c05a --- /dev/null +++ b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java @@ -0,0 +1,41 @@ +package com.yuanchu.limslaboratory.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="UpdatePersonnelVo瀵硅薄", description="鐢ㄤ簬瀵硅鑹茬鐞嗙殑鏇存柊") +public class UpdatePersonnelVo { + + @ApiModelProperty(value = "涓婚敭ID", example = "1", required = true) + private String id; + + @ApiModelProperty(value = "濮撳悕", example = "灏忛粦", required = true) + private String name; + + @ApiModelProperty(value = "璐﹀彿", example = "45612345", required = true) + private String account; + + @ApiModelProperty(value = "0锛氭棤鏉冮檺锛�1锛氭湁鏉冮檺", example = "1", required = true) + private Integer role_id; + + @ApiModelProperty(value = "骞撮緞", example = "23") + private Integer age; + + @ApiModelProperty(value = "鎵嬫満鍙�", example = "12345678981") + private String phone; + + @ApiModelProperty(value = "閭", example = "12345678@qq.com") + private String email; + + @ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0", example = "0") + private Integer jobState; + + @ApiModelProperty(value = "璐﹀彿瀵嗙爜", example = "654321") + private String password; + + +} diff --git a/user-server/src/main/resources/mapper/EnterpriseMapper.xml b/user-server/src/main/resources/mapper/EnterpriseMapper.xml new file mode 100644 index 0000000..4e3ed5f --- /dev/null +++ b/user-server/src/main/resources/mapper/EnterpriseMapper.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.yunachu.limslaboratory.mapper.EnterpriseMapper"> + +</mapper> diff --git a/user-server/src/main/resources/mapper/RoleMapper.xml b/user-server/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..ea9cf2d --- /dev/null +++ b/user-server/src/main/resources/mapper/RoleMapper.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.yuanchu.limslaboratory.mapper.RoleMapper"> + +</mapper> diff --git a/user-server/src/main/resources/mapper/UserMapper.xml b/user-server/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..54ecc0e --- /dev/null +++ b/user-server/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,44 @@ +<?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.yuanchu.limslaboratory.mapper.UserMapper"> + <select id="selectUserByUserId" parameterType="int" resultType="Map"> + SELECT u.account account, + u.name uname, + u.phone, + u.email, + u.info, + e.byname e_byname, + e.`name` e_name, + e.link_name e_link_name, + e.link_phone e_phone + FROM enterprise e, + `user` u + WHERE e.`id` = u.`enterprise_id` + AND u.id = #{userId} + </select> + + <resultMap id="PagePersonnelVoMap" type="com.yuanchu.limslaboratory.vo.PagePersonnelVo"> + <result property="id" column="id"/> + <result property="username" column="username"/> + <result property="roleName" column="roleName"/> + <result property="createTime" column="create_time"/> + <result property="age" column="age"/> + <result property="phone" column="phone"/> + <result property="email" column="email"/> + <result property="jobState" column="job_state"/> + </resultMap> + <select id="getNewPersonnelPage" resultMap="PagePersonnelVoMap"> + SELECT u.`id`, u.`name` username, r.`name` roleName, u.`create_time`, IFNULL(u.`age`, '---') age, + IFNULL(u.`phone`, '---') phone, IFNULL(u.`email`, '---') email, u.`job_state` + FROM `user` u, role r + WHERE u.`role_id` = r.`id` + <if test="name != null"> + AND u.name = #{name} + </if> + </select> + + <select id="selectUser" resultType="Map"> + select id, name + from lims_laboratory.user + </select> +</mapper> -- Gitblit v1.9.3