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>