Fixiaobai
2023-08-15 a303cd042ed27bdf2b8daaf3d3bc23f1ef9956af
设备台账
已修改7个文件
已添加2个文件
206 ■■■■■ 文件已修改
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/pom.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/ClassifyMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java
@@ -50,7 +50,7 @@
    }
    /**
     *
     *  èŽ·å–ç”¨æˆ·ä¿¡æ¯
     * @param token
     * @return
     */
framework/pom.xml
@@ -19,7 +19,12 @@
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons.lang3}</version>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.yuanchu.limslaboratory.utils;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
 * çº¿ç¨‹æ± é…ç½®
 *
 * @author å¼ å®¾
 **/
@Configuration
public class ThreadPoolConfig
{
    // æ ¸å¿ƒçº¿ç¨‹æ± å¤§å°
    private int corePoolSize = 50;
    // æœ€å¤§å¯åˆ›å»ºçš„线程数
    private int maxPoolSize = 200;
    // é˜Ÿåˆ—最大长度
    private int queueCapacity = 1000;
    // çº¿ç¨‹æ± ç»´æŠ¤çº¿ç¨‹æ‰€å…è®¸çš„空闲时间
    private int keepAliveSeconds = 300;
    @Bean(name = "threadPoolTaskExecutor")
    public ThreadPoolTaskExecutor threadPoolTaskExecutor()
    {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setMaxPoolSize(maxPoolSize);
        executor.setCorePoolSize(corePoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setKeepAliveSeconds(keepAliveSeconds);
        // çº¿ç¨‹æ± å¯¹æ‹’绝任务(无线程可用)的处理策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }
    /**
     * æ‰§è¡Œå‘¨æœŸæ€§æˆ–定时任务
     */
    @Bean(name = "scheduledExecutorService")
    protected ScheduledExecutorService scheduledExecutorService()
    {
        return new ScheduledThreadPoolExecutor(corePoolSize,
                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
        {
            @Override
            protected void afterExecute(Runnable r, Throwable t)
            {
                super.afterExecute(r, t);
                Threads.printException(r, t);
            }
        };
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
package com.yuanchu.limslaboratory.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.*;
/**
 * çº¿ç¨‹ç›¸å…³å·¥å…·ç±».
 *
 * @author å¼ å®¾
 */
public class Threads
{
    private static final Logger logger = LoggerFactory.getLogger(Threads.class);
    /**
     * sleep等待,单位为毫秒
     */
    public static void sleep(long milliseconds)
    {
        try
        {
            Thread.sleep(milliseconds);
        }
        catch (InterruptedException e)
        {
            return;
        }
    }
    /**
     * åœæ­¢çº¿ç¨‹æ± 
     * å…ˆä½¿ç”¨shutdown, åœæ­¢æŽ¥æ”¶æ–°ä»»åŠ¡å¹¶å°è¯•å®Œæˆæ‰€æœ‰å·²å­˜åœ¨ä»»åŠ¡.
     * å¦‚果超时, åˆ™è°ƒç”¨shutdownNow, å–消在workQueue中Pending的任务,并中断所有阻塞函数.
     * å¦‚果仍人超時,則強制退出.
     * å¦å¯¹åœ¨shutdown时线程本身被调用中断做了处理.
     */
    public static void shutdownAndAwaitTermination(ExecutorService pool)
    {
        if (pool != null && !pool.isShutdown())
        {
            pool.shutdown();
            try
            {
                if (!pool.awaitTermination(120, TimeUnit.SECONDS))
                {
                    pool.shutdownNow();
                    if (!pool.awaitTermination(120, TimeUnit.SECONDS))
                    {
                        logger.info("Pool did not terminate");
                    }
                }
            }
            catch (InterruptedException ie)
            {
                pool.shutdownNow();
                Thread.currentThread().interrupt();
            }
        }
    }
    /**
     * æ‰“印线程异常信息
     */
    public static void printException(Runnable r, Throwable t)
    {
        if (t == null && r instanceof Future<?>)
        {
            try
            {
                Future<?> future = (Future<?>) r;
                if (future.isDone())
                {
                    future.get();
                }
            }
            catch (CancellationException ce)
            {
                t = ce;
            }
            catch (ExecutionException ee)
            {
                t = ee.getCause();
            }
            catch (InterruptedException ie)
            {
                Thread.currentThread().interrupt();
            }
        }
        if (t != null)
        {
            logger.error(t.getMessage(), t);
        }
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java
@@ -36,11 +36,11 @@
    public Result<?> addClassifyInformation(@RequestBody Classify classify) {
        Integer isAddClassifySuccess = classifyService.addClassifyInformation(classify);
        if (isAddClassifySuccess == 1) {
            return Result.success("添加分类【"+ classify.getSonName() +"】成功!");
            return Result.success("1-$添加分类【"+ classify.getSonName() +"】成功!");
        } else if (isAddClassifySuccess == 2) {
            return Result.fail("抱歉重复添加分类名称【"+ classify.getSonName() +"】,添加失败!");
            return Result.success("2-$抱歉重复添加分类名称【"+ classify.getSonName() +"】,添加失败!");
        }
        return Result.fail("添加分类【"+ classify.getSonName() +"】失败!");
        return Result.success("0-$添加分类【"+ classify.getSonName() +"】失败!");
    }
    @ApiOperation("分类侧边栏列表:如果sonName为空,则带着father_name的Id进行点击操作")
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java
@@ -13,4 +13,6 @@
 */
public interface ClassifyMapper extends BaseMapper<Classify> {
    Classify selectOneByName(Classify classify);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java
@@ -1,5 +1,6 @@
package com.yuanchu.limslaboratory.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yuanchu.limslaboratory.pojo.Classify;
@@ -29,12 +30,13 @@
    @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);
        //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.selectOneByName(classify);
        if (ObjectUtils.isEmpty(classify1)){
            classify.setCreateTime(DateUtil.date());
            return classifyMapper.insert(classify);
        } else {
            return 2;
laboratory-server/src/main/resources/mapper/ClassifyMapper.xml
@@ -2,4 +2,21 @@
<!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">
    <select id="selectOneByName" resultType="com.yuanchu.limslaboratory.pojo.Classify">
        SELECT id,
               father_name,
               son_name,
               state,
               create_time,
               update_time,
               version
        FROM classify
        WHERE state = 1
          <if test="fatherName!=null and fatherName!=''">
              AND father_name = #{fatherName}
          </if>
          <if test="sonName!=null and sonName!=''">
              and son_name =#{sonName}
          </if>
    </select>
</mapper>
pom.xml
@@ -37,7 +37,7 @@
        <openfeign.version>3.1.3</openfeign.version>
        <feign-okhttp.version>11.0</feign-okhttp.version>
        <shiro.version>1.5.3</shiro.version>
        <commons.lang3>3.12.0</commons.lang3>
        <!-- æ‰“包后导出的路径 -->
        <package.path>${project.build.directory}/LIMS</package.path>
    </properties>