Bläddra i källkod

新增
1、增加居家服务区域模块
2、增加居家服务人员模块
3、增加居家服务部门模块
4、账单导出增加长护险和消费券列
BUGFIX
1、解决针对已过期的合同外出无法正确校验返院时间,即使返院时间在过期合同的时间范围内的问题
2、解析excel的日期增加适配yyyy/MM/dd的格式
3、消费券分页查询增加按照长者姓名筛选

liangwenxuan 2 månader sedan
förälder
incheckning
e99ce0a9a5
38 ändrade filer med 1061 tillägg och 16 borttagningar
  1. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/ElderlyConsumerVouchersPageReqVO.java
  2. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeElderlyInfoController.java
  3. 79 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeServiceAreaController.java
  4. 67 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeServiceDepartmentController.java
  5. 90 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeServiceMemberController.java
  6. 62 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeElderlyInfoDetailRespVO.java
  7. 6 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeElderlyInfoSaveReqVO.java
  8. 20 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceAreaPageReqVO.java
  9. 21 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceAreaRespVO.java
  10. 14 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceAreaSaveReqVO.java
  11. 24 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceDepartmentRespVO.java
  12. 17 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceDepartmentSaveReqVO.java
  13. 20 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemberAssignReqVO.java
  14. 23 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemeberPageReqVO.java
  15. 26 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemeberPageRespVO.java
  16. 18 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemeberSaveReqVO.java
  17. 8 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/excel/LocalDateConvert.java
  18. 27 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceAreaDO.java
  19. 31 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceDepartmentDO.java
  20. 28 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceElderRelationDO.java
  21. 31 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceMemberDO.java
  22. 3 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyBuildFloorActivityImageMapper.java
  23. 9 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceAreaMapper.java
  24. 10 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceDepartmentMapper.java
  25. 10 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceElderRelationMapper.java
  26. 19 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceMemberMapper.java
  27. 6 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyAskLeaveServiceImpl.java
  28. 20 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseOrderServiceImpl.java
  29. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeElderlyInfoService.java
  30. 55 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeElderlyInfoServiceImpl.java
  31. 19 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceAreaService.java
  32. 71 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceAreaServiceImpl.java
  33. 16 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceDepartmentService.java
  34. 42 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceDepartmentServiceImpl.java
  35. 22 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceMemberService.java
  36. 64 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceMemberServiceImpl.java
  37. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyConsumerVouchersMapper.xml
  38. 75 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/HomeServiceMemberMapper.xml

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/ElderlyConsumerVouchersPageReqVO.java

@@ -12,8 +12,8 @@ import lombok.ToString;
 @ToString(callSuper = true)
 public class ElderlyConsumerVouchersPageReqVO extends PageParam {
 
-    @Schema(description = "长者id", example = "1")
-    private Long elderId;
+    @Schema(description = "长者姓名", example = "1")
+    private String elderName;
 
     @Schema(description = "账单归属月", example = "2025-01")
     private String billingMonth;

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeElderlyInfoController.java

@@ -4,6 +4,7 @@ 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.home.vo.HomeElderlyInfoDetailRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoPageRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoSaveReqVO;
@@ -77,7 +78,7 @@ public class HomeElderlyInfoController {
     @Operation(summary = "获得居家长者信息详情")
     @Parameter(name = "id", description = "编号", required = true, example = "1")
     @TenantIgnore
-    public CommonResult<HomeElderlyInfoDO> get(@RequestParam("id") Long id) {
+    public CommonResult<HomeElderlyInfoDetailRespVO> get(@RequestParam("id") Long id) {
         return success(homeElderlyInfoService.getHomeElderlyInfo(id));
     }
 }

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

@@ -0,0 +1,79 @@
+package cn.iocoder.yudao.module.system.controller.admin.home;
+
+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.home.vo.HomeServiceAreaPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceAreaRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceAreaSaveReqVO;
+import cn.iocoder.yudao.module.system.service.home.HomeServiceAreaService;
+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("/home/service-area")
+@Validated
+public class HomeServiceAreaController {
+
+    @Resource
+    private HomeServiceAreaService homeServiceAreaService;
+
+    @PostMapping("/create")
+    @Operation(summary = "新增居家服务区域")
+    @TenantIgnore
+    public CommonResult<Long> create(@Valid @RequestBody HomeServiceAreaSaveReqVO createReqVO) {
+        if (createReqVO.getTenantId() == null) {
+            createReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(homeServiceAreaService.createHomeServiceArea(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "修改居家服务区域")
+    @TenantIgnore
+    public CommonResult<Boolean> update(@Valid @RequestBody HomeServiceAreaSaveReqVO updateReqVO) {
+        if (updateReqVO.getTenantId() == null) {
+            updateReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        homeServiceAreaService.updateHomeServiceArea(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除居家服务区域")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
+        homeServiceAreaService.deleteHomeServiceArea(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得居家服务区域详情")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<HomeServiceAreaRespVO> get(@RequestParam("id") Long id) {
+        return success(homeServiceAreaService.getHomeServiceArea(id));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得居家服务区域分页")
+    @TenantIgnore
+    public CommonResult<PageResult<HomeServiceAreaRespVO>> getPage(@Valid HomeServiceAreaPageReqVO pageReqVO) {
+        if (pageReqVO.getTenantId() == null) {
+            pageReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(homeServiceAreaService.getHomeServiceAreaPage(pageReqVO));
+    }
+}
+

+ 67 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeServiceDepartmentController.java

@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.system.controller.admin.home;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+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.home.vo.HomeServiceDepartmentRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceDepartmentSaveReqVO;
+import cn.iocoder.yudao.module.system.service.home.HomeServiceDepartmentService;
+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("/home/service-department")
+@Validated
+public class HomeServiceDepartmentController {
+
+    @Resource
+    private HomeServiceDepartmentService homeServiceDepartmentService;
+
+    @PostMapping("/create")
+    @Operation(summary = "新增居家服务部门")
+    @TenantIgnore
+    public CommonResult<Long> create(@Valid @RequestBody HomeServiceDepartmentSaveReqVO createReqVO) {
+        if (createReqVO.getTenantId() == null) {
+            createReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(homeServiceDepartmentService.createHomeServiceDepartment(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "修改居家服务部门")
+    @TenantIgnore
+    public CommonResult<Boolean> update(@Valid @RequestBody HomeServiceDepartmentSaveReqVO updateReqVO) {
+        if (updateReqVO.getTenantId() == null) {
+            updateReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        homeServiceDepartmentService.updateHomeServiceDepartment(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除居家服务部门")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
+        homeServiceDepartmentService.deleteHomeServiceDepartment(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得居家服务部门详情")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<HomeServiceDepartmentRespVO> get(@RequestParam("id") Long id) {
+        return success(homeServiceDepartmentService.getHomeServiceDepartment(id));
+    }
+}
+

+ 90 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeServiceMemberController.java

@@ -0,0 +1,90 @@
+package cn.iocoder.yudao.module.system.controller.admin.home;
+
+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.home.vo.HomeServiceMemberAssignReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberSaveReqVO;
+import cn.iocoder.yudao.module.system.service.home.HomeServiceMemberService;
+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("/home/service-member")
+@Validated
+public class HomeServiceMemberController {
+
+    @Resource
+    private HomeServiceMemberService homeServiceMemberService;
+
+    @PostMapping("/create")
+    @Operation(summary = "新增居家服务人员")
+    @TenantIgnore
+    public CommonResult<Long> create(@Valid @RequestBody HomeServiceMemeberSaveReqVO createReqVO) {
+        if (createReqVO.getTenantId() == null) {
+            createReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(homeServiceMemberService.createHomeServiceMemeber(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "修改居家服务人员")
+    @TenantIgnore
+    public CommonResult<Boolean> update(@Valid @RequestBody HomeServiceMemeberSaveReqVO updateReqVO) {
+        if (updateReqVO.getTenantId() == null) {
+            updateReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        homeServiceMemberService.updateHomeServiceMemeber(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除居家服务人员")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
+        homeServiceMemberService.deleteHomeServiceMemeber(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得居家服务人员详情")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<HomeServiceMemeberPageRespVO> get(@RequestParam("id") Long id) {
+        return success(homeServiceMemberService.getHomeServiceMemeber(id));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得居家服务人员分页")
+    @TenantIgnore
+    public CommonResult<PageResult<HomeServiceMemeberPageRespVO>> page(@Valid HomeServiceMemeberPageReqVO pageReqVO) {
+        if (pageReqVO.getTenantId() == null) {
+            pageReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        if (pageReqVO.getTenantIds() == null) {
+            pageReqVO.setTenantIds(new Long[]{TenantContextHolder.getTenantId()});
+        }
+        return success(homeServiceMemberService.getHomeServiceMemeberPage(pageReqVO));
+    }
+
+    @PostMapping("/assign")
+    @Operation(summary = "分配服务人员")
+    @TenantIgnore
+    public CommonResult<Boolean> assign(@Valid @RequestBody HomeServiceMemberAssignReqVO assignReqVO) {
+        homeServiceMemberService.assignHomeServiceMember(assignReqVO);
+        return success(true);
+    }
+}

+ 62 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeElderlyInfoDetailRespVO.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeElderlyFamilyDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 居家长者信息详情 Response VO")
+@Data
+public class HomeElderlyInfoDetailRespVO {
+
+    private Long id;
+    private String idCardType;
+    private String idCard;
+    private String elderName;
+    private String elderQrCode;
+    private String sex;
+    private LocalDateTime birthday;
+    private String phone;
+    private String telephone;
+    private String liveSituation;
+    private BigDecimal liveArea;
+    private LocalDateTime checkIn;
+    private String currentLiveArea;
+    private String currentLiveAddress;
+    private String householdArea;
+    private String householdAddress;
+    private String householdType;
+    private String ethnicity;
+    private String maritalStatus;
+    private String job;
+    private String selfCareSituation;
+    private String educationalLevel;
+    private String disabilityType;
+    private String incomeSource;
+    private BigDecimal disposableIncome;
+    private String medicalType;
+    private String intendedElderlyCareMode;
+    private String intendedService;
+    private String problem;
+    private String trackingRecord;
+    private String isMigrate;
+    private String isResident;
+    private Integer isService;
+    private Integer serviceTimesYear;
+    private String healthStatus;
+    private String bloodType;
+    private String medicalInsuranceCard;
+    private String eyesight;
+    private String hearing;
+    private String disease;
+    private String medicalHistory;
+    private String extraFile;
+    @Schema(description = "亲属列表")
+    private List<HomeElderlyFamilyDO> familyList;
+    @Schema(description = "紧急联系人")
+    private HomeElderlyFamilyDO emergencyPerson;
+    private Long tenantId;
+}

+ 6 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeElderlyInfoSaveReqVO.java

@@ -1,10 +1,12 @@
 package cn.iocoder.yudao.module.system.controller.admin.home.vo;
 
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeElderlyFamilyDO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Schema(description = "管理后台 - 居家长者信息新增/修改 Request VO")
 @Data
@@ -52,6 +54,10 @@ public class HomeElderlyInfoSaveReqVO {
     private String disease;
     private String medicalHistory;
     private String extraFile;
+    @Schema(description = "亲属列表")
+    private List<HomeElderlyFamilyDO> familyList;
+    @Schema(description = "紧急联系人")
+    private HomeElderlyFamilyDO emergencyPerson;
     private Long tenantId;
 }
 

+ 20 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceAreaPageReqVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+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;
+
+@Schema(description = "管理后台 - 居家服务区域分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class HomeServiceAreaPageReqVO extends PageParam {
+
+    private String area;
+    private String remark;
+    private Long tenantId;
+    private Long[] tenantIds;
+}
+

+ 21 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceAreaRespVO.java

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 居家服务区域 Response VO")
+@Data
+public class HomeServiceAreaRespVO {
+
+    private Long id;
+    private String area;
+    private String remark;
+    private Long tenantId;
+    private LocalDateTime createTime;
+    private LocalDateTime updateTime;
+    private String creator;
+    private String updater;
+}
+

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

@@ -0,0 +1,14 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 居家服务区域新增/修改 Request VO")
+@Data
+public class HomeServiceAreaSaveReqVO {
+
+    private Long id;
+    private String area;
+    private String remark;
+    private Long tenantId;
+}

+ 24 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceDepartmentRespVO.java

@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 居家服务部门 Response VO")
+@Data
+public class HomeServiceDepartmentRespVO {
+
+    private Long id;
+    private Long superiorId;
+    private String name;
+    private Long responsiblePersonId;
+    private String phone;
+    private String email;
+    private Long tenantId;
+    private LocalDateTime createTime;
+    private LocalDateTime updateTime;
+    private String creator;
+    private String updater;
+}
+

+ 17 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceDepartmentSaveReqVO.java

@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 居家服务部门新增/修改 Request VO")
+@Data
+public class HomeServiceDepartmentSaveReqVO {
+
+    private Long id;
+    private Long superiorId;
+    private String name;
+    private Long responsiblePersonId;
+    private String phone;
+    private String email;
+    private Long tenantId;
+}

+ 20 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemberAssignReqVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 居家服务人员分配长者 Request VO")
+@Data
+public class HomeServiceMemberAssignReqVO {
+
+    @Schema(description = "居家服务人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "serviceMemberId 不能为空")
+    private Long serviceMemberId;
+
+    @Schema(description = "长者ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "homeElderId 不能为空")
+    private Long homeElderId;
+
+}

+ 23 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemeberPageReqVO.java

@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+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;
+
+@Schema(description = "管理后台 - 居家服务人员分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class HomeServiceMemeberPageReqVO extends PageParam {
+
+    private String name;
+    private String idCard;
+    private String phone;
+    private Long serviceAreaId;
+    private Long serviceDeptId;
+    private Long tenantId;
+    private Long[] tenantIds;
+}
+

+ 26 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemeberPageRespVO.java

@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 居家服务人员分页 Response VO")
+@Data
+public class HomeServiceMemeberPageRespVO {
+
+    private Long id;
+    private String name;
+    private String idCard;
+    private String sex;
+    private String phone;
+    private Long serviceAreaId;
+    private String serviceArea;
+    private Long serviceDeptId;
+    private String serviceDeptName;
+    private Long tenantId;
+    private LocalDateTime createTime;
+    private LocalDateTime updateTime;
+    private String creator;
+    private String updater;
+}

+ 18 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceMemeberSaveReqVO.java

@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 居家服务人员新增/修改 Request VO")
+@Data
+public class HomeServiceMemeberSaveReqVO {
+
+    private Long id;
+    private String name;
+    private String idCard;
+    private String sex;
+    private String phone;
+    private Long serviceAreaId;
+    private Long serviceDeptId;
+    private Long tenantId;
+}

+ 8 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/excel/LocalDateConvert.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.convert.excel;
 
 import com.alibaba.excel.converters.Converter;
 import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.exception.ExcelDataConvertException;
 import com.alibaba.excel.metadata.GlobalConfiguration;
 import com.alibaba.excel.metadata.data.ReadCellData;
 import com.alibaba.excel.metadata.data.WriteCellData;
@@ -24,7 +25,13 @@ public class LocalDateConvert implements Converter<LocalDate> {
 
     @Override
     public LocalDate convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration)  {
-        return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        LocalDate date = null;
+        try{
+            date = LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        }catch (ExcelDataConvertException e){
+            date = LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy/MM/dd"));
+        }
+        return date;
     }
     @Override
     public WriteCellData<?> convertToExcelData(LocalDate localDate, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {

+ 27 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceAreaDO.java

@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.home;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 居家服务区域 DO
+ */
+@TableName("home_service_area")
+@Data
+public class HomeServiceAreaDO implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private String area;
+    private String remark;
+    private Long tenantId;
+    private LocalDateTime createTime;
+    private LocalDateTime updateTime;
+    private String creator;
+    private String updater;
+}

+ 31 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceDepartmentDO.java

@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.home;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 居家服务部门 DO
+ */
+@TableName("home_service_department")
+@Data
+public class HomeServiceDepartmentDO implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long superiorId;
+    private String name;
+    private Long responsiblePersonId;
+    private String phone;
+    private String email;
+    private Long tenantId;
+    private LocalDateTime createTime;
+    private LocalDateTime updateTime;
+    private String creator;
+    private String updater;
+}
+

+ 28 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceElderRelationDO.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.home;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 居家服务长者关联表 DO
+ */
+@TableName("home_service_elder_relation")
+@Data
+public class HomeServiceElderRelationDO implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long homeElderId;
+    private Long homeServiceMemberId;
+    private Long tenantId;
+    private LocalDateTime createTime;
+    private LocalDateTime updateTime;
+    private String creator;
+    private String updater;
+}
+

+ 31 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceMemberDO.java

@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.home;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 居家服务人员 DO
+ */
+@TableName("home_service_member")
+@Data
+public class HomeServiceMemberDO implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private String name;
+    private String idCard;
+    private String sex;
+    private String phone;
+    private Long serviceAreaId;
+    private Long serviceDeptId;
+    private Long tenantId;
+    private LocalDateTime createTime;
+    private LocalDateTime updateTime;
+    private String creator;
+    private String updater;
+}

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

@@ -42,6 +42,9 @@ public interface ElderlyBuildFloorActivityImageMapper extends BaseMapperX<Elderl
 
 
 
+
+
+
 
 
 

+ 9 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceAreaMapper.java

@@ -0,0 +1,9 @@
+package cn.iocoder.yudao.module.system.dal.mysql.home;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceAreaDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HomeServiceAreaMapper extends BaseMapperX<HomeServiceAreaDO> {
+}

+ 10 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceDepartmentMapper.java

@@ -0,0 +1,10 @@
+package cn.iocoder.yudao.module.system.dal.mysql.home;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceDepartmentDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HomeServiceDepartmentMapper extends BaseMapperX<HomeServiceDepartmentDO> {
+}
+

+ 10 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceElderRelationMapper.java

@@ -0,0 +1,10 @@
+package cn.iocoder.yudao.module.system.dal.mysql.home;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceElderRelationDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HomeServiceElderRelationMapper extends BaseMapperX<HomeServiceElderRelationDO> {
+}
+

+ 19 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceMemberMapper.java

@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.system.dal.mysql.home;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageRespVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceMemberDO;
+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
+public interface HomeServiceMemberMapper extends BaseMapperX<HomeServiceMemberDO> {
+
+    List<HomeServiceMemeberPageRespVO> selectPageWithJoin(Page<HomeServiceMemeberPageRespVO> page, @Param("params") HomeServiceMemeberPageReqVO reqVO);
+
+    HomeServiceMemeberPageRespVO selectWithJoinById(@Param("id") Long id);
+}

+ 6 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyAskLeaveServiceImpl.java

@@ -702,13 +702,16 @@ public class ElderlyAskLeaveServiceImpl implements ElderlyAskLeaveService {
     }
 
     /**
-     * 检查返院时间是否超过合同到期时间
+     * 检查返院日期当天是否仍在合同有效期内
      */
     private void checkLeaveUpdateDate(ElderlyAskLeaveDO elderlyAskLeaveDO){
+        LocalDate updateLocalDate = elderlyAskLeaveDO.getUpdateDate().toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDate();
         List<ElderlyContractDO> elderlyContractDOS = elderlyContractMapper.selectList(new LambdaQueryWrapperX<ElderlyContractDO>()
                 .eq(ElderlyContractDO::getElderId, elderlyAskLeaveDO.getElderId())
-                .in(ElderlyContractDO::getStatus, 1,2)
-                .ge(ElderlyContractDO::getExpireTime, elderlyAskLeaveDO.getUpdateDate()));
+                .apply("date_format(expire_time, '%Y-%m-%d') >= {0}", updateLocalDate)
+                .apply("date_format(begin_time, '%Y-%m-%d') <= {0}", updateLocalDate));
         if(CollectionUtil.isEmpty(elderlyContractDOS)){
             throw exception(ErrorCodeConstants.ELDERLY_LEAVE_UPDATE_DATE_OVER_EXPIRE);
         }

+ 20 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseOrderServiceImpl.java

@@ -1189,7 +1189,8 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
         for (DictDataDO dictDataDO : dictDataDOList) {
             head.add(Arrays.asList(dictDataDO.getLabel()));
         }
-
+        head.add(Arrays.asList("长护险"));
+        head.add(Arrays.asList("消费券"));
         head.add(Arrays.asList("账单金额"));
         head.add(Arrays.asList("医保金额"));
         head.add(Arrays.asList("抹零金额"));
@@ -1227,8 +1228,10 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
             List<ExpenseOrderItemDO> orderItems = expenseOrderItemMapper.selectListById(order.getId(),
                     BusinessConstants.EXPENSE_ITEM, BusinessConstants.DAILY_EXPENSES);
             Map<Integer, BigDecimal> identificationTypeMap = new HashMap<>();
+            BigDecimal orderActualAmount = BigDecimal.ZERO;
             for (int i = 0; i < orderItems.size(); i++) {
                 ExpenseOrderItemDO expenseOrderItemDO = orderItems.get(i);
+                orderActualAmount = orderActualAmount.add(expenseOrderItemDO.getTotalAmount());
                 setExpenseOrderType(expenseOrderItemDO);
 
                 if (identificationTypeMap.containsKey(expenseOrderItemDO.getType())) {
@@ -1250,8 +1253,22 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
                 }
             }
 
-
-            row.add(order.getActualAmount().setScale(2, RoundingMode.DOWN));
+            List<ExpenseSubsidyDO> expenseSubsidyDOS = expenseSubsidyMapper.selectList(new LambdaQueryWrapperX<ExpenseSubsidyDO>()
+                    .eq(ExpenseSubsidyDO::getDeductionBillMonth, order.getBillingMonth())
+                    .eq(ExpenseSubsidyDO::getElderId, order.getElderId())
+                    .eq(ExpenseSubsidyDO::getStatus, 1));
+            BigDecimal subsidyAmount = BigDecimal.ZERO;
+            if(CollectionUtil.isNotEmpty(expenseSubsidyDOS)){
+                subsidyAmount = expenseSubsidyDOS.stream().map(e -> e.getAmount().negate()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            List<ElderlyConsumerVouchersDO> elderlyConsumerVouchersDOS = elderlyConsumerVouchersMapper.selectList(new LambdaQueryWrapperX<ElderlyConsumerVouchersDO>().eq(ElderlyConsumerVouchersDO::getOrderId, order.getId()));
+            BigDecimal consumerVouchers = BigDecimal.ZERO;
+            if(CollectionUtil.isNotEmpty(elderlyConsumerVouchersDOS)){
+                consumerVouchers = elderlyConsumerVouchersDOS.stream().map(e -> e.getAmount().negate()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            row.add(subsidyAmount);
+            row.add(consumerVouchers);
+            row.add(orderActualAmount.add(consumerVouchers).add(subsidyAmount));
             row.add(order.getInsuranceAmount().setScale(2, RoundingMode.DOWN));
 
             List<ExpensePayOrderDO> expensePayOrderList = expensePayOrderMapper.selectList(new LambdaQueryWrapperX<ExpensePayOrderDO>()

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeElderlyInfoService.java

@@ -1,10 +1,10 @@
 package cn.iocoder.yudao.module.system.service.home;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoDetailRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoPageRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoSaveReqVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeElderlyInfoDO;
 
 public interface HomeElderlyInfoService {
 
@@ -14,7 +14,7 @@ public interface HomeElderlyInfoService {
 
     void deleteHomeElderlyInfo(Long id);
 
-    HomeElderlyInfoDO getHomeElderlyInfo(Long id);
+    HomeElderlyInfoDetailRespVO getHomeElderlyInfo(Long id);
 
     PageResult<HomeElderlyInfoPageRespVO> getHomeElderlyInfoPage(HomeElderlyInfoPageReqVO pageReqVO);
 

+ 55 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeElderlyInfoServiceImpl.java

@@ -2,17 +2,24 @@ package cn.iocoder.yudao.module.system.service.home;
 
 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.system.controller.admin.home.vo.HomeElderlyInfoDetailRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoPageRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeElderlyInfoSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeElderlyFamilyDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeElderlyInfoDO;
+import cn.iocoder.yudao.module.system.dal.mysql.home.HomeElderlyFamilyMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.home.HomeElderlyInfoMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 @Service
 @Validated
@@ -21,10 +28,14 @@ public class HomeElderlyInfoServiceImpl implements HomeElderlyInfoService {
     @Resource
     private HomeElderlyInfoMapper homeElderlyInfoMapper;
 
+    @Resource
+    private HomeElderlyFamilyMapper homeElderlyFamilyMapper;
+
     @Override
     public Long createHomeElderlyInfo(HomeElderlyInfoSaveReqVO createReqVO) {
         HomeElderlyInfoDO doObj = BeanUtils.toBean(createReqVO, HomeElderlyInfoDO.class);
         homeElderlyInfoMapper.insert(doObj);
+        saveOrUpdateFamilyList(doObj.getId(), createReqVO);
         return doObj.getId();
     }
 
@@ -32,16 +43,28 @@ public class HomeElderlyInfoServiceImpl implements HomeElderlyInfoService {
     public void updateHomeElderlyInfo(HomeElderlyInfoSaveReqVO updateReqVO) {
         HomeElderlyInfoDO updateObj = BeanUtils.toBean(updateReqVO, HomeElderlyInfoDO.class);
         homeElderlyInfoMapper.updateById(updateObj);
+        saveOrUpdateFamilyList(updateObj.getId(), updateReqVO);
     }
 
     @Override
     public void deleteHomeElderlyInfo(Long id) {
         homeElderlyInfoMapper.deleteById(id);
+        homeElderlyFamilyMapper.delete(new LambdaQueryWrapperX<HomeElderlyFamilyDO>()
+                .eq(HomeElderlyFamilyDO::getHomeElderId, id));
     }
 
     @Override
-    public HomeElderlyInfoDO getHomeElderlyInfo(Long id) {
-        return homeElderlyInfoMapper.selectById(id);
+    public HomeElderlyInfoDetailRespVO getHomeElderlyInfo(Long id) {
+        HomeElderlyInfoDO infoDO = homeElderlyInfoMapper.selectById(id);
+        if (infoDO == null) {
+            return null;
+        }
+        List<HomeElderlyFamilyDO> familyList = homeElderlyFamilyMapper.selectList(new LambdaQueryWrapperX<HomeElderlyFamilyDO>()
+                .eq(HomeElderlyFamilyDO::getHomeElderId, id));
+        HomeElderlyInfoDetailRespVO respVO = BeanUtils.toBean(infoDO, HomeElderlyInfoDetailRespVO.class);
+        respVO.setFamilyList(familyList.stream().filter(item -> Objects.equals(item.getIsEmergency(), 0)).collect(Collectors.toList()));
+        respVO.setEmergencyPerson(familyList.stream().filter(item -> Objects.equals(item.getIsEmergency(), 1)).findFirst().orElse(null));
+        return respVO;
     }
 
     @Override
@@ -50,4 +73,34 @@ public class HomeElderlyInfoServiceImpl implements HomeElderlyInfoService {
         List<HomeElderlyInfoPageRespVO> list = homeElderlyInfoMapper.selectPageWithAccountInfo(page, pageReqVO);
         return new PageResult<>(list, page.getTotal());
     }
+
+    private void saveOrUpdateFamilyList(Long homeElderId, HomeElderlyInfoSaveReqVO reqVO) {
+        homeElderlyFamilyMapper.delete(new LambdaQueryWrapperX<HomeElderlyFamilyDO>()
+                .eq(HomeElderlyFamilyDO::getHomeElderId, homeElderId));
+        List<HomeElderlyFamilyDO> saveList = new ArrayList<>();
+        if (reqVO.getFamilyList() != null) {
+            reqVO.getFamilyList().forEach(item -> {
+                if (item == null) {
+                    return;
+                }
+                HomeElderlyFamilyDO familyDO = BeanUtils.toBean(item, HomeElderlyFamilyDO.class);
+                familyDO.setId(null);
+                familyDO.setHomeElderId(homeElderId);
+                familyDO.setTenantId(reqVO.getTenantId());
+                familyDO.setIsEmergency(0);
+                saveList.add(familyDO);
+            });
+        }
+        if (reqVO.getEmergencyPerson() != null) {
+            HomeElderlyFamilyDO emergencyPerson = BeanUtils.toBean(reqVO.getEmergencyPerson(), HomeElderlyFamilyDO.class);
+            emergencyPerson.setId(null);
+            emergencyPerson.setHomeElderId(homeElderId);
+            emergencyPerson.setTenantId(reqVO.getTenantId());
+            emergencyPerson.setIsEmergency(1);
+            saveList.add(emergencyPerson);
+        }
+        if (!saveList.isEmpty()) {
+            homeElderlyFamilyMapper.insertBatch(saveList);
+        }
+    }
 }

+ 19 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceAreaService.java

@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceAreaPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceAreaRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceAreaSaveReqVO;
+
+public interface HomeServiceAreaService {
+
+    Long createHomeServiceArea(HomeServiceAreaSaveReqVO createReqVO);
+
+    void updateHomeServiceArea(HomeServiceAreaSaveReqVO updateReqVO);
+
+    void deleteHomeServiceArea(Long id);
+
+    HomeServiceAreaRespVO getHomeServiceArea(Long id);
+
+    PageResult<HomeServiceAreaRespVO> getHomeServiceAreaPage(HomeServiceAreaPageReqVO pageReqVO);
+}

+ 71 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceAreaServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+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.system.controller.admin.home.vo.HomeServiceAreaPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceAreaRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceAreaSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceAreaDO;
+import cn.iocoder.yudao.module.system.dal.mysql.home.HomeServiceAreaMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+@Validated
+public class HomeServiceAreaServiceImpl implements HomeServiceAreaService {
+
+    @Resource
+    private HomeServiceAreaMapper homeServiceAreaMapper;
+
+    @Override
+    public Long createHomeServiceArea(HomeServiceAreaSaveReqVO createReqVO) {
+        HomeServiceAreaDO areaDO = BeanUtils.toBean(createReqVO, HomeServiceAreaDO.class);
+        homeServiceAreaMapper.insert(areaDO);
+        return areaDO.getId();
+    }
+
+    @Override
+    public void updateHomeServiceArea(HomeServiceAreaSaveReqVO updateReqVO) {
+        HomeServiceAreaDO areaDO = BeanUtils.toBean(updateReqVO, HomeServiceAreaDO.class);
+        homeServiceAreaMapper.updateById(areaDO);
+    }
+
+    @Override
+    public void deleteHomeServiceArea(Long id) {
+        homeServiceAreaMapper.deleteById(id);
+    }
+
+    @Override
+    public HomeServiceAreaRespVO getHomeServiceArea(Long id) {
+        return BeanUtils.toBean(homeServiceAreaMapper.selectById(id), HomeServiceAreaRespVO.class);
+    }
+
+    @Override
+    public PageResult<HomeServiceAreaRespVO> getHomeServiceAreaPage(HomeServiceAreaPageReqVO pageReqVO) {
+        LambdaQueryWrapperX<HomeServiceAreaDO> query = new LambdaQueryWrapperX<HomeServiceAreaDO>()
+                .likeIfPresent(HomeServiceAreaDO::getArea, pageReqVO.getArea())
+                .likeIfPresent(HomeServiceAreaDO::getRemark, pageReqVO.getRemark())
+                .eqIfPresent(HomeServiceAreaDO::getTenantId, pageReqVO.getTenantId())
+                .inIfPresent(HomeServiceAreaDO::getTenantId, pageReqVO.getTenantIds())
+                .orderByDesc(HomeServiceAreaDO::getId);
+
+        List<HomeServiceAreaDO> list = homeServiceAreaMapper.selectList(query);
+        if (CollUtil.isEmpty(list)) {
+            return PageResult.empty();
+        }
+        long total = list.size();
+        int fromIndex = Math.max((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(), 0);
+        if (fromIndex >= total) {
+            return PageResult.empty(total);
+        }
+        int toIndex = Math.min(fromIndex + pageReqVO.getPageSize(), list.size());
+        List<HomeServiceAreaRespVO> pageList = BeanUtils.toBean(list.subList(fromIndex, toIndex), HomeServiceAreaRespVO.class);
+        return new PageResult<>(pageList, total);
+    }
+}

+ 16 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceDepartmentService.java

@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceDepartmentRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceDepartmentSaveReqVO;
+
+public interface HomeServiceDepartmentService {
+
+    Long createHomeServiceDepartment(HomeServiceDepartmentSaveReqVO createReqVO);
+
+    void updateHomeServiceDepartment(HomeServiceDepartmentSaveReqVO updateReqVO);
+
+    void deleteHomeServiceDepartment(Long id);
+
+    HomeServiceDepartmentRespVO getHomeServiceDepartment(Long id);
+}
+

+ 42 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceDepartmentServiceImpl.java

@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceDepartmentRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceDepartmentSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceDepartmentDO;
+import cn.iocoder.yudao.module.system.dal.mysql.home.HomeServiceDepartmentMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+@Service
+@Validated
+public class HomeServiceDepartmentServiceImpl implements HomeServiceDepartmentService {
+
+    @Resource
+    private HomeServiceDepartmentMapper homeServiceDepartmentMapper;
+
+    @Override
+    public Long createHomeServiceDepartment(HomeServiceDepartmentSaveReqVO createReqVO) {
+        HomeServiceDepartmentDO deptDO = BeanUtils.toBean(createReqVO, HomeServiceDepartmentDO.class);
+        homeServiceDepartmentMapper.insert(deptDO);
+        return deptDO.getId();
+    }
+
+    @Override
+    public void updateHomeServiceDepartment(HomeServiceDepartmentSaveReqVO updateReqVO) {
+        HomeServiceDepartmentDO deptDO = BeanUtils.toBean(updateReqVO, HomeServiceDepartmentDO.class);
+        homeServiceDepartmentMapper.updateById(deptDO);
+    }
+
+    @Override
+    public void deleteHomeServiceDepartment(Long id) {
+        homeServiceDepartmentMapper.deleteById(id);
+    }
+
+    @Override
+    public HomeServiceDepartmentRespVO getHomeServiceDepartment(Long id) {
+        return BeanUtils.toBean(homeServiceDepartmentMapper.selectById(id), HomeServiceDepartmentRespVO.class);
+    }
+}

+ 22 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceMemberService.java

@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemberAssignReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberSaveReqVO;
+
+public interface HomeServiceMemberService {
+
+    Long createHomeServiceMemeber(HomeServiceMemeberSaveReqVO createReqVO);
+
+    void updateHomeServiceMemeber(HomeServiceMemeberSaveReqVO updateReqVO);
+
+    void deleteHomeServiceMemeber(Long id);
+
+    HomeServiceMemeberPageRespVO getHomeServiceMemeber(Long id);
+
+    PageResult<HomeServiceMemeberPageRespVO> getHomeServiceMemeberPage(HomeServiceMemeberPageReqVO pageReqVO);
+
+    void assignHomeServiceMember(HomeServiceMemberAssignReqVO assignReqVO);
+}

+ 64 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceMemberServiceImpl.java

@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+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.home.vo.HomeServiceMemberAssignReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceElderRelationDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceMemberDO;
+import cn.iocoder.yudao.module.system.dal.mysql.home.HomeServiceElderRelationMapper;
+import cn.iocoder.yudao.module.system.dal.mysql.home.HomeServiceMemberMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+@Service
+@Validated
+public class HomeServiceMemberServiceImpl implements HomeServiceMemberService {
+
+    @Resource
+    private HomeServiceMemberMapper homeServiceMemberMapper;
+    @Resource
+    private HomeServiceElderRelationMapper homeServiceElderRelationMapper;
+
+    @Override
+    public Long createHomeServiceMemeber(HomeServiceMemeberSaveReqVO createReqVO) {
+        HomeServiceMemberDO memberDO = BeanUtils.toBean(createReqVO, HomeServiceMemberDO.class);
+        homeServiceMemberMapper.insert(memberDO);
+        return memberDO.getId();
+    }
+
+    @Override
+    public void updateHomeServiceMemeber(HomeServiceMemeberSaveReqVO updateReqVO) {
+        HomeServiceMemberDO memberDO = BeanUtils.toBean(updateReqVO, HomeServiceMemberDO.class);
+        homeServiceMemberMapper.updateById(memberDO);
+    }
+
+    @Override
+    public void deleteHomeServiceMemeber(Long id) {
+        homeServiceMemberMapper.deleteById(id);
+    }
+
+    @Override
+    public HomeServiceMemeberPageRespVO getHomeServiceMemeber(Long id) {
+        return homeServiceMemberMapper.selectWithJoinById(id);
+    }
+
+    @Override
+    public PageResult<HomeServiceMemeberPageRespVO> getHomeServiceMemeberPage(HomeServiceMemeberPageReqVO pageReqVO) {
+        Page<HomeServiceMemeberPageRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        return new PageResult<>(homeServiceMemberMapper.selectPageWithJoin(page, pageReqVO), page.getTotal());
+    }
+
+    @Override
+    public void assignHomeServiceMember(HomeServiceMemberAssignReqVO assignReqVO) {
+        HomeServiceElderRelationDO relationDO = new HomeServiceElderRelationDO();
+        relationDO.setHomeServiceMemberId(assignReqVO.getServiceMemberId());
+        relationDO.setHomeElderId(assignReqVO.getHomeElderId());
+        homeServiceElderRelationMapper.insert(relationDO);
+    }
+}

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyConsumerVouchersMapper.xml

@@ -12,8 +12,8 @@
                  left join elderly_info ei on ei.id = ecv.elder_id
         <where>
             1 = 1
-            <if test="reqVO.elderId != null">
-                and ecv.elder_id = #{reqVO.elderId}
+            <if test="reqVO.elderName != null and reqVO.elderName != ''">
+                and ei.elder_name like concat('%', #{reqVO.elderName}, '%')
             </if>
             <if test="reqVO.billingMonth != null and reqVO.billingMonth != ''">
                 and ecv.billing_month = #{reqVO.billingMonth}

+ 75 - 0
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/HomeServiceMemberMapper.xml

@@ -0,0 +1,75 @@
+<?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.home.HomeServiceMemberMapper">
+
+    <select id="selectPageWithJoin" resultType="cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageRespVO">
+        select
+            m.id,
+            m.name,
+            m.id_card as idCard,
+            m.sex,
+            m.phone,
+            m.service_area_id as serviceAreaId,
+            a.area as serviceArea,
+            m.service_dept_id as serviceDeptId,
+            d.name as serviceDeptName,
+            m.tenant_id as tenantId,
+            m.create_time as createTime,
+            m.update_time as updateTime,
+            m.creator,
+            m.updater
+        from home_service_memeber m
+        left join home_service_area a on a.id = m.service_area_id
+        left join home_service_department d on d.id = m.service_dept_id
+        where 1 = 1
+        <if test="params.name != null and params.name != ''">
+            and m.name like concat('%', #{params.name}, '%')
+        </if>
+        <if test="params.idCard != null and params.idCard != ''">
+            and m.id_card like concat('%', #{params.idCard}, '%')
+        </if>
+        <if test="params.phone != null and params.phone != ''">
+            and m.phone like concat('%', #{params.phone}, '%')
+        </if>
+        <if test="params.serviceAreaId != null">
+            and m.service_area_id = #{params.serviceAreaId}
+        </if>
+        <if test="params.serviceDeptId != null">
+            and m.service_dept_id = #{params.serviceDeptId}
+        </if>
+        <if test="params.tenantId != null">
+            and m.tenant_id = #{params.tenantId}
+        </if>
+        <if test="params.tenantIds != null and params.tenantIds.length > 0">
+            and m.tenant_id in
+            <foreach collection="params.tenantIds" item="tenantId" open="(" separator="," close=")">
+                #{tenantId}
+            </foreach>
+        </if>
+        order by m.id desc
+    </select>
+
+    <select id="selectWithJoinById" resultType="cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceMemeberPageRespVO">
+        select
+            m.id,
+            m.name,
+            m.id_card as idCard,
+            m.sex,
+            m.phone,
+            m.service_area_id as serviceAreaId,
+            a.area as serviceArea,
+            m.service_dept_id as serviceDeptId,
+            d.name as serviceDeptName,
+            m.tenant_id as tenantId,
+            m.create_time as createTime,
+            m.update_time as updateTime,
+            m.creator,
+            m.updater
+        from home_service_memeber m
+        left join home_service_area a on a.id = m.service_area_id
+        left join home_service_department d on d.id = m.service_dept_id
+        where m.id = #{id}
+    </select>
+
+</mapper>
+