ソースを参照

新增
1、健康档案新增部分字段和新增导入接口

liangwenxuan 1 ヶ月 前
コミット
774023eac4

+ 14 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyHealthRecordController.java

@@ -3,8 +3,10 @@ package cn.iocoder.yudao.module.system.controller.admin.biz;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyHealthRecordImportExcelVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyHealthRecordPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyHealthRecordDO;
 import cn.iocoder.yudao.module.system.service.biz.ElderlyHealthRecordService;
@@ -12,10 +14,14 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
 
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -74,4 +80,12 @@ public class ElderlyHealthRecordController {
         return success(pageResult);
     }
 
+    @PostMapping("/importExcel")
+    @Operation(summary = "导入健康档案Excel(以身份证匹配长者,存在则更新、不存在则新增)")
+    @TenantIgnore
+    public CommonResult<Map<String, Object>> importExcel(@RequestParam("file") MultipartFile file) throws IOException {
+        List<ElderlyHealthRecordImportExcelVO> dataList = ExcelUtils.read(file, ElderlyHealthRecordImportExcelVO.class);
+        return success(elderlyHealthRecordService.importHealthRecord(dataList));
+    }
+
 }

+ 79 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/ElderlyHealthRecordImportExcelVO.java

@@ -0,0 +1,79 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * 健康档案 Excel 导入 VO
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
+public class ElderlyHealthRecordImportExcelVO {
+
+    @ExcelProperty("姓名")
+    private String elderName;
+
+    @ExcelProperty("身份证")
+    private String idCard;
+
+    @ExcelProperty("防噎食")
+    private String asphyxiationByChoking;
+
+    @ExcelProperty("防压疮")
+    private String pressureSores;
+
+    @ExcelProperty("防坠床")
+    private String fallPreventionMeasures;
+
+    @ExcelProperty("防误食")
+    private String assessSimpleMentalState;
+
+    @ExcelProperty("防烫伤")
+    private String empyrosis;
+
+    @ExcelProperty("防跌倒")
+    private String fallDown;
+
+    @ExcelProperty("防走失")
+    private String wanderAway;
+
+    @ExcelProperty("防文娱活动意外")
+    private String antiEntertainment;
+
+    @ExcelProperty("防他伤和自伤")
+    private String commitSuicide;
+
+    @ExcelProperty("责任护士")
+    private String nurse;
+
+    @ExcelProperty("主管医生")
+    private String doctor;
+
+    @ExcelProperty("责任护理员")
+    private String nurseAssistant;
+
+    @ExcelProperty("照护要点")
+    private String careNote;
+
+    @ExcelProperty("过敏史")
+    private String allergyHistory;
+
+    @ExcelProperty("既往病史")
+    private String pastHistory;
+
+    @ExcelProperty("用药史")
+    private String medicationHistory;
+
+    @ExcelProperty("饮食要点")
+    private String dietaryGuidelines;
+
+    @ExcelProperty("错误原因")
+    private String errorMsg;
+}

+ 101 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyHealthRecordDO.java

@@ -34,6 +34,17 @@ public class ElderlyHealthRecordDO implements Serializable {
     @TableField("elder_id")
     private Long elderId;
 
+    /**
+     * 残疾情况
+     */
+    @TableField("disability")
+    private String disability;
+
+    /**
+     * 过敏药物
+     */
+    @TableField("drug_allergy")
+    private String drugAllergy;
 
     /**
      * 常见疾病
@@ -573,4 +584,94 @@ public class ElderlyHealthRecordDO implements Serializable {
 
     @TableField(exist = false)
     private String tenantName;
+
+    /**
+     * 防噎食
+     */
+    @TableField("asphyxiation_by_choking")
+    private String asphyxiationByChoking;
+
+    /**
+     * 防压疮
+     */
+    @TableField("pressure_sores")
+    private String pressureSores;
+
+    /**
+     * 防坠床
+     */
+    @TableField("fall_prevention_measures")
+    private String fallPreventionMeasures;
+
+    /**
+     * 防误食(简易精神状态)
+     */
+    @TableField("assess_simple_mental_state")
+    private String assessSimpleMentalState;
+
+    /**
+     * 防烫伤
+     */
+    @TableField("empyrosis")
+    private String empyrosis;
+
+    /**
+     * 防跌倒
+     */
+    @TableField("fall_down")
+    private String fallDown;
+
+    /**
+     * 防走失
+     */
+    @TableField("wander_away")
+    private String wanderAway;
+
+    /**
+     * 防文娱活动意外
+     */
+    @TableField("anti_entertainment")
+    private String antiEntertainment;
+
+    /**
+     * 防他伤和自伤
+     */
+    @TableField("commit_suicide")
+    private String commitSuicide;
+
+    /**
+     * 责任护士
+     */
+    @TableField("nurse")
+    private String nurse;
+
+    /**
+     * 主管医生
+     */
+    @TableField("doctor")
+    private String doctor;
+
+    /**
+     * 责任护理员
+     */
+    @TableField("nurse_assistant")
+    private String nurseAssistant;
+
+    /**
+     * 照护要点
+     */
+    @TableField("care_note")
+    private String careNote;
+
+    /**
+     * 用药史
+     */
+    @TableField("medication_history")
+    private String medicationHistory;
+
+    /**
+     * 饮食要点
+     */
+    @TableField("dietary_guidelines")
+    private String dietaryGuidelines;
 }

+ 13 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyHealthRecordService.java

@@ -1,9 +1,13 @@
 package cn.iocoder.yudao.module.system.service.biz;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyHealthRecordImportExcelVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyHealthRecordPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyHealthRecordDO;
 
+import java.util.List;
+import java.util.Map;
+
 public interface ElderlyHealthRecordService {
     void add(ElderlyHealthRecordDO elderlyHealthRecordDO);
 
@@ -14,4 +18,13 @@ public interface ElderlyHealthRecordService {
     PageResult<ElderlyHealthRecordDO> queryPage(ElderlyHealthRecordPageReqVO pageReqVO);
 
     void edit(ElderlyHealthRecordDO elderlyHealthRecordDO);
+
+    /**
+     * 导入健康档案 Excel
+     * 以身份证匹配长者,存在健康记录则更新,不存在则新增
+     *
+     * @param dataList 导入数据列表
+     * @return 导入结果(successCount / failCount / errorList)
+     */
+    Map<String, Object> importHealthRecord(List<ElderlyHealthRecordImportExcelVO> dataList);
 }

+ 75 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyHealthRecordServiceImpl.java

@@ -1,6 +1,9 @@
 package cn.iocoder.yudao.module.system.service.biz;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyHealthRecordImportExcelVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyHealthRecordPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyHealthRecordDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyInfoDO;
@@ -12,10 +15,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class ElderlyHealthRecordServiceImpl implements ElderlyHealthRecordService {
@@ -74,5 +81,73 @@ public class ElderlyHealthRecordServiceImpl implements ElderlyHealthRecordServic
         elderlyHealthRecordMapper.updateById(elderlyHealthRecordDO);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> importHealthRecord(List<ElderlyHealthRecordImportExcelVO> dataList) {
+        Map<String, Object> result = new HashMap<>();
+        List<ElderlyHealthRecordImportExcelVO> errorList = new ArrayList<>();
+        int successCount = 0;
+        for (ElderlyHealthRecordImportExcelVO vo : dataList) {
+            // 1. 以身份证匹配长者
+            ElderlyInfoDO elderlyInfoDO = elderlyInfoMapper.selectOne(new LambdaQueryWrapperX<ElderlyInfoDO>()
+                    .eq(ElderlyInfoDO::getIdCard, vo.getIdCard()));
+            if (elderlyInfoDO == null) {
+                vo.setErrorMsg("未找到身份证[" + vo.getIdCard() + "]对应的长者");
+                errorList.add(vo);
+                continue;
+            }
+            Long elderId = elderlyInfoDO.getId();
+
+            // 2. 查询该长者是否已存在健康档案
+            ElderlyHealthRecordDO existing = elderlyHealthRecordMapper.selectOne(new LambdaQueryWrapperX<ElderlyHealthRecordDO>()
+                    .eq(ElderlyHealthRecordDO::getElderId, elderId));
+
+            if (existing != null) {
+                // 已存在 -> 更新
+                applyImportFields(existing, vo);
+                elderlyHealthRecordMapper.updateById(existing);
+            } else {
+                // 不存在 -> 新增
+                ElderlyHealthRecordDO record = new ElderlyHealthRecordDO();
+                record.setElderId(elderId);
+                record.setTenantId(elderlyInfoDO.getTenantId());
+                record.setCreateDate(LocalDateTime.now());
+                record.setCreateBy(SecurityFrameworkUtils.getLoginUserNickname());
+                applyImportFields(record, vo);
+                elderlyHealthRecordMapper.insert(record);
+            }
+            successCount++;
+        }
+        result.put("successCount", successCount);
+        result.put("failCount", errorList.size());
+        result.put("errorList", errorList);
+        return result;
+    }
+
+    /**
+     * 将导入 VO 中的字段映射到健康档案 DO
+     */
+    private void applyImportFields(ElderlyHealthRecordDO record, ElderlyHealthRecordImportExcelVO vo) {
+        record.setAsphyxiationByChoking(vo.getAsphyxiationByChoking());
+        record.setPressureSores(vo.getPressureSores());
+        record.setFallPreventionMeasures(vo.getFallPreventionMeasures());
+        record.setAssessSimpleMentalState(vo.getAssessSimpleMentalState());
+        record.setEmpyrosis(vo.getEmpyrosis());
+        record.setFallDown(vo.getFallDown());
+        record.setWanderAway(vo.getWanderAway());
+        record.setAntiEntertainment(vo.getAntiEntertainment());
+        record.setCommitSuicide(vo.getCommitSuicide());
+        record.setNurse(vo.getNurse());
+        record.setDoctor(vo.getDoctor());
+        record.setNurseAssistant(vo.getNurseAssistant());
+        record.setCareNote(vo.getCareNote());
+        // 过敏史写入过敏食物字段
+        record.setHistoryFoodAllergies(vo.getAllergyHistory());
+        // 既往病史
+        record.setPreexistingDisease(vo.getPastHistory());
+        record.setMedicationHistory(vo.getMedicationHistory());
+        record.setDietaryGuidelines(vo.getDietaryGuidelines());
+    }
+
 
 }