添加了一些统计的功能,例如检出率
This commit is contained in:
@@ -81,4 +81,15 @@ public class EntrustMaterialCheckoutResultController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("查询所有检出检材的毒品种类清单,并按名称进行排序")
|
||||||
|
@GetMapping("/getResultType")
|
||||||
|
public R getResultType(Integer year){
|
||||||
|
return R.ok(entrustMaterialCheckoutResultService.getResultType(year),"查询成功!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("查询所有毒品的检出率")
|
||||||
|
@GetMapping("/getDetectionRate")
|
||||||
|
public R getDetectionRateByMaterial(Integer year){
|
||||||
|
return R.ok(entrustMaterialCheckoutResultService.getDetectionRateByMaterial(year),"查询成功!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
import digital.laboratory.platform.entrustment.dto.EntrustMaterialCheckoutResultDTO;
|
import digital.laboratory.platform.entrustment.dto.EntrustMaterialCheckoutResultDTO;
|
||||||
import digital.laboratory.platform.entrustment.entity.EntrustMaterialCheckoutResult;
|
import digital.laboratory.platform.entrustment.entity.EntrustMaterialCheckoutResult;
|
||||||
import digital.laboratory.platform.entrustment.query.EntrustMaterialCheckoutResultQuery;
|
import digital.laboratory.platform.entrustment.query.EntrustMaterialCheckoutResultQuery;
|
||||||
|
import digital.laboratory.platform.entrustment.vo.DetectionRateVO;
|
||||||
import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO;
|
import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ChenJiangBao
|
* @author ChenJiangBao
|
||||||
@@ -47,4 +49,8 @@ public interface EntrustMaterialCheckoutResultService extends IService<EntrustMa
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
IPage<EntrustMaterialCheckoutResultVO> voiPage(EntrustMaterialCheckoutResultQuery query);
|
IPage<EntrustMaterialCheckoutResultVO> voiPage(EntrustMaterialCheckoutResultQuery query);
|
||||||
|
|
||||||
|
List<String> getResultType(Integer year);
|
||||||
|
|
||||||
|
DetectionRateVO getDetectionRateByMaterial(Integer year);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,17 +21,18 @@ import digital.laboratory.platform.entrustment.service.CommonFeignService;
|
|||||||
import digital.laboratory.platform.entrustment.service.EntrustMaterialCheckoutResultService;
|
import digital.laboratory.platform.entrustment.service.EntrustMaterialCheckoutResultService;
|
||||||
import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService;
|
import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService;
|
||||||
import digital.laboratory.platform.entrustment.service.EntrustmentService;
|
import digital.laboratory.platform.entrustment.service.EntrustmentService;
|
||||||
|
import digital.laboratory.platform.entrustment.vo.DetectionRateVO;
|
||||||
import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO;
|
import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO;
|
||||||
import digital.laboratory.platform.sys.entity.Area;
|
import digital.laboratory.platform.sys.entity.Area;
|
||||||
import digital.laboratory.platform.sys.entity.DrugLite;
|
import digital.laboratory.platform.sys.entity.DrugLite;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
@@ -357,6 +358,123 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl<Entrus
|
|||||||
}
|
}
|
||||||
return typeName;
|
return typeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
/**
|
||||||
|
* 获取指定年份的所有毒品类型列表(去重并排序)
|
||||||
|
* <p>
|
||||||
|
* 该方法通过查询指定年份内所有非空且不为空的定性结果,提取其中的毒品类型信息,
|
||||||
|
* 并返回一个去重且按字典序排序的毒品类型列表。
|
||||||
|
*
|
||||||
|
* @param year 年份,若为 null 则默认使用当前年份
|
||||||
|
* @return 包含所有毒品类型的列表,列表中的毒品类型名称已去重并排序
|
||||||
|
*
|
||||||
|
* @see EntrustMaterialCheckoutResult 委托材料检验结果实体类,包含定性结果字段
|
||||||
|
* @see DrugLite 药品轻量级实体类,包含药品名称字段
|
||||||
|
* @see DrugLiteConvert 工具类,用于将定性结果转换为毒品轻量级实体列表
|
||||||
|
*/
|
||||||
|
public List<String> getResultType(Integer year) {
|
||||||
|
// 根据年份构建查询起始时间
|
||||||
|
LocalDateTime startTime = null;
|
||||||
|
if (year != null) {
|
||||||
|
// 如果年份不为空,使用指定年份的1月1日 00:00:00
|
||||||
|
startTime = LocalDateTime.of(year, 1, 1, 0, 0);
|
||||||
|
} else {
|
||||||
|
// 如果年份为空,默认使用当前年份的1月1日 00:00:00
|
||||||
|
startTime = LocalDateTime.of(LocalDateTime.now().getYear(), 1, 1, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询所有非空且不为空的定性结果,且创建时间大于等于起始时间
|
||||||
|
List<EntrustMaterialCheckoutResult> list = this.list(Wrappers.<EntrustMaterialCheckoutResult>lambdaQuery()
|
||||||
|
.ne(EntrustMaterialCheckoutResult::getQualitativeResult, "") // 排除空字符串
|
||||||
|
.isNotNull(EntrustMaterialCheckoutResult::getQualitativeResult) // 排除空值
|
||||||
|
.ge(EntrustMaterialCheckoutResult::getCreateTime, startTime)); // 创建时间大于等于起始时间
|
||||||
|
|
||||||
|
// 用于存储去重后的毒品类型列表
|
||||||
|
ArrayList<String> typeList = new ArrayList<>();
|
||||||
|
|
||||||
|
// 遍历查询结果
|
||||||
|
for (EntrustMaterialCheckoutResult result : list) {
|
||||||
|
// 将定性结果转换为轻量级实体列表
|
||||||
|
List<DrugLite> drugLites = DrugLiteConvert.getDrugLites(result.getQualitativeResult());
|
||||||
|
|
||||||
|
// 遍历药品轻量级实体列表
|
||||||
|
for (DrugLite drugLite : drugLites) {
|
||||||
|
// 如果毒品类型未添加到列表中,则添加
|
||||||
|
if (!typeList.contains(drugLite.getName())) {
|
||||||
|
typeList.add(drugLite.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对列表进行字典序排序
|
||||||
|
Collections.sort(typeList);
|
||||||
|
|
||||||
|
// 返回去重并排序后的毒品类型列表
|
||||||
|
return typeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DetectionRateVO getDetectionRateByMaterial(Integer year) {
|
||||||
|
// 获取所有毒品类型列表
|
||||||
|
List<String> resultType = this.getResultType(year);
|
||||||
|
// 用于存储毒品名称及其检出占比的映射表
|
||||||
|
DetectionRateVO vo = new DetectionRateVO();
|
||||||
|
ArrayList<String> nameList = new ArrayList<>();
|
||||||
|
ArrayList<String> percentList = new ArrayList<>();
|
||||||
|
// 根据年份构建查询起始时间
|
||||||
|
LocalDateTime startTime = null;
|
||||||
|
if (year != null) {
|
||||||
|
// 如果年份不为空,使用指定年份的1月1日 00:00:00
|
||||||
|
startTime = LocalDateTime.of(year, 1, 1, 0, 0);
|
||||||
|
} else {
|
||||||
|
// 如果年份为空,默认使用当前年份的1月1日 00:00:00
|
||||||
|
startTime = LocalDateTime.of(LocalDateTime.now().getYear(), 1, 1, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询所有非空且不为空的定性结果,且创建时间大于等于起始时间
|
||||||
|
List<EntrustmentIdentificationMaterial> materialList = entrustmentIdentificationMaterialService.list(Wrappers.<EntrustmentIdentificationMaterial>lambdaQuery()
|
||||||
|
.ge(EntrustmentIdentificationMaterial::getAcceptTime, startTime)
|
||||||
|
.eq(EntrustmentIdentificationMaterial::getAcceptPassed, 1));
|
||||||
|
|
||||||
|
|
||||||
|
// 如果查询结果为空,直接返回 null
|
||||||
|
if (materialList == null || materialList.size() == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取分母(总结果数)
|
||||||
|
double denominator = materialList.size();
|
||||||
|
|
||||||
|
// 遍历每种毒品类型,计算其检出占比
|
||||||
|
for (String drugName : resultType) {
|
||||||
|
// 查询包含当前毒品名称的定性结果
|
||||||
|
List<EntrustMaterialCheckoutResult> list = this.list(Wrappers.<EntrustMaterialCheckoutResult>lambdaQuery()
|
||||||
|
.like(EntrustMaterialCheckoutResult::getQualitativeResult, drugName));
|
||||||
|
|
||||||
|
// 如果查询结果不为空,计算检出占比并存入映射表
|
||||||
|
if (list != null && list.size() > 0) {
|
||||||
|
double molecule = list.size(); // 分子
|
||||||
|
BigDecimal d1 = new BigDecimal(molecule);
|
||||||
|
BigDecimal d2 = new BigDecimal(denominator); // 分母
|
||||||
|
// 计算百分比(保留2位小数,四舍五入)
|
||||||
|
double percentage = d1.divide(d2, 2, BigDecimal.ROUND_HALF_UP)
|
||||||
|
.multiply(new BigDecimal(100))
|
||||||
|
.doubleValue();
|
||||||
|
nameList.add(drugName);
|
||||||
|
percentList.add(String.format("%.2f%%",percentage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vo.setNameList(nameList);
|
||||||
|
vo.setPercentList(percentList);
|
||||||
|
// 返回包含毒品名称及其检出占比的映射表
|
||||||
|
return vo ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1390,6 +1390,7 @@ public class EntrustmentIdentificationMaterialServiceImpl extends ServiceImpl<En
|
|||||||
data.put("identificationMaterial", im);
|
data.put("identificationMaterial", im);
|
||||||
data.put("caseEvent", ce);
|
data.put("caseEvent", ce);
|
||||||
data.put("entrustment", entrustment);
|
data.put("entrustment", entrustment);
|
||||||
|
|
||||||
// data.put("evidence", evidence);
|
// data.put("evidence", evidence);
|
||||||
|
|
||||||
maps.add(data);
|
maps.add(data);
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package digital.laboratory.platform.entrustment.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class DetectionRateVO {
|
||||||
|
|
||||||
|
private List<String> nameList;
|
||||||
|
private List<String>percentList;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user