From 1d1091013432cbac77a38b32d7d6d4f809b1b378 Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期一, 21 八月 2023 09:02:49 +0800
Subject: [PATCH] 计量管理-》计划计量新增

---
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java                  |    5 
 laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml                                |    7 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java                 |    2 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/StringUtils.java                                |  403 +++++++++++++++++++++++++++++++++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java |    6 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java         |    3 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java              |    6 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/ServletUtils.java                               |  137 +++++++++++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddPlanDto.java                      |   26 ++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java        |   19 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java     |   76 +++++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/UserAndInsVo.java                     |   25 ++
 12 files changed, 710 insertions(+), 5 deletions(-)

diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/ServletUtils.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/ServletUtils.java
new file mode 100644
index 0000000..5c5e0ae
--- /dev/null
+++ b/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;
+    }
+
+    /**
+     * 鏄惁鏄疉jax寮傛璇锋眰
+     *
+     * @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;
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/StringUtils.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/StringUtils.java
new file mode 100644
index 0000000..d1c65d7
--- /dev/null
+++ b/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;
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狢ollection鏄惁涓虹┖锛� 鍖呭惈List锛孲et锛孮ueue
+     *
+     * @param coll 瑕佸垽鏂殑Collection
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Collection<?> coll)
+    {
+        return isNull(coll) || coll.isEmpty();
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue
+     *
+     * @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);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+     *
+     * @param map 瑕佸垽鏂殑Map
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Map<?, ?> map)
+    {
+        return isNull(map) || map.isEmpty();
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+     *
+     * @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);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級
+     *
+     * @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>
+     * 閫氬父浣跨敤锛歠ormat("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;
+    }
+
+    /**
+     * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆� 渚嬪锛欻ELLO_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();
+    }
+
+    /**
+     * 椹煎嘲寮忓懡鍚嶆硶 渚嬪锛歶ser_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;
+    }
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java
index 44b2456..9d025b2 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java
+++ b/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));
+    }
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java
index a409b73..fa11132 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java
+++ b/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;
+    }
+
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java
index ef27ce7..bcd429b 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java
+++ b/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);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java
index 2e08a84..a63535e 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java
+++ b/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;
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
index 07225d3..f0ea9a9 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
+++ b/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;
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddPlanDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddPlanDto.java
new file mode 100644
index 0000000..1245115
--- /dev/null
+++ b/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;
+
+
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/UserAndInsVo.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/UserAndInsVo.java
new file mode 100644
index 0000000..d43836a
--- /dev/null
+++ b/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;
+    }
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java
index b69a3d3..f7ac33f 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java
+++ b/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);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
index eb42a3b..f2a7ef3 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
@@ -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;
+    }
+
+
 }
diff --git a/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml b/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
index 858dbf3..58d321a 100644
--- a/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
+++ b/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,

--
Gitblit v1.9.3