From b7586ba9b38136c7af8ca9b31f92f570a0b039c2 Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期一, 21 八月 2023 18:02:35 +0800
Subject: [PATCH] 计量管理-》计量修改                                  试验管理-》合格率统计

---
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java                             |    2 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/QualificationRateStatisticsService.java          |   25 ++
 laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml                                                  |   24 ++
 framework/src/main/java/com/yuanchu/limslaboratory/utils/MapUtil.java                                               |   36 +++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java         |   18 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SeriesDto.java                                  |   32 ++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectQualificationRateDto.java                 |   52 ++++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/QualificationRateStatisticsServiceImpl.java |  101 +++++++++
 inspection-server/src/main/resources/mapper/QualificationRateStatisticsMapper.xml                                   |   27 ++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/MapHandlerDto.java                              |   22 ++
 framework/src/main/java/com/yuanchu/limslaboratory/utils/ArrayListUtil.java                                         |  128 +++++++++++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/QualificationRateStatisticsMapper.java            |   22 ++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java                  |    3 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/QualificationRateStatisticsController.java    |   50 ++++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java            |    6 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdatedMetricalInformationDto.java              |   43 +++
 framework/src/main/java/com/yuanchu/limslaboratory/utils/JsonUtil.java                                              |   54 ++++
 17 files changed, 641 insertions(+), 4 deletions(-)

diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/ArrayListUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/ArrayListUtil.java
new file mode 100644
index 0000000..760e5c7
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/ArrayListUtil.java
@@ -0,0 +1,128 @@
+package com.yuanchu.limslaboratory.utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @Author 寮犲
+ */
+public class ArrayListUtil {
+
+    /**
+     * 鍗曞�奸泦鍚堝幓閲�
+     * @param objList
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> singleValueDistinct(List<T>objList){
+        return  objList.stream().distinct().collect(Collectors.toList());
+    }
+
+    /**
+     * 鍗曞�奸泦鍚堟瘮杈� 涓婚泦鍚堜腑涓庢闆嗗悎涓嶇浉绛夋暟鎹�
+     * @param mainList 涓婚泦鍚�
+     * @param secondaryList 娆¤闆嗗悎
+     * @param <T>
+     * @return 涓婚泦鍚堜腑璺熸瑕侀泦鍚堜笉鐩哥瓑鐨勬暟鎹�
+     */
+    public static <T> List<T> compareNotEqualListBySingleValue(List<T>mainList,List<T>secondaryList){
+        return mainList.stream().filter(item -> !secondaryList.stream()
+                        .map(e -> e).distinct().collect(Collectors.toList())
+                        .contains(item))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 鍗曞�奸泦鍚堟瘮杈� 涓婚泦鍚堜腑涓庢闆嗗悎鐩哥瓑鏁版嵁
+     * @param mainList 涓婚泦鍚�
+     * @param secondaryList 娆¤闆嗗悎
+     * @param <T>
+     * @return 涓婚泦鍚堜腑璺熸瑕侀泦鍚堜笉鐩哥瓑鐨勬暟鎹�
+     */
+    public static <T> List<T> compareEqualListBySingleValue(List<T>mainList,List<T>secondaryList){
+        return mainList.stream().filter(item -> secondaryList.stream()
+                        .map(e -> e).collect(Collectors.toList())
+                        .contains(item))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 鍗曞�奸泦鍚堝悎骞�
+     * @param isDistinct
+     * @param values
+     * @param <T>
+     * @return
+     */
+    @SafeVarargs
+    public static <T> List<T> mergeListBySingleValue(boolean isDistinct, List<T>... values){
+        //鍘婚噸鍚堝苟
+        if (isDistinct){
+            return Stream.of(values).flatMap(Collection::stream).distinct().collect(Collectors.toList());
+        }
+        return Stream.of(values).flatMap(Collection::stream).collect(Collectors.toList());
+    }
+
+    /**
+     * 鍗曚釜瀵硅薄闆嗗悎鏍规嵁瀵硅薄灞炴�у幓閲嶉泦鍚�
+     * @param keyExtractor
+     * @param objects
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> oneObjectsDistinctByProperty(Function<? super T, ?> keyExtractor,List<T> objects){
+        List<T> newList = new ArrayList<>();
+        objects.stream().filter(distinctByKey(keyExtractor))  //filter淇濈暀true鐨勫��
+                .forEach(newList::add);
+        return newList;
+    }
+
+    /**
+     * 澶氬璞¢泦鍚堝悎骞舵牴鎹睘鎬у幓閲�
+     * @param objects
+     * @param <T>
+     * @return
+     */
+    @SafeVarargs
+    public static <T> List<T> mergeListByObjectsDistinct(Function<? super T, ?> keyExtractor,List<T>... objects){
+        List<T> tList = mergeListByObjects(objects);
+        return oneObjectsDistinctByProperty(keyExtractor,tList);
+    }
+
+    /**
+     * 澶氬璞¢泦鍚堝悎骞舵棤闇�鍘婚噸 閲嶈浇
+     * @param objects
+     * @param <T>
+     * @return
+     */
+    @SafeVarargs
+    public static <T> List<T> mergeListByObjectsDistinct(List<T>... objects){
+        return mergeListByObjects(objects);
+    }
+
+    private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor)  {
+        Map<Object,Boolean> seen = new ConcurrentHashMap<>();
+        //putIfAbsent鏂规硶娣诲姞閿�煎锛屽鏋渕ap闆嗗悎涓病鏈夎key瀵瑰簲鐨勫�硷紝鍒欑洿鎺ユ坊鍔狅紝骞惰繑鍥瀗ull锛屽鏋滃凡缁忓瓨鍦ㄥ搴旂殑鍊硷紝鍒欎緷鏃т负鍘熸潵鐨勫�笺��
+        //濡傛灉杩斿洖null琛ㄧず娣诲姞鏁版嵁鎴愬姛(涓嶉噸澶�)锛屼笉閲嶅(null==null :TRUE)
+        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
+    }
+
+    /**
+     * 瀵硅薄闆嗗悎鍚堝苟
+     * @param objects
+     * @param <T>
+     * @return
+     */
+    @SafeVarargs
+    private static <T> List<T> mergeListByObjects(List<T>... objects){
+        return Stream.of(objects).flatMap(Collection::stream).collect(Collectors.toList());
+    }
+
+
+}
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/JsonUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/JsonUtil.java
new file mode 100644
index 0000000..27b1f82
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/JsonUtil.java
@@ -0,0 +1,54 @@
+package com.yuanchu.limslaboratory.utils;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import java.text.SimpleDateFormat;
+
+/**
+ * @Author 寮犲
+ */
+public class JsonUtil {
+
+	private static ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+	static {
+		JSON_MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+		JSON_MAPPER.registerModule(new JavaTimeModule());
+	}
+
+	/**
+	 * json杞崲瀵瑰簲瀹炰綋
+	 * @param json
+	 * @param clazz
+	 * @param <T>
+	 * @return
+	 */
+	public static <T> T jsonToPojo(String json, Class<T> clazz){
+		T t=null;
+		try {
+			t=JSON_MAPPER.readValue(json,clazz);
+		} catch (JsonProcessingException e) {
+			e.printStackTrace();
+		}
+		return t;
+	}
+
+	/**
+	 * 瀹炰綋杞崲鎴恓son瀛楃
+	 * @param t
+	 * @param <T>
+	 * @return
+	 */
+	public static <T> String jsonToString(T t){
+		String result=null;
+		try {
+			result=JSON_MAPPER.writeValueAsString(t);
+		} catch (JsonProcessingException e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
+
+}
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MapUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MapUtil.java
new file mode 100644
index 0000000..072aadf
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MapUtil.java
@@ -0,0 +1,36 @@
+package com.yuanchu.limslaboratory.utils;
+
+import org.apache.commons.lang3.ArrayUtils;
+
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ */
+public class MapUtil{
+
+
+
+    /**
+     * Map涓牴鎹甼ey鎵归噺鍒犻櫎閿�煎
+     * @param map
+     * @param excludeKeys
+     * @param <K>
+     * @param <V>
+     * @return
+     */
+    public static <K, V> Map removeEntries(Map<K, V> map, K[] excludeKeys) {
+        Iterator<K> iterator = map.keySet().iterator();
+        while (iterator.hasNext()) {
+            K key = iterator.next();
+            // 濡傛灉key 鍒氬ソ鍦ㄨ鎺掗櫎鐨刱ey鐨勮寖鍥翠腑
+            if (ArrayUtils.contains(excludeKeys, key)) {
+                iterator.remove();
+                map.remove(key);
+            }
+        }
+        return map;
+    }
+}
+
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/QualificationRateStatisticsController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/QualificationRateStatisticsController.java
new file mode 100644
index 0000000..4f3c981
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/QualificationRateStatisticsController.java
@@ -0,0 +1,50 @@
+package com.yuanchu.limslaboratory.controller;
+
+import com.yuanchu.limslaboratory.pojo.Dto.SelectQualificationRateDto;
+import com.yuanchu.limslaboratory.service.QualificationRateStatisticsService;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+@Api(tags = "璇曢獙绠$悊-->鍚堟牸鐜囩粺璁�")
+@RequestMapping("/qualificationRate")
+@RestController
+public class QualificationRateStatisticsController {
+
+    @Resource
+    private QualificationRateStatisticsService service;
+
+    @ApiOperation("鏌ヨ鐢宠鐗╂枡鍗曚緵搴斿晢鍒楄〃")
+    @GetMapping("/getSupplierList")
+    public Result<?> getSupplierList() {
+        return Result.success(service.getSupplierList());
+    }
+
+    @ApiOperation("鏌ヨ妫�楠屾牱鍝佸悎鏍肩巼缁熻")
+    @GetMapping("/getTestSampleStatistics")
+    public Result<?> getTestSampleStatistics(SelectQualificationRateDto dto){
+        return Result.success(service.getTestSampleStatistics(dto));
+    }
+
+    @ApiOperation("鏌ヨ渚涘簲鍟嗕笉鍚堟牸缁熻娆℃暟")
+    @GetMapping("/getSupplierNoPassStatistics")
+    public Result<?> getSupplierNoPassStatistics(SelectQualificationRateDto dto){
+        return Result.success(service.getSupplierNoPassStatistics(dto));
+    }
+
+    @ApiOperation("鏌ヨ涓嶅悎鏍奸」鐩粺璁�")
+    @GetMapping("/getNoPassProjectStatistics")
+    public Result<?> getNoPassProjectStatistics(SelectQualificationRateDto dto){
+        return Result.success(service.getNoPassProjectStatistics(dto));
+    }
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/QualificationRateStatisticsMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/QualificationRateStatisticsMapper.java
new file mode 100644
index 0000000..590dc28
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/QualificationRateStatisticsMapper.java
@@ -0,0 +1,22 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.yuanchu.limslaboratory.pojo.Dto.SelectQualificationRateDto;
+import org.apache.ibatis.annotations.MapKey;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+@Repository
+public interface QualificationRateStatisticsMapper {
+
+    @MapKey("id")
+    List<Map<String, Object>>selectSupplierByCondition(@Param("dto") SelectQualificationRateDto dto);
+
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/MapHandlerDto.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/MapHandlerDto.java
new file mode 100644
index 0000000..03c894f
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/MapHandlerDto.java
@@ -0,0 +1,22 @@
+package com.yuanchu.limslaboratory.pojo.Dto;
+
+import com.yuanchu.limslaboratory.utils.JackSonUtil;
+import com.yuanchu.limslaboratory.utils.JsonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+@Component
+@Slf4j
+public class MapHandlerDto {
+
+    public static  String comparingBySupplier(Object o){
+        Map map= JsonUtil.jsonToPojo(JsonUtil.jsonToString(o),Map.class);
+        return String.valueOf(map.get("supplier"));
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectQualificationRateDto.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectQualificationRateDto.java
new file mode 100644
index 0000000..29d0c71
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectQualificationRateDto.java
@@ -0,0 +1,52 @@
+package com.yuanchu.limslaboratory.pojo.Dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+@Data
+@ApiModel(value="鏌ヨ鍚堟牸鐜囧璞�", description="")
+public class SelectQualificationRateDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date beginDate;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endDate;
+
+    /***
+     * 绫诲瀷
+     */
+    @ApiModelProperty(value = "妫�楠岀被鍨�")
+    private Integer type;
+
+    /**
+     * 渚涘簲鍟�
+     */
+    @ApiModelProperty(value = "渚涘簲鍟�")
+    private String supplier;
+
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SeriesDto.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SeriesDto.java
new file mode 100644
index 0000000..1474065
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SeriesDto.java
@@ -0,0 +1,32 @@
+package com.yuanchu.limslaboratory.pojo.Dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+@Data
+public class SeriesDto implements Serializable {
+
+    private String name;
+    private List<Long> data;
+    private String type;
+    private String stack;
+
+    public SeriesDto(String name, List<Long> data) {
+        this.name = name;
+        this.data = data;
+        this.type = "bar";
+        this.stack = "x";
+    }
+
+    public SeriesDto(String name) {
+        this.name = name;
+        this.type = "bar";
+        this.stack = "x";
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/QualificationRateStatisticsService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/QualificationRateStatisticsService.java
new file mode 100644
index 0000000..35640c3
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/QualificationRateStatisticsService.java
@@ -0,0 +1,25 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.yuanchu.limslaboratory.pojo.Dto.SelectQualificationRateDto;
+import com.yuanchu.limslaboratory.pojo.InspectionMaterial;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+public interface QualificationRateStatisticsService {
+    /**
+     * 鑾峰彇鐢宠鐗╂枡鍗曚笅鎵�鏈変緵搴斿晢鍒楄〃
+     * @return
+     */
+    List<InspectionMaterial> getSupplierList();
+
+    Map<String, Object> getTestSampleStatistics(SelectQualificationRateDto dto);
+
+    Map<String, Object> getSupplierNoPassStatistics(SelectQualificationRateDto dto);
+
+    Map<String, Object> getNoPassProjectStatistics(SelectQualificationRateDto dto);
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/QualificationRateStatisticsServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/QualificationRateStatisticsServiceImpl.java
new file mode 100644
index 0000000..dea8314
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/QualificationRateStatisticsServiceImpl.java
@@ -0,0 +1,101 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import cn.hutool.json.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.yuanchu.limslaboratory.mapper.InspectionMaterialMapper;
+import com.yuanchu.limslaboratory.mapper.QualificationRateStatisticsMapper;
+import com.yuanchu.limslaboratory.pojo.Dto.MapHandlerDto;
+import com.yuanchu.limslaboratory.pojo.Dto.SelectQualificationRateDto;
+import com.yuanchu.limslaboratory.pojo.Dto.SeriesDto;
+import com.yuanchu.limslaboratory.pojo.InspectionMaterial;
+import com.yuanchu.limslaboratory.service.QualificationRateStatisticsService;
+import com.yuanchu.limslaboratory.utils.ArrayListUtil;
+import com.yuanchu.limslaboratory.utils.JackSonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+@Service
+@Slf4j
+public class QualificationRateStatisticsServiceImpl implements QualificationRateStatisticsService {
+
+    @Resource
+    private InspectionMaterialMapper inspectionMaterialMapper;
+
+    @Resource
+    private QualificationRateStatisticsMapper qualificationRateStatisticsMapper;
+
+    @Override
+    public List<InspectionMaterial> getSupplierList() {
+        QueryWrapper<InspectionMaterial> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().select(InspectionMaterial::getSupplier)
+                .eq(InspectionMaterial::getState, 1).groupBy(InspectionMaterial::getSupplier);
+        return inspectionMaterialMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public Map<String, Object> getTestSampleStatistics(SelectQualificationRateDto dto) {
+        System.out.println(dto);
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> getSupplierNoPassStatistics(SelectQualificationRateDto dto) {
+        Map<String, Object> allMap = new HashMap<>(16);
+        List<Map<String, Object>> mapList = qualificationRateStatisticsMapper.selectSupplierByCondition(dto);
+        mapList.forEach(System.out::println);
+        System.out.println("=================================");
+        //鍘婚噸鍙栧嚭渚涘簲鍟�
+        List<Map<String, Object>> supplierDistinct = ArrayListUtil.oneObjectsDistinctByProperty(MapHandlerDto::comparingBySupplier, mapList);
+        List<String> supplierList = new ArrayList<String>();
+        supplierDistinct.forEach(l -> {
+            supplierList.add(String.valueOf(l.get("supplier")));
+        });
+        allMap.put("xAxis", supplierList);
+        List<SeriesDto>seriesDtoList=new ArrayList<SeriesDto>(2);
+        SeriesDto seriesDto2=new SeriesDto("涓嶅悎鏍兼暟閲�");
+        SeriesDto seriesDto=new SeriesDto("鍚堟牸鏁伴噺");
+        // 鍙栧嚭瀵瑰簲鍚堟牸鏁伴噺涓嶅悎鏍兼暟閲�
+        List<Long>pass=new ArrayList<>();
+        List<Long>noPass=new ArrayList<>();
+        AtomicLong integerPass=new AtomicLong(0L);
+        AtomicLong integerNoPass=new AtomicLong(0L);
+        supplierList.forEach(s -> {
+            mapList.stream()
+                    .filter(l -> Objects.equals(l.get("supplier"), s))
+                    .forEach(l -> {
+                        if(Objects.equals(l.get("inspectionStatus"),1)){
+                            integerPass.incrementAndGet();
+                        }else {
+                            integerNoPass.incrementAndGet();
+                        }
+                    });
+            pass.add(integerPass.get());
+            noPass.add(integerNoPass.get());
+            integerNoPass.set(0L);
+            integerPass.set(0L);
+        });
+        seriesDto.setData(pass);
+        seriesDto2.setData(noPass);
+        seriesDtoList.add(seriesDto);
+        seriesDtoList.add(seriesDto2);
+        System.out.println("鏁伴噺=======>");
+        System.out.println(seriesDtoList);
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> getNoPassProjectStatistics(SelectQualificationRateDto dto) {
+        return null;
+    }
+
+
+}
diff --git a/inspection-server/src/main/resources/mapper/QualificationRateStatisticsMapper.xml b/inspection-server/src/main/resources/mapper/QualificationRateStatisticsMapper.xml
new file mode 100644
index 0000000..754f647
--- /dev/null
+++ b/inspection-server/src/main/resources/mapper/QualificationRateStatisticsMapper.xml
@@ -0,0 +1,27 @@
+<?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.QualificationRateStatisticsMapper">
+    <select id="selectSupplierByCondition" resultType="java.util.Map">
+        SELECT i.id,
+        i.type,
+        im.`name`,
+        im.supplier,
+        i.inspection_status inspectionStatus,
+        i.start_time startTime,
+        i.end_time endTime
+        FROM inspection i
+        INNER JOIN inspection_material im ON i.id = im.inspection_id
+        where (i.state = 1 AND TRUE = IFNULL(i.inspection_status, FALSE))
+        <if test="dto.beginDate!=null and dto.endDate!=null">
+            DATE_FORMAT( i.end_time, '%Y-%m-%d' ) BETWEEN #{dto.beginDate}
+            AND #{dto.endDate}
+            AND DATE_FORMAT( i.start_time, '%Y-%m-%d' )>= #{dto.beginDate}
+        </if>
+        <if test="dto.type!=null">
+            and i.type=#{dto.type}
+        </if>
+        <if test="dto.supplier!=null and dto.supplier!=''">
+            and im.supplier=#{dto.supplier}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
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 fa11132..cabf979 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
@@ -2,6 +2,7 @@
 
 import com.yuanchu.limslaboratory.pojo.MetricalInformation;
 import com.yuanchu.limslaboratory.pojo.dto.UpdateMetricalInformationDto;
+import com.yuanchu.limslaboratory.pojo.dto.UpdatedMetricalInformationDto;
 import com.yuanchu.limslaboratory.service.MetricalInformationService;
 import com.yuanchu.limslaboratory.service.UserService;
 import com.yuanchu.limslaboratory.utils.JackSonUtil;
@@ -89,8 +90,9 @@
     }
 
     @ApiOperation("鏇存柊璁¢噺缁撴灉")
-    public Result<?> updateMetricalInformationResult(String code,Integer result){
-        return null;
+    @PostMapping("/updateMetricalInformationInfo")
+    public Result<?> updateMetricalInformationInfo(@RequestBody UpdatedMetricalInformationDto dto){
+        return Result.success(metricalInformationService.updateMetricalInformationInfo(dto));
     }
 
 }
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 a63535e..ff44554 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
@@ -21,6 +21,8 @@
 @ApiModel(value="MeteringPlanAndInfoAndIns瀵硅薄", description="")
 public class MetricalInfoAndIns extends Instrument implements Serializable {
 
+    private Long imId;
+
     @ApiModelProperty(value = "璁¢噺缂栧彿", example = "1", required = true)
     private String code;
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdatedMetricalInformationDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdatedMetricalInformationDto.java
new file mode 100644
index 0000000..1202cf4
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/UpdatedMetricalInformationDto.java
@@ -0,0 +1,43 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "UpdatedMetricalInformationDto瀵硅薄", description = "")
+public class UpdatedMetricalInformationDto implements Serializable {
+
+ @ApiModelProperty(value = "涓婚敭", example = "1", required = true)
+ private Integer id;
+ @ApiModelProperty(value = "缂栫爜", example = "1", required = true)
+ private String code;
+ @ApiModelProperty(value = "缁撴灉", example = "1", required = true)
+ private Integer result;
+ @ApiModelProperty(value = "璁¢噺鏃ユ湡", example = "1", required = true)
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
+ private Date date;
+ @ApiModelProperty(value = "涓嶇‘瀹氬害", example = "1", required = true)
+ private String uncertainty;
+ @ApiModelProperty(value = "鎬ц兘鎸囨爣", example = "1", required = true)
+ private String performanceIndex;
+ @ApiModelProperty(value = "澶囨敞", example = "1", required = true)
+ private String remarks;
+ //@ApiModelProperty(value = "鏂囦欢", example = "1", required = true)
+ //private MultipartFile[] file;
+ //@ApiModelProperty(value = "鏈夋晥鍛ㄦ湡", example = "1", required = true)
+ //private String termValidity;
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java
index eb8ad69..04ad32b 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java
@@ -2,6 +2,7 @@
 
 import com.yuanchu.limslaboratory.pojo.MetricalInformation;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.dto.UpdatedMetricalInformationDto;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -24,4 +25,6 @@
     Integer deleteMetricalInformation(Integer metricalInformationId);
 
     Integer updateMetricalInformation(MetricalInformation metricalInformation, MultipartFile file);
+
+    boolean updateMetricalInformationInfo(UpdatedMetricalInformationDto dto);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
index c52e053..ae2dc00 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
@@ -1,9 +1,11 @@
 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.MetricalInformation;
 import com.yuanchu.limslaboratory.mapper.MetricalInformationMapper;
+import com.yuanchu.limslaboratory.pojo.dto.UpdatedMetricalInformationDto;
 import com.yuanchu.limslaboratory.service.MetricalInformationService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.limslaboratory.utils.FileSaveUtil;
@@ -68,4 +70,20 @@
         }
         return metricalInformationMapper.updateById(metricalInformation);
     }
+
+    @Override
+    public boolean updateMetricalInformationInfo(UpdatedMetricalInformationDto dto) {
+        System.out.println(dto);
+        MetricalInformation info = new MetricalInformation();
+        info.setId(dto.getId());
+        info.setRemarks(dto.getRemarks());
+        info.setPerformanceIndex(dto.getPerformanceIndex());
+        info.setResult(dto.getResult());
+        info.setUncertainty(dto.getUncertainty());
+        info.setEndDate(dto.getDate());
+        info.setUpdateTime(DateUtil.date());
+        System.out.println(info);
+        //鏂囦欢婊よ繃
+        return metricalInformationMapper.updateById(info)>0;
+    }
 }
diff --git a/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml b/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml
index f1af9c6..1a7b226 100644
--- a/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml
+++ b/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml
@@ -77,14 +77,22 @@
                im.imName                                           imName,
                im.create_time                                      imCreateTime,
                im.measurement_unit                                 imUnit,
-               im.`code`                                           imCode
+               im.`code`                                           imCode,
+               im.id                                                imId,
+               im.uncertainty                                       uncertainty ,
+               im.performance_index                                  performanceIndex ,
+               im.remarks                                           remarks
         FROM metering_plan m
                  LEFT JOIN `user` u ON m.create_Person = u.id
                  LEFT JOIN (
             SELECT i.equipment_code,
                    i.equipment_name,
                    i.measuring_range,
+                   im.id,
                    i.term_validity,
+                   im.uncertainty,
+                   im.performance_index,
+                   im.remarks,
                    im.result,
                    im.end_date,
                    (SELECT NAME FROM USER WHERE id = im.user_id) imName,
@@ -114,7 +122,11 @@
                (SELECT NAME FROM USER WHERE id = im.user_id) imName,
                im.create_time                                imCreateTime,
                im.measurement_unit                           imUnit,
-               im.`code`                                     imCode
+               im.`code`                                     imCode,
+               im.id                                            imId,
+               im.uncertainty                                       uncertainty ,
+               im.performance_index                                  performanceIndex ,
+               im.remarks                                           remarks
         FROM metrical_information im,
              metering_plan m,
              instrument i
@@ -144,6 +156,10 @@
         <result property="measuringRange" column="measuringRange"/>
         <result property="equipmentName" column="equipmentName"/>
         <result property="equipmentCode" column="equipmentCode"/>
+        <result property="imId" column="imId"/>
+        <result property="performanceIndex" column="performanceIndex"/>
+        <result property="uncertainty" column="uncertainty"/>
+        <result property="remarks" column="remarks"/>
     </resultMap>
 
     <resultMap id="measureInsAndPlanMap" type="meteringPlanAndInfoAndIns">
@@ -166,6 +182,10 @@
             <result property="measuringRange" column="measuringRange"/>
             <result property="equipmentName" column="equipmentName"/>
             <result property="equipmentCode" column="equipmentCode"/>
+            <result property="imId" column="imId"/>
+            <result property="performanceIndex" column="performanceIndex"/>
+            <result property="uncertainty" column="uncertainty"/>
+            <result property="remarks" column="remarks"/>
         </collection>
     </resultMap>
 

--
Gitblit v1.9.3