部分检验记录模板的调整

master
杨海航 2 weeks ago
parent 6e2e5fdd5b
commit 7a306ac030
  1. 11
      dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/controller/TestRecordController.java
  2. 2
      dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/TestRecordService.java
  3. 233
      dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestRecordServiceImpl.java

@ -180,8 +180,8 @@ public class TestRecordController {
@ApiOperation(value = "根据实验id和文件id获取图片")
@ApiImplicitParam(name = "testId", value = "该实验图谱关联的实验id")
public void getTestAtlasByFileId(@RequestParam("testId") String testId,
@RequestParam("fileId") String fileId,
HttpServletResponse httpServletResponse) throws IOException {
@RequestParam("fileId") String fileId,
HttpServletResponse httpServletResponse) throws IOException {
try {
TestRecord testRecord = testRecordService.getById(testId);
JSONArray jsonArray = JSONArray.parseArray(testRecord.getTestAtlas());
@ -193,7 +193,7 @@ public class TestRecordController {
break;
}
}
}catch (AmazonS3Exception s3e) {
} catch (AmazonS3Exception s3e) {
httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString());
} catch (Exception e) {
httpServletResponse.sendError(501, e.toString());
@ -212,4 +212,9 @@ public class TestRecordController {
}
}
@GetMapping("/inspectionRecord")
public R inspectionRecord(String entrustId) throws Exception {
return testRecordService.inspectionRecord(entrustId);
}
}

@ -89,4 +89,6 @@ public interface TestRecordService extends IService<TestRecord> {
* @return
*/
R<Map<String, TestRecordVo>> queryTestRecordInfoByBusinessId(List<String> businessIds);
R inspectionRecord(String entrustId) throws Exception;
}

@ -1526,4 +1526,237 @@ public class TestRecordServiceImpl extends ServiceImpl<TestRecordMapper, TestRec
}
return R.ok(map);
}
@Override
public R inspectionRecord(String entrustId) throws Exception {
EntrustInfo entrustInfo = entrustInfoService.getById(entrustId);
if (entrustInfo == null) {
return R.ok(false, "委托信息不存在!");
}
String type = entrustInfo.getBusinessType();
if (type.equals(BusinessType.BOINT_CASE.getBusinessType())) {
Map<String, Object> map = this.invivoRecord(entrustInfo);
return R.ok(this.createInVivoFile(map, entrustId), "生成成功!");
}
return null;
}
public Map<String, Object> invivoRecord(EntrustInfo entrustInfo) throws Exception {
HashMap<String, Object> data = new HashMap<>();
data.put("entrustDepartment", entrustInfo.getEntrustDepartment());
data.put("deliver1Name", entrustInfo.getDeliver1Name());
data.put("deliver2Name", entrustInfo.getDeliver2Name());
data.put("year", entrustInfo.getAcceptDate().getYear());
data.put("month", entrustInfo.getAcceptDate().getMonthValue());
data.put("day", entrustInfo.getAcceptDate().getDayOfMonth());
List<String> sampleIdList = sampleInfoService.list(Wrappers.<SampleInfo>lambdaQuery()
.eq(SampleInfo::getBusinessId, entrustInfo.getId()))
.stream().map(SampleInfo::getId)
.collect(Collectors.toList());
TestRecord testRecord = new TestRecord();
for (String sampleId : sampleIdList) {
TestRecord record = this.getOne(Wrappers.<TestRecord>lambdaQuery()
.like(TestRecord::getSampleTestList, sampleId));
if (record != null) {
testRecord = record;
break;
}
}
List<TestRecordInstrument> instruments = testRecordInstrumentService.list(Wrappers.<TestRecordInstrument>lambdaQuery()
.in(TestRecordInstrument::getId, testRecord.getDeviceIdList()));
if (instruments == null || instruments.size() == 0) {
data.put("instrumentName", "未找到仪器设备数据!");
}else {
String instrumentName = instruments.stream()
.map(TestRecordInstrument::getInstrumentName)
.collect(Collectors.joining("\n"));
data.put("instrumentName", instrumentName);
}
List<TestRecordReagent> references = testRecordReagentService.list(Wrappers.<TestRecordReagent>lambdaQuery()
.in(TestRecordReagent::getId, testRecord.getReagentConsumablesList())
.eq(TestRecordReagent::getCategory, "标准物质"));
if (references == null || references.size() == 0) {
data.put("referenceMaterialName", "未找到试剂耗材数据!");
}else {
String referenceMaterialName = references.stream()
.map(reagent -> "\u2611" + " " + reagent.getReagentConsumableName())
.collect(Collectors.joining("\n"));
data.put("referenceMaterialName", referenceMaterialName);
}
List<TestRecordReagent> reagents = testRecordReagentService.list(Wrappers.<TestRecordReagent>lambdaQuery()
.in(TestRecordReagent::getId, testRecord.getReagentConsumablesList())
.eq(TestRecordReagent::getCategory, "试剂"));
if (reagents == null || reagents.size() == 0) {
data.put("reagentConsumableName", "未找到试剂耗材数据!");
} else {
String reagentConsumableName = reagents.stream()
.map(TestRecordReagent::getReagentConsumableName)
.collect(Collectors.joining("、"));
data.put("reagentConsumableName", reagentConsumableName);
}
List<HairSewageDataDto> hairDataDtos = (List<HairSewageDataDto>) testRecordSampleDataService.getSampleTestDataByBusiness(entrustInfo.getId());
Map<String, List<HairSewageDataDto>> dataMap = hairDataDtos.stream()
.collect(Collectors.groupingBy(HairSewageDataDto::getCompoundName));
ArrayList<HairSewageDataDto> dataDtos = new ArrayList<>();
for (Map.Entry<String, List<HairSewageDataDto>> entry : dataMap.entrySet()) {
List<HairSewageDataDto> list = entry.getValue();
HairSewageDataDto dto = new HairSewageDataDto();
dto.setSampleName("空白");
dto.setCompoundName(entry.getKey());
dto.setTmpTargetRtTime("/");
dto.setTmpRtTimeError("/");
dto.setRtTimeWithinError("否");
dto.setTmpIonAbundanceRatio("/");
dto.setWhetherCheckOut("否");
dataDtos.add(dto);
ArrayList<HairSewageDataDto> delList = new ArrayList<>();
for (HairSewageDataDto item : list) {
if (StringUtils.isNotBlank(item.getSampleType()) && item.getSampleType().equals("STD")) {
delList.add(item);
item.setSampleName("空白添加");
item.setWhetherCheckOut("是");
dataDtos.add(item);
} else if (StringUtils.isNotBlank(item.getSampleType()) && item.getSampleType().equals("QC")) {
delList.add(item);
}
}
// list.forEach(item -> {
// if (StringUtils.isNotBlank(item.getSampleType())&&item.getSampleType().equals("STD")) {
// item.setSampleName("空白添加");
// item.setWhetherCheckOut("是");
// dataDtos.add(item);
// list.remove(item);
// }
// });
list.removeAll(delList);
Collections.sort(list, this.getSortBySampleNo("inVivo"));
if (list.size() == 1) {
list.get(0).setSampleName("检材样品");
} else {
for (int i = 0; i < list.size(); i++) {
list.get(i).setSampleName((i + 1) + "号检材样品");
}
}
dataDtos.addAll(list);
}
data.put("dataDtos", dataDtos);
data.put("sampleSize", dataDtos.size());
data.put("vo", testRecord);
return data;
}
public String createInVivoFile(Map<String, Object> data, String entrustId) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
TestRecord vo = (TestRecord) data.get("vo");
ossFile.fileGet("/template" + "/贵阳生物样本检验记录模板.docx", bos);
byte[] templateArray = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(templateArray);
bos.close();
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
Configure config = Configure.builder().
bind("dataDtos", policy).build();
XWPFTemplate template = XWPFTemplate.compile(bis, config).render(
new HashMap<String, Object>() {{
put("entrustDepartment", data.get("entrustDepartment"));
put("deliver1Name", data.get("deliver1Name"));
put("deliver2Name", data.get("deliver2Name"));
put("year", data.get("year"));
put("month", data.get("month"));
put("day", data.get("day"));
put("instrumentName", data.get("instrumentName"));
put("referenceMaterialName", data.get("referenceMaterialName"));
put("reagentConsumableName", data.get("reagentConsumableName"));
put("dataDtos", data.get("dataDtos"));
}}
);
NiceXWPFDocument document = template.getXWPFDocument();
// XWPFTable table = document.getTables().get(3);
// int sampleSize = (int) data.get("sampleSize");
// //合并单元格
//
// TableTools.mergeCellsVertically(table, 1, 1, sampleSize);
bis.close();
ByteArrayOutputStream fosWord = new ByteArrayOutputStream();
template.write(fosWord);
template.close();
ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray());
fosWord.close();
document.close();
String path = TestRecordFileUrl.TEST_RECORD_CATALOGUE.getFileUrl() + "/" + entrustId + "/" + "贵阳生物样本检验记录.docx";
ossFile.fileSave(path, fisWord);
return path;
}
public Comparator getSortBySampleNo(String type) {
if (type.equals("inVivo")) {
Comparator<HairSewageDataDto> comparator = Comparator.comparing(
HairSewageDataDto::getSampleNo,
(a, b) -> {
String[] partsA = a.split("-");
String[] partsB = b.split("-");
// 逐部分比较数值
for (int i = 0; i < 3; i++) {
int numA = Integer.parseInt(partsA[i]);
int numB = Integer.parseInt(partsB[i]);
if (numA != numB) return Integer.compare(numA, numB);
}
return 0; // 所有部分相同
}
);
return comparator;
} else {
Comparator<NPSCaseTestDataDto> comparator = Comparator.comparing(
NPSCaseTestDataDto::getSampleNo,
(a, b) -> {
String[] partsA = a.split("-");
String[] partsB = b.split("-");
// 逐部分比较数值
for (int i = 0; i < 3; i++) {
int numA = Integer.parseInt(partsA[i]);
int numB = Integer.parseInt(partsB[i]);
if (numA != numB) return Integer.compare(numA, numB);
}
return 0; // 所有部分相同
}
);
return comparator;
}
}
}

Loading…
Cancel
Save