|
@@ -4,10 +4,7 @@ import com.ruoyi.business.domain.*;
|
|
|
import com.ruoyi.business.mapper.*;
|
|
|
import com.ruoyi.business.req.AssayReq;
|
|
|
import com.ruoyi.business.req.DeviceReq;
|
|
|
-import com.ruoyi.business.res.AssayDetailRes;
|
|
|
-import com.ruoyi.business.res.AssayQualityDetailRes;
|
|
|
-import com.ruoyi.business.res.DeviceRes;
|
|
|
-import com.ruoyi.business.res.HomeCountsRes;
|
|
|
+import com.ruoyi.business.res.*;
|
|
|
import com.ruoyi.business.service.IBusinessService;
|
|
|
import com.ruoyi.common.NumberUtils;
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
@@ -22,7 +19,6 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import static com.ruoyi.common.constant.Constants.INT_2;
|
|
|
import static com.ruoyi.common.constant.Constants.INT_4;
|
|
|
-import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
|
|
|
|
|
|
@Slf4j
|
|
|
@Service
|
|
@@ -122,6 +118,52 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
return this.getCountInfoByAssayResults(zAssayResults);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Map<String, Map<String, List<ContinuousAssayResultRes>>> continuousAssayCountByDates(AssayReq assayReq) {
|
|
|
+ //返回的最终对象
|
|
|
+ Map<String, Map<String, List<ContinuousAssayResultRes>>> resultMap = new HashMap<>();
|
|
|
+ //通过筛选条件获取最基本的数据列表
|
|
|
+ List<ContinuousAssayBasic> list = this.zAssayResultMapper.continuousAssayCountByDates(assayReq);
|
|
|
+ if(!CollectionUtils.isEmpty(list)){
|
|
|
+ //有数据 再分组,再分别统计信息
|
|
|
+ Map<String, List<ContinuousAssayBasic>> itemNameMap = list.stream().collect(Collectors.groupingBy(ContinuousAssayBasic::getItemName));
|
|
|
+ itemNameMap.forEach((k, v) -> {
|
|
|
+ //内存的map
|
|
|
+ HashMap<String, List<ContinuousAssayResultRes>> innerMap = new HashMap<>();
|
|
|
+ //还需要再根据化验指标再分一次组
|
|
|
+ Map<String, List<ContinuousAssayBasic>> assayNameMap = v.stream().collect(Collectors.groupingBy(ContinuousAssayBasic::getAssayName));
|
|
|
+ assayNameMap.forEach((assayName, assayBasicList) -> {
|
|
|
+ List<ContinuousAssayResultRes> innerList = new ArrayList<>(assayBasicList.size());
|
|
|
+ ContinuousAssayResultRes continuousAssayResultRes = new ContinuousAssayResultRes();
|
|
|
+ //处理统计信息
|
|
|
+ int assayCounts = assayBasicList.size();//实际检测数量
|
|
|
+ Double minVal = assayBasicList.stream().map(ContinuousAssayBasic::getResultConcentration).min(Double::compareTo).get();
|
|
|
+ Double maxVal = assayBasicList.stream().map(ContinuousAssayBasic::getResultConcentration).max(Double::compareTo).get();
|
|
|
+ //调用通用的获取合格数量的方法
|
|
|
+ List<ZAssayResult> zAssayResults = new ArrayList<>();
|
|
|
+ for (ContinuousAssayBasic continuousAssayBasic : assayBasicList) {
|
|
|
+ ZAssayResult zAssayResult = new ZAssayResult();
|
|
|
+ zAssayResult.setAssayItem(continuousAssayBasic.getAssayName());
|
|
|
+ zAssayResult.setDeviceNo(continuousAssayBasic.getDeviceNo());
|
|
|
+ zAssayResult.setResultConcentration(continuousAssayBasic.getResultConcentration());
|
|
|
+ zAssayResults.add(zAssayResult);
|
|
|
+ }
|
|
|
+ int passedCounts = this.getPassedCounts(zAssayResults);
|
|
|
+ //封装到对象
|
|
|
+ continuousAssayResultRes.setAssayName(assayName);
|
|
|
+ continuousAssayResultRes.setAssayCounts(assayCounts);
|
|
|
+ continuousAssayResultRes.setMinVal(minVal);
|
|
|
+ continuousAssayResultRes.setMaxVal(maxVal);
|
|
|
+ continuousAssayResultRes.setPassedRates(NumberUtils.getDoublePercentAndNLength(INT_4, ((double) passedCounts/(double)assayCounts), INT_2));
|
|
|
+ innerList.add(continuousAssayResultRes);
|
|
|
+ innerMap.put(assayName, innerList);
|
|
|
+ });
|
|
|
+ resultMap.put(k, innerMap);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
private List<AssayQualityDetailRes> getCountInfoByAssayResults(List<ZAssayResult> zAssayResults) {
|
|
|
List<AssayQualityDetailRes> result = new ArrayList<>();
|
|
|
if(!CollectionUtils.isEmpty(zAssayResults)){
|