java vue springboot 养老系统源码详解:退住 care_out 审批结算与腾床事务实践

Java养老系统源码详解:退住 care_out 审批结算与腾床事务实践

在线演示 :管理端后台

标签:#Java #Spring Boot #MyBatis #养老系统 #退住管理 #care_out


1. 退住:审批、结算、腾床

退住管理 走 care_out:申请时 checkin 变退住中;审批通过 即腾床、终止合同、清理待扣账单;结算 只做账务(预交金退/补),payWay 落流水。

图1 退住列表 · 申请/审批/结算

2. state 常量

复制代码
private static final int STATE_PENDING = 0;
private static final int STATE_WAIT_SETTLE = 1;
private static final int STATE_SETTLED = 2;
private static final int STATE_REJECTED = 3;

private static final int CHECKIN_VACATING = 5;
private static final int CHECKIN_VACATED = 6;
private static final int BED_IDLE = 0;

3. approve(通过则腾床)

复制代码
public void approve(CareOutApproveReqVO reqVO) {
    if (Boolean.TRUE.equals(reqVO.getPassed())) {
        update.setState(STATE_WAIT_SETTLE);
        careBedMapper.update(null, new LambdaUpdateWrapper<CareBedDO>()
                .eq(CareBedDO::getId, checkin.getBedId())
                .set(CareBedDO::getOlderId, null)
                .set(CareBedDO::getStatus, BED_IDLE));
        contractUpdate.setStatus(CONTRACT_ENDED);
        careVacateBillingCleanupService.cleanupOnApprove(out.getOlderId(), lastChargeDate);
    } else {
        update.setState(STATE_REJECTED);
        checkinUpdate.setStatus(CHECKIN_IN_HOUSE);
    }
}

4. settle(按实时余额重算)

复制代码
BigDecimal settlement = calcSettlement(balance, deduction, tempSum.deduct, tempSum.refund);
if (settlement.compareTo(BigDecimal.ZERO) > 0) {
    careAccountService.changeBiz(..., CHANGE_MONEY_REFUND, settlement, "a6", "OUT", out.getId(), ...);
}
update.setState(STATE_SETTLED);
checkinUpdate.setStatus(CHECKIN_VACATED);

5. curl

复制代码
curl -X PUT "http://localhost:48080/admin-api/care/out/approve" \
  -H "Authorization: Bearer {token}" -H "tenant-id: 123" \
  -d '{"id":7001,"passed":true,"applyReply":"同意"}'

curl -X POST "http://localhost:48080/admin-api/care/out/settle" \
  -H "Authorization: Bearer {token}" -H "tenant-id: 123" \
  -d '{"id":7001,"payWay":"1"}'

补充:状态机与房态

院办操作顺序:申请 → 审批(通过则腾床)→ 结算 。care_checkin.status 与 care_bed.status 必须同步,只改一边会在房态图露馅。

图2 结算后看预交金流水 · payWay

图3 腾床后空床应回到灰色空床态

复制代码
@TableName("care_out")
public class CareOutDO extends CareOrgBaseDO {
    private Long olderId;
    private Long checkinId;
    private Integer state; // 0待审批 1待结算 2已结算 3驳回
    private BigDecimal balanceSnapshot;
    private String payWay;
}

// 结算:预交金退给家属(默认不退押金钱包)
if (settlement.compareTo(BigDecimal.ZERO) > 0) {
    careAccountService.changeBiz(olderId, WALLET_BALANCE, CHANGE_MONEY_REFUND,
            settlement, "a6", "OUT", out.getId(), remark, reqVO.getPayWay());
}

图4 在住老人也可从 flow 顶栏发起退住申请

6. 踩坑

  • 申请态就空床:只有 approve 通过才释床。
  • 结算用申请快照余额:Service 始终读实时 account.balance。
  • 驳回后 bed:checkin 回在住,bed 若已腾需核对数据。
  • 默认不退押金:产品约定在结算 VO,别误退押金钱包。

7. createOut(退住申请)

复制代码
out.setState(STATE_PENDING);
careOutMapper.insert(out);
checkinUpdate.setStatus(CHECKIN_VACATING);
careCheckinMapper.updateById(checkinUpdate);
careOlderApplyService.createPending(2, out.getOlderId(), out.getId(), out.getContractId(), null);

申请时快照余额/减免供展示,结算不用快照。

8. CareOutController

复制代码
@PutMapping("/approve")
@PreAuthorize("@ss.hasPermission('care:out:approve')")
public CommonResult<Boolean> approve(@Valid @RequestBody CareOutApproveReqVO reqVO) {
    careOutService.approve(reqVO);
    return success(true);
}

补充:日志与排错顺序

  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

相关推荐
雪芽蓝域zzs1 小时前
第 10 节:地图点击逆地理编码(点击地图获取经纬度 + 地址)
vue.js
geats人山人海1 小时前
java 7异常
android·java·开发语言
斯内普吖1 小时前
(开源)线上花店系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
duxingzhe03111 小时前
我的一些书
java·数据库·tomcat·数据库开发·etl工程师
2603_965148111 小时前
商品价格监控 API 接口:从原理到实战的完整指南
java·前端·数据库·python·生活
瑞克-桑切斯1 小时前
2、Shell 条件语句
java·linux·服务器
Pniubi2 小时前
分片的意义?
java·开发语言
酷虎软件2 小时前
视频加字幕怎么制作
java·前端·音视频
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 阿里云概述与项目中的云服务选型
java·阿里云·交友