20250416 更新

1.导入两社人员名单接口
master
陈江保 3 weeks ago
parent 22156abd9e
commit 13a18e5358
  1. 1
      src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java
  2. 40
      src/main/java/digital/laboratory/platform/entrustment/controller/ExcelUploadController.java
  3. 3
      src/main/java/digital/laboratory/platform/entrustment/enums/EntrustIdentificationSituationType.java
  4. 21
      src/main/java/digital/laboratory/platform/entrustment/service/ExcelUploadService.java
  5. 90
      src/main/java/digital/laboratory/platform/entrustment/service/impl/ExcelUploadServiceImpl.java
  6. 98
      src/main/java/digital/laboratory/platform/entrustment/utils/ExcelUtils.java

@ -2397,7 +2397,6 @@ public class EntrustmentController {
}
@ApiOperation("预览鉴定事项确认书,只在送检单位填写完委托与检材后才能进行预览")
@GetMapping("/previewEntrustLetterPDF")
public void previewEntrustLetterPDF(String entrustId, HttpServletResponse servletResponse) throws Exception {
entrustmentService.previewEntrustLetterPDF(entrustId, servletResponse);
}

@ -0,0 +1,40 @@
package digital.laboratory.platform.entrustment.controller;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.entrustment.service.ExcelUploadService;
import digital.laboratory.platform.entrustment.utils.ExcelUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* @author ChenJiangBao
* @version 1.0
* @description: excel上传接口控制器
* @date 2025/4/16 9:48
*/
@RestController
@RequestMapping("/excel")
@Api(tags = "20-推送数据到LabsCare平台接口管理", description = "推送数据到LabsCare平台接口管理")
public class ExcelUploadController {
@Resource
private ExcelUploadService excelUploadService;
@ApiOperation("上传两社人员名单excel文件")
@PostMapping("/uploadHairInspect")
public R<Boolean> uploadHairInspectExcel(@RequestPart("file") MultipartFile file, @RequestParam("entrustId") String entrustId) {
try {
Boolean success = excelUploadService.uploadHairInspectExcel(file, entrustId);
return R.ok(success);
} catch (Exception e) {
e.printStackTrace();
return R.failed(e.getMessage());
}
}
}

@ -10,7 +10,8 @@ public enum EntrustIdentificationSituationType {
AFRESF_IDENT(2, "重新鉴定"),
PRIMARY_SCREEN(3, "初筛(不要报告、只要结果)"),
MYANMAR_PERSON(4, "涉缅人员"),
VOLUNTARY_PERSON(5, "自愿戒治人员")
VOLUNTARY_PERSON(5, "自愿戒治人员"),
TWO_AGENCY(6, "两社人员")
;
private final Integer code;

@ -0,0 +1,21 @@
package digital.laboratory.platform.entrustment.service;
import org.springframework.web.multipart.MultipartFile;
/**
* @author ChenJiangBao
* @version 1.0
* @description: excel上传服务层接口
* @date 2025/4/16 11:55
*/
public interface ExcelUploadService {
/**
* 上传两社人员名单excel文件
* @param file
* @param entrustId
* @return
*/
Boolean uploadHairInspectExcel(MultipartFile file, String entrustId) throws Exception;
}

@ -0,0 +1,90 @@
package digital.laboratory.platform.entrustment.service.impl;
import cn.hutool.core.collection.CollUtil;
import digital.laboratory.platform.common.core.exception.CheckedException;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.entrustment.entity.Entrustment;
import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial;
import digital.laboratory.platform.entrustment.enums.AnalysisOptionEnums;
import digital.laboratory.platform.entrustment.enums.EntrustIdentificationSituationType;
import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService;
import digital.laboratory.platform.entrustment.service.EntrustmentService;
import digital.laboratory.platform.entrustment.service.ExcelUploadService;
import digital.laboratory.platform.entrustment.utils.ExcelUtils;
import digital.laboratory.platform.sys.entity.DrugLite;
import digital.laboratory.platform.sys.enums.entrust.EntrustBiologyType;
import digital.laboratory.platform.sys.feign.RemoteCommDrugService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author ChenJiangBao
* @version 1.0
* @description: excel上传服务层接口 实现类
* @date 2025/4/16 11:55
*/
@Service
public class ExcelUploadServiceImpl implements ExcelUploadService {
@Resource
private EntrustmentService entrustmentService;
@Resource
private EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService;
@Resource
private RemoteCommDrugService remoteCommDrugService;
/**
* 上传两社人员名单excel文件
* @param file
* @param entrustId
* @return
*/
@Override
public Boolean uploadHairInspectExcel(MultipartFile file, String entrustId) throws Exception {
// 校验委托是否合法
Entrustment entrustment = entrustmentService.getById(entrustId);
if (entrustment == null) {
throw new CheckedException(String.format("委托id为 %s 的委托信息不存在!"));
}
if (!entrustment.getOldIdentificationResult().equals(EntrustIdentificationSituationType.TWO_AGENCY.getDesc())) {
throw new CheckedException("当前不支持两社人员之外的委托信息进行导入!");
}
// 默认取海洛因的毒品信息
R<DrugLite> drugLiteR = remoteCommDrugService.getByName("海洛因");
DrugLite heroin = drugLiteR.getData(); // 获取默认的海洛因数据
R<List<DrugLite>> innerGetAllR = remoteCommDrugService.innerGetAll(); // 获取所有的毒品信息
List<DrugLite> drugLiteList = innerGetAllR.getData();
Map<String, DrugLite> drugLiteMap = drugLiteList.stream().collect(Collectors.toMap(DrugLite::getName, Function.identity()));
// 防止检材列表
List<EntrustmentIdentificationMaterial> entrustmentIdentificationMaterialList = new ArrayList<>();
// 读取excel数据
List<Map<String, String>> data = ExcelUtils.readExcel(file);
for (Map<String, String> datum : data) {
EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = new EntrustmentIdentificationMaterial();
entrustmentIdentificationMaterial.setEntrustmentId(entrustment.getId());
entrustmentIdentificationMaterial.setType("1");
entrustmentIdentificationMaterial.setTypeName("生物样本");
entrustmentIdentificationMaterial.setName(datum.get("姓名") + "的毛发");
entrustmentIdentificationMaterial.setBiologyGender(datum.get("性别"));
entrustmentIdentificationMaterial.setBiologyType(EntrustBiologyType.HAIR.getDesc());
entrustmentIdentificationMaterial.setMaterialAge(Integer.valueOf(datum.get("年龄")));
entrustmentIdentificationMaterial.setRemark(datum.get("身份证号"));
entrustmentIdentificationMaterial.setDrawPlace(datum.get("采样单位"));
entrustmentIdentificationMaterial.setAnalysisOption(AnalysisOptionEnums.QUALITATIVE.getCode()); // 默认设置定性
entrustmentIdentificationMaterial.setCandidateDrugs(CollUtil.newArrayList(drugLiteMap.containsKey(datum.get("曾吸毒种类")) ? drugLiteMap.get(datum.get("曾吸毒种类")) : heroin));
entrustmentIdentificationMaterialList.add(entrustmentIdentificationMaterial);
}
return entrustmentIdentificationMaterialService.saveBatch(entrustmentIdentificationMaterialList);
}
}

@ -0,0 +1,98 @@
package digital.laboratory.platform.entrustment.utils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.*;
/**
* @author ChenJiangBao
* @version 1.0
* @description: 使用 Apache POI 来读取 Excel 文件
* @date 2025/4/16 9:55
*/
public class ExcelUtils {
/**
* 读取 Excel 文件并将其内容转化为 List<Map<String, String>> 的格式
* 每一行数据是一个 Map键是列头表头值是该单元格的数据
*
* @param file 上传的 Excel 文件
* @return 解析后的 Excel 数据列表
* @throws Exception 可能抛出的异常如文件读取异常
*/
public static List<Map<String, String>> readExcel(MultipartFile file) throws Exception {
// 存储最终结果,每一行的 Excel 数据以 Map 的形式存储
List<Map<String, String>> result = new ArrayList<>();
// 使用 try-with-resources 语法自动关闭流
try (InputStream is = file.getInputStream(); // 获取文件输入流
Workbook workbook = new XSSFWorkbook(is)) { // 使用 XSSFWorkbook 读取 Excel 文件(.xlsx 格式)
// 获取第一个工作表
Sheet sheet = workbook.getSheetAt(0);
if (sheet == null) return result; // 如果没有工作表,则返回空列表
// 获取表头(第一行),表头行存储列名
Row headerRow = sheet.getRow(0);
if (headerRow == null) return result; // 如果没有表头,则返回空列表
// 存储表头列名
List<String> headers = new ArrayList<>();
for (Cell cell : headerRow) {
// 去除表头列名的多余空格
headers.add(cell.getStringCellValue().trim());
}
// 从第二行开始读取数据
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
// 获取当前行
Row row = sheet.getRow(i);
if (row == null) continue; // 如果当前行为空,则跳过
// 存储当前行数据的 Map,键是表头,值是单元格数据
Map<String, String> rowData = new LinkedHashMap<>();
for (int j = 0; j < headers.size(); j++) {
// 获取当前单元格
Cell cell = row.getCell(j);
// 将列名和单元格数据放入 Map 中
rowData.put(headers.get(j), getCellValue(cell));
}
// 将当前行的 Map 加入到结果列表中
result.add(rowData);
}
}
return result; // 返回解析后的数据列表
}
/**
* 获取单元格的值处理不同类型的单元格
*
* @param cell 当前单元格
* @return 单元格中的值
*/
private static String getCellValue(Cell cell) {
if (cell == null) return ""; // 如果单元格为空,返回空字符串
// 根据单元格的类型来处理其值
switch (cell.getCellType()) {
case STRING:
return cell.getStringCellValue().trim(); // 字符串类型,返回去除空格后的字符串
case NUMERIC:
// 数字类型,判断是否为日期格式
if (DateUtil.isCellDateFormatted(cell)) {
return cell.getDateCellValue().toString(); // 返回日期的字符串表示
}
return String.valueOf((long) cell.getNumericCellValue()); // 返回数字
case BOOLEAN:
return String.valueOf(cell.getBooleanCellValue()); // 布尔值类型,返回布尔值的字符串表示
case FORMULA:
return cell.getCellFormula(); // 公式类型,返回公式的字符串表示
default:
return ""; // 其他类型返回空字符串
}
}
}
Loading…
Cancel
Save