部分检验记录模板的调整
This commit is contained in:
+8
-3
@@ -180,8 +180,8 @@ public class TestRecordController {
|
|||||||
@ApiOperation(value = "根据实验id和文件id获取图片")
|
@ApiOperation(value = "根据实验id和文件id获取图片")
|
||||||
@ApiImplicitParam(name = "testId", value = "该实验图谱关联的实验id")
|
@ApiImplicitParam(name = "testId", value = "该实验图谱关联的实验id")
|
||||||
public void getTestAtlasByFileId(@RequestParam("testId") String testId,
|
public void getTestAtlasByFileId(@RequestParam("testId") String testId,
|
||||||
@RequestParam("fileId") String fileId,
|
@RequestParam("fileId") String fileId,
|
||||||
HttpServletResponse httpServletResponse) throws IOException {
|
HttpServletResponse httpServletResponse) throws IOException {
|
||||||
try {
|
try {
|
||||||
TestRecord testRecord = testRecordService.getById(testId);
|
TestRecord testRecord = testRecordService.getById(testId);
|
||||||
JSONArray jsonArray = JSONArray.parseArray(testRecord.getTestAtlas());
|
JSONArray jsonArray = JSONArray.parseArray(testRecord.getTestAtlas());
|
||||||
@@ -193,7 +193,7 @@ public class TestRecordController {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch (AmazonS3Exception s3e) {
|
} catch (AmazonS3Exception s3e) {
|
||||||
httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString());
|
httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
httpServletResponse.sendError(501, e.toString());
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -89,4 +89,6 @@ public interface TestRecordService extends IService<TestRecord> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
R<Map<String, TestRecordVo>> queryTestRecordInfoByBusinessId(List<String> businessIds);
|
R<Map<String, TestRecordVo>> queryTestRecordInfoByBusinessId(List<String> businessIds);
|
||||||
|
|
||||||
|
R inspectionRecord(String entrustId) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
+233
@@ -1526,4 +1526,237 @@ public class TestRecordServiceImpl extends ServiceImpl<TestRecordMapper, TestRec
|
|||||||
}
|
}
|
||||||
return R.ok(map);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user