From 7c708f07167609dff61f5f736b093b416091ce83 Mon Sep 17 00:00:00 2001 From: yy2205 <2238220225@qq.com> Date: Mon, 12 May 2025 08:51:06 +0800 Subject: [PATCH] =?UTF-8?q?ocr=E8=A7=A3=E6=9E=90=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/dal/mysql/dept/DeptMapper.java | 3 + .../EcganalysisparasController.java | 22 +-- .../vo/EcganalysisparasSaveReqVO.java | 3 + .../PatientexamlistController.java | 2 +- .../patientexamlist/vo/EcgPictureOcr.java | 26 +++ .../ecganalysisparas/EcganalysisparasDO.java | 4 + .../EcganalysisparasMapper.java | 2 + .../yudao/module/tblist/dal/orgDo/OrgDO.java | 10 +- .../tblist/dal/orgMapper/OrgMapper.java | 2 + .../EcganalysisparasService.java | 9 +- .../EcganalysisparasServiceImpl.java | 150 +++++++++++++----- 11 files changed, 171 insertions(+), 62 deletions(-) create mode 100644 yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/vo/EcgPictureOcr.java diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java index cc4f334e6..d132ecb53 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java @@ -6,10 +6,13 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqV import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import org.apache.ibatis.annotations.Mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; + import java.util.Collection; import java.util.List; @Mapper +@InterceptorIgnore(tenantLine = "true") public interface DeptMapper extends BaseMapperX { default List selectList(DeptListReqVO reqVO) { diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/EcganalysisparasController.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/EcganalysisparasController.java index 3878ce150..172bba068 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/EcganalysisparasController.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/EcganalysisparasController.java @@ -47,10 +47,12 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import cn.iocoder.yudao.module.tblist.controller.admin.ecganalysisparas.vo.*; +import cn.iocoder.yudao.module.tblist.controller.admin.patientexamlist.vo.EcgPictureOcr; import cn.iocoder.yudao.module.tblist.dal.dataobject.ecganalysisparas.EcganalysisparasDO; import cn.iocoder.yudao.module.tblist.service.ecganalysisparas.EcganalysisparasService; import javax.annotation.Resource; +import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.net.URLEncoder; @@ -140,7 +142,7 @@ public class EcganalysisparasController { LocalDateTime dateTime = LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); updateReqVO.setDoctorDiagTime(dateTime); - if(!doctorDO.getDepartmentName().isEmpty()) + if(doctorDO.getDepartmentName() !=null && !doctorDO.getDepartmentName().isEmpty()) { updateReqVO.setDepartName(doctorDO.getDepartmentName()); } @@ -338,30 +340,22 @@ public class EcganalysisparasController { @PostMapping("/parsePhotoCreateData") @Operation(summary = "从JSON文件解析心电数据") - public CommonResult parsePhotoCreateData(@RequestParam("file") MultipartFile file) { - try { + @PermitAll + public CommonResult parsePhotoCreateData(@RequestBody String file) { + // 验证文件不为空 if (file == null || file.isEmpty()) { return error(400, "请选择要上传的JSON文件"); } // 调用service进行文件解析 - List dataList = ecganalysisparasService.parseEcgDataFromJsonFile(file); + List dataList = ecganalysisparasService.parseEcgDataFromJsonFile(file); // 将数据转换为DO对象 // List resultList = ecganalysisparasService.parsePhotoCreateData(dataList, EcganalysisparasDO.class); ecganalysisparasService.createEcgFromPhotoJson(dataList); return success(true); - } catch (IllegalArgumentException e) { - // 参数错误异常 - return error(400, e.getMessage()); - } catch (IOException e) { - // 文件读取错误 - return error(500, "文件读取失败: " + e.getMessage()); - } catch (Exception e) { - // 其他未知错误 - return error(500, "处理失败: " + e.getMessage()); - } + } } \ No newline at end of file diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/vo/EcganalysisparasSaveReqVO.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/vo/EcganalysisparasSaveReqVO.java index 6fb47493a..0d70a25ff 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/vo/EcganalysisparasSaveReqVO.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/ecganalysisparas/vo/EcganalysisparasSaveReqVO.java @@ -32,6 +32,9 @@ public class EcganalysisparasSaveReqVO { @Schema(description = "QRS电轴") private String qrsAxle; + @Schema(description = "QRS间期") + private String qrs; + @Schema(description = "T电轴") private String tAxle; diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/PatientexamlistController.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/PatientexamlistController.java index 732be71d9..bf815eb3f 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/PatientexamlistController.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/PatientexamlistController.java @@ -378,7 +378,7 @@ public class PatientexamlistController { LocalDateTime dateTime = LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); //获取当前登陆用户 - // AdminUserDO user = userService.getUser(getLoginUserId()); +// AdminUserDO user = userService.getUser(getLoginUserId()); PatientexamlistSaveReqVO updateReqVO = new PatientexamlistSaveReqVO(); updateReqVO.setId(id); updateReqVO.setReviewDoctorId(doctorid); diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/vo/EcgPictureOcr.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/vo/EcgPictureOcr.java new file mode 100644 index 000000000..455e31a34 --- /dev/null +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/controller/admin/patientexamlist/vo/EcgPictureOcr.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.tblist.controller.admin.patientexamlist.vo; + +import java.time.LocalDate; + +import cn.iocoder.yudao.module.tblist.controller.admin.ecganalysisparas.vo.EcganalysisparasSaveReqVO; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 心电图图片OCR + */ +@NoArgsConstructor +@AllArgsConstructor +@Data +@Accessors(chain = true) +public class EcgPictureOcr extends EcganalysisparasSaveReqVO{ + /** 机构名称(文件夹名称) */ + private String orgName; + /** 机构ID */ + private String orgId; + /** 心电图数据文件路径 */ + private String ecgDataFilePath; + +} diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/dataobject/ecganalysisparas/EcganalysisparasDO.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/dataobject/ecganalysisparas/EcganalysisparasDO.java index 14dfc416b..b64953252 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/dataobject/ecganalysisparas/EcganalysisparasDO.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/dataobject/ecganalysisparas/EcganalysisparasDO.java @@ -64,6 +64,10 @@ public class EcganalysisparasDO { */ @TableField("QRS_Axle") private String qrsAxle; + /** + * QRS间期 + */ + private String qrs; /** * T电轴 */ diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/mysql/ecganalysisparas/EcganalysisparasMapper.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/mysql/ecganalysisparas/EcganalysisparasMapper.java index 89810a722..0ae396d2e 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/mysql/ecganalysisparas/EcganalysisparasMapper.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/mysql/ecganalysisparas/EcganalysisparasMapper.java @@ -87,5 +87,7 @@ public interface EcganalysisparasMapper extends BaseMapperX @Select(" ${sql} ") List> use_selectList(@Param("sql") String sql); + @Select("SELECT * FROM tb_ecganalysisparas WHERE examId = #{examId} AND (isDelete = '0' or isDelete is null)") + EcganalysisparasDO selectOneByExamId(@Param("examId") String examId); } \ No newline at end of file diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgDo/OrgDO.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgDo/OrgDO.java index 6685dbb97..3a6c772ca 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgDo/OrgDO.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgDo/OrgDO.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.tblist.dal.orgDo; import com.baomidou.mybatisplus.annotation.*; +import com.github.xiaoymin.knife4j.annotations.Ignore; + import lombok.*; import java.time.LocalDateTime; @@ -22,7 +24,7 @@ public class OrgDO { /** * 主键 机构ID */ - @TableId(type = IdType.INPUT) + @TableId(type = IdType.INPUT,value = "orgID") private String orgID; /** * 机构名称 @@ -60,11 +62,5 @@ public class OrgDO { */ @TableField("orgSN") private String orgSN; - /** - * 创建时间:年月日时分秒 - */ - @TableField("datetime") - private Date datetime; - } \ No newline at end of file diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgMapper/OrgMapper.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgMapper/OrgMapper.java index 1cc7db8ef..ec362ef15 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgMapper/OrgMapper.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/dal/orgMapper/OrgMapper.java @@ -17,4 +17,6 @@ public interface OrgMapper extends BaseMapperX */ //获取机构表里的上级机构 String SelectOrgHigID(@Param("orgId") String orgId); + + } diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasService.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasService.java index 47339569f..03fca0a36 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasService.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasService.java @@ -4,6 +4,7 @@ import java.util.*; import java.io.IOException; import cn.iocoder.yudao.module.tblist.controller.admin.ecganalysisparas.vo.*; +import cn.iocoder.yudao.module.tblist.controller.admin.patientexamlist.vo.EcgPictureOcr; import cn.iocoder.yudao.module.tblist.dal.dataobject.ecganalysisparas.EcganalysisparasDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -104,21 +105,21 @@ public interface EcganalysisparasService extends IService { * @param 目标类型的泛型参数 * @return 转换后的目标类型列表 */ - List parsePhotoCreateData(List list, Class clazz); + List parsePhotoCreateData(List list, Class clazz); /** * 从JSON文件解析数据 * - * @param file 上传的JSON文件 + * @param jsonContent 上传的JSON文件数据 * @return 解析后的心电分析数据列表 * @throws IOException 如果文件读取失败 */ - List parseEcgDataFromJsonFile(MultipartFile file) throws IOException; + List parseEcgDataFromJsonFile(String jsonContent); /** * 将解析后的数据插入数据库 * @param list */ - void createEcgFromPhotoJson(List list); + void createEcgFromPhotoJson(List list); } \ No newline at end of file diff --git a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasServiceImpl.java b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasServiceImpl.java index c002fa490..67faf447e 100644 --- a/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasServiceImpl.java +++ b/yudao-module-tblist/yudao-module-tblist-biz/src/main/java/cn/iocoder/yudao/module/tblist/service/ecganalysisparas/EcganalysisparasServiceImpl.java @@ -4,14 +4,20 @@ import cn.hutool.core.lang.UUID; import cn.iocoder.yudao.framework.common.exception.ErrorCode; import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import cn.iocoder.yudao.module.infra.service.config.ConfigService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.doctor.DoctorDO; import cn.iocoder.yudao.module.system.dal.dataobject.org.OrgUnitDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper; +import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.doctor.DoctorService; import cn.iocoder.yudao.module.system.service.org.OrgUnitService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.tblist.dal.dataobject.patientexamlist.PatientexamlistDO; import cn.iocoder.yudao.module.tblist.dal.mysql.patientexamlist.PatientexamlistMapper; +import cn.iocoder.yudao.module.tblist.dal.orgDo.OrgDO; +import cn.iocoder.yudao.module.tblist.dal.orgMapper.OrgMapper; +import cn.iocoder.yudao.module.tblist.service.patientexamlist.org.OrgService; import cn.iocoder.yudao.module.tblist.service.positivestatistics.PositivestatisticsService; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -36,10 +42,11 @@ import java.util.*; import java.util.stream.Collectors; import cn.iocoder.yudao.module.tblist.controller.admin.ecganalysisparas.vo.*; +import cn.iocoder.yudao.module.tblist.controller.admin.patientexamlist.vo.EcgPictureOcr; import cn.iocoder.yudao.module.tblist.dal.dataobject.ecganalysisparas.EcganalysisparasDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.tblist.dal.mysql.ecganalysisparas.EcganalysisparasMapper; import org.springframework.web.client.RestTemplate; @@ -79,6 +86,8 @@ public class EcganalysisparasServiceImpl extends ServiceImpl List parsePhotoCreateData(List list, Class clazz) { + public List parsePhotoCreateData(List list, Class clazz) { return BeanUtils.toBean(list, clazz); } @Override - public List parseEcgDataFromJsonFile(MultipartFile file) throws IOException { - if (file == null || file.isEmpty()) { - throw new IllegalArgumentException("文件不能为空"); + public List parseEcgDataFromJsonFile(String jsonContent) { + if (jsonContent == null || jsonContent.trim().isEmpty()) { + throw exception(new ErrorCode(999, "JSON内容不能为空")); } - // 校验文件类型 - String contentType = file.getContentType(); - String originalFilename = file.getOriginalFilename(); - if (contentType == null || !contentType.contains("json") && - (originalFilename == null || !originalFilename.toLowerCase().endsWith(".json"))) { - throw new IllegalArgumentException("只支持JSON文件格式"); - } - - // 读取文件内容 - String content = new String(file.getBytes(), StandardCharsets.UTF_8); - try { // 解析为List - List jsonList = JSON.parseArray(content, JSONObject.class); - List resultList = new ArrayList<>(); + List jsonList = JSON.parseArray(jsonContent, JSONObject.class); + List resultList = new ArrayList<>(); for (JSONObject json : jsonList) { // 获取extracted_data字段 JSONObject extractedData = json.getJSONObject("extracted_data"); if (extractedData != null) { - EcganalysisparasSaveReqVO vo = new EcganalysisparasSaveReqVO(); + EcgPictureOcr vo = new EcgPictureOcr(); // 处理简单字段映射 processSimpleFields(extractedData, vo); @@ -294,14 +292,14 @@ public class EcganalysisparasServiceImpl extends ServiceImpl Map fieldMappings = new HashMap<>(); @@ -314,7 +312,22 @@ public class EcganalysisparasServiceImpl extends ServiceImpl vo.setDepartName(cleanValue(value, false))); fieldMappings.put("rv5Sv1", (value) -> vo.setRv5Sv1(cleanValue(value, true))); fieldMappings.put("qrsTimeLimit", (value) -> vo.setQrsTimeLimit(cleanValue(value, true))); - + fieldMappings.put("regId", (value) -> vo.setRegId(cleanValue(value, false))); + fieldMappings.put("orgName", (value) -> vo.setOrgName(cleanValue(value, false))); + fieldMappings.put("ecgDataFilePath", (value) -> vo.setEcgDataFilePath(cleanValue(value, false))); + fieldMappings.put("qrs", (value) -> vo.setQrs(cleanValue(value, true))); + fieldMappings.put("collectionTime", (value) -> { + try { + // 解析日期字符串(格式:2025-04-14) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 因为只有日期没有时间,所以使用atStartOfDay()添加时间部分 + LocalDateTime dateTime = LocalDate.parse(cleanValue(value, false), formatter).atStartOfDay(); + vo.setCollectionTime(dateTime); + } catch (Exception e) { + // 解析失败时使用当前时间 + vo.setCollectionTime(LocalDateTime.now()); + } + }); // 处理所有简单字段 for (Map.Entry entry : fieldMappings.entrySet()) { String fieldName = entry.getKey(); @@ -330,7 +343,7 @@ public class EcganalysisparasServiceImpl extends ServiceImpl list) { + public void createEcgFromPhotoJson(List list) { // 存储格式不正确的记录 List invalidRecords = new ArrayList<>(); // 遍历列表检查数字字段的有效性 - Iterator iterator = list.iterator(); + Iterator iterator = list.iterator(); while (iterator.hasNext()) { - EcganalysisparasSaveReqVO item = iterator.next(); - if (!isValidNumberFormat(item) && (item.getExamId() == null || item.getExamId().equals(""))) { + EcgPictureOcr item = iterator.next(); + + isValidNumberFormat(item); + // 如果检查单号为空,或者存在相同检查单号的记录,则不进行后续处理 + if ( (item.getExamId() == null || item.getExamId().equals(""))) { invalidRecords.add(item); iterator.remove(); // 从原始列表中移除无效记录 } @@ -477,6 +493,13 @@ public class EcganalysisparasServiceImpl extends ServiceImpl { + String orgName = e.getOrgName().trim(); + OrgDO orgDO = orgMapper.selectOne(new LambdaQueryWrapperX() + .eq(OrgDO::getOrgName, orgName)); + if(orgDO != null){ + e.setOrgId(orgDO.getOrgID()); + e.setEcgJsonDataFilePath("https://zzxmc.gw12320.com/ecgimage/"+e.getOrgName()+"/"+e.getEcgDataFilePath()); + } e.setRegId(UUID.randomUUID().toString()); e.setCreateDate(LocalDateTime.now()); }); @@ -492,10 +515,12 @@ public class EcganalysisparasServiceImpl extends ServiceImpl { - e.setId(UUID.randomUUID().toString()); - }); + if (ecgDO!=null && !ecgDO.isEmpty()) { + Iterator ecgIterator = ecgDO.iterator(); + while (ecgIterator.hasNext()) { + EcganalysisparasDO e = ecgIterator.next(); + EcganalysisparasDO ecganalysisparasDO = ecganalysisparasMapper.selectOneByExamId(e.getExamId()); + if (ecganalysisparasDO != null) { + ecgIterator.remove(); + } else { + e.setId(UUID.randomUUID().toString()); + e.setSnapshotTime(e.getCollectionTime()); + } + } ecganalysisparasMapper.insertBatch(ecgDO); } - if (!patientDOList.isEmpty()) { - patientDOList.forEach(e -> { - e.setId(UUID.randomUUID().toString()); - }); + if (patientDOList!=null && !patientDOList.isEmpty()) { + Iterator patientIterator = patientDOList.iterator(); + while (patientIterator.hasNext()) { + PatientexamlistDO patient = patientIterator.next(); + PatientexamlistDO patientexamlistDO = patientexamlistMapper.selectOne( + new LambdaQueryWrapperX() + .eq(PatientexamlistDO::getExamId, patient.getExamId()) + ); + if (patientexamlistDO != null) { + patientIterator.remove(); // 安全地移除元素 + } else { + patient.setId(UUID.randomUUID().toString()); + } + } patientexamlistMapper.insertBatch(patientDOList); } @@ -526,6 +569,41 @@ public class EcganalysisparasServiceImpl extends ServiceImpl