chore: 添加输入输出文件 + .claude记忆和计划
输入文件:
- 租赁任务考核_2026年{1,2,3}月.xlsx (考核源数据)
- {1,2}月.xlsx (客户盈亏表)
- 车辆里程考核与奖金发放规则(V.1.2).docx
输出文件:
- 里程任务考核_{1,2,3}月核算.xlsx (月度核算结果)
- 里程任务考核_Q1汇总.xlsx (含车辆台账)
- 3月客户盈亏表(待填写).xlsx (模版)
.claude_memory: 项目记忆(规则/偏好/架构/测试车辆)
.claude_plans: 历次计划文件
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
483
.claude_plans/fizzy-petting-shamir.md
Normal file
483
.claude_plans/fizzy-petting-shamir.md
Normal file
@@ -0,0 +1,483 @@
|
||||
# 还车应结款模块 — 完整实施计划
|
||||
|
||||
## Context
|
||||
|
||||
OneOS 需要实现完整的「还车应结款」多角色费用核算模块。当前状态:
|
||||
- **原型**: 3个JSX页面(列表/查看/费用明细),需求文档完整
|
||||
- **老系统**: lingniu_asset_server 有完整实现(4表+多部门审批+能源校验),可参考角色设计和业务流程
|
||||
- **OneOS后端**: ReturnPaymentController/Service 已有骨架,但本质是纯CRUD,**return_payment 系列表尚未建到数据库**
|
||||
- **OneOS前端**: 页面UI完成度高,但100%使用mock数据
|
||||
- **数据库现状**: return_vehicle_task(81条)、delivery_vehicle(32条)、traffic_violation(0条)、accident_info(1条)、energy_account(有数据)、vehicle_check_item(轮胎检查项齐全)
|
||||
|
||||
### 核心目标
|
||||
实现多角色(4个部门)独立填报→提交→审批→生成账单的完整业务流程,各部门只能看到和操作自己的费用区块。
|
||||
|
||||
---
|
||||
|
||||
## 第一阶段:数据库建表 + 角色定义
|
||||
|
||||
### 1.1 角色映射(参照老系统 SettlementDepartment)
|
||||
|
||||
老系统4个结算部门 → OneOS 已有系统角色映射:
|
||||
|
||||
| 结算部门 | depCode | OneOS 角色 | role_key | 职责 |
|
||||
|---------|---------|-----------|----------|------|
|
||||
| 业务服务组 | BUSINESS | 业务服务组(id=3) / 业务服务主管 / 业务经理 | 业务服务组 | 填写违章违约金、保险上浮、ETC费用、租金计算 |
|
||||
| 能源采购组 | ENERGY | **需新建角色: 能源采购组** | energy_group | 填写氢量差、能源费补缴、预付款退费 |
|
||||
| 运维部 | OPERATION | 运维专员 / 运维主管 / 运维助理 | 运维专员 | 填写清洗费、保养维修、车损、证件丢失、轮胎磨损 |
|
||||
| 安全组 | SAFETY | 安全(id=2026890857448787969) | 安全 | 确认违章清单、事故清单 |
|
||||
|
||||
审批角色:
|
||||
| 角色 | 职责 |
|
||||
|------|------|
|
||||
| 业务服务主管 / 业务负责人 | 汇总审核,提交总审批 |
|
||||
| 财务 / 财务主管 | 生成账单、付款确认 |
|
||||
| 总经理 | 终审(可选) |
|
||||
|
||||
### 1.2 建表SQL(重新设计,参照老系统+原型需求)
|
||||
|
||||
```sql
|
||||
-- 主表:还车应结款单(一车一单)
|
||||
CREATE TABLE return_settlement (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
return_task_id BIGINT UNSIGNED NOT NULL COMMENT '关联 return_vehicle_task.id',
|
||||
delivery_vehicle_id BIGINT UNSIGNED NOT NULL COMMENT '关联 delivery_vehicle.id',
|
||||
contract_id BIGINT NOT NULL COMMENT '关联 vehicle_lease_contract_info.id',
|
||||
order_detail_id BIGINT COMMENT '关联 vehicle_lease_order_detail.id',
|
||||
contract_code VARCHAR(100) COMMENT '合同编号',
|
||||
project_name VARCHAR(200) COMMENT '项目名称',
|
||||
customer_id BIGINT COMMENT '客户ID',
|
||||
customer_name VARCHAR(200) COMMENT '客户名称',
|
||||
plate_number VARCHAR(50) COMMENT '车牌号',
|
||||
vehicle_id BIGINT UNSIGNED COMMENT '车辆ID',
|
||||
business_dept_name VARCHAR(100) COMMENT '业务部门',
|
||||
business_owner_name VARCHAR(100) COMMENT '业务负责人',
|
||||
delivery_time DATETIME COMMENT '交车时间',
|
||||
return_time DATETIME COMMENT '还车时间',
|
||||
returner_name VARCHAR(100) COMMENT '还车人',
|
||||
-- 保险标识(从合同/服务项推导)
|
||||
has_fragile_insurance TINYINT(1) DEFAULT 0 COMMENT '易损保 0否1是',
|
||||
has_tire_insurance TINYINT(1) DEFAULT 0 COMMENT '轮胎保 0否1是',
|
||||
has_maintenance_insurance TINYINT(1) DEFAULT 0 COMMENT '养护保 0否1是',
|
||||
-- 金额汇总
|
||||
deposit_amount DECIMAL(18,2) DEFAULT 0 COMMENT '保证金总额',
|
||||
pending_settle_amount DECIMAL(18,2) DEFAULT 0 COMMENT '待结算总额',
|
||||
should_refund_amount DECIMAL(18,2) DEFAULT 0 COMMENT '应退还总额',
|
||||
should_pay_amount DECIMAL(18,2) DEFAULT 0 COMMENT '应补缴总额',
|
||||
-- 审批状态(参照老系统)
|
||||
approval_status TINYINT DEFAULT 0 COMMENT '0待提交 1撤回 10待审批 20审批中 30审批完成 40审批驳回',
|
||||
approval_submit_time DATETIME COMMENT '提交审批时间',
|
||||
is_last_vehicle TINYINT(1) DEFAULT 0 COMMENT '是否合同最后一辆车',
|
||||
generated_at DATETIME COMMENT '还车应结款生成时间(15天倒计时起点)',
|
||||
-- 审计字段
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by BIGINT,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_by BIGINT,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_return_task (return_task_id),
|
||||
INDEX idx_contract (contract_id),
|
||||
INDEX idx_plate (plate_number),
|
||||
INDEX idx_status (approval_status)
|
||||
) COMMENT '还车应结款主表';
|
||||
|
||||
-- 部门提交状态表(4个部门各一行)
|
||||
CREATE TABLE return_settlement_dept_status (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL COMMENT '关联 return_settlement.id',
|
||||
dep_code VARCHAR(20) NOT NULL COMMENT 'BUSINESS/ENERGY/OPERATION/SAFETY',
|
||||
dep_name VARCHAR(50) COMMENT '部门名称',
|
||||
status TINYINT DEFAULT 0 COMMENT '0待提交 1已提交 2已撤回',
|
||||
submit_by BIGINT COMMENT '提交人ID',
|
||||
submit_by_name VARCHAR(100) COMMENT '提交人姓名',
|
||||
submit_time DATETIME COMMENT '提交时间',
|
||||
total_amount DECIMAL(18,2) DEFAULT 0 COMMENT '部门费用合计',
|
||||
remark VARCHAR(500),
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by BIGINT,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_by BIGINT,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_settlement (settlement_id),
|
||||
UNIQUE KEY uk_settlement_dep (settlement_id, dep_code)
|
||||
) COMMENT '部门提交状态';
|
||||
|
||||
-- 业务服务组费用明细
|
||||
CREATE TABLE return_settlement_business_fee (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL,
|
||||
seq INT COMMENT '序号',
|
||||
fee_item VARCHAR(200) NOT NULL COMMENT '费用项名称',
|
||||
amount DECIMAL(18,2) DEFAULT 0 COMMENT '金额',
|
||||
remark VARCHAR(500),
|
||||
photos TEXT COMMENT '照片URL JSON数组',
|
||||
attachments TEXT COMMENT '附件URL JSON数组',
|
||||
is_fixed TINYINT(1) DEFAULT 0 COMMENT '是否固定费用项(不可删)',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by BIGINT,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_settlement (settlement_id)
|
||||
) COMMENT '业务服务组费用';
|
||||
|
||||
-- 业务服务组-车辆租金
|
||||
CREATE TABLE return_settlement_rent (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL,
|
||||
bill_start_date DATE COMMENT '账单开始日期',
|
||||
vehicle_month_rent DECIMAL(18,2) COMMENT '车辆月租金',
|
||||
received_rent DECIMAL(18,2) DEFAULT 0 COMMENT '本期已收租金',
|
||||
actual_rent DECIMAL(18,2) DEFAULT 0 COMMENT '车辆实际租金',
|
||||
should_refund_rent DECIMAL(18,2) DEFAULT 0 COMMENT '车辆应退租金',
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by BIGINT,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_by BIGINT,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uk_settlement (settlement_id)
|
||||
) COMMENT '车辆租金';
|
||||
|
||||
-- 能源采购组
|
||||
CREATE TABLE return_settlement_energy (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL,
|
||||
delivery_hydrogen DECIMAL(10,2) COMMENT '交车氢量(MPa)',
|
||||
return_hydrogen DECIMAL(10,2) COMMENT '还车氢量(MPa)',
|
||||
hydrogen_unit_price DECIMAL(10,2) COMMENT '退还车氢气单价',
|
||||
hydrogen_supplement DECIMAL(18,2) DEFAULT 0 COMMENT '氢量差补缴金额',
|
||||
hydrogen_fee DECIMAL(18,2) DEFAULT 0 COMMENT '氢费补缴金额',
|
||||
electric_fee DECIMAL(18,2) DEFAULT 0 COMMENT '电费补缴金额',
|
||||
prepay_refund DECIMAL(18,2) DEFAULT 0 COMMENT '预付款退费金额',
|
||||
user_balance DECIMAL(18,2) DEFAULT 0 COMMENT '项目预充值余额(快照)',
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by BIGINT,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_by BIGINT,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uk_settlement (settlement_id)
|
||||
) COMMENT '能源采购组费用';
|
||||
|
||||
-- 运维部费用明细
|
||||
CREATE TABLE return_settlement_operation_fee (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL,
|
||||
seq INT COMMENT '序号',
|
||||
fee_item VARCHAR(200) NOT NULL COMMENT '费用项',
|
||||
amount DECIMAL(18,2) DEFAULT 0 COMMENT '金额',
|
||||
worry_free_discount DECIMAL(18,2) DEFAULT 0 COMMENT '无忧包减免',
|
||||
remark VARCHAR(500),
|
||||
photos TEXT COMMENT '照片URL JSON数组',
|
||||
attachments TEXT COMMENT '附件URL JSON数组',
|
||||
is_fixed TINYINT(1) DEFAULT 0 COMMENT '是否固定费用项',
|
||||
is_readonly TINYINT(1) DEFAULT 0 COMMENT '是否只读(送车/接车服务费)',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by BIGINT,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_settlement (settlement_id)
|
||||
) COMMENT '运维部费用';
|
||||
|
||||
-- 运维部-轮胎胎纹明细
|
||||
CREATE TABLE return_settlement_tire_tread (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL,
|
||||
tire_name VARCHAR(100) COMMENT '轮胎名称(左前轮等)',
|
||||
delivery_depth DECIMAL(6,2) COMMENT '交车胎纹深度(mm)',
|
||||
return_depth DECIMAL(6,2) COMMENT '还车胎纹深度(mm)',
|
||||
depth_diff DECIMAL(6,2) COMMENT '胎纹差(mm)',
|
||||
unit_price DECIMAL(10,2) COMMENT '单价(元/mm)',
|
||||
total_amount DECIMAL(18,2) DEFAULT 0 COMMENT '总金额',
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_settlement (settlement_id)
|
||||
) COMMENT '轮胎胎纹明细';
|
||||
|
||||
-- 安全组-违章快照
|
||||
CREATE TABLE return_settlement_violation (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL,
|
||||
source_violation_id BIGINT COMMENT '来源 traffic_violation.id',
|
||||
violation_code VARCHAR(100) COMMENT '违章编码',
|
||||
plate_number VARCHAR(50),
|
||||
violation_behavior VARCHAR(500),
|
||||
violation_time DATETIME,
|
||||
penalty_amount DECIMAL(10,2) DEFAULT 0,
|
||||
payment_status VARCHAR(20) COMMENT '缴费状态',
|
||||
score INT DEFAULT 0 COMMENT '计分值',
|
||||
handle_status VARCHAR(20) COMMENT '处理状态',
|
||||
violation_customer VARCHAR(200),
|
||||
violation_photo VARCHAR(500),
|
||||
remark VARCHAR(500),
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_settlement (settlement_id)
|
||||
) COMMENT '安全组违章快照';
|
||||
|
||||
-- 安全组-事故快照
|
||||
CREATE TABLE return_settlement_accident (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
settlement_id BIGINT UNSIGNED NOT NULL,
|
||||
source_accident_id BIGINT COMMENT '来源 accident_info.id',
|
||||
accident_code VARCHAR(100),
|
||||
plate_number VARCHAR(50),
|
||||
accident_time DATETIME,
|
||||
accident_place VARCHAR(200),
|
||||
accident_type VARCHAR(50),
|
||||
customer_name VARCHAR(200),
|
||||
our_claim_amount DECIMAL(10,2),
|
||||
their_claim_amount DECIMAL(10,2),
|
||||
responsibility VARCHAR(50),
|
||||
accident_status VARCHAR(50),
|
||||
close_time DATE,
|
||||
other_fee DECIMAL(10,2),
|
||||
remark VARCHAR(500),
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_settlement (settlement_id)
|
||||
) COMMENT '安全组事故快照';
|
||||
```
|
||||
|
||||
### 1.3 新建角色
|
||||
|
||||
```sql
|
||||
-- 能源采购组角色(系统中尚未有)
|
||||
INSERT INTO `ry-cloud`.sys_role (role_id, role_name, role_key, role_sort, status, del_flag, create_by, create_time)
|
||||
VALUES (2040000000000000001, '能源采购组', 'energy_group', 15, '0', '0', 1, NOW());
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 第二阶段:后端核心重构
|
||||
|
||||
### 2.1 文件结构(在 ln-asset-management 内)
|
||||
|
||||
```
|
||||
modules/contract/
|
||||
├── controller/
|
||||
│ └── ReturnSettlementController.java ← 新建,替代 ReturnPaymentController
|
||||
├── service/
|
||||
│ ├── ReturnSettlementService.java ← 接口
|
||||
│ └── impl/ReturnSettlementServiceImpl.java ← 核心实现
|
||||
├── entity/settlement/
|
||||
│ ├── po/
|
||||
│ │ ├── ReturnSettlement.java
|
||||
│ │ ├── ReturnSettlementDeptStatus.java
|
||||
│ │ ├── ReturnSettlementBusinessFee.java
|
||||
│ │ ├── ReturnSettlementRent.java
|
||||
│ │ ├── ReturnSettlementEnergy.java
|
||||
│ │ ├── ReturnSettlementOperationFee.java
|
||||
│ │ ├── ReturnSettlementTireTread.java
|
||||
│ │ ├── ReturnSettlementViolation.java
|
||||
│ │ └── ReturnSettlementAccident.java
|
||||
│ ├── req/ ← 各部门提交请求DTO
|
||||
│ ├── vo/ ← 列表/详情/查看响应DTO
|
||||
│ └── enums/
|
||||
│ ├── SettlementDeptCode.java ← BUSINESS/ENERGY/OPERATION/SAFETY
|
||||
│ ├── DeptSubmitStatus.java ← 待提交/已提交/已撤回
|
||||
│ └── SettlementApprovalStatus.java ← 0/1/10/20/30/40
|
||||
├── mapper/
|
||||
│ └── (9个mapper,对应9张表)
|
||||
```
|
||||
|
||||
### 2.2 核心API设计
|
||||
|
||||
```
|
||||
前缀: /asset/return-settlement
|
||||
|
||||
列表与查询:
|
||||
POST /page ← 分页列表(筛选:合同/客户/项目/车牌/还车时间/审批状态)
|
||||
GET /detail/{id} ← 详情(根据角色过滤可见区块)
|
||||
GET /view/{id} ← 只读查看(同详情但全部只读)
|
||||
|
||||
创建(还车完成时自动触发):
|
||||
POST /create-from-return/{returnTaskId} ← 从还车任务创建结算单,自动拉取关联数据
|
||||
|
||||
各部门提交/撤回(需角色鉴权):
|
||||
POST /business/save ← 业务服务组保存
|
||||
POST /business/submit ← 业务服务组提交
|
||||
POST /business/revoke/{id} ← 业务服务组撤回
|
||||
POST /energy/save ← 能源采购组保存
|
||||
POST /energy/submit ← 能源采购组提交
|
||||
POST /energy/revoke/{id} ← 能源采购组撤回
|
||||
POST /operation/save ← 运维部保存
|
||||
POST /operation/submit ← 运维部提交
|
||||
POST /operation/revoke/{id} ← 运维部撤回
|
||||
POST /safety/save ← 安全组保存
|
||||
POST /safety/submit ← 安全组提交
|
||||
POST /safety/revoke/{id} ← 安全组撤回
|
||||
|
||||
审批:
|
||||
POST /submit-review/{id} ← 提交总审批(校验:4组已提交 + 15天倒计时)
|
||||
POST /revoke-review/{id} ← 撤回审批
|
||||
POST /generate-bill/{id} ← 生成账单
|
||||
```
|
||||
|
||||
### 2.3 核心业务逻辑
|
||||
|
||||
**create-from-return 自动拉取数据(关键):**
|
||||
|
||||
```
|
||||
1. 从 return_vehicle_task 取:还车氢量、还车里程、接车服务费、还车时间、还车人
|
||||
2. 从 delivery_vehicle 取:交车氢量、交车里程、送车服务费、月租金、保证金、交车时间
|
||||
3. 从 vehicle_lease_contract_info 取:合同编号、项目名称、客户、业务部门/负责人
|
||||
4. 从 vehicle_lease_order_detail 取:月租金(vehicle_rent)、保证金(deposit)、账单开始日
|
||||
5. 从 vehicle_lease_order_service_item 取:推导保险标识
|
||||
- 有"设备损坏金(包含易损件)"→ has_fragile_insurance=1
|
||||
- 有"轮胎磨损费"→ has_tire_insurance=1
|
||||
- (养护保需确认service_item名称)
|
||||
6. 从 vehicle_check_item + delivery_vehicle_check_item 取:交车轮胎胎纹深度
|
||||
7. 从 return_vehicle_check_item 取:还车轮胎胎纹深度
|
||||
8. 从 traffic_violation 按 vehicle_id + 交车~还车时间范围 查:违章记录快照
|
||||
9. 从 accident_info 按 vehicle_id + 交车~还车时间范围 查:事故记录快照
|
||||
10. 从 ln_energy.energy_account 通过 Dubbo 查:客户能源账户余额
|
||||
11. 判断 is_last_vehicle:查同合同下其他 delivery_vehicle 是否都已有还车记录
|
||||
12. 自动初始化4个 dept_status 记录(BUSINESS/ENERGY/OPERATION/SAFETY,状态=待提交)
|
||||
13. 自动初始化固定费用行(业务5项 + 运维10项)
|
||||
14. 自动计算轮胎磨损(胎纹差 * 单价)
|
||||
15. 自动计算证件丢失费(对比交车/还车检查项中的行驶证、营运证等)
|
||||
16. generated_at = NOW()(15天倒计时起点)
|
||||
```
|
||||
|
||||
**角色鉴权逻辑:**
|
||||
|
||||
```java
|
||||
// 根据当前用户角色判断可见/可操作的部门区块
|
||||
public SettlementDeptCode resolveUserDept(Long userId) {
|
||||
List<String> roleKeys = getUserRoleKeys(userId);
|
||||
if (roleKeys.contains("业务服务组") || roleKeys.contains("业务服务主管")
|
||||
|| roleKeys.contains("业务经理") || roleKeys.contains("业务负责人")
|
||||
|| roleKeys.contains("业务总负责人"))
|
||||
return BUSINESS;
|
||||
if (roleKeys.contains("energy_group"))
|
||||
return ENERGY;
|
||||
if (roleKeys.contains("运维专员") || roleKeys.contains("运维主管")
|
||||
|| roleKeys.contains("运维助理") || roleKeys.contains("运维总负责人"))
|
||||
return OPERATION;
|
||||
if (roleKeys.contains("安全"))
|
||||
return SAFETY;
|
||||
if (roleKeys.contains("财务") || roleKeys.contains("财务主管") || roleKeys.contains("财务总监"))
|
||||
return null; // 财务可见全部,但不可编辑
|
||||
if (roleKeys.contains("superadmin") || roleKeys.contains("总经理"))
|
||||
return null; // 全部可见
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
**费用汇总计算(服务端计算,不依赖前端):**
|
||||
|
||||
```
|
||||
businessTotal = SUM(business_fee.amount) + rent.should_refund_rent
|
||||
energyTotal = hydrogen_supplement + hydrogen_fee + electric_fee - prepay_refund
|
||||
operationTotal = SUM(operation_fee.amount)
|
||||
pendingSettle = businessTotal + energyTotal + operationTotal
|
||||
shouldRefund = max(0, deposit - pendingSettle)
|
||||
shouldPay = max(0, pendingSettle - deposit)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 第三阶段:前端对接
|
||||
|
||||
### 3.1 替换mock为真实API
|
||||
|
||||
修改文件:
|
||||
- `apps/web-antd/src/api/financial/return-payment/index.ts` — 所有API函数指向新后端端点
|
||||
- `apps/web-antd/src/views/financial/returnPayment/index.vue` — 列表页调真实API
|
||||
- `apps/web-antd/src/views/financial/returnPayment/detail.vue` — 详情页调真实API
|
||||
|
||||
### 3.2 角色可见性控制
|
||||
|
||||
```typescript
|
||||
// 根据当前用户角色控制UI区块
|
||||
const userDeptCode = computed(() => {
|
||||
// 从用户信息中获取角色,映射到部门
|
||||
const roles = userStore.getRoles;
|
||||
if (roles.includes('业务服务组') || roles.includes('业务服务主管') ...) return 'BUSINESS';
|
||||
if (roles.includes('energy_group')) return 'ENERGY';
|
||||
if (roles.includes('运维专员') || roles.includes('运维主管') ...) return 'OPERATION';
|
||||
if (roles.includes('安全')) return 'SAFETY';
|
||||
return 'ALL'; // 财务/管理员
|
||||
});
|
||||
|
||||
// 业务服务组区块:仅业务角色可编辑,其他角色不可见或只读
|
||||
const canEditBusiness = computed(() => userDeptCode.value === 'BUSINESS' || userDeptCode.value === 'ALL');
|
||||
const canEditEnergy = computed(() => userDeptCode.value === 'ENERGY' || userDeptCode.value === 'ALL');
|
||||
// ...
|
||||
```
|
||||
|
||||
### 3.3 关键交互保持原型一致
|
||||
|
||||
- 保留15天倒计时(后端校验 + 前端展示)
|
||||
- 保留4组折叠/展开
|
||||
- 保留Popover费用明细弹出
|
||||
- 保留轮胎磨损hover弹窗
|
||||
- 保留无忧包减免联动(根据保险标识启用/禁用)
|
||||
|
||||
---
|
||||
|
||||
## 第四阶段:Dubbo接口(跨服务数据)
|
||||
|
||||
### 4.1 ln-energy 暴露接口
|
||||
|
||||
```java
|
||||
// 在 ln-energy 中新建
|
||||
public interface RemoteEnergySettlementService {
|
||||
/** 查询客户/项目的能源账户余额 */
|
||||
BigDecimal getAccountBalance(Long customerId);
|
||||
|
||||
/** 查询客户ETC未缴费用合计 */
|
||||
BigDecimal getUnpaidEtcFee(Long customerId, String plateNumber,
|
||||
LocalDate startDate, LocalDate endDate);
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 ln-asset-management 调用
|
||||
|
||||
在 ReturnSettlementServiceImpl 中通过 `@DubboReference` 注入调用。
|
||||
|
||||
---
|
||||
|
||||
## 实施顺序
|
||||
|
||||
| 步骤 | 内容 | 依赖 |
|
||||
|------|------|------|
|
||||
| S1 | 执行建表SQL + 新建能源采购组角色 | 无 |
|
||||
| S2 | 后端Entity/Mapper/Service骨架 | S1 |
|
||||
| S3 | create-from-return 自动数据拉取 | S2 |
|
||||
| S4 | 4组 save/submit/revoke API | S2 |
|
||||
| S5 | 列表/详情/查看 API + 角色鉴权 | S4 |
|
||||
| S6 | 前端 mock→API 切换 + 角色可见性 | S5 |
|
||||
| S7 | submit-review + 15天校验 | S4 |
|
||||
| S8 | Dubbo 接口(能源余额/ETC费用) | S5 |
|
||||
| S9 | 生成账单/导出 | S7 |
|
||||
| S10 | 端到端测试 | S6-S9 |
|
||||
|
||||
---
|
||||
|
||||
## 验证计划
|
||||
|
||||
1. **建表验证**: 连接数据库确认9张表已创建
|
||||
2. **数据拉取验证**: 用已有还车记录调 create-from-return,确认自动填充的数据完整性
|
||||
3. **角色隔离验证**: 分别用不同角色登录,确认只能看到/操作自己的费用区块
|
||||
4. **费用计算验证**: 修改各部门费用后,确认汇总金额正确
|
||||
5. **提交流程验证**: 4组依次提交→倒计时结束→提交审核→审批
|
||||
6. **前端联调**: 列表筛选、详情展示、Popover、轮胎弹窗、15天倒计时
|
||||
|
||||
### 关键文件清单
|
||||
|
||||
**后端(修改/新建):**
|
||||
- `ln-asset-management/src/main/java/com/ln/asset/modules/contract/controller/ReturnSettlementController.java`
|
||||
- `ln-asset-management/src/main/java/com/ln/asset/modules/contract/service/ReturnSettlementService.java`
|
||||
- `ln-asset-management/src/main/java/com/ln/asset/modules/contract/service/impl/ReturnSettlementServiceImpl.java`
|
||||
- `ln-asset-management/src/main/java/com/ln/asset/modules/contract/entity/settlement/` (9个PO + req/vo/enums)
|
||||
- `ln-asset-management/src/main/java/com/ln/asset/modules/contract/mapper/` (9个mapper)
|
||||
- `ln-asset-management/src/main/resources/db/migration/` (建表SQL)
|
||||
|
||||
**前端(修改):**
|
||||
- `ln-one-os-web/apps/web-antd/src/api/financial/return-payment/index.ts`
|
||||
- `ln-one-os-web/apps/web-antd/src/views/financial/returnPayment/index.vue`
|
||||
- `ln-one-os-web/apps/web-antd/src/views/financial/returnPayment/detail.vue`
|
||||
- `ln-one-os-web/apps/web-antd/src/types/return-payment.ts`
|
||||
|
||||
**跨服务(新建):**
|
||||
- `ln-energy/src/main/java/.../api/RemoteEnergySettlementService.java`
|
||||
Reference in New Issue
Block a user