日期: 2026-05-23 版本: 1.0
管理员在 PC 管理后台,可以从用户总账号的爱心值余额中,分配一定数量给指定家庭成员。
loveValue 扣减对应数量loveValue 增加对应数量ht_love_value_record):
capitalFlow=2,transactionType=3,memberId=成员idcapitalFlow=1,transactionType=3,userId=总账号id,memberId=成员idtransactionType=3 为新增类型,含义:管理员分配| 端 | 文件 | 改动类型 |
|---|---|---|
| 后端 | FamilyMemberDTO.java |
新增 loveValue 字段 |
| 后端 | FamilyMemberServiceImpl.java |
page() 填充 loveValue;新增 assignLoveValue() |
| 后端 | FamilyMemberService.java |
新增 assignLoveValue() 接口声明 |
| 后端 | FamilyMemberController.java |
新增 POST /core/family/member/assignLoveValue |
| 前端 | familyMember.vue |
新增「爱心值」列、「分配」按钮、分配弹窗 |
@ApiModelProperty(value = "爱心值")
private BigDecimal loveValue;
在现有 page() 重写方法中,Entity 已通过 baseDao.selectBatchIds 批量查出(为填充 channelNames),直接复用,同时填充 loveValue:
entity.getLoveValue() → dto.setLoveValue()
接口声明(FamilyMemberService.java):
void assignLoveValue(Long memberId, Long userId, BigDecimal amount);
实现逻辑(FamilyMemberServiceImpl.java):
1. 查 AppUserEntity(总账号),校验余额 >= amount > 0
2. 查 FamilyMemberEntity,校验成员属于该用户
3. 开启事务:
a. 总账号 loveValue -= amount,updateById
b. 成员 loveValue += amount,updateById
c. 插入流水记录(总账号支出):
userId=userId, capitalFlow=2, transactionType=3,
memberId=memberId, loveQuantity=amount
d. 插入流水记录(成员收入):
userId=userId, capitalFlow=1, transactionType=3,
memberId=memberId, loveQuantity=amount
4. 返回成功
Controller(FamilyMemberController.java):
POST /core/family/member/assignLoveValue
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| memberId | Long | 是 | 家庭成员 ID |
| userId | Long | 是 | 总账号用户 ID |
| amount | BigDecimal | 是 | 分配数量,必须 > 0 |
响应:统一 Result 格式,code=0 为成功。
错误场景:
| 场景 | 返回 |
|---|---|
| amount <= 0 | code=500, msg="分配数量必须大于0" |
| 余额不足 | code=500, msg="总账号余额不足" |
| 成员不属于该用户 | code=500, msg="家庭成员不存在" |
文件: src/views/modules/member/components/familyMember.vue
在「所属渠道」列后新增:
<el-table-column label="爱心值">
<template slot-scope="scope">{{ scope.row.loveValue || 0 }}</template>
</el-table-column>
在列表末尾新增操作列:
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<el-button type="text" @click="handleAssign(scope.row)">分配</el-button>
</template>
</el-table-column>
弹窗字段:
detail.vue 通过 props 传入)提交调用:POST /core/family/member/assignLoveValue
成功后:刷新列表(getList())、关闭弹窗。
familyMember.vue 新增 prop:
props: ['userId', 'userLoveValue']
detail.vue 传入:
<family-member :userId="userId" :userLoveValue="assetInfo ? assetInfo.loveValue : 0"></family-member>
管理员点击「分配」
→ 弹窗展示成员姓名 + 总账号余额
→ 输入分配数量,点击确认
→ POST /core/family/member/assignLoveValue
→ 校验余额
→ 事务:扣总账号 + 加成员 + 写两条流水
→ 成功:刷新列表,弹窗关闭
→ 失败:Toast 提示错误信息