XiaoRuby
2023-07-13 27e9d7d2c7db63c5f12c83e069980213398e8337
LIMS管理系统框架-开发7-12-v1.0.0
已修改25个文件
已重命名3个文件
已添加23个文件
1465 ■■■■ 文件已修改
framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/pom.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SerialNumberController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/controller/StandardsController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SerialNumberMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/StandardsMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/SerialNumber.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Standards.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/service/SerialNumberService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/service/StandardsService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SerialNumberServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardsServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/java/com/yuanchu/limslaboratory/vo/ListSpecificationsInformation.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/resources/mapper/SerialNumberMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/resources/mapper/SpecificationsMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-library/src/main/resources/mapper/StandardsMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/pom.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/src/main/resources/application-dev.yml 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/src/main/resources/application.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/EnterpriseUserList.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/UserMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java
@@ -1,7 +1,9 @@
package com.yuanchu.limslaboratory.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -15,4 +17,15 @@
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
    /**
     * éœ€è¦é…ç½®æ‹¦æˆªå™¨ï¼Œä¸ç„¶åœ¨AddDevice中的total无法获取到
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java
@@ -35,9 +35,9 @@
        // ç”¨ApiInfoBuilder进行定制
        return new ApiInfoBuilder()
                // è®¾ç½®æ ‡é¢˜
                .title("江苏鵷雏网络科技有限公司管理系统")
                .title("LIMS管理系统")
                // æè¿°
                .description("江苏鵷雏网络科技有限公司管理系统")
                .description("LIMS管理系统")
                // ä½œè€…信息
                .contact(new Contact("Crunchy", null, null))
                // ç‰ˆæœ¬
framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java
@@ -50,115 +50,115 @@
    /** è¿è¡Œæ—¶å¼‚常 */
    @ExceptionHandler(RuntimeException.class)
    public Result<?> runtimeExceptionHandler(RuntimeException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("运行时异常");
    }
    /** ç±»åž‹è½¬æ¢å¼‚常 */
    @ExceptionHandler(ClassCastException.class)
    public Result<?> classCastExceptionHandler(ClassCastException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("类型转换异常");
    }
    /** æ–‡ä»¶æœªæ‰¾åˆ°å¼‚常 */
    @ExceptionHandler(FileNotFoundException.class)
    public Result<?> FileNotFoundException(FileNotFoundException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("文件未找到异常");
    }
    /** æ•°å­—格式异常 */
    @ExceptionHandler(NumberFormatException.class)
    public Result<?> NumberFormatException(NumberFormatException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("数字格式异常");
    }
    /** å®‰å…¨å¼‚常 */
    @ExceptionHandler(SecurityException.class)
    public Result<?> SecurityException(SecurityException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("安全异常");
    }
    /** ç±»åž‹ä¸å­˜åœ¨å¼‚常 */
    @ExceptionHandler(TypeNotPresentException.class)
    public Result<?> TypeNotPresentException(TypeNotPresentException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("类型不存在异常");
    }
    /** IO异常 */
    @ExceptionHandler(IOException.class)
    public Result<?> iOExceptionHandler(IOException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("IO异常");
    }
    /** æœªçŸ¥æ–¹æ³•异常 */
    @ExceptionHandler(NoSuchMethodException.class)
    public Result<?> noSuchMethodExceptionHandler(NoSuchMethodException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("未知方法异常");
    }
    /** æ•°ç»„越界异常 */
    @ExceptionHandler(IndexOutOfBoundsException.class)
    public Result<?> indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("数组越界异常");
    }
    /** sql语法错误异常 */
    @ExceptionHandler(BadSqlGrammarException.class)
    public Result<?> BadSqlGrammarException(BadSqlGrammarException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("sql语法错误异常");
    }
    /** æ— æ³•注入bean异常 */
    @ExceptionHandler(NoSuchBeanDefinitionException.class)
    public Result<?> NoSuchBeanDefinitionException(NoSuchBeanDefinitionException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("无法注入bean");
    }
    /** Http消息不可读异常 */
    @ExceptionHandler({HttpMessageNotReadableException.class})
    public Result<?> requestNotReadable(HttpMessageNotReadableException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("Http消息不可读");
    }
    /** 400错误 */
    @ExceptionHandler({TypeMismatchException.class})
    public Result<?> requestTypeMismatch(TypeMismatchException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("服务器异常");
    }
    /** 500错误 */
    @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
    public Result<?> server500(RuntimeException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("服务器异常");
    }
    /** æ ˆæº¢å‡º */
    @ExceptionHandler({StackOverflowError.class})
    public Result<?> requestStackOverflow(StackOverflowError e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("栈溢出异常");
    }
    /** é™¤æ•°ä¸èƒ½ä¸º0 */
    @ExceptionHandler({ArithmeticException.class})
    public Result<?> arithmeticException(ArithmeticException e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("除数不能为0异常");
    }
    /** å…¶ä»–错误 */
    @ExceptionHandler({Exception.class})
    public Result<?> exception(Exception e) {
        log.error(e.getMessage(), e.getCause());
        e.printStackTrace();
        return Result.fail("网络连接失败,请退出后再试");
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java
@@ -4,19 +4,19 @@
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // èµ·å§‹ç‰ˆæœ¬ 3.3.0(推荐使用)
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // èµ·å§‹ç‰ˆæœ¬ 3.3.0(推荐使用)
        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", LocalDateTime.class, LocalDateTime.now()); // èµ·å§‹ç‰ˆæœ¬ 3.3.0(推荐)
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // èµ·å§‹ç‰ˆæœ¬ 3.3.0(推荐)
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java
ÎļþÃû´Ó framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtils.java ÐÞ¸Ä
@@ -13,7 +13,7 @@
 */
@Slf4j
@Component
public class FileSaveUtils {
public class FileSaveUtil {
    // å–yml中的路径 + /
//    @Value("${file.path}")
@@ -27,7 +27,7 @@
     */
    public String StoreFile(byte[] content, String originalFilename) {
        // ç”Ÿæˆéšæœºåç§°ï¼šæ—¶é—´_随机6位数字
        String FileName = System.currentTimeMillis() + "_" + MyUtils.getNumber(6);
        String FileName = System.currentTimeMillis() + "_" + MyUtil.getNumber(6);
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        // åç§°æ‹¼æŽ¥
        String fileName = FileName + suffix;
@@ -54,7 +54,7 @@
             ByteArrayInputStream is = new ByteArrayInputStream(content)) {
             IOUtils.copy(is, os);
        } catch (IOException e) {
            MyUtils.PrintLog("存储文件异常:" + e);
            MyUtil.PrintLog("存储文件异常:" + e);
        }
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
@@ -94,6 +94,14 @@
        }
    }
    /**
     * å­—符串转对象
     * @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);
framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
ÎļþÃû´Ó framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtils.java ÐÞ¸Ä
@@ -7,7 +7,7 @@
import java.util.Random;
@Component
public class MyUtils<T> {
public class MyUtil<T> {
    /**
     * è‡ªå®šä¹‰è°ƒè¯•工具类
framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java
ÎļþÃû´Ó framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtils.java ÐÞ¸Ä
@@ -6,7 +6,7 @@
import org.springframework.stereotype.Component;
@Component
public class SpringUtils implements ApplicationContextAware {
public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext context;
    @Override
pom.xml
@@ -19,6 +19,7 @@
        <module>user-server</module>
        <module>sys</module>
        <module>framework</module>
        <module>standard-library</module>
    </modules>
    <properties>
standard-library/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
<?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-library</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>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>
standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SerialNumberController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.yuanchu.limslaboratory.controller;
import com.yuanchu.limslaboratory.pojo.SerialNumber;
import com.yuanchu.limslaboratory.service.SerialNumberService;
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.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Api(tags = "标准库-->型号操作")
@RestController
@RequestMapping("/serial-number")
public class SerialNumberController {
    @Autowired
    private SerialNumberService serialNumberService;
    @ApiOperation("标准库-->添加型号")
    @PostMapping("/add")
    public Result<?> addSerialNumberInformation(@RequestHeader("X-Token") String token,@RequestBody SerialNumber serialNumber) throws Exception {
        Object object = RedisUtil.get(token);
        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
        serialNumber.setUserId((Integer) unmarshal.get("id"));
        Integer isStandardsSuccess = serialNumberService.addSerialNumberInformation(serialNumber);
        if (isStandardsSuccess == 1) {
            return Result.success("添加【"+ serialNumber.getName() +"】成功!");
        }
        return Result.fail("添加【"+ serialNumber.getName() +"】失败!");
    }
    @ApiOperation("标准库-->点击侧边栏标准,查询所有型号")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(value = "标准号/标准名称", name = "IdOrNameOfSerialNumber", dataTypeClass = String.class),
            @ApiImplicitParam(value = "标准号Id", name = "standardsId", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/list")
    public Result<?> listSerialNumberInformation(String IdOrNameOfSerialNumber, String standardsId){
        List<Map<String, Object>> selectStandards= serialNumberService.listSerialNumberInformation(IdOrNameOfSerialNumber,standardsId);
        return Result.success(selectStandards);
    }
}
standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
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.Specifications;
import com.yuanchu.limslaboratory.pojo.Standards;
import com.yuanchu.limslaboratory.service.SpecificationsService;
import com.yuanchu.limslaboratory.utils.JackSonUtil;
import com.yuanchu.limslaboratory.utils.RedisUtil;
import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
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;
import java.util.Objects;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Api(tags = "标准库-->型号-->产品规格操作")
@RestController
@RequestMapping("/specifications")
public class SpecificationsController {
    @Autowired
    private SpecificationsService specificationsService;
    @ApiOperation("标准库-->产品规格")
    @PostMapping("/add")
    public Result<?> addSpecificationsInformation(@RequestHeader("X-Token") String token,@RequestBody Specifications specifications) throws Exception {
        Object object = RedisUtil.get(token);
        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
        specifications.setUserId((Integer) unmarshal.get("id"));
        Integer isStandardsSuccess = specificationsService.addSpecificationsInformation(specifications);
        if (isStandardsSuccess == 1) {
            return Result.success("添加【"+ specifications.getName() +"】成功!");
        }
        return Result.fail("添加【"+ specifications.getName() +"】失败!");
    }
    @ApiOperation("标准库-->根据型号查询产品规格")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageNo", value = "起始页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "pageSize", value = "每一页数量", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "specificationsName", value = "型号名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "serialNumberId", value = "型号ID", dataTypeClass = String.class),
    })
    @GetMapping("/list")
    public Result<?> listSpecificationsInformation(Integer pageNo,
                                                   Integer pageSize,
                                                   String specificationsName,
                                                   String serialNumberId){
        IPage<ListSpecificationsInformation> pageList= specificationsService.listSpecificationsInformation(specificationsName,serialNumberId,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);
    }
}
standard-library/src/main/java/com/yuanchu/limslaboratory/controller/StandardsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.yuanchu.limslaboratory.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yuanchu.limslaboratory.pojo.Standards;
import com.yuanchu.limslaboratory.service.StandardsService;
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 java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Api(tags = "标准库操作")
@RestController
@RequestMapping("/standards")
public class StandardsController {
    @Autowired
    private StandardsService standardsService;
    @ApiOperation("标准库-->添加标准")
    @PostMapping("/add")
    public Result<?> addStandardsInformation(@RequestHeader("X-Token") String token, @RequestBody Standards standards) throws Exception {
        Object object = RedisUtil.get(token);
        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
        standards.setUserId((Integer) unmarshal.get("id"));
        Integer isStandardsSuccess = standardsService.addStandardsInformation(standards);
        if (isStandardsSuccess == 1) {
            return Result.success("添加【"+ standards.getName() +"】成功!");
        }
        return Result.fail("添加【"+ standards.getName() +"】失败!");
    }
    @ApiOperation("标准库-->点击全部:查询所有标准数据")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(value = "标准号/标准名称", name = "IdOrNameOfStandards", dataTypeClass = String.class)
    })
    @GetMapping("/list")
    public Result<?> listStandardsInformation(String IdOrNameOfStandards){
        List<Map<String, Object>> list = standardsService.listStandardsInformation(IdOrNameOfStandards);
        return Result.success(list);
    }
}
standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SerialNumberMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.yuanchu.limslaboratory.mapper;
import com.yuanchu.limslaboratory.pojo.SerialNumber;
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 SerialNumberMapper extends BaseMapper<SerialNumber> {
}
standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.yuanchu.limslaboratory.mapper;
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.Specifications;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
public interface SpecificationsMapper extends BaseMapper<Specifications> {
    IPage<ListSpecificationsInformation> listSpecificationsInformation(String specificationsName, String serialNumberId, Page<Objects> page);
}
standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/StandardsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.limslaboratory.mapper;
import com.yuanchu.limslaboratory.pojo.Standards;
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 StandardsMapper extends BaseMapper<Standards> {
    List<Map<String, Object>> listStandardsInformation(String idOrNameOfStandards);
}
standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/SerialNumber.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.yuanchu.limslaboratory.pojo;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
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-11
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="SerialNumber对象", description="型号")
public class SerialNumber implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "型号编号", example = "ModelNumber001", required = true)
    private String id;
    @ApiModelProperty(value = "型号名称",example = "光纤2.0.1", required = true)
    private String name;
    @TableLogic(value = "1", delval = "0")
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=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", example = "230711000002", required = true)
    private String standardsId;
    @ApiModelProperty(value = "关联字段 æ·»åŠ ç”¨æˆ·id", hidden = true)
    private Integer userId;
}
standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
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;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Data
@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 = "规格id", example = "modelId", required = true)
    private String number;
    @ApiModelProperty(value = "产品规格名称", example = "AB", required = true)
    private String name;
    @ApiModelProperty(value = "生产指令号", example = "test", required = true)
    private String instruct;
    @ApiModelProperty(value = "电压等级", example = "test", required = true)
    private String voltageLevel;
    @ApiModelProperty(value = "主线心截面", example = "test", required = true)
    private String crossSection;
    @ApiModelProperty(value = "主线芯芯数", example = "test", required = true)
    private String numberOfCores;
    @ApiModelProperty(value = "规格状态 0:停用;1:正常;-1:草稿", hidden = true)
    private Integer spe_state;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=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 String vel;
    @ApiModelProperty(value = "关联字段 åž‹å·id", example = "230711000002", required = true)
    private String serialId;
    @ApiModelProperty(value = "关联字段 ç”¨æˆ·id", hidden = true)
    private Integer userId;
}
standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Standards.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
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-11
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="Standards对象", description="标准")
public class Standards implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "标准编号 yyMMdd000001(000001++)", example = "230711000001", required = true)
    @TableId(value = "id", type = IdType.INPUT)
    private String id;
    @ApiModelProperty(value = "标准名称", example = "光纤", required = true)
    private String name;
    @ApiModelProperty(value = "英文名称", example = "OpticalFibre", required = true)
    private String engName;
    @ApiModelProperty(value = "0:原材料;1:电线电缆", example = "1", required = true)
    private Integer type;
    @TableLogic(value = "1", delval = "0")
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=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 userId;
}
standard-library/src/main/java/com/yuanchu/limslaboratory/service/SerialNumberService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.pojo.SerialNumber;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
public interface SerialNumberService extends IService<SerialNumber> {
    /**
     * æ·»åŠ åž‹å·ï¼Œé¦–å…ˆéœ€è¦åˆ¤æ–­ç”¨æˆ·ï¼Œæ ‡å‡†ç¼–ç æ˜¯å¦å­˜åœ¨
     * @param serialNumber
     * @return
     */
    Integer addSerialNumberInformation(SerialNumber serialNumber);
    List<Map<String, Object>> listSerialNumberInformation(String idOrNameOfSerialNumber, String standardsId);
}
standard-library/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
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.Specifications;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
public interface SpecificationsService extends IService<Specifications> {
    Integer addSpecificationsInformation(Specifications specifications);
    IPage<ListSpecificationsInformation> listSpecificationsInformation(String specificationsName, String serialNumberId, Page<Objects> page);
}
standard-library/src/main/java/com/yuanchu/limslaboratory/service/StandardsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.pojo.Standards;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
public interface StandardsService extends IService<Standards> {
    Integer addStandardsInformation(Standards standards);
    List<Map<String, Object>> listStandardsInformation(String IdOrNameOfStandards);
    /**
     * æ ¹æ®Id查询是否存在该标准
     */
    Boolean standardsIsNull(String Id);
}
standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SerialNumberServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yuanchu.limslaboratory.pojo.SerialNumber;
import com.yuanchu.limslaboratory.mapper.SerialNumberMapper;
import com.yuanchu.limslaboratory.pojo.Standards;
import com.yuanchu.limslaboratory.pojo.User;
import com.yuanchu.limslaboratory.service.SerialNumberService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.limslaboratory.service.StandardsService;
import com.yuanchu.limslaboratory.service.UserService;
import com.yuanchu.limslaboratory.utils.MyUtil;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Service
public class SerialNumberServiceImpl extends ServiceImpl<SerialNumberMapper, SerialNumber> implements SerialNumberService {
    @Resource
    private SerialNumberMapper serialNumberMapper;
    @Autowired
    private UserService userService;
    @Autowired
    private StandardsService standardsService;
    @Override
    public Integer addSerialNumberInformation(SerialNumber serialNumber) {
        Boolean userIsNull = userService.userIsNull(serialNumber.getUserId());
        if (userIsNull){
            Boolean standardsIsNull = standardsService.standardsIsNull(serialNumber.getStandardsId());
            if (!ObjectUtils.isEmpty(standardsIsNull)){
                return serialNumberMapper.insert(serialNumber);
            }
        }
        return 0;
    }
    @Override
    public List<Map<String, Object>> listSerialNumberInformation(String idOrNameOfSerialNumber, String standardsId) {
        LambdaQueryWrapper<SerialNumber> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SerialNumber::getStandardsId, standardsId);
        wrapper.like(SerialNumber::getId, idOrNameOfSerialNumber);
        wrapper.or().like(SerialNumber::getName, idOrNameOfSerialNumber);
        wrapper.select(SerialNumber::getId, SerialNumber::getName);
        return serialNumberMapper.selectMaps(wrapper);
    }
}
standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
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.Specifications;
import com.yuanchu.limslaboratory.mapper.SpecificationsMapper;
import com.yuanchu.limslaboratory.service.SpecificationsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.limslaboratory.service.StandardsService;
import com.yuanchu.limslaboratory.service.UserService;
import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Service
public class SpecificationsServiceImpl extends ServiceImpl<SpecificationsMapper, Specifications> implements SpecificationsService {
    @Resource
    private SpecificationsMapper specificationsMapper;
    @Autowired
    private StandardsService standardsService;
    @Autowired
    private UserService userService;
    @Override
    public Integer addSpecificationsInformation(Specifications specifications) {
        Boolean userIsNull = userService.userIsNull(specifications.getUserId());
        if (userIsNull){
            Boolean standardsIsNull = standardsService.standardsIsNull(specifications.getSerialId());
            if (!ObjectUtils.isEmpty(standardsIsNull)){
                LambdaQueryWrapper<Specifications> wrapper = new LambdaQueryWrapper<>();
                wrapper.eq(Specifications::getNumber, specifications.getNumber());
                Specifications specificationsNumberIsNull = specificationsMapper.selectOne(wrapper);
                if (ObjectUtils.isEmpty(specificationsNumberIsNull)){
                    return specificationsMapper.insert(specifications);
                }
            }
        }
        return 0;
    }
    @Override
    public IPage<ListSpecificationsInformation> listSpecificationsInformation(String specificationsName, String serialNumberId, Page<Objects> page) {
        return specificationsMapper.listSpecificationsInformation(specificationsName,serialNumberId,page);
    }
}
standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yuanchu.limslaboratory.pojo.Standards;
import com.yuanchu.limslaboratory.mapper.StandardsMapper;
import com.yuanchu.limslaboratory.pojo.User;
import com.yuanchu.limslaboratory.service.StandardsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.limslaboratory.service.UserService;
import com.yuanchu.limslaboratory.utils.MyUtil;
import org.springframework.beans.factory.annotation.Autowired;
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-11
 */
@Service
public class StandardsServiceImpl extends ServiceImpl<StandardsMapper, Standards> implements StandardsService {
    @Resource
    private StandardsMapper standardsMapper;
    @Autowired
    private UserService userService;
    @Override
    public Integer addStandardsInformation(Standards standards) {
        Boolean userIsNull = userService.userIsNull(standards.getUserId());
        if (userIsNull){
            return standardsMapper.insert(standards);
        }
        return 0;
    }
    @Override
    public List<Map<String, Object>>  listStandardsInformation(String IdOrNameOfStandards) {
        return standardsMapper.listStandardsInformation(IdOrNameOfStandards);
    }
    @Override
    public Boolean standardsIsNull(String Id) {
        LambdaQueryWrapper<Standards> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Standards::getId, Id);
        Standards standardsIsNull = standardsMapper.selectOne(wrapper);
        return !ObjectUtils.isEmpty(standardsIsNull);
    }
}
standard-library/src/main/java/com/yuanchu/limslaboratory/vo/ListSpecificationsInformation.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.yuanchu.limslaboratory.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ListSpecificationsInformation对象", description="用于分页显示规格数据")
public class ListSpecificationsInformation {
    private Integer id;
    private String name;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    private String username;
    private String vel;
    private Integer spe_state;
}
standard-library/src/main/resources/mapper/SerialNumberMapper.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.SerialNumberMapper">
</mapper>
standard-library/src/main/resources/mapper/SpecificationsMapper.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.SpecificationsMapper">
    <resultMap id="listSpecificationsInformationMap" type="com.yuanchu.limslaboratory.vo.ListSpecificationsInformation">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="updateTime" column="update_time"/>
        <result property="username" column="username"/>
        <result property="vel" column="vel"/>
        <result property="spe_state" column="spe_state"/>
    </resultMap>
    <select id="listSpecificationsInformation" resultMap="listSpecificationsInformationMap">
        SELECT s.`id`,s.`name`,s.`update_time`,u.`name` username,s.`vel`,s.`spe_state`
        FROM specifications s,`user` u
        WHERE s.`user_id` = u.`id`
            AND s.`serial_id` = #{serialNumberId}
        <if test="specificationsName != null">
            AND s.`name` = #{specificationsName}
        </if>
    </select>
</mapper>
standard-library/src/main/resources/mapper/StandardsMapper.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.StandardsMapper">
    <select id="listStandardsInformation" resultType="Map">
        SELECT s.`id`, s.`name`, s.`eng_name`, DATE_FORMAT(s.`create_time`, '%Y-%m-%d %H:%i') createTime
        FROM standards s
        <if test="idOrNameOfStandards != null">
            WHERE s.`id` LIKE concat('%',#{idOrNameOfStandards},'%')
               OR s.name LIKE concat('%',#{idOrNameOfStandards},'%')
        </if>
    </select>
</mapper>
sys/pom.xml
@@ -16,12 +16,20 @@
    <packaging>jar</packaging>
    <dependencies>
        <!--用户服务-->
        <!--用户服务模块-->
        <dependency>
            <groupId>com.yunchu.limslaboratory</groupId>
            <artifactId>user-server</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!--标准库模块-->
        <dependency>
            <groupId>com.yunchu.limslaboratory</groupId>
            <artifactId>standard-library</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!--基础框架类-->
        <dependency>
            <groupId>com.yunchu.limslaboratory</groupId>
sys/src/main/resources/application-dev.yml
@@ -34,27 +34,25 @@
      filters: stat,wall,log4j # é…ç½®ç›‘控统计拦截的filters,去掉后监控界面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,该值只有为正数才有用)
    min-idle: 0
    # ä»Žè¿žæŽ¥æ± ä¸­èŽ·å–è¿žæŽ¥æœ€å¤§ç­‰å¾…æ—¶é—´ï¼ˆé»˜è®¤ä¸º-1,单位为毫秒,负数表示无限)
    max-wait: -1
  redis:
    # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
    database: 0
    # redis服务器地址(默认为localhost)
    host: localhost
    # redis端口(默认为6379)
    port: 6380
    # redis访问密码(默认为空)
    password: null
    # redis连接超时时间(单位毫秒)
    timeout: 0
    # redis连接池配置
    pool:
      # æœ€å¤§å¯ç”¨è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
      max-active: 8
      # æœ€å¤§ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
      max-idle: 8
      # æœ€å°ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º0,该值只有为正数才有用)
      min-idle: 0
      # ä»Žè¿žæŽ¥æ± ä¸­èŽ·å–è¿žæŽ¥æœ€å¤§ç­‰å¾…æ—¶é—´ï¼ˆé»˜è®¤ä¸º-1,单位为毫秒,负数表示无限)
      max-wait: -1
sys/src/main/resources/application.yml
@@ -5,12 +5,12 @@
    active: dev
login:
  userID: 9c08241a7c38cb25efafde9dd1347bab
  secret: D1E3ED958C5DB5BDF1FC9F77CE54B29B016213acd698f4686cac2f399f1c8d18
  userID: c8b1aaacec366c24e5d18c7eea9e551b
  secret: 701C85FCE0F7CFD714C2052D77098DC7f407b0ee79210bcef51787a0eb8ec7a5
mybatis-plus:
  type-aliases-package: com.yuanchu.limslaboratory.pojo
  mapper-locations: classpath:mapper/*.xml
  mapper-locations: classpath*:/mapper/*.xml
  global-config:
    banner: off # å…³é—­mybatis-plus启动图标
@@ -24,4 +24,4 @@
  httpclient:
    enabled: false # å…³é—­ httpclient
  okhttp:
    enabled: true # å¼€å¯ okhttp
    enabled: true # å¼€å¯ okhttp
sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java
@@ -22,7 +22,7 @@
    public static String database_username = "root";
    public static String database_password= "123456";
    public static String author = "江苏鵷雏网络科技有限公司";
    public static String model_name = "/user-server"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String model_name = "/standard-library"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.yuanchu.limslaboratory"; // åŒ…路径
    public static Boolean Override = false; // æ˜¯å¦è¦†ç›–原来的文件?
@@ -98,7 +98,7 @@
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setEntityLombokModel(true)
                .setRestControllerStyle(true)
                .setInclude(scanner("表名,多个空格分割").split(","))
                .setInclude(scanner("表名,多个道号分割").split(","))
                .setControllerMappingHyphenStyle(true)
                .setTablePrefix("m_");
        mpg.setStrategy(strategy);
user-server/pom.xml
@@ -16,11 +16,6 @@
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yunchu.limslaboratory</groupId>
            <artifactId>framework</artifactId>
            <version>${project.parent.version}</version>
user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java
@@ -2,6 +2,7 @@
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;
@@ -23,46 +24,50 @@
    @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");
////                user.setMap(data);
//                //存入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, 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);
        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("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);
//    }
}
user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java
@@ -1,13 +1,18 @@
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.SpringUtils;
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;
@@ -15,13 +20,11 @@
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
@@ -45,7 +48,7 @@
            @ApiImplicitParam(name = "password", value = "密码", dataTypeClass = String.class, required = true)
    })
    @PostMapping("/login")
    public Result<?> UserLogin(String account, String password){
    public Result<?> userLogin(String account, String password){
        boolean loginSuccess = false;
        Subject subject = SecurityUtils.getSubject();
        if (!subject.isAuthenticated()) {
@@ -61,14 +64,25 @@
        }
        if (loginSuccess) {
            // èŽ·å–shiroRealm中的数据
            ShiroRealm bean = SpringUtils.getBean(ShiroRealm.class);
            ShiroRealm bean = SpringUtil.getBean(ShiroRealm.class);
            User user = bean.user;
            user.setPassword(null);
            UserLoginUtils bean1 = SpringUtils.getBean(UserLoginUtils.class);
            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")
@@ -88,8 +102,41 @@
        } catch (Exception e) {
            return Result.fail("用户id为空!");
        }
    }
    @PostMapping("/add_new_personnel")
    @ApiOperation("实验室管理-->人员管理-->新增人员")
    public Result<?> addNewPersonnel(@RequestBody NewPersonnelVo newPersonnelVo) {
        newPersonnelVo.setPassword("123456");
        Integer isAddSuccess = userService.addNewPersonnel(newPersonnelVo);
        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);
    }
}
user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java
@@ -1,10 +1,14 @@
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.springframework.stereotype.Repository;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
@@ -16,4 +20,6 @@
 */
public interface UserMapper extends BaseMapper<User> {
    Map<String, String> selectUserByUserId(int userId);
    IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page);
}
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java
@@ -1,9 +1,7 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
@@ -61,6 +59,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
    private Date updateTime;
    @Version
    @ApiModelProperty(value = "锁")
    private Integer version;
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/EnterpriseUserList.java
@@ -1,9 +1,7 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
@@ -39,7 +37,8 @@
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    @ApiModelProperty(value = "0:删除;1:正常")
    @TableLogic(value = "1", delval = "0")
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
@@ -50,6 +49,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
    private Date updateTime;
    @Version
    private Integer version;
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java
@@ -1,9 +1,7 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
@@ -39,6 +37,7 @@
    @ApiModelProperty(value = "0:无权限;1:有权限")
    private Integer power;
    @TableLogic(value = "1", delval = "0")
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0")
    private Integer state;
@@ -50,6 +49,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
    private Date updateTime;
    @Version
    @ApiModelProperty(value = "乐观锁")
    private Integer version;
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
@@ -3,14 +3,19 @@
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>
@@ -20,6 +25,7 @@
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-07
 */
@Accessors(chain = true)
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@@ -50,21 +56,21 @@
    @ApiModelProperty(value = "年龄")
    private Integer age;
    @TableLogic(value = "1", delval = "0")
    @ApiModelProperty(value = "在职状态 æ­£å¸¸>=1,离职<=0")
    private Integer jobState;
    @ApiModelProperty(value = "个性签名")
    private String info;
    @ApiModelProperty(value = "在职状态 æ­£å¸¸>=1,离职<=0")
    private Integer jobState;
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
    @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", timezone="GMT+8")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    @Version
    private Integer version;
    @ApiModelProperty(value = "关联 è§’色id")
user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java
@@ -1,11 +1,17 @@
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.io.Serializable;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
@@ -20,4 +26,17 @@
    Map<String, String> selectUserByUserId(int userId);
    User AccordingUsernameSelectAll(String account);
    Integer addNewPersonnel(NewPersonnelVo newPersonnelVo);
    Integer updateNewPersonnel(UpdatePersonnelVo updatePersonnelVo);
    IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page);
    Map<String, Object> getUserInfo(String token);
    /**
     * æ ¹æ®Id查询是否存在该用户
     */
    Boolean userIsNull(Integer Id);
}
user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
@@ -1,18 +1,25 @@
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.conditions.update.LambdaUpdateChainWrapper;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
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.Map;
import javax.annotation.Resource;
import java.util.Objects;
/**
 * <p>
@@ -26,19 +33,82 @@
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Resource
    UserMapper userMapper;
    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 Map<String, String> selectUserByUserId(int userId) {
        return userMapper.selectUserByUserId(userId);
    }
    @Resource
    private UserMapper mapper;
    @Override
    public User AccordingUsernameSelectAll(String account) {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getAccount, account);
        return mapper.selectOne(wrapper);
        wrapper.select(User::getPassword, User::getId, User::getName, User::getAccount);
        return userMapper.selectOne(wrapper);
    }
    @Override
    public Integer addNewPersonnel(NewPersonnelVo newPersonnelVo) {
        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());
        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);
    }
}
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java
@@ -123,15 +123,27 @@
        return securityManager;
    }
//    åˆ›å»ºè‡ªå®šä¹‰Realm
    //    åˆ›å»ºè‡ªå®šä¹‰Realm
    @Bean
    public Realm shiroRealm() {
        return new ShiroRealm();
        ShiroRealm realm = new ShiroRealm();
//        HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
////        //设置使用MD5加密算法
////        credentialsMatcher.setHashAlgorithmName(Md5Hash.ALGORITHM_NAME);
////        //散列次数
////        credentialsMatcher.setHashIterations(1024);
//        realm.setCredentialsMatcher(credentialsMatcher);
        return realm;
    }
    @Bean
    public Realm JwtRealm(){
        return new JwtRealm();
        JwtRealm jwtRealm = new JwtRealm();
        // è®¾ç½®åŠ å¯†ç®—æ³•
        CredentialsMatcher credentialsMatcher = new JwtCredentialsMatcher();
        // è®¾ç½®åŠ å¯†æ¬¡æ•°
        jwtRealm.setCredentialsMatcher(credentialsMatcher);
        return jwtRealm;
    }
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java
@@ -2,10 +2,8 @@
import com.yuanchu.limslaboratory.pojo.User;
import com.yuanchu.limslaboratory.shiro.JwtToken;
import com.yuanchu.limslaboratory.shiro.utils.JwtCredentialsMatcher;
import com.yuanchu.limslaboratory.utils.RedisUtil;
import org.apache.shiro.authc.*;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
@@ -46,12 +44,5 @@
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        return info;
    }
    @Override
    public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {
        // è®¾ç½®åŠ å¯†ç®—æ³•
        CredentialsMatcher jwtCredentialsMatcher = new JwtCredentialsMatcher();
        super.setCredentialsMatcher(jwtCredentialsMatcher);
    }
}
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java
@@ -2,10 +2,8 @@
import com.yuanchu.limslaboratory.pojo.User;
import com.yuanchu.limslaboratory.service.UserService;
import com.yuanchu.limslaboratory.utils.MyUtils;
import com.yuanchu.limslaboratory.utils.SpringUtils;
import com.yuanchu.limslaboratory.utils.SpringUtil;
import org.apache.shiro.authc.*;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
@@ -32,24 +30,12 @@
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) {
        String principal = (String) authenticationToken.getPrincipal();
        //获取UserService对象
        UserService userService = SpringUtils.getBean(UserService.class);
        UserService userService = SpringUtil.getBean(UserService.class);
        user = userService.AccordingUsernameSelectAll(principal);
        MyUtils.PrintLog(user.toString());
        if (!ObjectUtils.isEmpty(user)) {
            return new SimpleAuthenticationInfo(user.getAccount(), user.getPassword(), this.getName());
        } else {
            throw new UnknownAccountException();
        }
    }
    @Override
    public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {
//        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
//        //设置使用MD5加密算法
//        hashedCredentialsMatcher.setHashAlgorithmName(Md5Hash.ALGORITHM_NAME);
//        //散列次数
//        hashedCredentialsMatcher.setHashIterations(1024);
//        super.setCredentialsMatcher(hashedCredentialsMatcher);
        super.setCredentialsMatcher(credentialsMatcher);
    }
}
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java
@@ -15,7 +15,6 @@
import org.springframework.util.ObjectUtils;
import javax.annotation.PostConstruct;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
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="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;
}
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 = "在职状态 æ­£å¸¸>=1,离职<=0", example = "0")
    private Integer jobState;
}
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 = "在职状态 æ­£å¸¸>=1,离职<=0", example = "0")
    private Integer jobState;
    @ApiModelProperty(value = "账号密码", example = "654321")
    private String password;
}
user-server/src/main/resources/mapper/UserMapper.xml
@@ -9,4 +9,24 @@
        and el.user_id = u.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>
</mapper>