部分检验记录模板的调整
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user