BusinessServiceImpl.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.ruoyi.business.service.impl;
  2. import com.ruoyi.business.domain.BizDevice;
  3. import com.ruoyi.business.domain.ZAssay;
  4. import com.ruoyi.business.domain.ZAssayResult;
  5. import com.ruoyi.business.domain.ZQualityValue;
  6. import com.ruoyi.business.mapper.*;
  7. import com.ruoyi.business.res.HomeCountsRes;
  8. import com.ruoyi.business.service.IBusinessService;
  9. import com.ruoyi.common.enums.DataSourceType;
  10. import com.ruoyi.common.utils.DateUtils;
  11. import com.ruoyi.common.utils.StringUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.util.CollectionUtils;
  15. import java.util.ArrayList;
  16. import java.util.Date;
  17. import java.util.List;
  18. import java.util.Objects;
  19. import java.util.stream.Collectors;
  20. @Service
  21. public class BusinessServiceImpl implements IBusinessService {
  22. @Autowired
  23. private BizDeviceMapper bizDeviceMapper;
  24. @Autowired
  25. private BizWaterWorkMapper bizWaterWorkMapper;
  26. @Autowired
  27. private ZAssayMapper zAssayMapper;
  28. @Autowired
  29. private ZAssayResultMapper zAssayResultMapper;
  30. @Autowired
  31. private ZQualityValueMapper zQualityValueMapper;
  32. @Override
  33. public HomeCountsRes homeCountsInfo(int type) {//type 1:化验室,2:连续检测
  34. HomeCountsRes build = HomeCountsRes.builder().build();
  35. //处理各个维度的统计信息
  36. //获取所有的正在使用的设备列表 大概几十个,所以直接取所有数据,下面再过滤
  37. List<BizDevice> bizDevices = this.bizDeviceMapper.selectBizDeviceList(BizDevice.builder().deviceStatus("0").build());
  38. //一定有设备 并且mybatis返回的默认是空集合new出来的而不是null,所以这里不用判断
  39. List<BizDevice> totalList = bizDevices.stream().filter(bizDevice -> String.valueOf(type).equals(bizDevice.getType())).collect(Collectors.toList());
  40. if (!CollectionUtils.isEmpty(totalList)) {
  41. build.setDeviceTotals((long) totalList.size());
  42. //化验中
  43. build.setOnDeviceCounts(totalList.stream().filter(bizDevice -> "2".equals(bizDevice.getAssayStatus())).count());
  44. //待机
  45. build.setStandbyDeviceCounts(totalList.stream().filter(bizDevice -> "0".equals(bizDevice.getAssayStatus())).count());
  46. //离线
  47. build.setOffDeviceCounts(totalList.stream().filter(bizDevice -> "1".equals(bizDevice.getAssayStatus())).count());
  48. }
  49. //统计今日的化验数据
  50. //先获取今日的所有的化验的质控样数据 再编写通用方法,判断是否合格,再获取合格的数量
  51. //todo 日期临时写死,因为数据不会同步,都是历史数据 正式以后,需要改成真实日期
  52. // List<ZAssayResult> zAssayResults = this.zAssayResultMapper.selectZAssayResultList(ZAssayResult.builder().resultDate(DateUtils.getDate()).assayType("3").build());
  53. List<ZAssayResult> zAssayResults = this.zAssayResultMapper.selectZAssayResultList(ZAssayResult.builder().resultDate("2024-08-13").assayType("3").build());
  54. if(!CollectionUtils.isEmpty(zAssayResults)){
  55. int checkTotals = zAssayResults.size();
  56. build.setCheckTotals(checkTotals);
  57. int passCheckTotals = this.getPassedCounts(zAssayResults);
  58. build.setPassCheckTotals(passCheckTotals);
  59. build.setPassCheckRates((double)passCheckTotals / (double)checkTotals);//整数除以整数还是整数,所以这里要强转成小数
  60. }
  61. return build;
  62. }
  63. //判断每个质控样的数是否各个,然后获取汇总的数量
  64. private int getPassedCounts(List<ZAssayResult> zAssayResults) {
  65. boolean passed = false;
  66. int count = 0;
  67. for (ZAssayResult zAssayResult : zAssayResults) {
  68. passed = this.isPassed(zAssayResult);
  69. if (passed) {
  70. count++;//通过 数量加一
  71. }
  72. }
  73. return count;
  74. }
  75. //获取每个质控样的数据是否是合格的
  76. private boolean isPassed(ZAssayResult zAssayResult) {
  77. boolean isPassed = true;//默认是合格的,防止一些极端场景:没有配置范围 范围配置时间过期等等情况
  78. String deviceNo = zAssayResult.getDeviceNo();
  79. if(StringUtils.isBlank(deviceNo))
  80. return isPassed;//无法关联数据,默认合格
  81. //需要通过化验明细里的设备ID找到水厂ID,配置的表需要该参数
  82. List<BizDevice> bizDevices = this.bizDeviceMapper.selectBizDeviceList(BizDevice.builder().deviceNo(deviceNo).build());
  83. if(CollectionUtils.isEmpty(bizDevices)){
  84. return isPassed;//无法查询到水厂,默认合格
  85. }
  86. //todo 日期临时写死,因为数据不会同步,都是历史数据 正式以后,需要改成真实日期
  87. // Date nowDate = DateUtils.getNowDate();
  88. Date nowDate = DateUtils.parseDate("2024-08-13");
  89. Long resultConcentration = zAssayResult.getResultConcentration();//化验的真实值
  90. //去查询配置的标准值的范围(数据不确认,有可能是多个,获取最后一条数据):
  91. List<ZQualityValue> list = this.zQualityValueMapper.selectZQualityValueList(ZQualityValue.builder().beginTime(nowDate).endTime(nowDate).deviceWorks(bizDevices.get(0).getDeviceWorks()).assayItem(zAssayResult.getAssayItem()).build());
  92. //理论上是只有一个的
  93. if(!CollectionUtils.isEmpty(list)){
  94. ZQualityValue zQualityValue = list.get(list.size() - 1);//获取最新的一条,防止有多条数据的情况
  95. Long lowValue = zQualityValue.getLowValue();
  96. Long highValue = zQualityValue.getHighValue();
  97. if(!Objects.isNull(resultConcentration) && !Objects.isNull(lowValue) && !Objects.isNull(highValue)){
  98. isPassed = resultConcentration >= lowValue && resultConcentration <= highValue;
  99. }
  100. }
  101. return isPassed;
  102. }
  103. public static void main(String[] args) {
  104. List list = new ArrayList<>();
  105. list.add(1);
  106. list.add(1);
  107. System.out.println(list.stream().count());
  108. System.out.println(DateUtils.getDate());
  109. }
  110. }