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 仍有效。
补充:日志与排错顺序
-
浏览器 Network 看
/admin-api返回 code/msg。 -
IDEA 断点 Service 入口,确认 tenant-id 与业务 id。
-
查库 status 与界面一致(勿只改 checkin 不改 bed)。
-
定时任务看 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