103 Commits

Author SHA1 Message Date
6499934c47 fix: 税务类型优先展示 Excel 台账
Excel 有税务类型时始终展示,缺失时回退上游资料。
2026-10-26 17:58:27 +08:00
a7252c176c 完善系统化待办文字展示、拆分与指定序位新增 (#618) 2026-10-26 17:37:06 +08:00
d0979879e7 fix: 精简店铺销量汇总卡片
店铺报表仅保留正常存续店铺数、上月销量、当月销量三个汇总框。
2026-10-26 16:44:05 +08:00
e2e77d6d20 fix: 统一工商类型核定与个人独资口径
工商类型仅保留核定、个人独资企业,其他统一显示斜杠。
2026-10-26 16:40:16 +08:00
dfc3dcd0d0 fix: 默认隐藏无数据的报表月份列
报表初始只显示有数据的月份列,空列可在筛选字段中手动打开。
2026-10-26 16:32:29 +08:00
450a9e42f9 feat: 完善经营报表汇总与基础资料状态标签
经营报表保留原表头并补齐本表汇总;基础资料只增加表内分色标签。
2026-10-26 16:13:27 +08:00
b25ae15a4b 新增公司税务类型与工商类型字段 (#597)
公司基础信息和主体维度报表增加税务类型、工商类型字段,并复用 fin_companies 已完成核对的数据。
2026-10-26 15:04:42 +08:00
3ae7bf7dc8 修复店铺状态显示为中文 (#593)
店铺基础信息状态列统一显示正常、关闭中、已关闭。
2026-10-26 14:30:01 +08:00
acafcf1abb 修正安装费汇总:保留独立安装明细页并按客服审核时间归集 (#589) 2026-10-26 14:13:18 +08:00
e85a2e90ef 新增经营报表汇总卡片 (#588)
新增六类经营报表汇总卡片,复用共享镜像筛选和排序,并完成真实数据口径、桌面及移动端验证。
2026-10-26 13:52:10 +08:00
d2e20bd441 将安装费金额并入业绩明细 (#587) 2026-10-26 13:47:02 +08:00
d18aa82678 修正店铺负责人关联并增加每日存档 (#584) 2026-10-26 12:01:25 +08:00
f88d849c15 同步最新系统化待办工作簿 (#583) 2026-10-26 11:44:03 +08:00
0bf1ae67af 导入订单售后与商品推广月度明细 (#578)
新增 2026-06 月度订单售后及商品推广导入能力
2026-10-26 11:09:22 +08:00
03acb8b1a0 fix: 提现管理按店铺报表取存续主体
提现管理主体跟随店铺维度报表最新存续期间。

PR #559
Co-authored-by: 92451 <924518135@qq.com>
Co-committed-by: 92451 <924518135@qq.com>
2026-10-25 20:36:57 +08:00
0b69f30714 feat: 补录财务账单店铺余额并标记来源
聚水潭缺失店铺按财务账单补录;页面和导出标记数据来源。

PR #552
Co-authored-by: 92451 <924518135@qq.com>
Co-committed-by: 92451 <924518135@qq.com>
2026-10-25 17:06:19 +08:00
3cff23c595 新增财务系统化待办与完成截图
新增财务系统化待办与完成截图
2026-10-25 16:23:08 +08:00
46b9acae2e feat: 提现管理增加提现金额专用导入模板 (#528)
Co-authored-by: 92451 <924518135@qq.com>
Co-committed-by: 92451 <924518135@qq.com>
2026-10-24 21:10:46 +08:00
89bd1703c7 feat: 提现管理连续3天余额预警并生成待办 (#519)
## 完成内容
- 提现管理展示所选余额日及前两天余额。
- 连续3个自然日余额一致且均严格高于预留标准时显示预警。
- 余额导入成功后自动生成或更新待处理事项,同一店铺不重复创建。
- 导出文件同步包含三天余额和预警状态。

## 验证
- 新增预警测试:3 项通过,30 个断言。
- 提现管理导入导出测试:12 项通过,96 个断言。
- 管理页面回归:1 项通过,56 个断言。
- 余额仓库测试:11 项通过,46 个断言。
- 本地页面已验证:39 家店铺触发预警,待办事项生成 39 条。

## 风险
- 无数据库结构迁移。
- 不改上游数据;仅在成功导入余额后读取共享镜像并写入待办。

Reviewed-on: #519
Co-authored-by: 92451 <924518135@qq.com>
Co-committed-by: 92451 <924518135@qq.com>
2026-10-24 19:50:40 +08:00
e15b6b9901 商品成本:按历史唯一规格映射平台数字SKU (#482)
平台数字 SKU 仅按唯一历史内部编码自动映射;多候选保持待核验。
2026-10-24 10:18:21 +08:00
1ad248dda6 商品价格:自动生成月加权平均单价并输出对账简报 (#476) 2026-10-23 16:21:15 +08:00
2fa66ef1d1 进销存:保留供应商汇总中的相同明细行 (#475) 2026-10-23 15:55:06 +08:00
1991b7d319 进销存:增加供应商汇总表月度增量导入 (#474) 2026-10-23 15:47:39 +08:00
c9ecf033d5 进销存:入库明细支持页面导入 (#473) 2026-10-23 15:02:03 +08:00
1f4f6f48d4 优化财务资源:减少重复扫描、隔离重型任务、约束系统日志 (#390) 2026-10-19 14:56:54 +08:00
409da4cae8 feat: 提现管理余额日期改为下拉选择 2026-10-18 12:09:42 +08:00
da794c3ddb feat: 提现管理支持按余额日期筛选并长期保留每日余额 2026-10-18 11:52:02 +08:00
37c11f4e8e fix: 提现管理店铺余额保留最近5天 (#349)
Co-authored-by: 92451 <924518135@qq.com>
Co-committed-by: 92451 <924518135@qq.com>
2026-10-16 19:00:49 +08:00
fd4b155979 feat(快递资料): 归档合同管理与到期提醒 (#336) 2026-10-15 10:22:35 +08:00
8ba7ac8327 feat(快递入驻/快递资料): 生成二维码时必填快递资料并对齐到快递资料;去掉「发起报价变更」按钮;自定义3 改名扣款方式
- 生成入驻二维码新增 11 个必填项(快递方看不到,放在入驻流程下方单独一块):快递类型、快递合作方式、快递属性、扣款方式、单号类型、快递邮箱、
  是否需要核对物流点、快递发货方式、是否已有工作平台账号、快递网点代码、网点所在地区;入驻列表、入驻详情可查看和修改
- 快递资料:扣款方式对齐到「扣款方式」列(工作平台没填时用入驻的),其余字段接在入驻信息列里;网点代码/地区进网点明细;导出同步
- 不再依赖钉钉「新建快递」流程字段,ERP 开通改为手动补录 ERP账户ID
- 快递资料「自定义3」列、筛选、编辑和导出表头改名为「扣款方式」(字段仍是 undefined3)
- 报价管理工具栏、报价历史页去掉「发起报价变更」:它默认拿第一份报价走老的改格子流程,对入驻快递会绕开后台变价;
  变价统一从报价列表每一行的「变价」进入;老报价编辑页新增 …/changes/new 入口,避免套餐限制中间件把 GET …/create 跳到用户页
- 新增迁移 2026_10_14_300000:business_courier_onboardings 加 11 个可空字段

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019gzfsnV3fJ89CoUy1D9V9g
2026-10-14 18:31:25 +08:00
71652c5a64 feat(快递入驻): 快递扫码填写入驻资料 + 两级审核 + 首版报价 + 签署开通
快递应付 → 快递报价 下新增「快递入驻」页:生成入驻二维码发给快递方,
对方免登录在手机上填写主体、联系人、e签宝签署人、结算账户、报价并上传资质,
内部对接人初审、管理员财务复审后生成首版报价,并自动生成报价确认单 PDF
推送到快递填写的 e签宝账号,签署归档后开通。

- 新增三张表 business_courier_onboardings / _files / _events(纯新增,不改旧表)
- 免登录填报页 /onboarding/courier/{token}:40 位随机 token,可暂存、提交、退回后补件,
  链接有效期可延长、可作废;银行账号加密存储;附件存 uploads 盘
- 新增 COURIER_ONBOARDING_PUBLIC_URL 配置二维码里的站点地址(留空用当前访问地址)
- 内置纯 PHP 二维码生成(App\Support\QrCode,SVG 输出,无新增依赖)
- 生成二维码时必须定好系统快递名称(唯一,快递方不可见);财务复审沿用该名称,快递所填报价写成报价管理的 CourierQuoteVersion,
  复用 CourierQuoteSignatureService 生成报价确认单并推送 e签宝(失败可重推/同步状态);初审人默认不能复审(COURIER_ONBOARDING_ALLOW_SAME_REVIEWER=true 可在测试环境放开)
- 支持公司 / 个人两种入驻:个人填姓名+身份证号(加密)、传身份证和银行卡,报价确认单按个人身份在 e签宝签署
- 扫码先选入驻方式;证件改为 营业执照 / 法人身份证正反面 / 银行卡正反面 各一张(个人营业执照选填),手机端上传前自动压缩,超限回到填报页提示
- 报价支持 4 种计费方式(面单+费率 / 首重+续重 / 按重量段一口价 / 小重量一口价+超出另算,费率可分段)+「其他」上传报价表;附加规则:计泡、起算重量、取整、每票加收(CourierQuoteStructure)
- 不再要求上传盖章报价单,至少填写一行在线报价
- 开通:报价确认单签署归档、或匹配到已签署协议、或填写线下签署说明
- 生成二维码前必填「快递公司代码」(自动大写、不可重复),入驻信息按代码对齐快递资料
- 公司入驻对公(营业执照主体)+ 对私(法定代表人)两个打款账户必填并自动核对;个人入驻对私必填、对公选填
- 变价:报价管理里后台改价 → 审核 → 自动推送快递 e签宝 → 回签;回签单导出 xlsx/zip;误发版本可作废
- 短期(临时)变价:变价单/报价版本加选填「结束日期」(end_date);按日期取价,期间用临时价,到期次日自动恢复原长期报价,
  不用重签;报价管理显示 生效中(临时)/ 暂停中 / 已到期,确认单写明执行期间和到期后恢复的版本,审核提醒期间重叠
- 快递资料分四类:快递资料 / 网点 / 打款信息 / 操作日志,支持查询、导出、重置、编辑;
  财务系统入驻的快递直接作为快递资料行,合同起止取协议签署里已签署的合作合同;
  点开一行在下方看该快递的网点 / 打款信息(完整账号)/ 操作日志
- 编辑存财务系统覆盖值(business_courier_profiles,不回写工作平台),改动记操作日志(business_courier_profile_events)
- 打款信息新增 / 变更(business_courier_payment_accounts,账号加密)保存后跳到协议签署,自动预填收款账户证明 / 收款账户变更,
  按签署状态显示 待推送协议 / 签署中 / 已生效;入口在快递资料明细和「打款信息」页签(表格每个账户可直接「变更」)
- ERP 开通:入驻开通后标「待 ERP 开通」,可手动补录(钉钉「新建快递」流程同步待接入)
- 新增 CourierOnboardingWorkflowTest(8 个用例),更新快递报价目录顺序断言

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019gzfsnV3fJ89CoUy1D9V9g
2026-10-14 13:47:00 +08:00
ea80148dfc 店铺违规预警:级别/责任人/处理截止/超时/推送状态 + 处理状态四档 + 群推送接口 + 预览统计页 (#332) 2026-10-13 19:54:01 +08:00
d47a72c175 店铺违规预警:新增违规原因与处置方式两列(页面/统一表/导入导出) (#323) 2026-10-13 11:32:27 +08:00
66d6146c19 快递运费:导入兼容「店铺」列名(财务系统提供成本5-6.xlsx 用)
列名别名扩展:店铺名称/店铺;csv 与 xlsx 两条路径的用例同步覆盖。
2026-10-12 14:55:01 +08:00
f3143e6959 快递运费:修复 XlsxSheetReader 可选列漏传闭包导致 xlsx 导入报未定义变量
补 xlsx 路径导入测试(csv/xlsx 是两条代码路径,此前只测了 csv)
2026-10-12 12:07:09 +08:00
f805920fda 快递运费:新增「店铺名称 / 快递单号 / 条形码」列,并按「财务系统运费整理.xlsx」重新导入
- 迁移:courier_freight_rows 增加 express_no / barcode / shop_name(可空)
- 导入器支持可选列(快递单号 / 条形码 / 店铺名称),老文件缺这三列也能导;XlsxSheetReader 支持可选列表头
- 页面与导出新增三列;运费差 / 结算运费 / 其他附加费汇总 / 退件费 表头与取数逻辑不变
- 测试:新增新列导入、老文件兼容、页面展示用例
2026-10-12 11:56:00 +08:00
53cd0c3ce6 聚水潭订单标签明细:新增「货号」列,货号 X00006 的订单判为种菜订单
- 新增 jst_order_labels.item_code 迁移;导入时从商品明细镜像按 o_id 写入货号(被替换/取消的明细不计入)
- 「是否种菜订单」增加规则:货号含 X00006(信誉订单虚拟条码)直接判「是」
- 页面与导出新增货号列;新增 jst-order-labels:sync-item-codes 回填命令
- 测试:新增货号/种菜判定/回填命令用例,并修正导出表头过时断言
2026-10-10 16:06:02 +08:00
ddbf32a0ee 快递运费:其他附加费汇总后面新增「退件费」列(按交易单号取快递应付的退件费结算金额)
退件费快照的表头跟另外两个不一样:单号列叫「交易订单」、金额列叫「结算金额」,所以 CourierPayableSummaryMap 的列定位改成按候选关键字找(先全等、再包含),三个汇总页共用一套逻辑。
2026-10-08 15:40:27 +08:00
0c84afb875 快递运费:运费差后面新增「其他附加费汇总」列(按交易单号取快递应付的附加费金额)
把上一版的 CourierFreightDifferenceMap 改成通用的 CourierPayableSummaryMap,同时支持「运费差」和「其他附加费汇总」两个汇总快照(都是上传在 uploads 盘的 JSON):运费差取「差异(结算运费-提供成本运费)」,附加费取「金额」,都按交易单号挂到快递运费页面对应行;快照文件时间戳进缓存键,财务重导后自动失效。
2026-10-08 15:21:25 +08:00
a8b086766b 快递运费:提供成本运费后面新增「运费差」列(按交易单号取快递应付的运费差)
运费差是「应付款项 › 快递应付 › 运费差」页面上传的汇总快照(JSON 文件,不是数据库表),这里新增 CourierFreightDifferenceMap 读它并转成 交易单号 ⇒ 差异 映射,页面按交易单号带出新列;快照文件的修改时间进缓存键,财务重导后自动失效。源表一格多单号(逗号分隔)会逐个挂同一个差异值。
2026-10-08 14:49:55 +08:00
885961084e 流程统计:接入店铺申请流程(开店/变更/关店)共享镜像
数据源:jiansun.dbo.fys_shopInfo_flow(申请单明细,4572 行,含店铺/平台/负责人/利润中心/商标/变更原因/关店原因等)
+ 中台库 dbo.flow_flow(按 flowId 关联审批状态与当前审批人),两个数据集已登记并完成首次全量。

- 新增 ShopInfoFlowMirrorRepository:左连接两套镜像,支持单据编号/申请人/申请日期/当前审批人/
  ERP店铺名称/店铺运营负责人/利润中心/商标号等文本筛选,流程类型、审批状态、平台为可搜索多选。
- 审批状态文案取自 OA 前端字典:0暂存/1流程中/2拒绝/3完成/4撤回/5待签署/6已签署/7待审批;
  流程类型:8店铺开店/9店铺变更/10店铺关店/12主体注销自动流程。
- 页面按目录表渲染(查询条件、筛选字段、导出),列与外部店铺申请页对齐。
- TableRegistry 登记为只读上游页,镜像未就绪时页面给提示而不是报错。
2026-10-08 14:38:16 +08:00
8c626c65de 快递运费:查询字段靠左,列名「成品配件」改「成品运费」
1) 查询栏里的空提交表单没隐藏,会占掉栅格第一格,把筛选字段整体挤到第二列;改成 hidden 后字段从最左边开始(所有用这套查询栏的页面一起受益)。
2) 快递运费页把「成品配件」列名改成「成品运费」;导入时两种表头都认(成品配件 / 成品运费)。
2026-10-08 13:55:56 +08:00
69f3d9228f 店铺账号密码:授权状态 / 店铺状态筛选改成可搜索多选
复用已有的 CaiWuMultiSelect 组件(按钮 + 复选面板 + 全选/清空),勾选结果提交为
authorization_status[] / store_status[],多个取值取并集;一个都不勾=全部。

- 目录表的筛选控件在 query 表单外(靠 form 属性关联),给多选组件补了 formId 选项,
  生成的隐藏 input 带上 form,保证能随查询表单提交。
- pageFilters 支持数组筛选值(去重、最多 50 个);仓库侧筛选统一按列表处理,
  单选(旧链接)和多选都兼容。
2026-10-08 13:48:51 +08:00
1c90b64c29 快递运费:新增导入命令与页面数据表
财务经营报表 › 快递运费 之前是空页面。现在:
- 新增 courier_freight_rows 表(来源 / 成品配件 / 交易单号 / 提供成本运费);
- 新增 courier-freight:import 命令(xlsx / csv,按表头名匹配,支持 --replace);
- 把聚水潭导出用的 xlsx 流式读取器改成通用名 XlsxSheetReader(本次文件 57.8 万行、解压后 115MB,必须流式读);
- 页面按来源 / 成品配件 / 交易单号查询,列设置与分页复用通用目录表。
2026-10-08 13:20:01 +08:00
8261b17328 种菜明细表同步:利润中心优先用历史值,缺失的用店铺维度报表的 ERP 店铺资料补齐
9 月有 19 家新店铺(1245 行)在历史映射里查不到,导致利润中心为空。现在按「ops_fys_shop_info.erpShopName → responsibleDepartment」补(就是店铺维度报表里 ERP系统店铺名称 → 店铺所属利润中心 那一列),两边都查不到才留空并在命令输出里列出。

历史值仍然优先,避免把人工维护过的取值改掉:实测 371 家可在 ERP 命中的店铺里 365 家两边一致,6 家不一致(朴美家居、朴美书房、拼多多-HX103、索菲亚办公、顾升、乐之益)已单独报给用户确认。
2026-10-08 09:59:11 +08:00
ef62cac0d9 种菜明细表:新增按月从聚水潭种菜报销工单同步的命令(带自动排重)
每个月都要手工整理「中心明细表」,改成一条命令:planting-details:sync-work-orders --month=YYYY-MM。

- 口径用 1~8 月已入库的 7 万多行反推验证过:只取「工单类型=种菜报销、状态=已完成」的工单,明细表「日期」= 工单完成日 - 1 天(历史命中 100%),所以某月数据 = 完成时间落在该月次日到下月次日的工单。
- 字段映射(聚水潭只返回 fieldId,不给字段名,这批 id 是拿历史数据逐列对撞出来的):财务售价/财务运费/财务佣金/京喜差价/扣款/财务空包费/财务打款金额 分别对应工单的 任务付款/任务快递费/任务佣金/京喜差价/任务扣款/任务空包费/最终报销金额;负责人、账户、类型、标签、创建人、平台商品ID 也各有对应字段。
- 自动排重:写入前先删掉「本月 + 本次订单号」的已有行,重复执行不会翻倍;--force-clear 才整月覆盖,--dry-run 只看不写。
- 所属利润中心没有工单来源,用表里已有的 店铺→利润中心 映射回填,命中不了的店铺在命令输出里逐个提示。
- 补测试:字段映射 + 日期口径 + 去重 + 利润中心回填 + force-clear。
2026-10-08 09:35:34 +08:00
4bcfde58f7 按文件导入改为两遍:先挑出真正有标签的订单,再拆行写入
聚水潭导出是一单多行,实测有 97 单是「部分明细行带标签、部分为空」;单遍处理会给这些单多写一行「(无标签)」。改成第一遍收集有标签的订单号,第二遍只对整单无标签的订单写「(无标签)」,并补上对应断言。
2026-10-07 16:59:01 +08:00
8a70fd4482 修 JstOrderLabelImporter:把延迟清区间的逻辑挪到 importFromFile,恢复镜像导入的 --replace
上一个提交的补丁打在了 import() 上:镜像导入的 --replace 清空被删掉,而 importFromFile 用到未定义的 \ 直接报错。现在两边各归各位。
2026-10-07 16:57:35 +08:00
daa4c939e7 聚水潭订单标签明细:支持按聚水潭导出的订单 Excel 导入,并放开筛选下拉上限
镜像 ops_jst_orders 只覆盖 2026-04-01 之后,缺的历史区间只能靠财务在聚水潭「导出订单」导文件补。所以:- 新增 JstOrderExportReader:ZipArchive+expat 流式解析聚水潭导出 xlsx。这类文件字符串走 inlineStr、dimension 只写 A1、单文件上万行 ×135 列(解压 78MB),常规读法会读成空表或吃满内存;实测 12286 行 3.5 秒、峰值内存 10MB。
- jst-order-labels:import 新增 --file=:按「线上订单号+标签」去重后拆行写入,可配合 --from/--to 过滤窗口;带 --replace 时先成功读到数据行再清区间,避免文件有问题却先删了线上数据。
- 筛选下拉上限 500 -> 5000:导入 4~7 月后店铺已达 604 个,原来下拉里会缺 104 个店铺;提交筛选值的截断上限同步放开。
- 补两个测试:导出文件去重拆行、窗口过滤+replace。
2026-10-07 16:53:55 +08:00
e8b8b816f4 修复「是否种菜订单」映射读取为空:补 deleted_at 列并改用表查询
新建的 jst_order_label_planting_rules 缺 deleted_at,而模型基类带 SoftDeletes,查询报错被兜底成空映射,
页面全部显示「否」。补迁移 2026_10_07_130000(建表迁移同步补上)并把服务改为 DB 表查询。
2026-10-07 11:20:03 +08:00