Files
ln-bi/src/modules/energy/hydrogen/common/energy-spot-cash-intake/store.ts
T
shishengliang c2f21a3a8a
ci/woodpecker/push/woodpecker Pipeline was successful
fix: restore post-v1.1.14 features while preserving asset updates
Undo the full-tree rollback in 6ea1b3d and restore the pre-rollback v1.2.0 code. Preserve the new asset flow rules, abnormal inventory separation, range drilldowns and date picker; adapt the regression test to the restored routes layout.
2026-09-16 10:48:32 +08:00

570 lines
24 KiB
TypeScript

/**
* 体系 A · 站日现结进账 Mock + localStorage
* 仅本尊提供 Excel 实站;禁造站。
* - 南海:截止8.11 收支汇总 → 现结
* - 东鹏大道:加氢记录-20260802 汇总进账明细 → 现结
*/
import type {
CashIntakeChangeLog,
StationCashIntakeDay,
StationCashIntakeLine,
} from './types';
export const CASH_INTAKE_STORAGE_KEY = 'oneos-energy-spot-cash-intake-v4';
const LEGACY_STORAGE_KEYS = [
'oneos-energy-spot-cash-intake-v3',
'oneos-energy-spot-cash-intake-v2',
];
function seedDays(): StationCashIntakeDay[] {
return [
{
id: 'day-st-fs-nanhai-2026-08-02',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-02',
totalAmount: 2530.42,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-02-0', customerName: "东展供应链(广州)有限公司", amount: 655.12, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-02-1', customerName: "广东开鸿氢能科技有限公司", amount: 503.88, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-02-2', customerName: "现代氢能科技有限公司", amount: 760.38, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-02-3', customerName: "广东氢动力科技服务有限公司", amount: 296.78, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-02-4', customerName: "羚牛氢能科技(广东)有限公司", amount: 314.26, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-02 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-03',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-03',
totalAmount: 2193.36,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-03-0', customerName: "现代氢能科技有限公司", amount: 1259.7, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-03-1', customerName: "羚牛氢能科技(广东)有限公司", amount: 634.22, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-03-2', customerName: "东展供应链(广州)有限公司", amount: 299.44, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-03 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-04',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-04',
totalAmount: 5216.16,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-04-0', customerName: "广东沣开科技有限公司", amount: 3000.0, payMethod: 'bank_transfer' },
{ id: 'line-st-fs-nanhai-2026-08-04-1', customerName: "现代氢能科技有限公司", amount: 1024.1, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-04-2', customerName: "羚牛氢能科技(广东)有限公司", amount: 473.86, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-04-3', customerName: "广东氢动力科技服务有限公司", amount: 368.6, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-04-4', customerName: "东展供应链(广州)有限公司", amount: 163.78, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-04-5', customerName: "外省过路车", amount: 185.82, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-04 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-05',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-05',
totalAmount: 3469.78,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-05-0', customerName: "现代氢能科技有限公司", amount: 1155.58, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-05-1', customerName: "羚牛氢能科技(广东)有限公司", amount: 608.0, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-05-2', customerName: "广东氢动力科技服务有限公司", amount: 530.86, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-05-3', customerName: "广东开鸿氢能科技有限公司", amount: 315.78, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-05-4', customerName: "东展供应链(广州)有限公司", amount: 859.56, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-05 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-06',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-06',
totalAmount: 1006.24,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-06-0', customerName: "现代氢能科技有限公司", amount: 478.8, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-06-1', customerName: "羚牛氢能科技(广东)有限公司", amount: 527.44, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-06 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-07',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-07',
totalAmount: 22094.18,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-07-0', customerName: "东展供应链(广州)有限公司", amount: 201.02, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-07-1', customerName: "现代氢能科技有限公司", amount: 1410.18, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-07-2', customerName: "羚牛氢能科技(广东)有限公司", amount: 482.98, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-07-3', customerName: "羚牛氢能科技(广东)有限公司", amount: 20000.0, payMethod: 'bank_transfer' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-07 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-08',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-08',
totalAmount: 2845.06,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-08-0', customerName: "东展供应链(广州)有限公司", amount: 745.94, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-08-1', customerName: "现代氢能科技有限公司", amount: 1371.8, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-08-2', customerName: "羚牛氢能科技(广东)有限公司", amount: 727.32, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-08 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-09',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-09',
totalAmount: 2485.58,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-09-0', customerName: "现代氢能科技有限公司", amount: 775.2, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-09-1', customerName: "羚牛氢能科技(广东)有限公司", amount: 987.62, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-09-2', customerName: "广东氢动力科技服务有限公司", amount: 250.42, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-09-3', customerName: "东展供应链(广州)有限公司", amount: 472.34, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-09 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-10',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-10',
totalAmount: 22823.78,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-10-0', customerName: "现代氢能科技有限公司", amount: 1582.7, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-10-1', customerName: "羚牛氢能科技(广东)有限公司", amount: 757.34, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-10-2', customerName: "广东氢动力科技服务有限公司", amount: 186.2, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-10-3', customerName: "东展供应链(广州)有限公司", amount: 297.54, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-10-4', customerName: "广东瀚清能源有限公司", amount: 20000.0, payMethod: 'bank_transfer' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-10 18:00',
},
{
id: 'day-st-fs-nanhai-2026-08-11',
stationId: 'st-fs-nanhai',
stationName: "佛山南海羚牛加氢站",
bizDate: '2026-08-11',
totalAmount: 2301.04,
lines: [
{ id: 'line-st-fs-nanhai-2026-08-11-0', customerName: "现代氢能科技有限公司", amount: 755.06, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-11-1', customerName: "羚牛氢能科技(广东)有限公司", amount: 596.36, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-11-2', customerName: "广东开鸿氢能科技有限公司", amount: 599.26, payMethod: 'wechat_scan' },
{ id: 'line-st-fs-nanhai-2026-08-11-3', customerName: "东展供应链(广州)有限公司", amount: 350.36, payMethod: 'wechat_scan' },
],
updatedBy: "杨凤娥",
updatedAt: '2026-08-11 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-06-26',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-06-26',
totalAmount: 10000.0,
lines: [
{ id: 'line-st-dp-dongpeng-2026-06-26-0', customerName: "广州市梅洛特物流有限公司", amount: 10000.0, payMethod: 'bank_transfer' },
],
updatedBy: "金可鹏",
updatedAt: '2026-06-26 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-01',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-01',
totalAmount: 1506.75,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-01-0', customerName: "广州新运多租赁有限公司", amount: 1506.75, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-01 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-02',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-02',
totalAmount: 596.4,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-02-0', customerName: "广州中味餐饮服务有限公司", amount: 96.25, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-02-1', customerName: "广州新运多租赁有限公司", amount: 500.15, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-02 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-03',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-03',
totalAmount: 918.4,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-03-0', customerName: "广州新运多租赁有限公司", amount: 918.4, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-03 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-04',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-04',
totalAmount: 349.3,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-04-0', customerName: "广州新运多租赁有限公司", amount: 349.3, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-04 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-07',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-07',
totalAmount: 20640.15,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-07-0', customerName: "广州市梅洛特物流有限公司", amount: 20000.0, payMethod: 'bank_transfer' },
{ id: 'line-st-dp-dongpeng-2026-07-07-1', customerName: "广州中味餐饮服务有限公司", amount: 362.25, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-07-2', customerName: "广州新运多租赁有限公司", amount: 277.9, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-07 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-08',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-08',
totalAmount: 896.35,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-08-0', customerName: "广州新运多租赁有限公司", amount: 896.35, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-08 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-09',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-09',
totalAmount: 902.65,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-09-0', customerName: "广州中味餐饮服务有限公司", amount: 211.4, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-09-1', customerName: "广州新运多租赁有限公司", amount: 691.25, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-09 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-10',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-10',
totalAmount: 1198.05,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-10-0', customerName: "广州中味餐饮服务有限公司", amount: 314.65, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-10-1', customerName: "广州新运多租赁有限公司", amount: 883.4, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-10 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-14',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-14',
totalAmount: 266.7,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-14-0', customerName: "广州中味餐饮服务有限公司", amount: 266.7, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-14 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-15',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-15',
totalAmount: 562.8,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-15-0', customerName: "广州中味餐饮服务有限公司", amount: 262.5, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-15-1', customerName: "广州新运多租赁有限公司", amount: 300.3, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-15 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-16',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-16',
totalAmount: 497.7,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-16-0', customerName: "广州中味餐饮服务有限公司", amount: 200.9, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-16-1', customerName: "广州新运多租赁有限公司", amount: 296.8, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-16 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-17',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-17',
totalAmount: 911.4,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-17-0', customerName: "广州新运多租赁有限公司", amount: 911.4, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-17 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-18',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-18',
totalAmount: 870.45,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-18-0', customerName: "广州新运多租赁有限公司", amount: 870.45, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-18 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-19',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-19',
totalAmount: 468.65,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-19-0', customerName: "广州中味餐饮服务有限公司", amount: 181.3, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-19-1', customerName: "广州新运多租赁有限公司", amount: 287.35, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-19 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-20',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-20',
totalAmount: 708.75,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-20-0', customerName: "广州新运多租赁有限公司", amount: 480.55, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-20-1', customerName: "广州中味餐饮服务有限公司", amount: 228.2, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-20 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-21',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-21',
totalAmount: 234.85,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-21-0', customerName: "广州新运多租赁有限公司", amount: 234.85, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-21 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-25',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-25',
totalAmount: 20686.0,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-25-0', customerName: "广州新运多租赁有限公司", amount: 686.0, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-25-1', customerName: "广州福满华冷链物流有限公司", amount: 20000.0, payMethod: 'bank_transfer' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-25 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-27',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-27',
totalAmount: 213.85,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-27-0', customerName: "广州新运多租赁有限公司", amount: 213.85, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-27 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-28',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-28',
totalAmount: 20872.2,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-28-0', customerName: "广州中味餐饮服务有限公司", amount: 480.9, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-28-1', customerName: "广州新运多租赁有限公司", amount: 391.3, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-28-2', customerName: "广州市梅洛特物流有限公司", amount: 20000.0, payMethod: 'bank_transfer' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-28 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-29',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-29',
totalAmount: 814.8,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-29-0', customerName: "广州中味餐饮服务有限公司", amount: 84.0, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-29-1', customerName: "广州新运多租赁有限公司", amount: 730.8, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-29 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-30',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-30',
totalAmount: 1450.4,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-30-0', customerName: "广州中味餐饮服务有限公司", amount: 393.05, payMethod: 'wechat_scan' },
{ id: 'line-st-dp-dongpeng-2026-07-30-1', customerName: "广州新运多租赁有限公司", amount: 1057.35, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-30 18:00',
},
{
id: 'day-st-dp-dongpeng-2026-07-31',
stationId: 'st-dp-dongpeng',
stationName: "东鹏大道甲醇制氢一体站",
bizDate: '2026-07-31',
totalAmount: 587.65,
lines: [
{ id: 'line-st-dp-dongpeng-2026-07-31-0', customerName: "广州新运多租赁有限公司", amount: 587.65, payMethod: 'wechat_scan' },
],
updatedBy: "金可鹏",
updatedAt: '2026-07-31 18:00',
},
];
}
function normalizeDay(d: StationCashIntakeDay): StationCashIntakeDay {
return {
...d,
changeLogs: Array.isArray(d.changeLogs) ? d.changeLogs : [],
};
}
export function loadCashIntakeDays(): StationCashIntakeDay[] {
try {
const raw = localStorage.getItem(CASH_INTAKE_STORAGE_KEY);
if (raw) {
const parsed = JSON.parse(raw) as StationCashIntakeDay[];
if (Array.isArray(parsed) && parsed.length) return parsed.map(normalizeDay);
}
for (const key of LEGACY_STORAGE_KEYS) {
const legacy = localStorage.getItem(key);
if (!legacy) continue;
const parsed = JSON.parse(legacy) as StationCashIntakeDay[];
if (Array.isArray(parsed) && parsed.length) {
const next = parsed.map(normalizeDay);
saveCashIntakeDays(next);
return next;
}
}
} catch {
/* ignore */
}
return seedDays().map(normalizeDay);
}
export function saveCashIntakeDays(days: StationCashIntakeDay[]): void {
try {
localStorage.setItem(CASH_INTAKE_STORAGE_KEY, JSON.stringify(days));
} catch {
/* ignore */
}
}
export function getCashIntakeForStationRange(
days: StationCashIntakeDay[],
stationId: string,
startDate: string,
endDate: string,
): StationCashIntakeDay[] {
return days
.filter((d) => d.stationId === stationId && d.bizDate >= startDate && d.bizDate <= endDate)
.slice()
.sort((a, b) => a.bizDate.localeCompare(b.bizDate));
}
export function appendChangeLog(
day: StationCashIntakeDay,
entry: Omit<CashIntakeChangeLog, 'id'> & { id?: string },
): StationCashIntakeDay {
const log = {
id: entry.id || `log-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,
at: entry.at,
by: entry.by,
action: entry.action,
summary: entry.summary,
};
const prev = Array.isArray(day.changeLogs) ? day.changeLogs : [];
return { ...day, changeLogs: [log, ...prev].slice(0, 80) };
}
export function upsertCashIntakeDay(
days: StationCashIntakeDay[],
next: StationCashIntakeDay,
): StationCashIntakeDay[] {
const idx = days.findIndex((d) => d.stationId === next.stationId && d.bizDate === next.bizDate);
const copy = days.slice();
if (idx >= 0) copy[idx] = { ...next, changeLogs: next.changeLogs || copy[idx].changeLogs || [] };
else copy.push({ ...next, changeLogs: next.changeLogs || [] });
return copy.sort((a, b) => b.bizDate.localeCompare(a.bizDate));
}
export function deleteCashIntakeDay(
days: StationCashIntakeDay[],
stationId: string,
bizDate: string,
): StationCashIntakeDay[] {
return days.filter((d) => !(d.stationId === stationId && d.bizDate === bizDate));
}
export function sumLines(lines: StationCashIntakeLine[]): number {
return lines.reduce((s, l) => s + (Number(l.amount) || 0), 0);
}
export function summarizeCashIntake(
days: StationCashIntakeDay[],
startDate?: string,
endDate?: string,
): { dayCount: number; totalAmount: number; stationCount: number } {
const filtered = days.filter((d) => {
if (startDate && d.bizDate < startDate) return false;
if (endDate && d.bizDate > endDate) return false;
return true;
});
const stations = new Set(filtered.map((d) => d.stationId));
return {
dayCount: filtered.length,
totalAmount: filtered.reduce((s, d) => s + d.totalAmount, 0),
stationCount: stations.size,
};
}