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

相关推荐
Yyyyyy~4 小时前
【Java】Day4Web基础知识
java·spring boot
灿飞屋6 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
NE_STOP6 小时前
Spring AI Alibaba - MCP入门
java
nice_lcj5206 小时前
【从零理解 Spring AI · 07】对话记忆:让模型记住上一句说了什么
java·spring ai·ai应用开发·chatmemory·对话记忆
10share7 小时前
基于大模型的 i18n 方案:把中文原文当 Key,轻松搞定多语言维护
前端·vue.js
SL_staff7 小时前
制造业交付崩盘?用跨部门节点协同计划打通销售、生产与质量链路
java·开源·产品
文丑颜不良啊8 小时前
LeetCode2261~2280题目解析
java·leetcode
SL_staff8 小时前
告别规则黑盒:JVS-Rules 在金融风控中的可视化决策编排实践
java·产品·全栈
逆回9 小时前
升级 Boot 4 后,我的 mock 全红了
spring boot
逃逸线LOF9 小时前
服务网关Gateway
java·运维·gateway