Fixiaobai
2023-08-22 b7e7d3b7a9bbe237e88e54eb395724717752b91e
试验管理-》合格率统计
已修改7个文件
已添加3个文件
416 ■■■■■ 文件已修改
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/QualificationRateStatisticsController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/QualificationRateStatisticsMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectProjectByCodeAndNameDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectQualificationRateDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SeriesDto.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/ImInfo.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/IprInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/QualificationRateStatisticsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/QualificationRateStatisticsServiceImpl.java 153 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/QualificationRateStatisticsMapper.xml 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/QualificationRateStatisticsController.java
@@ -32,19 +32,27 @@
    @ApiOperation("查询检验样品合格率统计")
    @GetMapping("/getTestSampleStatistics")
    public Result<?> getTestSampleStatistics(SelectQualificationRateDto dto){
        System.out.println("getTestSampleStatistics______________>"+dto);
        return Result.success(service.getTestSampleStatistics(dto));
    }
    @ApiOperation("查询供应商不合格统计次数")
    @GetMapping("/getSupplierNoPassStatistics")
    public Result<?> getSupplierNoPassStatistics(SelectQualificationRateDto dto){
        System.out.println("getSupplierNoPassStatistics++++++++++++++++>"+dto);
        return Result.success(service.getSupplierNoPassStatistics(dto));
    }
    @ApiOperation("查询不合格项目统计")
    @GetMapping("/getNoPassProjectStatistics")
    public Result<?> getNoPassProjectStatistics(SelectQualificationRateDto dto){
        System.out.println("getNoPassProjectStatistics===============>"+dto);
        return Result.success(service.getNoPassProjectStatistics(dto));
    }
    @ApiOperation("获取样品名称")
    @GetMapping("/getSampleOptions")
    public Result<?> getSampleOptions(){
        return Result.success(service.getSampleOptions());
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/QualificationRateStatisticsMapper.java
@@ -1,6 +1,8 @@
package com.yuanchu.limslaboratory.mapper;
import com.yuanchu.limslaboratory.pojo.Dto.SelectProjectByCodeAndNameDto;
import com.yuanchu.limslaboratory.pojo.Dto.SelectQualificationRateDto;
import com.yuanchu.limslaboratory.pojo.ImInfo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -18,5 +20,12 @@
    @MapKey("id")
    List<Map<String, Object>>selectSupplierByCondition(@Param("dto") SelectQualificationRateDto dto);
    List<ImInfo>selectProjectionsByCondition(@Param("dto")SelectQualificationRateDto dto);
    List<ImInfo>selectProjection(@Param("list") List<SelectProjectByCodeAndNameDto> list,@Param("dto")SelectQualificationRateDto dto);
    @MapKey("id")
    List<Map<String, Object>> selectTestSamp(@Param("dto") SelectQualificationRateDto dto);
    List<Map<String, Object> >getSampleOptions();
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectProjectByCodeAndNameDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.yuanchu.limslaboratory.pojo.Dto;
import lombok.Data;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/22
 */
@Data
public class SelectProjectByCodeAndNameDto implements Serializable {
    private String code;
    private String name;
    public SelectProjectByCodeAndNameDto() {
    }
    public SelectProjectByCodeAndNameDto(String code, String name) {
        this.code = code;
        this.name = name;
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SelectQualificationRateDto.java
@@ -48,5 +48,9 @@
    @ApiModelProperty(value = "供应商")
    private String supplier;
    @ApiModelProperty(value = "样品")
    private String sample;
    @ApiModelProperty(value = "编码")
    private String code;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/SeriesDto.java
@@ -13,20 +13,20 @@
public class SeriesDto implements Serializable {
    private String name;
    private List<Long> data;
    private List<Double> data;
    private String type;
    private String stack;
    //private String stack;
    public SeriesDto(String name, List<Long> data) {
    public SeriesDto(String name, List<Double> data) {
        this.name = name;
        this.data = data;
        this.type = "bar";
        this.stack = "x";
        //this.stack = "x";
    }
    public SeriesDto(String name) {
        this.name = name;
        this.type = "bar";
        this.stack = "x";
        //this.stack = "x";
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/ImInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.yuanchu.limslaboratory.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/22
 */
@Data
public class ImInfo implements Serializable {
    private Long imId;
    private String imName;
    private String iCode;
    private Integer inspectionStatus;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endTime;
    private List<IprInfo>iprInfos;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/IprInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.yuanchu.limslaboratory.pojo;
import lombok.Data;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/22
 */
@Data
public class IprInfo implements Serializable {
    private int iprId;
    private String iprName;
    private Integer testState;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/QualificationRateStatisticsService.java
@@ -22,4 +22,6 @@
    Map<String, Object> getSupplierNoPassStatistics(SelectQualificationRateDto dto);
    Map<String, Object> getNoPassProjectStatistics(SelectQualificationRateDto dto);
    List<Map<String, Object>> getSampleOptions();
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/QualificationRateStatisticsServiceImpl.java
@@ -5,8 +5,10 @@
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.SelectProjectByCodeAndNameDto;
import com.yuanchu.limslaboratory.pojo.Dto.SelectQualificationRateDto;
import com.yuanchu.limslaboratory.pojo.Dto.SeriesDto;
import com.yuanchu.limslaboratory.pojo.ImInfo;
import com.yuanchu.limslaboratory.pojo.InspectionMaterial;
import com.yuanchu.limslaboratory.service.QualificationRateStatisticsService;
import com.yuanchu.limslaboratory.utils.ArrayListUtil;
@@ -15,6 +17,7 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.NumberFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@@ -30,6 +33,8 @@
    @Resource
    private InspectionMaterialMapper inspectionMaterialMapper;
    private static final List<String> TYPE_LIST =Arrays.asList("原材料","成品","委托品");
    private static final List<Integer> TYPE_INT_LIST =Arrays.asList(0,1,2);
    @Resource
    private QualificationRateStatisticsMapper qualificationRateStatisticsMapper;
@@ -43,16 +48,60 @@
    @Override
    public Map<String, Object> getTestSampleStatistics(SelectQualificationRateDto dto) {
        System.out.println(dto);
        return null;
        Map<String, Object> mapResult = new HashMap<>(16);
        List<Map<String, Object>> mapList = qualificationRateStatisticsMapper.selectTestSamp(dto);
        if(mapList.size()<=0){
            mapResult.put("noData",false);
            return mapResult;
        }
        mapResult.put("xAxis",TYPE_LIST);
        List<Map<String, Object>>list=new ArrayList<>();
        Map<String, Object>mapPass=new HashMap<>(3);
        mapPass.put("name","合格");
        mapPass.put("type","bar");
        Map<String, Object>mapNoPass=new HashMap<>(3);
        mapNoPass.put("name","不合格");
        mapNoPass.put("type","bar");
        List<Integer>passInteger=new ArrayList<>();
        List<Integer>noPasInteger=new ArrayList<>();
        AtomicInteger integerPass = new AtomicInteger(0);
        AtomicInteger integerNoPass = new AtomicInteger(0);
        for (int i = 0; i < TYPE_INT_LIST.size(); i++) {
            int finalI = i;
            mapList.stream().filter(m->Objects.equals(String.valueOf(m.get("type")),String.valueOf(TYPE_INT_LIST.get(finalI))))
                    .forEach(m->{
                        System.out.println(m.get("type"));
                        if(Objects.equals(m.get("inspectionStatus"),0)){
                            integerNoPass.incrementAndGet();
                        }
                        if(Objects.equals(m.get("inspectionStatus"),1)){
                            integerPass.incrementAndGet();
                        }
                    });
            passInteger.add(integerPass.get());
            noPasInteger.add(integerNoPass.get());
            integerPass.set(0);
            integerNoPass.set(0);
        }
        mapPass.put("data",passInteger);
        mapNoPass.put("data",noPasInteger);
        list.add(mapPass);
        list.add(mapNoPass);
        mapResult.put("series",list);
        mapResult.put("noData",true);
        System.out.println("执行结束getTestSampleStatistics________________>"+mapResult);
        //System.out.println(mapResult);
        return mapResult;
    }
    @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("=================================");
        if(mapList.size()<=0){
            allMap.put("noData",false);
            return allMap;
        }
        //去重取出供应商
        List<Map<String, Object>> supplierDistinct = ArrayListUtil.oneObjectsDistinctByProperty(MapHandlerDto::comparingBySupplier, mapList);
        List<String> supplierList = new ArrayList<String>();
@@ -60,21 +109,21 @@
            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<SeriesDto> seriesDtoList = new ArrayList<SeriesDto>(2);
        SeriesDto seriesDto = new SeriesDto("合格数量");
        SeriesDto seriesDto2 = new SeriesDto("不合格数量");
        // å–出对应合格数量不合格数量
        List<Long>pass=new ArrayList<>();
        List<Long>noPass=new ArrayList<>();
        AtomicLong integerPass=new AtomicLong(0L);
        AtomicLong integerNoPass=new AtomicLong(0L);
        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)){
                        if (Objects.equals(l.get("inspectionStatus"), 1)) {
                            integerPass.incrementAndGet();
                        }else {
                        } else {
                            integerNoPass.incrementAndGet();
                        }
                    });
@@ -83,19 +132,83 @@
            integerNoPass.set(0L);
            integerPass.set(0L);
        });
        seriesDto.setData(pass);
        seriesDto2.setData(noPass);
        List<Double> percentPass = new ArrayList<>();
        List<Double> percentNoPass = new ArrayList<>();
        for (int i = 0; i < pass.size(); i++) {
            long total = (pass.get(i) + noPass.get(i));
            double passNO = 0.00;
            if (pass.get(i) != 0L) {
                passNO = Double.parseDouble(getPercent(pass.get(i), total).replace("%", ""));
            }
            double noPassNO = 0.00;
            if (noPass.get(i) != 0L) {
                noPassNO = Double.parseDouble(getPercent(noPass.get(i), total).replace("%", ""));
            }
            percentPass.add(passNO);
            percentNoPass.add(noPassNO);
        }
        seriesDto.setData(percentPass);
        seriesDto2.setData(percentNoPass);
        seriesDtoList.add(seriesDto);
        seriesDtoList.add(seriesDto2);
        System.out.println("数量=======>");
        System.out.println(seriesDtoList);
        return null;
        allMap.put("series", seriesDtoList);
        allMap.put("noData",true);
        System.out.println("getSupplierNoPassStatistics结果++++++++++++++++>"+allMap);
        return allMap;
    }
    @Override
    public Map<String, Object> getNoPassProjectStatistics(SelectQualificationRateDto dto) {
        return null;
        Map<String, Object> allMap = new HashMap<>(16);
        List<ImInfo> imInfos = qualificationRateStatisticsMapper.selectProjectionsByCondition(dto);
        List<String>NameList = new ArrayList<>();
        List<SelectProjectByCodeAndNameDto>projectByCodeAndNameDtos=new ArrayList<>();
        if(imInfos.size()<=0){
            allMap.put("noData",false);
            return allMap;
        }
        imInfos.forEach(l->{
            NameList.add(l.getICode()+"-"+l.getImName());
            projectByCodeAndNameDtos.add(new SelectProjectByCodeAndNameDto(l.getICode(),l.getImName()));
        });
        List<ImInfo> imInfosAll = qualificationRateStatisticsMapper.selectProjection(projectByCodeAndNameDtos,dto);
        int total = imInfosAll.size();
        List<Integer>noPas=new ArrayList<>();
        AtomicInteger i=new AtomicInteger(0);
        NameList.forEach(n->{
            imInfos.stream()
                    .filter(im-> Objects.equals(n,im.getICode()+"-"+im.getImName()))
                    .forEach(im->{
                        i.set(im.getIprInfos().size());
                    });
            noPas.add(i.get());
            i.set(0);
        });
        List<Map<String, Object>>doubleList=new ArrayList<>();
        for (int j = 0; j < noPas.size(); j++) {
            Map<String, Object>map=new HashMap<>();
            map.put("name",NameList.get(j));
            map.put("value",Double.parseDouble(getPercent(noPas.get(j),total).replace("%","")));
            doubleList.add(map);
        }
        allMap.put("legend",NameList);
        allMap.put("series",doubleList);
        allMap.put("noData",true);
        System.out.println("getNoPassProjectStatistics结果==========================>"+allMap);
        return allMap;
    }
    @Override
    public List<Map<String, Object>> getSampleOptions() {
        return qualificationRateStatisticsMapper.getSampleOptions();
    }
}
    public static String getPercent(long x, long y) {
        double d1 = x * 1.0;
        double d2 = y * 1.0;
        NumberFormat percentInstance = NumberFormat.getPercentInstance();
        // è®¾ç½®ä¿ç•™å‡ ä½å°æ•°ï¼Œè¿™é‡Œè®¾ç½®çš„æ˜¯ä¿ç•™ä¸¤ä½å°æ•°
        percentInstance.setMinimumFractionDigits(2);
        return percentInstance.format(d1 / d2);
    }
}
inspection-server/src/main/resources/mapper/QualificationRateStatisticsMapper.xml
@@ -11,7 +11,7 @@
        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))
        where (i.state = 1 AND i.inspection_status is NOT NULL and im.state=1)
        <if test="dto.beginDate!=null and dto.endDate!=null">
            DATE_FORMAT( i.end_time, '%Y-%m-%d' ) BETWEEN #{dto.beginDate}
            AND #{dto.endDate}
@@ -23,5 +23,154 @@
        <if test="dto.supplier!=null and dto.supplier!=''">
            and im.supplier=#{dto.supplier}
        </if>
        <if test="dto.sample!=null and dto.sample!=''">
            and im.name=#{dto.sample}
        </if>
        <if test="dto.code!=null and dto.code!=''">
            and i.code=#{dto.code}
        </if>
    </select>
    <select id="selectProjectionsByCondition" resultMap="ImInfoMap">
        SELECT
        im.id imId,
        im.`name` imName,
        i.inspection_status inspectionStatus,
        i.start_time startTime,
        i.end_time endTime,
        ipr.id iprId,
        ipr.`name` iprName,
        ipr.test_state testState,
        i.code iCode,
        i.type type
        FROM
        inspection i,
        inspection_material im,
        inspection_product ipr
        WHERE
        i.id = im.inspection_id
        AND im.id = ipr.inspection_material_id
        AND  i.state = 1
        AND im.state = 1
        AND ipr.state = 1
        AND i.inspection_status is NOT NULL
        AND ipr.test_state is not null
        AND ipr.test_state = 0
        <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>
        <if test="dto.sample!=null and dto.sample!=''">
            and im.name=#{dto.sample}
        </if>
        <if test="dto.code!=null and dto.code!=''">
            and i.code=#{dto.code}
        </if>
    </select>
    <select id="selectProjection" resultMap="ImInfoMap">
        SELECT
        im.id imId
        FROM
        inspection i,
        inspection_material im,
        inspection_product ipr
        WHERE
        i.id = im.inspection_id
        AND im.id = ipr.inspection_material_id
        AND  i.state = 1
        AND im.state = 1
        AND ipr.state = 1
        AND i.inspection_status is NOT NULL
        AND ipr.test_state is not null
        <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>
        <if test="dto.sample!=null and dto.sample!=''">
            and im.name=#{dto.sample}
        </if>
        <if test="dto.code!=null and dto.code!=''">
            and i.code=#{dto.code}
        </if>
        and i.code in
        <foreach collection="list" item="l" open="(" close=")" separator="," >
            #{l.code}
        </foreach>
        and im.name in
        <foreach collection="list" item="l" open="(" close=")" separator=",">
            #{l.name}
        </foreach>
    </select>
    <select id="selectTestSamp" 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 i.inspection_status is NOT NULL and im.state=1)
        <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>
        <if test="dto.sample!=null and dto.sample!=''">
            and im.name=#{dto.sample}
        </if>
        <if test="dto.code!=null and dto.code!=''">
            and i.code=#{dto.code}
        </if>
    </select>
    <select id="getSampleOptions" resultType="java.util.Map">
        SELECT
            i.id,
            i.type,
            im.`name` name,
            im.supplier,
            i.inspection_status inspectionStatus,
            i.start_time startTime,
            i.end_time endTime,
            i.`code`
        FROM
            inspection i
                INNER JOIN inspection_material im ON i.id = im.inspection_id
        WHERE
            ( i.state = 1 AND i.inspection_status IS NOT NULL AND im.state = 1 )
    </select>
    <resultMap id="ImInfoMap" type="com.yuanchu.limslaboratory.pojo.ImInfo">
        <result property="imId" column="imId"/>
        <result property="iCode" column="iCode"/>
        <result property="imName" column="imName"/>
        <result property="startTime" column="startTime"/>
        <result property="endTime" column="endTime"/>
        <result property="inspectionStatus" column="inspectionStatus"/>
        <collection property="iprInfos" ofType="iprInfo">
            <result property="iprId" column="iprId"/>
            <result property="iprName" column="iprName"/>
            <result property="testState" column="testState"/>
        </collection>
    </resultMap>
</mapper>