Просмотр исходного кода

新增
1、新增血糖记录模块
修改
1.长者档案界面需要加一列入院编号或者合同编号;2.长者档案导出数据需要床位信息、入院日期、护理等级、第二托养信息

liangwenxuan 3 месяцев назад
Родитель
Сommit
ea05b1541b
13 измененных файлов с 551 добавлено и 21 удалено
  1. 78 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyBloodSugarRecordController.java
  2. 29 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlybloodsugarrecord/ElderlyBloodSugarRecordPageReqVO.java
  3. 63 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlybloodsugarrecord/ElderlyBloodSugarRecordRespVO.java
  4. 43 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlybloodsugarrecord/ElderlyBloodSugarRecordSaveReqVO.java
  5. 50 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/excel/ElderlyBaseInfoExportExcelVO.java
  6. 50 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyBloodSugarRecordDO.java
  7. 30 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyBloodSugarRecordMapper.java
  8. 2 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyContractMapper.java
  9. 20 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBloodSugarRecordService.java
  10. 91 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBloodSugarRecordServiceImpl.java
  11. 49 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyInfoServiceImpl.java
  12. 34 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyBloodSugarRecordMapper.xml
  13. 12 1
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyContractMapper.xml

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

@@ -0,0 +1,78 @@
+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.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordSaveReqVO;
+import cn.iocoder.yudao.module.system.service.biz.ElderlyBloodSugarRecordService;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 长者血糖记录")
+@RestController
+@RequestMapping("/elderly-blood-sugar-record")
+@Validated
+public class ElderlyBloodSugarRecordController {
+
+    @Resource
+    private ElderlyBloodSugarRecordService elderlyBloodSugarRecordService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建长者血糖记录")
+    public CommonResult<Long> create(@Valid @RequestBody ElderlyBloodSugarRecordSaveReqVO createReqVO) {
+        if (createReqVO.getTenantId() == null) {
+            createReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(elderlyBloodSugarRecordService.createElderlyBloodSugarRecord(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新长者血糖记录")
+    @TenantIgnore
+    public CommonResult<Boolean> update(@Valid @RequestBody ElderlyBloodSugarRecordSaveReqVO updateReqVO) {
+        if (updateReqVO.getTenantId() == null) {
+            updateReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        elderlyBloodSugarRecordService.updateElderlyBloodSugarRecord(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除长者血糖记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @TenantIgnore
+    public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
+        elderlyBloodSugarRecordService.deleteElderlyBloodSugarRecord(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得长者血糖记录详情")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<ElderlyBloodSugarRecordRespVO> get(@RequestParam("id") Long id) {
+        return success(elderlyBloodSugarRecordService.getElderlyBloodSugarRecord(id));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得长者血糖记录分页")
+    @TenantIgnore
+    public CommonResult<PageResult<ElderlyBloodSugarRecordRespVO>> page(@Valid ElderlyBloodSugarRecordPageReqVO pageReqVO) {
+        if (pageReqVO.getTenantIds() == null) {
+            pageReqVO.setTenantIds(new Long[]{TenantContextHolder.getTenantId()});
+        }
+        return success(elderlyBloodSugarRecordService.getElderlyBloodSugarRecordPage(pageReqVO));
+    }
+}
+

+ 29 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlybloodsugarrecord/ElderlyBloodSugarRecordPageReqVO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
+
+@Schema(description = "管理后台 - 长者血糖记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ElderlyBloodSugarRecordPageReqVO extends PageParam {
+
+    @Schema(description = "长者id", example = "1")
+    private Long elderId;
+
+    @Schema(description = "记录日期范围")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
+    private LocalDate[] recordDate;
+
+    @Schema(description = "长者姓名(联表查询用)")
+    private String elderName;
+}

+ 63 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlybloodsugarrecord/ElderlyBloodSugarRecordRespVO.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
+
+@Schema(description = "管理后台 - 长者血糖记录 Response VO")
+@Data
+public class ElderlyBloodSugarRecordRespVO {
+
+    @Schema(description = "id", example = "1")
+    private Long id;
+
+    @Schema(description = "长者id", example = "1")
+    private Long elderId;
+
+    @Schema(description = "长者姓名")
+    private String elderName;
+
+    @Schema(description = "房间号")
+    private String roomName;
+
+    @Schema(description = "床位号")
+    private String bedName;
+
+    @Schema(description = "性别")
+    private Integer elderSex;
+
+    @Schema(description = "记录日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY, timezone = TIME_ZONE_DEFAULT)
+    private LocalDate recordDate;
+
+    @Schema(description = "血糖值")
+    private BigDecimal bloodSugar;
+
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "机构id", example = "1")
+    private Long tenantId;
+
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "创建人")
+    private String creator;
+
+    @Schema(description = "更新人")
+    private String updater;
+}
+

+ 43 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlybloodsugarrecord/ElderlyBloodSugarRecordSaveReqVO.java

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
+
+@Schema(description = "管理后台 - 长者血糖记录新增/修改 Request VO")
+@Data
+public class ElderlyBloodSugarRecordSaveReqVO {
+
+    @Schema(description = "id(修改时必传)", example = "1")
+    private Long id;
+
+    @Schema(description = "长者id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "长者id不能为空")
+    private Long elderId;
+
+    @Schema(description = "记录日期", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "记录日期不能为空")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY, timezone = TIME_ZONE_DEFAULT)
+    private LocalDate recordDate;
+
+    @Schema(description = "血糖值", requiredMode = Schema.RequiredMode.REQUIRED, example = "5.60")
+    @NotNull(message = "血糖值不能为空")
+    private BigDecimal bloodSugar;
+
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "机构id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "机构id不能为空")
+    private Long tenantId;
+}
+

+ 50 - 9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/excel/ElderlyBaseInfoExportExcelVO.java

@@ -139,38 +139,79 @@ public class ElderlyBaseInfoExportExcelVO {
     @DictFormat(DictTypeConstants.IN_STATUS_TYPE)
     private Integer inStatusType;
 
+    @ExcelProperty("床位信息")
+    private String bedName;
+
+    @ExcelProperty("入院日期")
+    @DateTimeFormat("yyyy-MM-dd")
+    private Date checkInTime;
+
+    @ExcelProperty("护理等级")
+    private String nurseLevelName;
 
     //==================托养人信息======================//
     @ExcelProperty("第一托养人姓名")
     private String name;
 
-    @ExcelProperty("关系")
+    @ExcelProperty("第一托养人关系")
     private String relation;
 
-    @ExcelProperty(value = "托养人性别", converter = DictConvert.class)
+    @ExcelProperty(value = "第一托养人性别", converter = DictConvert.class)
     @DictFormat(DictTypeConstants.USER_SEX)
     private String gender;
 
-    @ExcelProperty("联系电话")
+    @ExcelProperty("第一托养人联系电话")
     private String phone;
 
-    @ExcelProperty(value = "托养人证件类型", converter = DictConvert.class)
+    @ExcelProperty(value = "第一托养人证件类型", converter = DictConvert.class)
     @DictFormat(DictTypeConstants.PAPERS_TYPE)
     private String relativesPapersType;
 
-    @ExcelProperty("托养人证件号码")
+    @ExcelProperty("第一托养人证件号码")
     private String relativesIdCard;
 
-    @ExcelProperty("家庭电话")
+    @ExcelProperty("第一托养人家庭电话")
     private String telephone;
 
-    @ExcelProperty("工作单位")
+    @ExcelProperty("第一托养人工作单位")
     private String workUnit;
 
-    @ExcelProperty("现在住址")
+    @ExcelProperty("第一托养人现在住址")
     private String nowAddress;
 
-    @ExcelProperty("家庭住址")
+    @ExcelProperty("第一托养人家庭住址")
     private String relativeAddress;
 
+    @ExcelProperty("第二托养人姓名")
+    private String secondName;
+
+    @ExcelProperty("第二托养人关系")
+    private String secondRelation;
+
+    @ExcelProperty(value = "第二托养人性别", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.USER_SEX)
+    private String secondGender;
+
+    @ExcelProperty("第二托养人联系电话")
+    private String secondPhone;
+
+    @ExcelProperty(value = "第二托养人证件类型", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.PAPERS_TYPE)
+    private String secondRelativesPapersType;
+
+    @ExcelProperty("第二托养人证件号码")
+    private String secondRelativesIdCard;
+
+    @ExcelProperty("第二托养人家庭电话")
+    private String secondTelephone;
+
+    @ExcelProperty("第二托养人工作单位")
+    private String secondWorkUnit;
+
+    @ExcelProperty("第二托养人现在住址")
+    private String secondNowAddress;
+
+    @ExcelProperty("第二托养人家庭住址")
+    private String secondRelativeAddress;
+
 }

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

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.biz;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseNoDeleteDO;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
+
+/**
+ * 长者血糖记录 DO
+ */
+@TableName("elderly_blood_sugar_record")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ElderlyBloodSugarRecordDO extends BaseNoDeleteDO {
+
+    @TableId
+    private Long id;
+
+    @Schema(description = "长者id")
+    private Long elderId;
+
+    @Schema(description = "记录日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY, timezone = TIME_ZONE_DEFAULT)
+    private LocalDate recordDate;
+
+    @Schema(description = "血糖值")
+    private BigDecimal bloodSugar;
+
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "机构id")
+    private Long tenantId;
+}
+

+ 30 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyBloodSugarRecordMapper.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.system.dal.mysql.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordRespVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyBloodSugarRecordDO;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 长者血糖记录 Mapper
+ */
+@Mapper
+public interface ElderlyBloodSugarRecordMapper extends BaseMapperX<ElderlyBloodSugarRecordDO> {
+
+    default PageResult<ElderlyBloodSugarRecordDO> selectPage(ElderlyBloodSugarRecordPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ElderlyBloodSugarRecordDO>()
+                .eqIfPresent(ElderlyBloodSugarRecordDO::getElderId, reqVO.getElderId())
+                .betweenIfPresent(ElderlyBloodSugarRecordDO::getRecordDate, reqVO.getRecordDate())
+                .eqIfPresent(ElderlyBloodSugarRecordDO::getTenantId, reqVO.getTenantId())
+                .orderByDesc(ElderlyBloodSugarRecordDO::getRecordDate, ElderlyBloodSugarRecordDO::getId));
+    }
+
+    List<ElderlyBloodSugarRecordRespVO> selectPageWithElderInfo(Page<ElderlyBloodSugarRecordDO> page, @Param("params") ElderlyBloodSugarRecordPageReqVO pageReqVO);
+}

+ 2 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyContractMapper.java

@@ -21,4 +21,6 @@ public interface ElderlyContractMapper extends BaseMapperX<ElderlyContractDO> {
     List<ElderlyContractDO> findPage(Page<ElderlyContractDO> page,@Param("params") ContractPageReqVO reqVO);
 
     List<ElderlyContractDO> selectMessageList();
+
+    List<ElderlyContractDO> selectInProgressByElderIds(@Param("elderIds") List<Long> elderIds);
 }

+ 20 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBloodSugarRecordService.java

@@ -0,0 +1,20 @@
+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.elderlybloodsugarrecord.ElderlyBloodSugarRecordPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordSaveReqVO;
+
+public interface ElderlyBloodSugarRecordService {
+
+    Long createElderlyBloodSugarRecord(ElderlyBloodSugarRecordSaveReqVO createReqVO);
+
+    void updateElderlyBloodSugarRecord(ElderlyBloodSugarRecordSaveReqVO updateReqVO);
+
+    void deleteElderlyBloodSugarRecord(Long id);
+
+    ElderlyBloodSugarRecordRespVO getElderlyBloodSugarRecord(Long id);
+
+    PageResult<ElderlyBloodSugarRecordRespVO> getElderlyBloodSugarRecordPage(ElderlyBloodSugarRecordPageReqVO pageReqVO);
+}
+

+ 91 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBloodSugarRecordServiceImpl.java

@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.system.service.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.BuildBedVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyBloodSugarRecordDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyInfoDO;
+import cn.iocoder.yudao.module.system.dal.mysql.biz.BuildBedMapper;
+import cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyBloodSugarRecordMapper;
+import cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyInfoMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.COMMON_NOT_FOUND;
+
+@Service
+@Validated
+public class ElderlyBloodSugarRecordServiceImpl implements ElderlyBloodSugarRecordService {
+
+    @Resource
+    private ElderlyBloodSugarRecordMapper elderlyBloodSugarRecordMapper;
+
+    @Autowired
+    private ElderlyInfoMapper elderlyInfoMapper;
+
+    @Autowired
+    private BuildService buildService;
+
+    @Override
+    public Long createElderlyBloodSugarRecord(ElderlyBloodSugarRecordSaveReqVO createReqVO) {
+        ElderlyBloodSugarRecordDO record = BeanUtils.toBean(createReqVO, ElderlyBloodSugarRecordDO.class);
+        elderlyBloodSugarRecordMapper.insert(record);
+        return record.getId();
+    }
+
+    @Override
+    public void updateElderlyBloodSugarRecord(ElderlyBloodSugarRecordSaveReqVO updateReqVO) {
+        validateElderlyBloodSugarRecordExists(updateReqVO.getId());
+        ElderlyBloodSugarRecordDO updateObj = BeanUtils.toBean(updateReqVO, ElderlyBloodSugarRecordDO.class);
+        elderlyBloodSugarRecordMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteElderlyBloodSugarRecord(Long id) {
+        validateElderlyBloodSugarRecordExists(id);
+        elderlyBloodSugarRecordMapper.deleteById(id);
+    }
+
+    @Override
+    public ElderlyBloodSugarRecordRespVO getElderlyBloodSugarRecord(Long id) {
+        ElderlyBloodSugarRecordDO record = elderlyBloodSugarRecordMapper.selectById(id);
+        if (record == null) {
+            throw exception(COMMON_NOT_FOUND);
+        }
+        ElderlyBloodSugarRecordRespVO recordRespVO = BeanUtils.toBean(record, ElderlyBloodSugarRecordRespVO.class);
+        ElderlyInfoDO elderlyInfoDO = elderlyInfoMapper.selectById(record.getElderId());
+        recordRespVO.setElderName(elderlyInfoDO.getElderName());
+        recordRespVO.setElderSex(elderlyInfoDO.getElderSex());
+        BuildBedVO bedInfo = buildService.getBedInfoById(elderlyInfoDO.getBedId());
+        recordRespVO.setBedName(bedInfo.getBuildBedName());
+        recordRespVO.setRoomName(bedInfo.getBuildRoomName());
+        return recordRespVO;
+    }
+
+    @Override
+    public PageResult<ElderlyBloodSugarRecordRespVO> getElderlyBloodSugarRecordPage(ElderlyBloodSugarRecordPageReqVO pageReqVO) {
+        Page<ElderlyBloodSugarRecordDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        List<ElderlyBloodSugarRecordRespVO> list = elderlyBloodSugarRecordMapper.selectPageWithElderInfo(page, pageReqVO);
+        PageResult<ElderlyBloodSugarRecordRespVO> pageResult = new PageResult<>();
+        pageResult.setList(list);
+        pageResult.setTotal(page.getTotal());
+        return pageResult;
+    }
+
+    private void validateElderlyBloodSugarRecordExists(Long id) {
+        if (id == null || elderlyBloodSugarRecordMapper.selectById(id) == null) {
+            throw exception(COMMON_NOT_FOUND);
+        }
+    }
+}
+

+ 49 - 11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyInfoServiceImpl.java

@@ -108,6 +108,9 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
     private BuildBedMapper buildBedMapper;
 
     @Autowired
+    private ElderlyContractMapper elderlyContractMapper;
+
+    @Autowired
     private AdminUserMapper userMapper;
 
     @Resource
@@ -193,8 +196,26 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
     public PageResult<ElderlyInfoDO> findPage(ElderlyInfoPageReqVO pageVO) {
         Page<ElderlyInfoDO> page = new Page<>(pageVO.getPageNo(), pageVO.getPageSize());
         List<ElderlyInfoDO> list = elderlyInfoMapper.findPage(page, pageVO);
+
+        // 批量查询进行中的合同编号(status = 1)并回填到 contractNumber
+        Map<Long, String> inProgressContractNumberMap = new HashMap<>();
+        List<Long> elderIds = list.stream().map(ElderlyInfoDO::getId).filter(Objects::nonNull).collect(Collectors.toList());
+        if (!elderIds.isEmpty()) {
+            List<ElderlyContractDO> contracts = elderlyContractMapper.selectInProgressByElderIds(elderIds);
+            // 由于 SQL 已按 elder_id asc, created_time desc 排序,这里取每个 elder 的第一条即最新进行中合同
+            for (ElderlyContractDO c : contracts) {
+                if (c.getElderId() == null) {
+                    continue;
+                }
+                inProgressContractNumberMap.putIfAbsent(c.getElderId(), c.getContractNumber());
+            }
+        }
+
         for (ElderlyInfoDO elderlyInfoDO : list) {
             elderlyInfoDO.setBedName(buildService.getFullBedName(elderlyInfoDO.getId()));
+            if (elderlyInfoDO.getId() != null) {
+                elderlyInfoDO.setContractNumber(inProgressContractNumberMap.get(elderlyInfoDO.getId()));
+            }
             //统计信息完成度
             elderlyInfoStatistics(elderlyInfoDO);
         }
@@ -787,17 +808,34 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
             BeanUtils.copyProperties(e, baseInfoExportExcelVO);
             baseInfoExportExcelVO.setNum(atomicInteger.getAndIncrement());
             baseInfoExportExcelVO.setBirthdayCareDate(e.getBirthday() == null ? null : e.getBirthday().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
-            //查询亲属信息
-            Optional<RelativesDO> optional = relativesMapper.selectList(new LambdaQueryWrapperX<RelativesDO>()
-                    .eq(RelativesDO::getPeopleId, e.getId())).stream().findFirst();
-
-            if (optional.isPresent()) {
-                RelativesDO relativesDO = optional.get();
-                // 存在长者属性与托养人属性名称一致,需要排除
-                BeanUtils.copyProperties(relativesDO, baseInfoExportExcelVO,"idCard","address","papersType");
-                baseInfoExportExcelVO.setRelativesPapersType(relativesDO.getPapersType());
-                baseInfoExportExcelVO.setRelativesIdCard(relativesDO.getIdCard());
-                baseInfoExportExcelVO.setRelativeAddress(relativesDO.getAddress());
+            baseInfoExportExcelVO.setBedName(buildService.getFullBedName(e.getId()));
+            if (e.getNurseLevelId() != null) {
+                NurseLevelDO nurseLevelDO = nurseLevelMapper.selectById(e.getNurseLevelId());
+                baseInfoExportExcelVO.setNurseLevelName(nurseLevelDO == null ? null : nurseLevelDO.getNurseLevelName());
+            }
+            //查询亲属信息(取最早创建的两条:第一托养人、第二托养人)
+            List<RelativesDO> relativesList = relativesMapper.selectList(new LambdaQueryWrapperX<RelativesDO>()
+                    .eq(RelativesDO::getPeopleId, e.getId())
+                    .orderByAsc(RelativesDO::getId));
+            if (relativesList != null && !relativesList.isEmpty()) {
+                RelativesDO first = relativesList.get(0);
+                BeanUtils.copyProperties(first, baseInfoExportExcelVO, "idCard", "address", "papersType");
+                baseInfoExportExcelVO.setRelativesPapersType(first.getPapersType());
+                baseInfoExportExcelVO.setRelativesIdCard(first.getIdCard());
+                baseInfoExportExcelVO.setRelativeAddress(first.getAddress());
+            }
+            if (relativesList != null && relativesList.size() >= 2) {
+                RelativesDO second = relativesList.get(1);
+                baseInfoExportExcelVO.setSecondName(second.getName());
+                baseInfoExportExcelVO.setSecondRelation(second.getRelation());
+                baseInfoExportExcelVO.setSecondGender(second.getGender());
+                baseInfoExportExcelVO.setSecondPhone(second.getPhone());
+                baseInfoExportExcelVO.setSecondRelativesPapersType(second.getPapersType());
+                baseInfoExportExcelVO.setSecondRelativesIdCard(second.getIdCard());
+                baseInfoExportExcelVO.setSecondTelephone(second.getTelephone());
+                baseInfoExportExcelVO.setSecondWorkUnit(second.getWorkUnit());
+                baseInfoExportExcelVO.setSecondNowAddress(second.getNowAddress());
+                baseInfoExportExcelVO.setSecondRelativeAddress(second.getAddress());
             }
             return baseInfoExportExcelVO;
         }).collect(Collectors.toList());

+ 34 - 0
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyBloodSugarRecordMapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyBloodSugarRecordMapper">
+
+    <select id="selectPageWithElderInfo" resultType="cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlybloodsugarrecord.ElderlyBloodSugarRecordRespVO">
+        select ebsr.*, ei.elder_name as elder_name, ei.elder_sex as elder_sex,
+               br.room_name as room_name, bb.bed_name as bed_name
+        from elderly_blood_sugar_record ebsr
+        left join elderly_info ei on ei.id = ebsr.elder_id
+        left join org_build_bed bb on bb.id = ei.bed_id
+        left join org_build_room br on br.id = bb.room_id
+        where 1 = 1
+        <if test="params.tenantId != null">
+            and ebsr.tenant_id = #{params.tenantId}
+        </if>
+        <if test="params.elderId != null">
+            and ebsr.elder_id = #{params.elderId}
+        </if>
+        <if test="params.elderName != null and params.elderName != ''">
+            and ei.elder_name like concat('%', #{params.elderName}, '%')
+        </if>
+        <if test="params.recordDate != null">
+            and ebsr.record_date between #{params.recordDate[0]} and #{params.recordDate[1]}
+        </if>
+        <if test="params.tenantIds != null">
+            and ebsr.tenant_id in
+            <foreach collection="params.tenantIds" item="tenantId" open="(" separator="," close=")">
+                #{tenantId}
+            </foreach>
+        </if>
+        order by ebsr.record_date desc, ebsr.id desc
+    </select>
+</mapper>
+

+ 12 - 1
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyContractMapper.xml

@@ -50,4 +50,15 @@
             ec.expire_time
     </select>
 
-</mapper>
+    <select id="selectInProgressByElderIds" resultType="cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyContractDO">
+        SELECT ec.*
+        FROM elderly_contract ec
+        WHERE ec.status = 1
+          AND ec.elder_id IN
+            <foreach item="id" collection="elderIds" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        ORDER BY ec.elder_id ASC, ec.created_time DESC, ec.id DESC
+    </select>
+
+</mapper>