Compare commits

..

3 Commits

Author SHA1 Message Date
tangw
550bc7f825 Merge remote-tracking branch 'origin/master' 2026-01-21 17:54:23 +08:00
tangw
73f0668514 质控 2026-01-21 17:53:56 +08:00
tangw
9a27fa2f81 质控 2026-01-21 17:53:30 +08:00
7 changed files with 164 additions and 4 deletions

View File

@ -1,6 +1,7 @@
package com.czlis.common.core.domain.entity.lis; package com.czlis.common.core.domain.entity.lis;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -13,11 +14,16 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
public class QcVal { public class QcVal {
private Long qc_valid; private Long qc_valid;
@ApiModelProperty(value = "仪器")
private String yq; private String yq;
@ApiModelProperty(value = "质控日期")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private Date zkrq; private Date zkrq;
@ApiModelProperty(value = "项目代码")
private String xmdh; private String xmdh;
@ApiModelProperty(value = "质控号")
private String zkph; private String zkph;
@ApiModelProperty(value = "批号")
private String zkpph; private String zkpph;
private Integer cs; private Integer cs;
private String instrybh; private String instrybh;

View File

@ -3,23 +3,29 @@ package com.czlis.liswork.controller.qc;
import com.czlis.common.core.controller.BaseController; import com.czlis.common.core.controller.BaseController;
import com.czlis.common.core.domain.Result; import com.czlis.common.core.domain.Result;
import com.czlis.common.core.domain.entity.lis.QcVal; import com.czlis.common.core.domain.entity.lis.QcVal;
import com.czlis.liswork.service.QcStatService;
import com.czlis.liswork.service.QcValService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController @RestController
@RequestMapping("/qcstat") @RequestMapping("/qcstat")
@Slf4j @Slf4j
@Api(tags = "质控数据统计") @Api(tags = "质控数据统计")
public class QcStatController extends BaseController { public class QcStatController extends BaseController {
@Autowired
private QcStatService qcStatService;
@ApiOperation("查询质控数据") @ApiOperation("查询质控数据")
@GetMapping("/getmonthst") @GetMapping("/getmonthst")
public Result getmonthst(QcVal qcVal) { public Result getmonthst(QcVal qcVal) {
return new Result("0","获取数据成功!"); return qcStatService.queryMonthst(qcVal);
} }
} }

View File

@ -1,4 +1,14 @@
package com.czlis.liswork.mapper; package com.czlis.liswork.mapper;
import com.czlis.liswork.pojo.DTO.QcMonthstDTO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface QcStatMapper { public interface QcStatMapper {
List<QcMonthstDTO> queryMonthst(@Param("yq") String yq , @Param("zkrq") Date zkrq, @Param("zkph") String zkph);
List<QcMonthstDTO> queryMonthst2(@Param("yq") String yq , @Param("zkrq") Date zkrq, @Param("zkph") String zkph);
List<QcMonthstDTO> queryMonthst3(@Param("yq") String yq , @Param("zkrq") Date zkrq, @Param("zkph") String zkph);
} }

View File

@ -0,0 +1,58 @@
package com.czlis.liswork.pojo.DTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class QcMonthstDTO {
@ApiModelProperty(value = "仪器")
private String yq;
@ApiModelProperty(value = "项目代码")
private String xmdh;
@ApiModelProperty(value = "项目名称")
private String xmmc;
@ApiModelProperty(value = "质控号")
private String zkph;
@ApiModelProperty(value = "批号")
private String zkpph;
@ApiModelProperty(value = "测定数")
private Integer cnt;
@ApiModelProperty(value = "失控数")
private Integer badcnt;
@ApiModelProperty(value = "处理数")
private Integer process;
@ApiModelProperty(value = "绘图基准CV%")
private BigDecimal cv0;
@ApiModelProperty(value = "绘图基准SD")
private BigDecimal sd0;
@ApiModelProperty(value = "绘图基准靶值")
private BigDecimal avg0;
@ApiModelProperty(value = "本月原始CV%")
private BigDecimal cv1;
@ApiModelProperty(value = "本月原始SD")
private BigDecimal sd1;
@ApiModelProperty(value = "本月原始平均值")
private BigDecimal avg1;
@ApiModelProperty(value = "本月非失控CV%")
private BigDecimal cv2;
@ApiModelProperty(value = "本月非失控SD")
private BigDecimal sd2;
@ApiModelProperty(value = "本月非失控平均值")
private BigDecimal avg2;
@ApiModelProperty(value = "累计CV%")
private BigDecimal cv3;
@ApiModelProperty(value = "累计SD")
private BigDecimal sd3;
@ApiModelProperty(value = "累计平均值")
private BigDecimal avg3;
@ApiModelProperty(value = "累计次数")
private Integer cnt3;
@ApiModelProperty(value = "标准CV%")
private BigDecimal qccv;
}

View File

@ -1,4 +1,11 @@
package com.czlis.liswork.service; package com.czlis.liswork.service;
import com.czlis.common.core.domain.Result;
import com.czlis.common.core.domain.entity.lis.QcVal;
import java.util.Date;
public interface QcStatService { public interface QcStatService {
Result queryMonthst(QcVal qcVal);
} }

View File

@ -1,8 +1,45 @@
package com.czlis.liswork.service.impl.qc; package com.czlis.liswork.service.impl.qc;
import com.czlis.common.core.domain.Result;
import com.czlis.common.core.domain.entity.lis.QcVal;
import com.czlis.liswork.mapper.QcStatMapper;
import com.czlis.liswork.pojo.DTO.QcMonthstDTO;
import com.czlis.liswork.service.QcStatService; import com.czlis.liswork.service.QcStatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@Service @Service
public class QcStatServiceImpl implements QcStatService { public class QcStatServiceImpl implements QcStatService {
@Autowired
private QcStatMapper qcStatMapper;
@Override
public Result queryMonthst(QcVal qcVal){
String yq=qcVal.getYq();
String zkph=qcVal.getZkph();
Date zkrq=qcVal.getZkrq();
List<QcMonthstDTO> monthst=qcStatMapper.queryMonthst(yq,zkrq,zkph);
List<QcMonthstDTO> monthst2=qcStatMapper.queryMonthst2(yq,zkrq,zkph);
List<QcMonthstDTO> monthst3=qcStatMapper.queryMonthst3(yq,zkrq,zkph);
for(QcMonthstDTO qcMonthstDTO:monthst){
String xmdh=qcMonthstDTO.getXmdh();
Optional<QcMonthstDTO> monthst0=monthst2.stream().filter(ss->xmdh.equals(ss.getXmdh())).findAny();
if(monthst0.isPresent()) {
qcMonthstDTO.setAvg2(monthst0.get().getAvg2());
qcMonthstDTO.setCv2(monthst0.get().getCv2());
qcMonthstDTO.setSd2(monthst0.get().getSd2());
}
Optional<QcMonthstDTO> monthsttemp=monthst3.stream().filter(ss->xmdh.equals(ss.getXmdh())).findAny();
if(monthsttemp.isPresent()) {
qcMonthstDTO.setAvg3(monthsttemp.get().getAvg3());
qcMonthstDTO.setCv3(monthsttemp.get().getCv3());
qcMonthstDTO.setSd3(monthsttemp.get().getSd3());
qcMonthstDTO.setCnt3(monthsttemp.get().getCnt3());
}
}
return new Result("0","成功",monthst);
}
} }

View File

@ -2,7 +2,43 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" > "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czlis.liswork.mapper.QcStatMapper"> <mapper namespace="com.czlis.liswork.mapper.QcStatMapper">
<select id="queryOne" resultType="com.czlis.common.core.domain.entity.lis.QcSample"> <select id="queryMonthst" resultType="com.czlis.liswork.pojo.DTO.QcMonthstDTO">
select * from qc_sample where yq = #{yq} and xmdh = #{xmdh} and zkph = #{zkph} and ksrq = #{ksrq} SELECT qc_val.yq,qc_val.xmdh,xm_info.xmmc,xm_info.dyxh,qc_val.zkph,count(1) cnt,
sum((case when qc_val.zkjg>(zkbz + 3*sd) then 1 when (zkbz - 3*sd)>qc_val.zkjg then 1 when isnull(outreason,'')!='' then 1 else 0 end) ) as badcnt,
sum(case when isnull(bz,'')!='' then 1 else 0 end) as process,
cast(qc_sample.zkbz as decimal(12, 3)) as avg0,
cast(qc_sample.sd as decimal(12, 3)) as sd0,
cast(qc_sample.cv as decimal(12, 3)) as cv0,
cast(avg(zkjg) as decimal(12, 3)) avg1,
cast(STDEV(zkjg) as decimal(12, 3)) sd1,
cast(100*STDEV(zkjg)/avg(zkjg) as decimal(12, 3)) as cv1,
max(qc_sample.zkpph) as zkpph,
max(isnull(qc_sample.qccv,xm_info.qccv)) as qccv
FROM qc_val join xm_info on xm_info.yq=qc_val.yq and xm_info.xmdh=qc_val.xmdh
join qc_sample on qc_sample.yq=qc_val.yq and qc_sample.xmdh=qc_val.xmdh and qc_sample.zkph=qc_val.zkph
and qc_sample.ksrq=(select max(ksrq) from qc_sample x where x.yq=qc_val.yq and x.xmdh=qc_val.xmdh and x.zkph=qc_val.zkph and qc_val.zkrq>=x.ksrq)
where convert(char(8),zkrq,120) = convert(char(8),#{zkrq} ,120)
and qc_val.yq=#{yq} and qc_val.zkph=#{zkph}
group by qc_val.yq,qc_val.zkph,qc_val.xmdh,xm_info.xmmc,xm_info.dyxh,qc_sample.zkbz,qc_sample.sd,qc_sample.cv
order by xm_info.dyxh
</select>
<select id="queryMonthst2" resultType="com.czlis.liswork.pojo.DTO.QcMonthstDTO">
SELECT qc_val.yq,qc_val.xmdh,qc_val.zkph,count(1) cnt,cast(avg(zkjg) as decimal(12, 3)) avg2,
cast(STDEV(zkjg) as decimal(12, 3)) sd2,cast(100*STDEV(zkjg)/avg(zkjg) as decimal(12, 3)) as cv2
FROM qc_val join xm_info on xm_info.yq=qc_val.yq and xm_info.xmdh=qc_val.xmdh
join qc_sample on qc_sample.yq=qc_val.yq and qc_sample.xmdh=qc_val.xmdh and qc_sample.zkph=qc_val.zkph
and qc_sample.ksrq=(select max(ksrq) from qc_sample x where x.yq=qc_val.yq and x.xmdh=qc_val.xmdh and x.zkph=qc_val.zkph and qc_val.zkrq>=x.ksrq)
where convert(char(8),zkrq,120) = convert(char(8),#{zkrq} ,120)
and (zkbz + 3*sd)>qc_val.zkjg and qc_val.zkjg>(zkbz - 3*sd) and isnull(outreason,'')=''
and qc_val.yq=#{yq} and qc_val.zkph=#{zkph}
group by qc_val.yq,qc_val.zkph,qc_val.xmdh
</select>
<select id="queryMonthst3" resultType="com.czlis.liswork.pojo.DTO.QcMonthstDTO">
SELECT qc_val.yq,qc_val.xmdh,qc_val.zkph,count(1) cnt3,cast(avg(zkjg) as decimal(12, 3)) avg3,
cast(STDEV(zkjg) as decimal(12, 3)) sd3,cast(100*STDEV(zkjg)/avg(zkjg) as decimal(12, 3)) as cv3
FROM qc_val where zkrq>=(select max(ksrq) from qc_sample x where x.yq=qc_val.yq and x.xmdh=qc_val.xmdh and x.zkph=qc_val.zkph and convert(datetime,convert(char(8),#{zkrq},120)+'01') >=x.ksrq)
and isnull((select min(ksrq) from qc_sample x where x.yq=qc_val.yq and x.xmdh=qc_val.xmdh and x.zkph=qc_val.zkph and x.ksrq>(select max(ksrq) from qc_sample x where x.yq=qc_val.yq and x.xmdh=qc_val.xmdh and x.zkph=qc_val.zkph and x.ksrq<=convert(datetime,convert(char(8),#{zkrq},120)+'01')) and convert(datetime,convert(char(8),DATEADD(month,1,#{zkrq}),120)+'01')>=x.ksrq ),convert(datetime,convert(char(8),DATEADD(month,1,#{zkrq}),120)+'01') )>zkrq
and qc_val.yq=#{yq} and qc_val.zkph=#{zkph}
group by qc_val.yq,qc_val.zkph,qc_val.xmdh
</select> </select>
</mapper> </mapper>