java springboot vue 养老系统源码详解:请假 care_leave 销假与床位停费日扣实践

Java养老系统源码详解:请假 care_leave 销假与床位停费日扣实践

在线演示 :管理端后台

标签:#Java #Spring Boot #MyBatis #养老系统 #请假管理 #care_leave


1. 请假登记与停费怎么扣

机构 请假管理 旁路大审批:登记后 待销假 ,床改 请假占用 bed.status=3;勾选停床费/停护理/停餐费时 careDailyChargeStopService.skipPendingForLeave 标记日明细跳过。销假 returnLeave 恢复床态并 restoreSkippedAfterLeave。

图1 请假登记 · 停费勾选

2. 床态与 leave status

复制代码
private static final int BED_OCCUPIED = 2;
private static final int BED_ON_LEAVE = 3;
private static final int STATUS_ON_LEAVE = 1;
private static final int STATUS_RETURNED = 2;

3. createLeave 与 applyLeaveSideEffects

复制代码
public Long createLeave(CareLeaveSaveReqVO createReqVO) {
    leave.setStatus(STATUS_ON_LEAVE);
    careLeaveMapper.insert(leave);
    applyLeaveSideEffects(leave);
    return leave.getId();
}

private void applyLeaveSideEffects(CareLeaveDO leave) {
    bedUpdate.setStatus(BED_ON_LEAVE);
    careBedMapper.updateById(bedUpdate);
    careDailyChargeStopService.skipPendingForLeave(
            leave.getOlderId(), leave.getStartDate(), null, remark,
            leave.getStopBedFee(), leave.getStopNurseFee(), leave.getStopMealFee());
}

4. returnLeave(销假)

复制代码
public void returnLeave(CareLeaveReturnReqVO reqVO) {
    update.setStatus(STATUS_RETURNED);
    update.setActualEndDate(actualEnd);
    restoreBed(leave.getBedId());
    careDailyChargeStopService.restoreSkippedAfterLeave(
            leave.getOlderId(), leave.getStartDate(), actualEnd);
    applyAutoRefundDoneInWindow(leave, actualEnd);
}

5. curl

复制代码
curl -X POST "http://localhost:48080/admin-api/care/leave/create" \
  -H "Authorization: Bearer {token}" -H "tenant-id: 123" \
  -d '{"olderId":1001,"startDate":"2026-09-10","endDate":"2026-09-20","stopBedFee":true}'

curl -X PUT "http://localhost:48080/admin-api/care/leave/return" \
  -H "Authorization: Bearer {token}" -H "tenant-id: 123" \
  -d '{"id":8001,"actualEndDate":"2026-09-18"}'

补充:请假占床与日扣 skip

请假登记后床位仍 占用 (房态橙色),若勾选停费,日扣 Job 扫描 care_leave 在请假区间内 跳过 该老人当日 care_daily_charge。

图2 在住列表可进请假登记

图3 请假床不可再分配给新入住

复制代码
// CareLeaveServiceImpl 登记(节选)
leave.setState(STATE_PENDING_RETURN);
leave.setStopFee(Boolean.TRUE.equals(reqVO.getStopFee()));
careCheckinMapper.updateLeaveFlag(checkinId, true);

// 日扣生成时跳过(概念)
if (careLeaveService.isStopFeeOnDate(olderId, chargeDate)) {
    continue; // 不写待扣明细或标 skip
}
checkin 扩展 说明
请假标记 列表/房态展示
销假 恢复计费,补扣规则按机构设置

图4 停费日后月账单金额应对齐财务预期

6. 踩坑

  • 停费仍扣:查 skipPending 区间是否覆盖 billDate。
  • 房态变灰空床:请假是 status=3 占用,不是空闲。
  • 换床:有效请假时 changeBed 抛 LEAVE_ACTIVE_EXISTS。
  • 超计划止期:待销假仍停扣直到销假。

7. CareLeaveController 分页

复制代码
@GetMapping("/page")
@PreAuthorize("@ss.hasPermission('care:leave:query')")
public CommonResult<PageResult<CareLeaveRespVO>> getPage(@Valid CareLeavePageReqVO reqVO) {
    return success(careLeaveService.getLeavePage(reqVO));
}

筛 status=待销假、日期区间、老人姓名(Mapper like older)。

8. 与房态图

请假占用 bed.status=3,接待 · 房态图 应显示请假色而非空闲;勿手工改 bed 为 0 而 leave 仍有效。

补充:日志与排错顺序

  1. 浏览器 Network 看 /admin-api 返回 code/msg。

  2. IDEA 断点 Service 入口,确认 tenant-id 与业务 id。

  3. 查库 status 与界面一致(勿只改 checkin 不改 bed)。

  4. 定时任务看 infra_job 日志与 @TenantJob 租户上下文。

    curl -X POST -H "tenant-id: 123" -H "Content-Type: application/json"
    -d "{"phone":"13900001001","password":"123456","accountType":2}"
    http://127.0.0.1:8086/app-api/care/family-auth/login

联调:application-local 与 tenant-id

本地 zhijian-server 联调时,管理端请求统一带头:

复制代码
yudao:
  tenant:
    enable: true
spring:
  profiles:
    active: local

curl -H "Authorization: Bearer {token}" -H "tenant-id: 123" \
  "http://localhost:48080/admin-api/care/..."

403 先查角色是否勾选菜单按钮权限;401 查 token 是否过期。多园环境 rootDeptId 与登录部门一致,否则计费/报表可能看到空列表。

模块路径(Maven)

模块 典型包路径
institution zhijian-module-institution/.../service/
hub zhijian-module-hub/.../service/hub/
bi zhijian-module-bi/.../service/bi/
monitor zhijian-module-monitor/.../
community zhijian-module-community/.../
medical zhijian-module-medical/.../

交付裁剪时 zhijian-server/pom.xml 注释未购业态 JAR,并执行 care_maven_delivery_menu_crop.sql 隐藏菜单,避免「有菜单无 API」。

与 hub 中台衔接

老人主档 care_older 在 hub;机构业务 care_checkin / care_contract 在 institution。中台档案页不存 bed_id,床态以 care_bed.status 为准(见 24 篇)。跨模块只通过 olderId、SPI Bridge 或 REST,不在 hub 里直接 join institution 大表。

演示站对照

在线演示:管理端后台 --- 登录后左侧菜单与源码 @PreAuthorize 权限码一致;改 SQL 菜单后需重新登录刷新路由。


Gitee 社区版源码 :https://gitee.com/xinzexingjian-data_0/older_care

相关推荐
XIAEE1 小时前
一个即时通讯项目是怎么长出来的:(Spring Boot 3 + Vue 3 微前端 + 悟空 IM + LiveKit)
java·spring
n87652 小时前
Playwright Java WEB UI 自动化实现框架与逻辑
java·前端·ui
Java_AI工程师2 小时前
Spring4 / SpringBoot1.x 老项目想接入 AI?不用升级框架!3 套无痛落地方案
java·人工智能·spring boot
BBmmo2 小时前
Java Stream 的 filter 为什么看起来没运行?
java
VimorphTech2 小时前
Java 文件缓存实战:如何避免读到未下载完成的视频?
java·spring boot
白露与泡影2 小时前
后端 Java 面试核心八股汇总|高频面试题 + 解析,覆盖基础到进阶
java·开发语言·面试
SL_staff2 小时前
JVS-APS 实践:用双向反馈闭环打破制造计划孤岛
java·spring cloud·全栈
\光辉岁月/3 小时前
3.包装类
java·开发语言·包装类
honkun63 小时前
vue 表格组件 vxe-table 修改滚动条样式,修改滚动条样式,统一宽度、颜色与自动隐藏
前端·javascript·vue.js