XiaoRuby
2023-08-23 924d018e6e6f15effbd272cead5dff67cd3b93a5
Merge remote-tracking branch 'origin/master'

# Conflicts:
# standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
已修改26个文件
已重命名1个文件
已添加6个文件
1135 ■■■■ 文件已修改
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/HomeController.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/QualificationRateStatisticsController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionMapper.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductMapper.java 7 ●●●● 补丁 | 查看 | 原始文档 | 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/InspectionMaterial.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/IprInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/LineChartVO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/LineSeriesVO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ProjectNumVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/StatisticsDataVo.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/HomeService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/QualificationRateStatisticsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/HomeServiceImpl.java 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/QualificationRateStatisticsServiceImpl.java 153 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/InspectionMapper.xml 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/InspectionProductMapper.xml 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/PlanMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/QualificationRateStatisticsMapper.xml 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/InstrumentMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductModelController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductModelService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductModelServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/HomeController.java
@@ -1,19 +1,21 @@
package com.yuanchu.limslaboratory.controller;
import com.yuanchu.limslaboratory.pojo.ProjectNum;
import com.yuanchu.limslaboratory.pojo.vo.ProjectNumVo;
import com.yuanchu.limslaboratory.pojo.vo.StatisticsDataVo;
import com.yuanchu.limslaboratory.service.HomeService;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Service;
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;
import java.util.List;
import java.util.Map;
/**
 * é¦–页
@@ -28,10 +30,40 @@
    @Resource
    HomeService homeService;
    @ApiOperation("计算检验与未检验的单子与项目的数量接口")
    @ApiOperation("计算检验与未检验的单子与项目的数量")
    @GetMapping("/checkProjectNum")
    public Result checkProjectNum() {
        ProjectNum projectNum=homeService.checkProjectNum();
        return Result.success(projectNum);
        ProjectNumVo projectNumVo =homeService.checkProjectNum();
        return Result.success(projectNumVo);
    }
    @ApiOperation("已检验top3")
    @GetMapping("/checktop3")
    public Result checktop3() {
        List<Map<String, Object>> checktop3s =homeService.checktop3();
        return Result.success(checktop3s);
    }
    @ApiOperation("未检验top4")
    @GetMapping("/unchecktop4")
    public Result unchecktop4() {
        List<Map<String, Object>> unchecktop4s =homeService.unchecktop4();
        return Result.success(unchecktop4s);
    }
    @ApiOperation("计算原材料与成品的合格率")
    @GetMapping("/qualified")
    public Result qualified() {
        StatisticsDataVo statisticsData =homeService.qualified();
        return Result.success(statisticsData);
    }
    @ApiOperation("统计")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "type", value = "1:本周;2:本月;3:本年", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/turno")
    public Result turno(Integer type) {
        return Result.success(homeService.turno(type));
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
@@ -110,10 +110,10 @@
    }
    @ApiOperation(value = "保存检验项目责任人")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "检验单项目id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "userProId", value = "责任人id", dataTypeClass = Integer.class, required = true)
    })
        @ApiImplicitParams(value = {
                @ApiImplicitParam(name = "id", value = "检验单项目id", dataTypeClass = Integer.class, required = true),
                @ApiImplicitParam(name = "userProId", value = "责任人id", dataTypeClass = Integer.class, required = true)
        })
    @GetMapping("/chooseUseProId")
    public Result chooseUseProId(Integer id,Integer userProId) {
        return Result.success(inspectionService.chooseUseProId(id,userProId));
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/InspectionMapper.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.Inspection;
import java.util.List;
import java.util.Map;
/**
@@ -28,5 +30,47 @@
    //计算未检验的数量
    Integer seleCountUnIns();
    //获取检验单总数
    Integer getcount();
    //获取检验结论,检验数量
    List<Map<String, Object>> getResultNum();
    //计算原材料的合格率
    Long qualified(Integer b);
    //计算原材料检验单总数
    Integer getallmater();
    //计算成品检验单总数
    Integer getallfin();
    //计算原材料合格率
    Long qualifiedfin(Integer i);
    //查询该日期的原材料检验数量
    Integer getMaterByDay(String time);
    //查询该日期的成品检验数量
    Integer getFinByDay(String time);
    //查询该日期的原材料合格数量
    Long getOkMaterByDay(String time);
    //查询该日期的成品合格数量
    Long getOkFinByDay(String time);
    //查询该月的原材料检验数量
    Integer getMaterByMonth(String monthofYear);
    //查询该月的成品检验数量
    Integer getFinByMonth(String monthofYear);
    //查询该月的原材料合格率
    Long getOkMaterByMonth(String monthofYear);
    //查询该月的成品合格率
    Long getOkFinByMonth(String monthofYear);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductMapper.java
@@ -4,6 +4,7 @@
import com.yuanchu.limslaboratory.pojo.InspectionProduct;
import java.util.List;
import java.util.Map;
/**
 * ç”³è¯·å•下物料中的项目(InspectionProduct)表数据库访问层
@@ -13,8 +14,7 @@
 */
public interface InspectionProductMapper extends BaseMapper<InspectionProduct> {
    //根据项目id将已有的检验结论改为null
    void upda(Integer id);
    //根据检验单id查询检验项目的检验结果
    List<Integer> getresult(Integer id);
@@ -27,5 +27,8 @@
    //计算未检验项目数量
    Integer seleCountUnInspro();
    //检验项目,设备,检验开始时间,执行人,检验结束时间
    List<Map<String, Object>> getResultNum();
}
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/InspectionMaterial.java
@@ -73,17 +73,13 @@
     **/
    private Integer state;
    /**
     * ${column.comment}
     **/
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    /**
     * ${column.comment}
     **/
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
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/pojo/vo/LineChartVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.yuanchu.limslaboratory.pojo.vo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class LineChartVO {
    private List<String> xAxis = new ArrayList<>();
    private List<LineSeriesVO> series = new ArrayList<>();
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/LineSeriesVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.yuanchu.limslaboratory.pojo.vo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class LineSeriesVO {
    private String name;
    private List<Object> data =new ArrayList<>();
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ProjectNumVo.java
ÎļþÃû´Ó inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/ProjectNum.java ÐÞ¸Ä
@@ -1,9 +1,9 @@
package com.yuanchu.limslaboratory.pojo;
package com.yuanchu.limslaboratory.pojo.vo;
import lombok.Data;
@Data
public class ProjectNum {
public class ProjectNumVo {
    private int insNum;         //已检验的检验单数量
    private int insUnNum;       //未检验的检验单数量
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/StatisticsDataVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.yuanchu.limslaboratory.pojo.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class StatisticsDataVo {
    private BigDecimal material;  //原材料合格率
    private BigDecimal unmaterial;  //原材料不合格率
    private BigDecimal notmaterial;  //原材料未检验率
    private BigDecimal finished;  //成品合格率
    private BigDecimal unfinished;  //成品不合格率
    private BigDecimal notfinished;  //成品未检验率
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/HomeService.java
@@ -1,13 +1,45 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.pojo.ProjectNum;
import com.yuanchu.limslaboratory.pojo.vo.LineChartVO;
import com.yuanchu.limslaboratory.pojo.vo.ProjectNumVo;
import com.yuanchu.limslaboratory.pojo.vo.StatisticsDataVo;
import java.util.List;
import java.util.Map;
public interface HomeService {
    /**
     * è®¡ç®—检验与未检验的单子与项目的数量接口
     *
     * @return
     */
    ProjectNum checkProjectNum();
    ProjectNumVo checkProjectNum();
    /**
     * å·²æ£€éªŒtop3
     *
     * @return
     */
    List<Map<String, Object>> checktop3();
    /**
     * æœªæ£€éªŒtop4
     *
     * @return
     */
    List<Map<String, Object>> unchecktop4();
    /**
     * è®¡ç®—原材料与成品的合格率
     * @return
     */
    StatisticsDataVo qualified();
    /**
     * ç»Ÿè®¡
     * @param type
     * @return
     */
    LineChartVO turno(Integer type);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java
@@ -42,7 +42,7 @@
     * @param value
     * @return
     */
    String check(Integer id, String value);
    Integer check(Integer id, String value);
    /**
     * ä¸ŠæŠ¥
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/HomeServiceImpl.java
@@ -1,14 +1,25 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.limslaboratory.mapper.InspectionMapper;
import com.yuanchu.limslaboratory.mapper.InspectionProductMapper;
import com.yuanchu.limslaboratory.pojo.Inspection;
import com.yuanchu.limslaboratory.pojo.ProjectNum;
import com.yuanchu.limslaboratory.pojo.vo.LineChartVO;
import com.yuanchu.limslaboratory.pojo.vo.LineSeriesVO;
import com.yuanchu.limslaboratory.pojo.vo.ProjectNumVo;
import com.yuanchu.limslaboratory.pojo.vo.StatisticsDataVo;
import com.yuanchu.limslaboratory.service.HomeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@Service
@@ -23,16 +34,234 @@
    //计算检验与未检验的单子与项目的数量接口
    @Override
    public ProjectNum checkProjectNum() {
        ProjectNum projectNum = new ProjectNum();
    public ProjectNumVo checkProjectNum() {
        ProjectNumVo projectNumVo = new ProjectNumVo();
        //已检验的检验单数量
        projectNum.setInsNum(inspectionMapper.seleCountIns());
        projectNumVo.setInsNum(inspectionMapper.seleCountIns());
        //未检验的检验单数量
        projectNum.setInsUnNum(inspectionMapper.seleCountUnIns());
        projectNumVo.setInsUnNum(inspectionMapper.seleCountUnIns());
        //已检验的检验项目数量
        projectNum.setInsproNum(inspectionProductMapper.seleCountInspro());
        projectNumVo.setInsproNum(inspectionProductMapper.seleCountInspro());
        //未检验的检验项目数量
        projectNum.setInsproUnNum(inspectionProductMapper.seleCountUnInspro());
        return projectNum;
        projectNumVo.setInsproUnNum(inspectionProductMapper.seleCountUnInspro());
        return projectNumVo;
    }
    //已检验top3
    @Override
    public List<Map<String, Object>> checktop3() {
        //获取检验单总数
        Integer allIns = inspectionMapper.getcount();
        //检验结论,检验数量
        List<Map<String, Object>> mapList = inspectionMapper.getResultNum();
        for (Map<String, Object> map : mapList) {
            //遍历获取数量
            Long num = (Long) map.get("num");
            //计算百分比并存入map中
            map.put("chact", getRadio(allIns, num));
        }
        return mapList;
    }
    //未检验tpo4
    @Override
    public List<Map<String, Object>> unchecktop4() {
        //检验项目,设备,检验开始时间,执行人,检验结束时间
        List<Map<String, Object>> mapList = inspectionProductMapper.getResultNum();
        return mapList;
    }
    //计算原材料与成品的合格率
    @Override
    @Transactional(rollbackFor = Exception.class)
    public StatisticsDataVo qualified() {
        StatisticsDataVo statisticsDataVo = new StatisticsDataVo();
        //原材料检验单总数
        Integer allmater = inspectionMapper.getallmater();
        //原材料合格率
        Long mater = inspectionMapper.qualified(1);
        statisticsDataVo.setMaterial(getRadio(allmater, mater));
        //原材料不合格率
        Long unmater = inspectionMapper.qualified(0);
        statisticsDataVo.setUnmaterial(getRadio(allmater, unmater));
        //原材料未检验率
        Long notmater = inspectionMapper.qualified(null);
        statisticsDataVo.setNotmaterial(getRadio(allmater, notmater));
        //成品检验单总数
        Integer allfin = inspectionMapper.getallfin();
        //成品合格率
        Long finished = inspectionMapper.qualifiedfin(1);
        statisticsDataVo.setFinished(getRadio(allfin, finished));
        //成品不合格率
        Long unfinished = inspectionMapper.qualifiedfin(0);
        statisticsDataVo.setUnfinished(getRadio(allfin, unfinished));
        //成品未检验率
        Long notfinished = inspectionMapper.qualifiedfin(null);
        statisticsDataVo.setNotfinished(getRadio(allfin, notfinished));
        return statisticsDataVo;
    }
    //统计
    @Override
    @Transactional(rollbackFor = Exception.class)
    public LineChartVO turno(Integer type) {
        LineChartVO lineChartVO = new LineChartVO();
        List<LineSeriesVO> series = new ArrayList<>();
        //构建第一个lineSeriesVO1(原材料检验数量)
        LineSeriesVO lineSeriesVO1 = new LineSeriesVO();
        lineSeriesVO1.setName("原材料检验数量");
        //构建第二个lineSeriesVO2(成品检验数量)
        LineSeriesVO lineSeriesVO2 = new LineSeriesVO();
        lineSeriesVO2.setName("成品检验数量");
        //构建第三个lineSeriesVO3(原材料合格率)
        LineSeriesVO lineSeriesVO3 = new LineSeriesVO();
        lineSeriesVO3.setName("原材料合格率");
        //构建第四个lineSeriesVO4(成品合格率)
        LineSeriesVO lineSeriesVO4 = new LineSeriesVO();
        lineSeriesVO4.setName("成品合格率");
        List<Object> list1 = new ArrayList<>();
        List<Object> list2 = new ArrayList<>();
        List<Object> list3 = new ArrayList<>();
        List<Object> list4 = new ArrayList<>();
        switch (type) {
            /*本周*/
            case 1:
                List<String> dayofWeeks = getDayofWeeks();
                lineChartVO.setXAxis(dayofWeeks);
                for (String dayofWeek : dayofWeeks) {
                    //查询该日期的原材料检验数量
                    Integer allMaterByDay = inspectionMapper.getMaterByDay(dayofWeek);
                    list1.add(allMaterByDay);
                    //查询该日期的成品检验数量
                    Integer allFinByDay = inspectionMapper.getFinByDay(dayofWeek);
                    list2.add(allFinByDay);
                    //查询该日期的原材料合格率
                    Long okMaterByDay = inspectionMapper.getOkMaterByDay(dayofWeek);
                    list3.add(getRadio(allMaterByDay, okMaterByDay));
                    //查询该日期的成品合格率
                    Long okFinByDay = inspectionMapper.getOkFinByDay(dayofWeek);
                    list4.add(getRadio(allFinByDay, okFinByDay));
                }
                break;
            /*本月*/
            case 2:
                List<String> dayofMonths = getDayofMonth();
                lineChartVO.setXAxis(dayofMonths);
                for (String dayofMonth : dayofMonths) {
                    //查询该日期的原材料检验数量
                    Integer allMaterByDay = inspectionMapper.getMaterByDay(dayofMonth);
                    list1.add(allMaterByDay);
                    //查询该日期的成品检验数量
                    Integer allFinByDay = inspectionMapper.getFinByDay(dayofMonth);
                    list2.add(allFinByDay);
                    //查询该日期的原材料合格率
                    Long okMaterByDay = inspectionMapper.getOkMaterByDay(dayofMonth);
                    list3.add(getRadio(allMaterByDay, okMaterByDay));
                    //查询该日期的成品合格率
                    Long okFinByDay = inspectionMapper.getOkFinByDay(dayofMonth);
                    list4.add(getRadio(allFinByDay, okFinByDay));
                }
                break;
            /*本年*/
            case 3:
                List<String> monthofYears = getMonthofYear();
                lineChartVO.setXAxis(monthofYears);
                for (String monthofYear : monthofYears) {
                    //查询该日期范围内的原材料检验数量
                    Integer allMaterByDay = inspectionMapper.getMaterByMonth(monthofYear);
                    list1.add(allMaterByDay);
                    //查询该日期的成品检验数量
                    Integer allFinByDay = inspectionMapper.getFinByMonth(monthofYear);
                    list2.add(allFinByDay);
                    //查询该日期的原材料合格率
                    Long okMaterByDay = inspectionMapper.getOkMaterByMonth(monthofYear);
                    list3.add(getRadio(allMaterByDay, okMaterByDay));
                    //查询该日期的成品合格率
                    Long okFinByDay = inspectionMapper.getOkFinByMonth(monthofYear);
                    list4.add(getRadio(allFinByDay, okFinByDay));
                }
                break;
        }
        lineSeriesVO1.setData(list1);
        lineSeriesVO2.setData(list2);
        lineSeriesVO3.setData(list3);
        lineSeriesVO4.setData(list4);
        series.add(lineSeriesVO1);
        series.add(lineSeriesVO2);
        series.add(lineSeriesVO3);
        series.add(lineSeriesVO4);
        lineChartVO.setSeries(series);
        return lineChartVO;
    }
    /*计算百分比*/
    private BigDecimal getRadio(Integer all, Long num) {
        if (all.intValue() == 0) {
            return new BigDecimal(0);
        }
        BigDecimal numBigDecimal = new BigDecimal(num);
        BigDecimal allBigDecimal = new BigDecimal(all);
        BigDecimal divide = numBigDecimal.divide(allBigDecimal, 4, BigDecimal.ROUND_HALF_UP);
        return divide.multiply(new BigDecimal(100));
    }
    /*获取本年月份list集合*/
    private List<String> getMonthofYear() {
        // èŽ·å–å½“å‰å¹´ä»½
        int year = YearMonth.now().getYear();
        // åˆ›å»ºæœˆä»½åˆ—表
        List<String> months = new ArrayList<>();
        // æ·»åŠ æœˆä»½åˆ°åˆ—è¡¨
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
        for (int i = 1; i <= 12; i++) {
            YearMonth month = YearMonth.of(year, i);
            String monthString = month.format(formatter);
            months.add(monthString);
        }
        return months;
    }
    /*获取本月日份list集合*/
    private List<String> getDayofMonth() {
        // èŽ·å–å½“å‰æ—¥æœŸ
        LocalDate now = LocalDate.now();
        // èŽ·å–å½“å‰æœˆä»½
        YearMonth currentMonth = YearMonth.from(now);
        // èŽ·å–è¯¥æœˆçš„å¤©æ•°
        int daysInMonth = currentMonth.lengthOfMonth();
        // åˆ›å»ºæ—¥æœŸåˆ—表
        List<String> dates = new ArrayList<>();
        // æ·»åŠ æ—¥æœŸåˆ°åˆ—è¡¨
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        for (int i = 1; i <= daysInMonth; i++) {
            LocalDate date = currentMonth.atDay(i);
            String dateString = date.format(formatter);
            dates.add(dateString);
        }
        return dates;
    }
    /*获取本周日份list集合*/
    private List<String> getDayofWeeks() {
        // èŽ·å–å½“å‰æ—¥æœŸ
        LocalDate now = LocalDate.now();
        // èŽ·å–æœ¬å‘¨çš„ç¬¬ä¸€å¤©å’Œæœ€åŽä¸€å¤©
        LocalDate startOfWeek = now.with(DayOfWeek.MONDAY);
        LocalDate endOfWeek = now.with(DayOfWeek.SUNDAY);
        // åˆ›å»ºæ—¥æœŸåˆ—表
        List<String> dates = new ArrayList<>();
        // æ·»åŠ æ—¥æœŸåˆ°åˆ—è¡¨
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        while (!startOfWeek.isAfter(endOfWeek)) {
            String dateString = startOfWeek.format(formatter);
            dates.add(dateString);
            startOfWeek = startOfWeek.plusDays(1);
        }
        return dates;
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java
@@ -10,8 +10,10 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
@@ -75,21 +77,24 @@
    //检验
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String check(Integer id, String value) {
        //如果检验值不为空
        if (StringUtils.isNotBlank(value)) {
            InspectionProduct inspectionProduct = inspectionProductMapper.selectById(id);
            //判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格0
            String required = inspectionProduct.getRequired();//标准值
            String internal = inspectionProduct.getInternal();//内控值
            inspectionProduct.setTestValue(value);
            inspectionProduct.setTestState(checkValues(required, internal, value));
            inspectionProductMapper.updateById(inspectionProduct);
        } else {
            //如果检验值为空,将原有的检验结论覆盖为null
            inspectionProductMapper.upda(id);
    public Integer check(Integer id, String value) {
        InspectionProduct inspectionProduct = inspectionProductMapper.selectById(id);
        //判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格0
        String required = inspectionProduct.getRequired();//标准值
        String internal = inspectionProduct.getInternal();//内控值
        inspectionProduct.setTestValue(value);
        List<Integer> list = Arrays.stream(value.split(",")).map(s -> {
            int values = checkValues(required, internal, s);
            return values;
        }).collect(Collectors.toList());
        if (list.contains(0)) {
            //如果其中一个检验值不合格则该项目检验不合格
            inspectionProduct.setTestState(0);
        }else {
            inspectionProduct.setTestState(1);
        }
        return "提交成功!";
        inspectionProductMapper.updateById(inspectionProduct);
        return inspectionProduct.getTestState();
    }
    //上报
@@ -101,7 +106,7 @@
        List<Integer> results = inspectionProductMapper.getresult(id);
        int count = 0;
        for (Integer result : results) {
            if (result != null && result==1) {
            if (result != null && result == 1) {
                count++;
            }
        }
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/InspectionMapper.xml
@@ -42,4 +42,141 @@
        where state = 1
          and inspection_status is null
    </select>
    <!--获取检验单总数-->
    <select id="getcount" resultType="java.lang.Integer">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
    </select>
    <!--检验结论,检验数量-->
    <select id="qualified" resultType="java.lang.Long">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
        and type = 0
        <if test="b!=null ">
            and inspection_status = #{b}
        </if>
        <if test="b==null">
            and inspection_status is null
        </if>
    </select>
    <!--计算原材料与成品的合格率-->
    <select id="getResultNum" resultType="java.util.Map">
        select inspection_status result,
               count(id)         num
        from lims_laboratory.inspection
        where state = 1
        group by result
        order by num desc
    </select>
    <!--计算原材料检验单总数-->
    <select id="getallmater" resultType="java.lang.Integer">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type = 0
    </select>
    <!--计算成品检验单总数-->
    <select id="getallfin" resultType="java.lang.Integer">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type in (1, 2)
    </select>
    <!--计算原材料合格率-->
    <select id="qualifiedfin" resultType="java.lang.Long">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
        and type in (1, 2)
        <if test="i!=null ">
            and inspection_status = #{i}
        </if>
        <if test="i==null">
            and inspection_status is null
        </if>
    </select>
    <!--查询该日期的原材料检验数量-->
    <select id="getMaterByDay" resultType="java.lang.Integer">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type = 0
          and create_time = #{time}
    </select>
    <!--查询该日期的成品检验数量-->
    <select id="getFinByDay" resultType="java.lang.Integer">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type in (1, 2)
          and create_time = #{time}
    </select>
    <!--查询该日期的原材料合格数量-->
    <select id="getOkMaterByDay" resultType="java.lang.Long">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type = 0
          and inspection_status = 1
          and end_time = #{time}
    </select>
    <!--查询该日期的成品合格数量-->
    <select id="getOkFinByDay" resultType="java.lang.Long">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type in (1, 2)
          and inspection_status = 1
          and end_time = #{time}
    </select>
    <!--查询该月的原材料检验数量-->
    <select id="getMaterByMonth" resultType="java.lang.Integer">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type = 0
          and DATE_FORMAT(create_time, '%Y-%m') = #{monthofYear}
    </select>
    <!--查询该月的成品检验数量-->
    <select id="getFinByMonth" resultType="java.lang.Integer">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type in (1, 2)
          and DATE_FORMAT(create_time, '%Y-%m') = #{monthofYear}
    </select>
    <!--查询该月的原材料合格率-->
    <select id="getOkMaterByMonth" resultType="java.lang.Long">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type = 0
          and inspection_status = 1
          and DATE_FORMAT(end_time, '%Y-%m') = #{monthofYear}
    </select>
    <!--查询该月的成品合格率-->
    <select id="getOkFinByMonth" resultType="java.lang.Long">
        select count(id)
        from lims_laboratory.inspection
        where state = 1
          and type in (1, 2)
          and inspection_status = 1
          and DATE_FORMAT(end_time, '%Y-%m') = #{monthofYear}
    </select>
</mapper>
inspection-server/src/main/resources/mapper/InspectionProductMapper.xml
@@ -1,12 +1,7 @@
<?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.InspectionProductMapper">
    <update id="upda">
        update lims_laboratory.inspection_product
        set test_state=null
        where id = #{id}
          and state = 1
    </update>
    <!--根据检验单id查询检验项目的检验结果-->
    <select id="getresult" resultType="java.lang.Integer">
@@ -37,4 +32,22 @@
        where state = 1
          and test_state is null
    </select>
    <!--获取检验项目,设备,检验开始时间,执行人,检验结束时间-->
    <select id="getResultNum" resultType="java.util.Map">
        select ip.name,
               equipment_name                      instrumentname,
               DATE_FORMAT(start_time, '%Y-%m-%d') startTime,
               user.name                           checkname,
               DATE_FORMAT(end_time, '%Y-%m-%d')   endTime
        from lims_laboratory.inspection_product ip
                 left join lims_laboratory.inspection_material on ip.inspection_material_id = inspection_material.id
                 left join lims_laboratory.inspection i on inspection_material.inspection_id = i.id
                 left join lims_laboratory.instrument on ip.instrument_id = instrument.id
                 left join lims_laboratory.user on ip.user_id = user.id
        where ip.state = 1
          and test_state is null
        order by start_time
        limit 4
    </select>
</mapper>
inspection-server/src/main/resources/mapper/PlanMapper.xml
@@ -8,7 +8,7 @@
        <result property="inspectionStatus" column="inspectionStatus"/>
        <result property="startTime" column="startTime"/>
        <result property="endTime" column="endTime"/>
        <collection property="chldren" resultMap="selectAllPlanMapTowsMap" javaType="List"/>
        <collection property="children" resultMap="selectAllPlanMapTowsMap" javaType="List"/>
    </resultMap>
    <resultMap id="selectAllPlanMapTowsMap" type="map">
        <id property="pid" column="pid"/>
@@ -16,6 +16,7 @@
        <result property="unit" column="unit"/>
        <result property="required" column="required"/>
        <result property="internal" column="internal"/>
        <result property="testValue" column="testValue"/>
        <result property="testState" column="testState"/>
        <result property="checker" column="checker"/>
        <result property="instrumentname" column="instrumentname"/>
@@ -33,6 +34,7 @@
        ip.unit,
        required,
        internal,
        test_value testValue,
        test_state testState,
        u.name checker,
        equipment_name instrumentname
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>
laboratory-server/src/main/resources/mapper/InstrumentMapper.xml
@@ -23,23 +23,27 @@
    <!--选择设备-->
    <resultMap id="chooseinstumMap" type="map">
        <id property="father_name" column="father_name"/>
        <collection property="father" resultMap="chooseinstumTowMap" javaType="List"/>
        <id property="id" column="cid"/>
        <result property="name" column="father_name"/>
        <collection property="children" resultMap="chooseinstumTowMap" javaType="List"/>
    </resultMap>
    <resultMap id="chooseinstumTowMap" type="map">
        <id property="son_name" column="son_name"/>
        <collection property="chldren" resultMap="chooseinstumTowsMap" javaType="List"/>
        <id property="id" column="cid"/>
        <result property="name" column="son_name"/>
        <collection property="children" resultMap="chooseinstumTowsMap" javaType="List"/>
    </resultMap>
    <resultMap id="chooseinstumTowsMap" type="map">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
    </resultMap>
    <select id="chooseinstum" resultMap="chooseinstumMap">
        select instrument.id,
               father_name,
               son_name,
        select c.id cid,
            instrument.id,
               father_name ,
               son_name ,
               equipment_name name
        from lims_laboratory.instrument
                 left join lims_laboratory.classify c on c.id = instrument.classify_id
        where conditions in(1,5)
    </select>
</mapper>
standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductModelController.java
@@ -34,11 +34,7 @@
    @Autowired
    private ProductModelService productModelService;
    @ApiOperation(value = "选择样品名称")
    @GetMapping("/selectmater")
    public Result selectmater() {
        return Result.success(productModelService.selectmater());
    }
    @ApiOperation(value = "添加标准-->选择项目分组")
    @GetMapping("/selectfather")
standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductModelService.java
@@ -17,11 +17,7 @@
 */
public interface ProductModelService extends IService<ProductModel> {
    /**
     * é€‰æ‹©æ ·å“åç§°
     * @return
     */
    List<String>  selectmater();
    /**
     * æ·»åŠ æ ‡å‡†-->选择项目分组
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java
@@ -1,10 +1,9 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.limslaboratory.mapper.ProductModelMapper;
import com.yuanchu.limslaboratory.pojo.Material;
import com.yuanchu.limslaboratory.mapper.MaterialMapper;
@@ -17,14 +16,11 @@
import com.yuanchu.limslaboratory.service.ProductService;
import com.yuanchu.limslaboratory.service.SpecificationsService;
import com.yuanchu.limslaboratory.service.StandardService;
import com.yuanchu.limslaboratory.utils.MyUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -106,8 +102,12 @@
                    List<Product> productList = productModel.stream().map(stringObjectMap -> {
                        Product product = new Product();
                        product.setName(stringObjectMap.get("name").toString());
                        product.setFather(stringObjectMap.get("father").toString());
                        product.setUnit(stringObjectMap.get("unit").toString());
                        if (ObjectUtils.isNotEmpty(stringObjectMap.get("father"))) {
                            product.setFather(stringObjectMap.get("father").toString());
                        }
                        if (ObjectUtils.isNotEmpty(stringObjectMap.get("unit"))) {
                            product.setUnit(stringObjectMap.get("unit").toString());
                        }
                        product.setSpecifications_id(specifications.getId());
                        return product;
                    }).collect(Collectors.toList());
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductModelServiceImpl.java
@@ -28,11 +28,6 @@
    @Resource
    ProductModelMapper productModelMapper;
    //选择样品
    @Override
    public List<String> selectmater() {
        return productModelMapper.selectmater();
    }
    //添加标准-->选择项目分组
    @Override
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.yuanchu.limslaboratory.mapper.ProductModelMapper;
import com.yuanchu.limslaboratory.pojo.Product;
import com.yuanchu.limslaboratory.pojo.Specifications;
@@ -14,7 +15,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
@@ -87,12 +87,12 @@
        List<Product> productList = productModel.stream().map(stringObjectMap -> {
            Product product = new Product();
            product.setName(stringObjectMap.get("name").toString());
            try{
            if (ObjectUtils.isNotEmpty(stringObjectMap.get("father"))) {
                product.setFather(stringObjectMap.get("father").toString());
            }catch (Exception e){
                product.setFather(null);
            }
            product.setUnit(stringObjectMap.get("unit").toString());
            if (ObjectUtils.isNotEmpty(stringObjectMap.get("unit"))) {
                product.setUnit(stringObjectMap.get("unit").toString());
            }
            product.setSpecifications_id(specifications.getId());
            return product;
        }).collect(Collectors.toList());
standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java
@@ -107,8 +107,12 @@
                List<Product> productList = productModel.stream().map(stringObjectMap -> {
                    Product product = new Product();
                    product.setName(stringObjectMap.get("name").toString());
                    product.setFather(stringObjectMap.get("father").toString());
                    product.setUnit(stringObjectMap.get("unit").toString());
                    if (ObjectUtils.isNotEmpty(stringObjectMap.get("father"))) {
                        product.setFather(stringObjectMap.get("father").toString());
                    }
                    if (ObjectUtils.isNotEmpty(stringObjectMap.get("unit"))) {
                        product.setUnit(stringObjectMap.get("unit").toString());
                    }
                    product.setSpecifications_id(specifications.getId());
                    return product;
                }).collect(Collectors.toList());