XiaoRuby
2023-08-21 dd571bf55de7f9a72d458adc179958ed2f9473c0
Merge remote-tracking branch 'origin/master'
已修改15个文件
已添加4个文件
775 ■■■■■ 文件已修改
framework/src/main/java/com/yuanchu/limslaboratory/utils/ServletUtils.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/StringUtils.java 403 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddPlanDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/UserAndInsVo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/ProductMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/ProductModelMapper.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/ServletUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@
package com.yuanchu.limslaboratory.utils;
import cn.hutool.core.convert.Convert;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
 * å®¢æˆ·ç«¯å·¥å…·ç±»
 *
 * @author å¼ å®¾
 */
public class ServletUtils
{
    /**
     * èŽ·å–String参数
     */
    public static String getParameter(String name)
    {
        return getRequest().getParameter(name);
    }
    /**
     * èŽ·å–String参数
     */
    public static String getParameter(String name, String defaultValue)
    {
        return Convert.toStr(getRequest().getParameter(name), defaultValue);
    }
    /**
     * èŽ·å–Integer参数
     */
    public static Integer getParameterToInt(String name)
    {
        return Convert.toInt(getRequest().getParameter(name));
    }
    /**
     * èŽ·å–Integer参数
     */
    public static Integer getParameterToInt(String name, Integer defaultValue)
    {
        return Convert.toInt(getRequest().getParameter(name), defaultValue);
    }
    /**
     * èŽ·å–request
     */
    public static HttpServletRequest getRequest()
    {
        return getRequestAttributes().getRequest();
    }
    /**
     * èŽ·å–response
     */
    public static HttpServletResponse getResponse()
    {
        return getRequestAttributes().getResponse();
    }
    /**
     * èŽ·å–session
     */
    public static HttpSession getSession()
    {
        return getRequest().getSession();
    }
    public static ServletRequestAttributes getRequestAttributes()
    {
        RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
        return (ServletRequestAttributes) attributes;
    }
    /**
     * å°†å­—符串渲染到客户端
     *
     * @param response æ¸²æŸ“对象
     * @param string å¾…渲染的字符串
     * @return null
     */
    public static String renderString(HttpServletResponse response, String string)
    {
        try
        {
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            response.getWriter().print(string);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * æ˜¯å¦æ˜¯Ajax异步请求
     *
     * @param request
     */
    public static boolean isAjaxRequest(HttpServletRequest request)
    {
        String accept = request.getHeader("accept");
        if (accept != null && accept.indexOf("application/json") != -1)
        {
            return true;
        }
        String xRequestedWith = request.getHeader("X-Requested-With");
        if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1)
        {
            return true;
        }
        String uri = request.getRequestURI();
        if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml"))
        {
            return true;
        }
        String ajax = request.getParameter("__ajax");
        if (StringUtils.inStringIgnoreCase(ajax, "json", "xml"))
        {
            return true;
        }
        return false;
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/utils/StringUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,403 @@
package com.yuanchu.limslaboratory.utils;
import cn.hutool.core.text.StrFormatter;
import java.util.Collection;
import java.util.Map;
/**
 * å­—符串工具类
 *
 * @author å¼ å®¾
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils
{
    /** ç©ºå­—符串 */
    private static final String NULLSTR = "";
    /** ä¸‹åˆ’线 */
    private static final char SEPARATOR = '_';
    /**
     * èŽ·å–å‚æ•°ä¸ä¸ºç©ºå€¼
     * @param value defaultValue è¦åˆ¤æ–­çš„value
     * @return value è¿”回值
     */
    public static <T> T nvl(T value, T defaultValue)
    {
        return value != null ? value : defaultValue;
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªCollection是否为空, åŒ…含List,Set,Queue
     *
     * @param coll è¦åˆ¤æ–­çš„Collection
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Collection<?> coll)
    {
        return isNull(coll) || coll.isEmpty();
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªCollection是否非空,包含List,Set,Queue
     *
     * @param coll è¦åˆ¤æ–­çš„Collection
     * @return true:非空 false:空
     */
    public static boolean isNotEmpty(Collection<?> coll)
    {
        return !isEmpty(coll);
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªå¯¹è±¡æ•°ç»„是否为空
     *
     * @param objects è¦åˆ¤æ–­çš„对象数组
     ** @return true:为空 false:非空
     */
    public static boolean isEmpty(Object[] objects)
    {
        return isNull(objects) || (objects.length == 0);
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªå¯¹è±¡æ•°ç»„是否非空
     *
     * @param objects è¦åˆ¤æ–­çš„对象数组
     * @return true:非空 false:空
     */
    public static boolean isNotEmpty(Object[] objects)
    {
        return !isEmpty(objects);
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªMap是否为空
     *
     * @param map è¦åˆ¤æ–­çš„Map
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Map<?, ?> map)
    {
        return isNull(map) || map.isEmpty();
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªMap是否为空
     *
     * @param map è¦åˆ¤æ–­çš„Map
     * @return true:非空 false:空
     */
    public static boolean isNotEmpty(Map<?, ?> map)
    {
        return !isEmpty(map);
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªå­—符串是否为空串
     *
     * @param str String
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(String str)
    {
        return isNull(str) || NULLSTR.equals(str.trim());
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªå­—符串是否为非空串
     *
     * @param str String
     * @return true:非空串 false:空串
     */
    public static boolean isNotEmpty(String str)
    {
        return !isEmpty(str);
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªå¯¹è±¡æ˜¯å¦ä¸ºç©º
     *
     * @param object Object
     * @return true:为空 false:非空
     */
    public static boolean isNull(Object object)
    {
        return object == null;
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªå¯¹è±¡æ˜¯å¦éžç©º
     *
     * @param object Object
     * @return true:非空 false:空
     */
    public static boolean isNotNull(Object object)
    {
        return !isNull(object);
    }
    /**
     * * åˆ¤æ–­ä¸€ä¸ªå¯¹è±¡æ˜¯å¦æ˜¯æ•°ç»„类型(Java基本型别的数组)
     *
     * @param object å¯¹è±¡
     * @return true:是数组 false:不是数组
     */
    public static boolean isArray(Object object)
    {
        return isNotNull(object) && object.getClass().isArray();
    }
    /**
     * åŽ»ç©ºæ ¼
     */
    public static String trim(String str)
    {
        return (str == null ? "" : str.trim());
    }
    /**
     * æˆªå–字符串
     *
     * @param str å­—符串
     * @param start å¼€å§‹
     * @return ç»“æžœ
     */
    public static String substring(final String str, int start)
    {
        if (str == null)
        {
            return NULLSTR;
        }
        if (start < 0)
        {
            start = str.length() + start;
        }
        if (start < 0)
        {
            start = 0;
        }
        if (start > str.length())
        {
            return NULLSTR;
        }
        return str.substring(start);
    }
    /**
     * æˆªå–字符串
     *
     * @param str å­—符串
     * @param start å¼€å§‹
     * @param end ç»“束
     * @return ç»“æžœ
     */
    public static String substring(final String str, int start, int end)
    {
        if (str == null)
        {
            return NULLSTR;
        }
        if (end < 0)
        {
            end = str.length() + end;
        }
        if (start < 0)
        {
            start = str.length() + start;
        }
        if (end > str.length())
        {
            end = str.length();
        }
        if (start > end)
        {
            return NULLSTR;
        }
        if (start < 0)
        {
            start = 0;
        }
        if (end < 0)
        {
            end = 0;
        }
        return str.substring(start, end);
    }
    /**
     * æ ¼å¼åŒ–文本, {} è¡¨ç¤ºå ä½ç¬¦<br>
     * æ­¤æ–¹æ³•只是简单将占位符 {} æŒ‰ç…§é¡ºåºæ›¿æ¢ä¸ºå‚æ•°<br>
     * å¦‚果想输出 {} ä½¿ç”¨ \\转义 { å³å¯ï¼Œå¦‚果想输出 {} ä¹‹å‰çš„ \ ä½¿ç”¨åŒè½¬ä¹‰ç¬¦ \\\\ å³å¯<br>
     * ä¾‹ï¼š<br>
     * é€šå¸¸ä½¿ç”¨ï¼šformat("this is {} for {}", "a", "b") -> this is a for b<br>
     * è½¬ä¹‰{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
     * è½¬ä¹‰\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
     *
     * @param template æ–‡æœ¬æ¨¡æ¿ï¼Œè¢«æ›¿æ¢çš„部分用 {} è¡¨ç¤º
     * @param params å‚数值
     * @return æ ¼å¼åŒ–后的文本
     */
    public static String format(String template, Object... params){
        if (isEmpty(params) || isEmpty(template))
        {
            return template;
        }
        return StrFormatter.format(template, params);
    }
    /**
     * ä¸‹åˆ’线转驼峰命名
     */
    public static String toUnderScoreCase(String str)
    {
        if (str == null)
        {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        // å‰ç½®å­—符是否大写
        boolean preCharIsUpperCase = true;
        // å½“前字符是否大写
        boolean curreCharIsUpperCase = true;
        // ä¸‹ä¸€å­—符是否大写
        boolean nexteCharIsUpperCase = true;
        for (int i = 0; i < str.length(); i++)
        {
            char c = str.charAt(i);
            if (i > 0)
            {
                preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
            }
            else
            {
                preCharIsUpperCase = false;
            }
            curreCharIsUpperCase = Character.isUpperCase(c);
            if (i < (str.length() - 1))
            {
                nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
            }
            if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
            {
                sb.append(SEPARATOR);
            }
            else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
            {
                sb.append(SEPARATOR);
            }
            sb.append(Character.toLowerCase(c));
        }
        return sb.toString();
    }
    /**
     * æ˜¯å¦åŒ…含字符串
     *
     * @param str éªŒè¯å­—符串
     * @param strs å­—符串组
     * @return åŒ…含返回true
     */
    public static boolean inStringIgnoreCase(String str, String... strs)
    {
        if (str != null && strs != null)
        {
            for (String s : strs)
            {
                if (str.equalsIgnoreCase(trim(s)))
                {
                    return true;
                }
            }
        }
        return false;
    }
    /**
     * å°†ä¸‹åˆ’线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 ä¾‹å¦‚:HELLO_WORLD->HelloWorld
     *
     * @param name è½¬æ¢å‰çš„下划线大写方式命名的字符串
     * @return è½¬æ¢åŽçš„驼峰式命名的字符串
     */
    public static String convertToCamelCase(String name)
    {
        StringBuilder result = new StringBuilder();
        // å¿«é€Ÿæ£€æŸ¥
        if (name == null || name.isEmpty())
        {
            // æ²¡å¿…要转换
            return "";
        }
        else if (!name.contains("_"))
        {
            // ä¸å«ä¸‹åˆ’线,仅将首字母大写
            return name.substring(0, 1).toUpperCase() + name.substring(1);
        }
        // ç”¨ä¸‹åˆ’线将原始字符串分割
        String[] camels = name.split("_");
        for (String camel : camels)
        {
            // è·³è¿‡åŽŸå§‹å­—ç¬¦ä¸²ä¸­å¼€å¤´ã€ç»“å°¾çš„ä¸‹æ¢çº¿æˆ–åŒé‡ä¸‹åˆ’çº¿
            if (camel.isEmpty())
            {
                continue;
            }
            // é¦–字母大写
            result.append(camel.substring(0, 1).toUpperCase());
            result.append(camel.substring(1).toLowerCase());
        }
        return result.toString();
    }
    /**
     * é©¼å³°å¼å‘½åæ³• ä¾‹å¦‚:user_name->userName
     */
    public static String toCamelCase(String s)
    {
        if (s == null)
        {
            return null;
        }
        s = s.toLowerCase();
        StringBuilder sb = new StringBuilder(s.length());
        boolean upperCase = false;
        for (int i = 0; i < s.length(); i++)
        {
            char c = s.charAt(i);
            if (c == SEPARATOR)
            {
                upperCase = true;
            }
            else if (upperCase)
            {
                sb.append(Character.toUpperCase(c));
                upperCase = false;
            }
            else
            {
                sb.append(c);
            }
        }
        return sb.toString();
    }
    @SuppressWarnings("unchecked")
    public static <T> T cast(Object obj)
    {
        return (T) obj;
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java
@@ -5,12 +5,15 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.Instrument;
import com.yuanchu.limslaboratory.pojo.MeteringPlan;
import com.yuanchu.limslaboratory.pojo.dto.AddPlanDto;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
import com.yuanchu.limslaboratory.service.MeteringPlanService;
import com.yuanchu.limslaboratory.service.UserService;
import com.yuanchu.limslaboratory.utils.JackSonUtil;
import com.yuanchu.limslaboratory.utils.RedisUtil;
import com.yuanchu.limslaboratory.utils.ServletUtils;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -19,6 +22,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
import java.util.Objects;
@@ -37,6 +41,10 @@
    @Autowired
    private MeteringPlanService meteringPlanService;
    @Resource
    private UserService userService;
    @ApiOperation("添加计量计划")
    @PostMapping("/add")
@@ -72,4 +80,15 @@
    public Result<?> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto){
        return Result.success(meteringPlanService.limitGetPlanMeasureInstrument(dto));
    }
    @ApiOperation("获取user列表和仪器列表")
    @GetMapping("/getListUserAndListIns")
    public Result<?>getListUserAndListIns(){
        return Result.success(meteringPlanService.getListUserAndListIns(userService.getUserNameAndId()));
    }
    @PostMapping("/addPlanAndMeasure")
    public Result<?>addPlanAndMeasure(@RequestBody AddPlanDto addPlanDto){
        return Result.success(meteringPlanService.addPlanAndMeasure(userService.getUserInfo(ServletUtils.getRequest().getHeader("X-Token")),addPlanDto));
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java
@@ -87,4 +87,10 @@
    public Result<?> getMapUserInformation() {
        return Result.success(userService.getUserNameAndId());
    }
    @ApiOperation("更新计量结果")
    public Result<?> updateMetricalInformationResult(String code,Integer result){
        return null;
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java
@@ -2,6 +2,7 @@
import com.yuanchu.limslaboratory.pojo.MetricalInformation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@@ -17,4 +18,6 @@
public interface MetricalInformationMapper extends BaseMapper<MetricalInformation> {
    List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId);
    int insertBatchInformation(@Param("informationList") List<MetricalInformation>informationList);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java
@@ -45,4 +45,9 @@
    private String imCreateName;
    private String uncertainty;
    private String performanceIndex;
    private String remarks;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
@@ -41,6 +41,8 @@
    @ApiModelProperty(value = "仪器关联Id", example = "1", required = true)
    private Integer instrumentId;
    private Integer plan;
    @ApiModelProperty(value = "计量单位", example = "GB", required = true)
    private String measurementUnit;
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddPlanDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.yuanchu.limslaboratory.pojo.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/19
 */
@Data
@ApiModel(value = "GetPlanMeasureInstrumentDto对象", description = "")
public class AddPlanDto implements Serializable {
    @ApiModelProperty(value = "计量信息", required = false)
    List<Map<String, Object>>measureList;
    @ApiModelProperty(value = "计划信息", required = true)
    Map<String, Object>plan;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/UserAndInsVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.yuanchu.limslaboratory.pojo.vo;
import com.yuanchu.limslaboratory.pojo.Instrument;
import com.yuanchu.limslaboratory.pojo.User;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/19
 */
@Data
public class UserAndInsVo implements Serializable {
    List<Map<String, Object>>userList;
    List<Instrument>instrumentList;
    public UserAndInsVo(List<Map<String, Object>> userList, List<Instrument> instrumentList) {
        this.userList = userList;
        this.instrumentList = instrumentList;
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java
@@ -6,9 +6,11 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.limslaboratory.pojo.MeteringPlanAndInfoAndIns;
import com.yuanchu.limslaboratory.pojo.MetricalInfoAndIns;
import com.yuanchu.limslaboratory.pojo.dto.AddPlanDto;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
import com.yuanchu.limslaboratory.pojo.vo.UserAndInsVo;
import java.util.List;
import java.util.Map;
@@ -33,4 +35,8 @@
    Map<String, Object> getPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto);
    Map<String, Object> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto);
    UserAndInsVo getListUserAndListIns(List<Map<String, Object>> userNameAndId);
    boolean addPlanAndMeasure(Map<String, Object> userInfo, AddPlanDto addPlanDto);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
@@ -1,22 +1,27 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.mapper.InstrumentMapper;
import com.yuanchu.limslaboratory.mapper.MetricalInformationMapper;
import com.yuanchu.limslaboratory.pojo.*;
import com.yuanchu.limslaboratory.mapper.MeteringPlanMapper;
import com.yuanchu.limslaboratory.pojo.dto.AddPlanDto;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
import com.yuanchu.limslaboratory.pojo.vo.UserAndInsVo;
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 org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
/**
 * <p>
@@ -32,6 +37,12 @@
    @Resource
    private MeteringPlanMapper meteringPlanMapper;
    @Resource
    private InstrumentMapper instrumentMapper;
    @Resource
    private MetricalInformationMapper metricalInformationMapper;
    @Override
    public Integer addMeteringPlanInformation(MeteringPlan meteringPlan) {
        String timeSixNumber = MyUtil.getTimeSixNumberCode("P","P");
@@ -44,13 +55,17 @@
        List<MeteringPlanAndInfo> page= meteringPlanMapper
                .limitConditionMeteringPlan(dto,new LimitPage((dto.getCurrentPage()-1)*dto.getPageSize(), dto.getPageSize()));
        page.forEach(l->{
            AtomicBoolean haveZero= new AtomicBoolean(false);
            l.getResultList().forEach(r->{
                if (r.getResult() < 1) {
                    l.setStatus(0);
                if (r.getResult()<1) {
                    haveZero.set(true);
                }else {
                    l.setStatus(1);
                }
            });
            if(haveZero.get()){
                l.setStatus(0);
            }
            l.setResultList(null);
        });
        Map<String, Object>all=new HashMap<>(2);
@@ -83,4 +98,55 @@
                        ,dto.getPageSize()),dto.getId()));
        return map;
    }
    @Override
    public UserAndInsVo getListUserAndListIns(List<Map<String, Object>> userNameAndId) {
        QueryWrapper<Instrument>queryWrapper=new QueryWrapper<Instrument>();
        queryWrapper.lambda()
                .select(Instrument::getEquipmentName,Instrument::getId,Instrument::getMeasuringRange,Instrument::getTermValidity)
                .eq(Instrument::getState,true);
        List<Instrument> instruments = instrumentMapper.selectList(queryWrapper);
        return new UserAndInsVo(userNameAndId,instruments);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addPlanAndMeasure(Map<String, Object> userInfo, AddPlanDto addPlanDto) {
        //计划添加
        MeteringPlan meteringPlan=new MeteringPlan();
        String timeSixNumber = MyUtil.getTimeSixNumberCode("P","P");
        meteringPlan.setPlannedOrderNumber(timeSixNumber);
        meteringPlan.setCreatePerson(Integer.parseInt(String.valueOf(userInfo.get("id"))));
        meteringPlan.setUnit(String.valueOf(addPlanDto.getPlan().get("unit")));
        meteringPlan
                .setBeginTime(DateUtil.
                        parseDate(String.valueOf(addPlanDto.getPlan().get("startTime"))));
        meteringPlan.setEndTime(DateUtil.
                parseDate(String.valueOf(addPlanDto.getPlan().get("endTime"))));
        meteringPlan.setCreateTime(DateUtil.date());
        meteringPlan.setMeasurePerson(Integer.parseInt(String.valueOf(addPlanDto.getPlan().get("measurePerson"))));
        meteringPlan.setUpdateTime(DateUtil.date());
        meteringPlan.setPlanningStatus(3);
        boolean addPlan = meteringPlanMapper.insert(meteringPlan) > 0;
        //新增计量
        List<MetricalInformation>informationList=new ArrayList<>();
        addPlanDto.getMeasureList().forEach(l->{
            MetricalInformation info=new MetricalInformation();
            info.setInstrumentId(Integer.parseInt(String.valueOf(l.get("equipmentPointName"))));
            info.setUserId(Integer.parseInt(String.valueOf(userInfo.get("id"))));
            info.setCreateTime(DateUtil.date());
            Date endDate=Objects.nonNull(l.get("endDate"))?DateUtil.parseDate(String.valueOf(l.get("endDate"))):null;
            info.setEndDate(endDate);
            Integer result=Objects.nonNull(l.get("result"))?Integer.parseInt(String.valueOf(l.get("result"))):null;
            info.setResult(result);
            info.setMeasurementUnit(meteringPlan.getUnit());
            info.setCode(MyUtil.getTimeSixNumberCode("METRICALCODE","METRICALCODE"));
            info.setUpdateTime(DateUtil.date());
            info.setPlan(meteringPlan.getId());
            informationList.add(info);
        });
        return addPlan&&metricalInformationMapper.insertBatchInformation(informationList)>0;
    }
}
laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
@@ -1,6 +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">
    <insert id="insertBatchInformation">
        insert metrical_information (id,code,user_id,plan,instrument_id,measurement_unit,end_date,result,create_time,update_time)
        values
        <foreach collection="informationList" item="info" separator=",">
            (null,#{info.code},#{info.userId},#{info.plan},#{info.instrumentId},#{info.measurementUnit},#{info.endDate},#{info.result},#{info.createTime},#{info.updateTime})
        </foreach>
    </insert>
    <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,
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java
@@ -38,6 +38,15 @@
        return Result.success(productService.pageProductInformation(specificationsId));
    }
    //@ApiOperation("填写标准值与内控值,鼠标移开保存")
    @ApiOperation("填写标准值与内控值,鼠标移开保存")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "标准项目ID", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "required", value = "标准值", dataTypeClass = String.class, required = true),
            @ApiImplicitParam(name = "internal", value = "内控值", dataTypeClass = String.class, required = true)
    })
    @PostMapping("/write")
    public Result<?> write(Integer id, String required, String internal) {
        return Result.success(productService.write(id, required, internal));
    }
}
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java
@@ -21,7 +21,7 @@
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Api(tags = "标准库-->3、产品规格")
@Api(tags = "标准库-->3、产品型号")
@RestController
@RequestMapping("/specifications")
public class SpecificationsController {
@@ -41,7 +41,7 @@
    @ApiOperation("删除产品型号")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "specificationsId", value = "规格Id", dataTypeClass = Integer.class, required = true)
            @ApiImplicitParam(name = "specificationsId", value = "型号Id", dataTypeClass = Integer.class, required = true)
    })
    @DeleteMapping("/delete")
    public Result<?> deleteSpecificationsInformation(Integer specificationsId) {
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java
@@ -17,7 +17,7 @@
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-11
 */
@Api(tags = "标准库-->2、标准")
@Api(tags = "标准库-->2、规格(标准)")
@RestController
@RequestMapping("/standards")
public class StandardController {
standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java
@@ -28,4 +28,14 @@
     * @return
     */
    List<Map<String,Object>> pageProductInformation(Integer specificationsId);
    /**
     * å¡«å†™æ ‡å‡†å€¼ä¸Žå†…控值,鼠标移开保存
     * @param id
     * @param required
     * @param internal
     * @return
     */
    Integer write(Integer id, String required, String internal);
}
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java
@@ -44,7 +44,7 @@
    @Override
    public void deleteProductInformation(List<Integer> SpecificationsId) {
        for (Integer materialId : SpecificationsId){
        for (Integer materialId : SpecificationsId) {
            LambdaUpdateWrapper<Product> wrapper = new LambdaUpdateWrapper<>();
            wrapper.eq(Product::getSpecifications_id, materialId);
            wrapper.set(Product::getState, 0);
@@ -59,5 +59,16 @@
        return productMapper.pageProductInformation(specificationsId);
    }
    //填写标准值与内控值,鼠标移开保存
    @Override
    public Integer write(Integer id, String required, String internal) {
        Product product = new Product();
        product.setId(id);
        product.setRequired(required);
        product.setInternal(internal);
        productMapper.updateById(product);
        return 1;
    }
}
standard-server/src/main/resources/mapper/ProductMapper.xml
@@ -13,13 +13,14 @@
    <!--展示该型号下的检验项目要求-->
    <select id="pageProductInformation" resultType="java.util.Map">
        select name,
        select id,
               name,
               father,
               unit,
               required,
               internal
        from lims_laboratory.product
        where state=1
        and specifications_id=#{specificationsId}
        where state = 1
          and specifications_id = #{specificationsId}
    </select>
</mapper>
standard-server/src/main/resources/mapper/ProductModelMapper.xml
@@ -1,8 +1,18 @@
<?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.ProductModelMapper">
    <resultMap id="selectproductModelMap" type="map">
        <id property="father" column="father"/>
        <collection property="children" resultMap="selectproductModelTowMap" javaType="List"/>
    </resultMap>
    <resultMap id="selectproductModelTowMap" type="map">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="unit" column="unit"/>
    </resultMap>
    <!--查询标准模版列表-->
    <select id="selectproductModel" resultType="java.util.Map">
    <select id="selectproductModel" resultMap="selectproductModelMap">
        select id,
        father,
        name,
@@ -16,7 +26,6 @@
        <if test="father!=null and father!=''">
            and father like concat('%',#{father},'%')
        </if>
        order by father
    </select>
    <update id="delAllproductModel">