package com.ruoyi.report.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.excel.EasyExcel;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.report.dto.TestItemDataDto;
|
import com.ruoyi.report.mapper.TestItemDataMapper;
|
import com.ruoyi.report.service.TestItemDataService;
|
import com.ruoyi.report.vo.TestItemDataVo;
|
import lombok.AllArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 检测项目数据服务实现
|
*/
|
@Service
|
@AllArgsConstructor
|
public class TestItemDataServiceImpl implements TestItemDataService {
|
|
private TestItemDataMapper testItemDataMapper;
|
|
@Override
|
public Page<TestItemDataVo> pageTestItemData(Page page, TestItemDataDto dto) {
|
Page<TestItemDataVo> result = testItemDataMapper.pageTestItemData(page, dto);
|
// 处理检测结果名称
|
List<TestItemDataVo> records = result.getRecords();
|
for (TestItemDataVo vo : records) {
|
vo.setInsResultName(formatInsResult(vo.getInsResult()));
|
}
|
return result;
|
}
|
|
@Override
|
public List<TestItemDataVo> getDetail(Long sampleId) {
|
List<TestItemDataVo> list = testItemDataMapper.getDetail(sampleId);
|
for (TestItemDataVo vo : list) {
|
vo.setInsResultName(formatInsResult(vo.getInsResult()));
|
}
|
return list;
|
}
|
|
@Override
|
public Map<String, Object> compare(TestItemDataDto dto) {
|
if (CollectionUtils.isEmpty(dto.getSampleIds())) {
|
return new HashMap<>();
|
}
|
|
// 查询数据
|
List<TestItemDataVo> dataList = testItemDataMapper.listBySampleIds(dto.getSampleIds());
|
|
// 获取所有检测项名称
|
List<String> itemNames = dataList.stream()
|
.map(TestItemDataVo::getItemName)
|
.distinct()
|
.sorted()
|
.collect(Collectors.toList());
|
|
// 按样品分组
|
Map<Long, List<TestItemDataVo>> sampleMap = dataList.stream()
|
.collect(Collectors.groupingBy(TestItemDataVo::getSampleId));
|
|
// 构建比较数据
|
List<Map<String, Object>> compareList = new ArrayList<>();
|
for (Long sampleId : dto.getSampleIds()) {
|
Map<String, Object> row = new HashMap<>();
|
List<TestItemDataVo> sampleData = sampleMap.getOrDefault(sampleId, new ArrayList<>());
|
|
// 获取样品信息
|
if (CollectionUtil.isNotEmpty(sampleData)) {
|
TestItemDataVo first = sampleData.get(0);
|
row.put("sampleCode", first.getSampleCode());
|
row.put("sampleName", first.getSampleName());
|
row.put("batchNo", first.getBatchNo());
|
}
|
|
// 填充检测项值
|
for (String itemName : itemNames) {
|
Optional<TestItemDataVo> match = sampleData.stream()
|
.filter(v -> v.getItemName().equals(itemName))
|
.findFirst();
|
row.put(itemName, match.map(TestItemDataVo::getLastValue).orElse(null));
|
}
|
|
compareList.add(row);
|
}
|
|
Map<String, Object> result = new HashMap<>();
|
result.put("itemNames", itemNames);
|
result.put("compareList", compareList);
|
return result;
|
}
|
|
@Override
|
public void exportTestItemData(TestItemDataDto dto, HttpServletResponse response) {
|
try {
|
// 查询全部数据
|
Page<TestItemDataVo> page = new Page<>();
|
page.setSize(Long.MAX_VALUE);
|
Page<TestItemDataVo> result = testItemDataMapper.pageTestItemData(page, dto);
|
|
// 处理数据
|
List<TestItemDataVo> records = result.getRecords();
|
for (TestItemDataVo vo : records) {
|
vo.setInsResultName(formatInsResult(vo.getInsResult()));
|
}
|
|
// 设置响应头
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
response.setCharacterEncoding("utf-8");
|
String fileName = "检测项目数据_" + DateUtil.format(new Date(), "yyyyMMddHHmmss");
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
|
|
// 使用EasyExcel导出
|
EasyExcel.write(response.getOutputStream(), TestItemDataVo.class)
|
.sheet("检测项目数据")
|
.doWrite(records);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public List<String> getItemNames(TestItemDataDto dto) {
|
return testItemDataMapper.getItemNames(dto);
|
}
|
|
/**
|
* 格式化检测结果
|
*/
|
private String formatInsResult(Integer val) {
|
if (val == null) return "";
|
if (val == 1) return "合格";
|
if (val == 0) return "不合格";
|
return "";
|
}
|
|
}
|