刘泉佳
|
a4b5f09160
|
feat: 正式结算单整合项目预付核销并关联展示预付付款记录
核销金额计入结算单已申请/已付汇总(仅已付款预付可核销);保存转移来源预结算核销行、调整重推迁移核销行;付款申请作废/结算单作废/金蝶删单回调/预结算作废联动清理核销行;结算调整前校验核销合计;详情返回统一预付付款记录(advancePayments);列表页批量汇总避免N+1
|
2026-10-18 14:31:10 +08:00 |
|
刘泉佳
|
784c532d9c
|
feat: 结算调整单审批自动推送与冲销后重推新单
|
2026-10-16 19:46:27 +08:00 |
|
刘泉佳
|
bf9c1cc890
|
feat: 结算调整单接入金蝶数据模型与冲销查询能力
|
2026-10-16 19:45:57 +08:00 |
|
b2894lxlx
|
cfa77cbba3
|
✨ 新增结算规则定时生成,并支持付款申请多结算单与导入停用费用项提示
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-16 16:03:23 +08:00 |
|
b2894lxlx
|
22425708a8
|
Merge remote-tracking branch 'websoft/dev'
|
2026-10-16 11:47:52 +08:00 |
|
b2894lxlx
|
93a6555293
|
✨ 新增项目预付核销,并修复平台公司多选、常用线路组织过滤与登录 IP 连坐锁
结算附件支持项目预付核销并扣减可付款金额;加固项目平台公司多选字段扩容脚本;常用线路新增归属组织与列表筛选对齐;登录失败仅按账号锁定,取消 IP 级连坐。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-16 02:01:58 +08:00 |
|
b2894lxlx
|
0657cfe69f
|
!2 金蝶解锁回调以及客商审核通过推送金蝶失败被吞异常,以及补充文档
Merge pull request !2 from mindless/feature/payment-apply-bfi-sync
|
2026-10-15 16:58:41 +00:00 |
|
b2894lxlx
|
d7bf82b159
|
✨ 新增导入结算单,并修复运单超管组织过滤与计量单位软删恢复
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-16 00:56:54 +08:00 |
|
b2894lxlx
|
0518bf94bf
|
✨ 组织同步收敛为双顶级与二级公司白名单
集团顶级改为 id=1/广西现代物流集团有限公司,仅同步 OA 公司 2、135 及其子公司与部门,并同步客商固定所属组织名称。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-15 12:47:11 +08:00 |
|
刘泉佳
|
cb19618101
|
fix: 解锁标识术语统一为金蝶锁单/金蝶删单
- 回调操作类型展示口径统一:SAVE=金蝶锁单(保存触发解锁,单据仍在)、DELETE=金蝶删单
- 同步更新解锁标识标签、VO 注释与业务流程文档
|
2026-10-15 11:44:37 +08:00 |
|
刘泉佳
|
f23e24e808
|
fix: 修正金蝶解锁回调单号定位并新增解锁终态页面标识
- 回调方向与锁定相反:按金蝶单号+我方单号双条件反查最新locked锁记录(targetBillType回调为空不参与匹配)
- 回调处理批量化:一次IN查询+updateBatchById批量落库,消除逐张查询/更新N+1
- 新增KingdeeUnlockMark展示契约与fillUnlockMarks通用填充,付款申请/结算单/开票申请VO回填解锁时间、操作人、动作名称
- 更新金蝶单据锁定与解锁业务流程文档(回调方向、解锁后数据变化、事务语义、联调实测结论)
|
2026-10-15 11:29:11 +08:00 |
|
刘泉佳
|
865e3a0498
|
Merge branch 'master' into feature/payment-apply-bfi-sync
# Conflicts:
# blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java
|
2026-10-14 14:24:27 +08:00 |
|
b2894lxlx
|
6f4812db75
|
✨ 项目申请平台公司多选,运单导入承运商筛选与复制草稿优化
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-14 12:59:31 +08:00 |
|
b2894lxlx
|
5bd7c8d755
|
✨ 机构OA同步支持双顶级与GWWL分段编码规则
固定集团锚点 id=135/GWWL 与独立外部组织顶级并存;公司/部门编码按上级直拼三位数字生成,并修正类型与孤儿清理逻辑。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-14 10:44:38 +08:00 |
|
weicw-dshsa
|
6fecc262b1
|
✨ 司机端运单卡片补运输组织类型字段
DriverWaybillCardVO 加 transportOrgType,toCard 按运单是否带配载单号判定 common/load;司机端详情、首页当前任务与列表共用该出口
|
2026-10-13 13:54:51 +08:00 |
|
b2894lxlx
|
ea1829cd75
|
🐛 修复小程序令牌严格校验 401,并开放调度端打卡接口
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-12 14:47:17 +08:00 |
|
b2894lxlx
|
17ede93a04
|
✨ 新增小程序用户后台管理接口与菜单
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-12 13:49:08 +08:00 |
|
b2894lxlx
|
e19c3b100a
|
✨ 小程序用户独立为 blade_mp_user,并兼容司机/车辆 OCR 宽松日期
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-12 13:02:08 +08:00 |
|
b2894lxlx
|
42ca5ee7bc
|
Merge remote-tracking branch 'websoft/dev'
# Conflicts:
# blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java
|
2026-10-12 10:39:38 +08:00 |
|
b2894lxlx
|
68fede2caf
|
🐛 完善港口码头/铁路导入失败原因与软删除恢复,并修复运单导入列表筛选
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-10 16:20:21 +08:00 |
|
刘泉佳
|
5d1f977abd
|
feat: 付款申请纳入金蝶单据锁定与解锁流程(推送后锁单-删单回调还原-作废守卫-锁状态展示)
|
2026-10-10 16:00:32 +08:00 |
|
刘泉佳
|
15d6f736e5
|
feat: 金蝶锁单改1对1逐张调用并新增列表锁状态展示
|
2026-10-10 15:18:57 +08:00 |
|
b2894lxlx
|
a4287d8b15
|
🐛 用户缓存反序列化失败时清理并回源,避免列表翻译姓名时报 500
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-10 14:28:31 +08:00 |
|
b2894lxlx
|
4e7193893f
|
✨ 组织与人员支持OA增量同步,并完善用户启停与性别空值
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-10 13:56:29 +08:00 |
|
weicw-dshsa
|
4fe0c8a968
|
✨ 调度首页把司机已拒单的运单列为重新派单待处理,并在司机端让该运单脱离
|
2026-10-10 01:48:49 +08:00 |
|
b2894lxlx
|
e20afc0d55
|
✨ 合同结算币种贯通应收应付与结算,并完善合同编号与字段
合同结算币种写入应收应付与预结算;总单运费默认币种统一为 RMB;同步合同申请日期、主要内容、部门合同编号前缀及用印材料字典等能力。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-10 00:53:17 +08:00 |
|
weicw-dshsa
|
b66984d3a1
|
✨ 认证审核详情下发审核人与审核时间
|
2026-10-09 20:47:22 +08:00 |
|
刘泉佳
|
e08be9a297
|
feat: 正式结算单/开票申请同步金蝶后联带锁单,支持解锁回调与金蝶删单还原
|
2026-10-09 19:52:15 +08:00 |
|
b2894lxlx
|
ef9eab737f
|
✨ 优化主数据校验与运单导入空值处理
电报略码改为选填且填写时唯一;用户支持账号姓名手机模糊查询;合同名称允许重复;项目情况说明扩至1000字;导入运单未填里程费用不再落库-1。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-09 17:07:56 +08:00 |
|
weicw-dshsa
|
7c488b6f09
|
✨ 司机打完末位到货卸货签收节点且回单无需确认时自动完成运单
|
2026-10-08 09:24:30 +08:00 |
|
weicw-dshsa
|
2e5eae4d32
|
✨ 打卡照片按类型最多传 9 张,照片列加宽为 text
- 节点打卡提交新增 photoItems(带显式类型),photos 原样保留供旧版小程序按下标回推
- 打卡照片是每个打卡节点必有的类型,不由过程配置决定,与各凭证类型各自最多 9 张
- 新版提交要求每个类型至少 1 张;旧版仍只要求至少 1 张,避免打断未升级的小程序
- 管理端订正只校验每类上限,不校验必填
- photos 由 varchar(2000) 改 text:36 张约 4000 字符,旧列宽约 17 张即溢出
- 基线建表脚本补 COLLATE=utf8mb4_0900_ai_ci(与本机库实际排序规则一致)
|
2026-10-07 16:49:19 +08:00 |
|
weicw-dshsa
|
f9654fbe30
|
✨ 节点卡片下发整单异常标记与相关异常列表,列表支持按运单精确过滤
|
2026-10-07 12:25:31 +08:00 |
|
weicw-dshsa
|
c50a86d5c4
|
✨ 运单详情打卡记录支持管理端编辑(含打卡状态)
新增 POST /waybill-manage/punch-record/save:按运单当前过程配置补录或修正
节点打卡与在途打卡,打卡状态也在可编辑之列。
- punched=false 即取消打卡:清除该节点全部打卡流水(时间轴上「未打卡」的判据
就是没有流水);在途节点没有节点 key 可定位单条,故清空该运单全部在途流水
- 节点以当前过程配置为准回写 key/name,前端带旧值也不会写歪
- 编辑按字段显式更新:updateById 会跳过 null 字段,清空地址/货量/照片保存后不生效
- 编辑不改 exception_flag(与异常处置表绑定);管理端补录 driver_id 留空
- 凭证图按 [{type,url}] 回写,避免展示层按下标回推类型时换序串标
- 补 8 个服务单测 + 3 个 MockMvc 端点绑定测试
|
2026-10-06 04:40:43 +08:00 |
|
weicw-dshsa
|
19ddc445da
|
🐛 修复在途打卡绕过异常门禁:未了结异常落在在途之后时仍可打卡
在途的异常阻断此前按过程配置里节点的位置区间计算:异常节点及其后的节点不可打卡。
异常报在「卸货」这类排在在途之后的节点时,区间只有卸货、签收,在途被放行,
等于车越接近目的地越能报在途;而异常报在「装货」(在途之前)反而会锁住在途。
改为运单级判定:该运单只要存在未了结异常,在途就不可打卡,与异常归属哪个节点无关。
普通打卡节点仍按区间(异常所在节点及其后)阻断。判定集中在
WaybillProcessSupport.blockedNodeKeys,卡片禁用态与 /enroute/submit 的强制校验共用它。
异常落在非打卡节点上(接单/回单、或已从过程配置删掉的节点)时没有可跳转的具体异常,
故 blockedExceptionId 可能为空,卡片只显示不可打卡原因。
|
2026-10-06 03:17:25 +08:00 |
|
刘泉佳
|
d3f549bf42
|
feat: 金蝶票池选票回切镜像读(本地真分页+票号未命中回源+瘦身版全票池定时同步+结算认领确认重查闸门,下线实时游标透传)
- 选票两门面端点改查 blade_kingdee_invoice_pool 本地镜像:Mapper.xml 真分页+total 跳页,
名称模糊/票种(invoice_type_code)/双税号/claimed/registered 三态过滤 SQL 直出,
仅出可用票(available_amount>0 且 amount_use_status='0',本地化执行原 isUsablePoolRow 口径)
- 票号精确查本地未命中→窄查一次 A801-1 回源入库后重查,兜底增量窗口缝隙内当日新票
- 瘦身版同步任务回归:增量窗口分页拉取+镜像全列批量 upsert(无绑定/补偿/白名单/指纹),
复用 KingdeeSyncLockSupport single-flight;手动端点 POST /invoice-receipt/sync-invoice-pool 供 bootstrap
- 镜像实体/表新增 available_amount/amount_use_status,fillInvoicePool 统一回填(存根/回源/同步同口径)
- 结算认领确认补齐服务端按票号重查闸门(与收票保存 persistMirrorFromRemote 同闸门),收票保存重查原样保留
- 删除 KingdeeInvoicePoolPageVO 游标分页契约与 PoolScanCursor/decorateUseFlags 等实时链路代码
|
2026-10-05 17:52:32 +08:00 |
|
weicw-dshsa
|
7c30ead839
|
✨ 异常处置支持归属过程节点并新增打卡门禁
异常上报强制选择过程节点,节点归属写入 node_code / node_name;节点存在未了结
异常时,该节点及其后节点不可打卡(异常门禁),被拦节点仍可展开查看回填内容。
另新增顺序门禁:前置打卡节点未完成时后续节点不可打卡且不可展开;在途节点不受
顺序门禁约束,但仍受异常门禁约束。
配套:
- 过程配置「上传货量为是、货量类型为空」的脏配置订正为不采集货量
- 网关补充 /blade-resource/** 路由(图片上传,小程序打卡与异常上报照片均经此)
|
2026-10-05 15:10:24 +08:00 |
|
weicw-dshsa
|
7296a5af21
|
✨ 异常处置跟进支持上传附件
跟进记录新增 attachments_json 列,存 [{name, url}] 形式的 JSON 数组。
跟进说明与附件至少填其一即可:只传附件时,follow_content 列为 NOT NULL,
故写入固定文案「已上传跟进附件」,列表按该文案展示。
建表脚本补 COLLATE:原先只写 CHARSET,落到 MySQL 8 服务器默认排序规则,
与库中实际的 utf8mb4_0900_ai_ci 不一致。
|
2026-10-05 01:09:33 +08:00 |
|
weicw-dshsa
|
8d35abd23e
|
✨ 异常处置新增编辑功能
运管员可订正已上报的异常内容:异常类型、异常原因、上报说明、现场照片。
车牌、项目、承运商、配载单号由上报时从运单回填,不开放编辑,避免与运单脱钩。
编辑不改动处置状态。状态只能经跟进与完成流转,因为运单详情、运单列表、
首页计数与待办四处都以 disposal_status IN (pending, processing) 判定未完成,
允许编辑改状态会让已结案的异常重新长出来,而那四处判定无从知晓。
每次编辑按字段逐项比对生成变更说明,写入一条跟进记录留痕。
变更说明会内嵌修改前后的原文,长文本字段一次编辑就可能超过跟进内容的
varchar(500) 上限,故按 500 截断。
Permission 表达式用 hasMenu('exception_disposal_edit'):
@PreAuth 的值由 SpEL 求值,root object 是 AuthFun,
写成裸字符串会被当作属性访问而在请求时抛错。
|
2026-10-05 00:54:08 +08:00 |
|
weicw-dshsa
|
e3d860668b
|
📝 删除认证分支注释里的叙事性措辞
把「本改造的核心」「这正是要避免的事」「本次改造要保住的东西」这类
写作时的叙事从注释中去掉,只留读者需要的事实(反直觉的约束、坑、兼容性)。
测试的 @DisplayName 同步去掉「改造前/改造期间」等时间状语。
注释与文案调整,无逻辑改动;CertificationGateTest 等 35 个测试通过。
|
2026-10-04 23:55:22 +08:00 |
|
weicw-dshsa
|
ec98954351
|
🔀 合并认证记录功能分支到 master
认证记录不可变快照数据模型、司机端提交与记录查询、管理端审核、
小程序证件 OCR 适配、接单可用性门槛(带开关可回退),含迁移脚本与单元测试。
|
2026-10-04 23:38:39 +08:00 |
|
weicw-dshsa
|
4fa6d4c430
|
🐛 个人认证通过后写回司机档案,并补齐资格证字段
个人认证通过时只切了生效指针与认证状态,证件内容一个字都没落到
blade_transport_driver:认证状态显示「已通过」,司机档案里却仍是
管理端当初录入的旧值(甚至为空),管理端与司机端各看各的。
车辆侧早有 applySnapshotToVehicle 做这件事,司机侧一直没有对应实现。
- 新增 applySnapshotToDriver,审核通过时与指针合并在同一次 UPDATE 写回。
只搬司机申报的证件内容,不碰身份标识(姓名/身份证号,由管理端建档确定)
与内部管理归属(司机类型/岗位/驾驶车辆/所属组织)。
- 快照缺失、解析失败或字段对不上时只跳过写回,不阻断审核:审核是独立于
写回的业务动作,不该因为一份读不懂的快照而失败,否则历史快照对应的
对象再也审不过去。
- PersonCertSubmitRequest 补 qualificationType / qualificationBack /
qualificationValidStart / qualificationLongTerm 四个字段。
- qualificationUrl 改名为 qualificationFront,与司机档案列
qualification_front 及管理端用词统一;改名前的记录存的仍是旧键,
写回时回退读一次旧键,避免已填的封面页在审核通过时被丢掉。
- 补测试:证件内容写回、不覆盖身份字段、驳回不写回、历史快照跳过写回
但仍照常通过审核。
qualificationValidStart 只进快照、不写档案:司机档案表没有对应的开始日期列,
管理端的「从业资格证有效期起」同样是只收不存。此处保持一致,不新增列。
|
2026-10-04 22:11:10 +08:00 |
|
weicw-dshsa
|
04a7846328
|
✨ 车辆认证扩到6张证件图,字段与车辆档案对齐;补齐建车必填列
司机端车辆认证此前只有 3 张图、5 个字段,且语义与车辆管理不一致
(「副页」字段里装的其实是主页反面)。本次把证件内容整体对齐车辆表列:
- 车辆表新增 owner_name(所有人:行驶证登记的单位名称,不是司机)与 vin;
- 提交请求与司机端车辆卡片全量对齐表列,行驶证四张图各自独立、
不再把「主页反面」与「副页正面」挤在同一个字段;
- 业务关系新增为司机自选(自有/管理挂靠/业务合作),不再由后端替用户猜。
顺带修掉三处会直接让功能不可用的缺陷:
1. 司机建车必失败:organization_name、approved_load_kg、business_relation、
energy_type、registration_no 五列 NOT NULL 且无默认值,而建车链路一个都不设置,
严格模式下 INSERT 直接报「doesn't have a default value」。已补齐并加服务端校验
(司机提交链路此前一句都不查,全靠前端)。
2. OCR 自动填充从未生效:后端按契约透传百度原始结果(中文键),
前端读的却是扁平字段名,永远 undefined 且不报错。新增 OcrFieldSupport
做归一化(键名别名容错、数值/日期/「长期」归一化、外廓尺寸拆三段、
有效期区间拆起止),响应的 fields 即前端直接回填的字段。
3. 审核通过不写回车辆档案:状态已通过、内容却还是旧的,自相矛盾。
现把生效快照的证件内容与指针合并成同一次 UPDATE 写回;快照是改造前
旧格式时明确报错,而不是静默写一堆空值。
|
2026-10-03 16:34:47 +08:00 |
|
weicw-dshsa
|
cc997c1c0c
|
✨ 审核列表新增司机姓名与手机号,并修正驾驶车辆绑定校验
审核页的司机姓名与手机号取司机档案的**当前值**,不是提交时的历史值:
手机号从未进入过认证快照(只有司机档案这一个来源),而队列的用途是
「找得到人、联系得上」。司机侧的认证对象就是记录本身;车辆侧记录不含任何
司机信息,取提交该记录的司机。存量订正记录里没有系统账号的那些司机解析不到,
两列为空属正常状态。
筛选必须发生在分页之前,故列表改为自定义 SQL;在 Java 层补字段再过滤会变成
「先分页再过滤」,每页条数与总数都不准。姓名搜索同时匹配档案当前姓名与提交时的
旧名,改名后按新名、旧名都搜得到。
顺带修掉两处既有缺陷:
1. 管理端保存绑定多辆车的司机会误报「驾驶车辆不存在」——小程序把车牌逗号并列
写入 driving_vehicle,管理端却拿整串去车牌表精确查,两边口径不一致。
2. 「一个司机最多 5 辆车」后端从未校验,且 driving_vehicle 原为 varchar(30),
5 个车牌连分隔符要 39 字符,超长写入会被静默截断成半个车牌(还会被当成一辆车)。
列扩到 varchar(100) 并在写入前校验数量与车牌格式。
|
2026-10-03 14:35:59 +08:00 |
|
weicw-dshsa
|
2edbacf838
|
✨ 小程序证件 OCR 薄适配层,含类型映射
小程序按既有契约 POST {imageUrl, type, side?} 到 /driver/auth/ocr,
后端转调已有的百度 OCR 能力(recognizeUrl)。
映射的必要性在于两侧命名对「行驶证」和「驾驶证」的用词正好相反:
驾驶证 —— 小程序传 driver,后端 OCR 用 driving_license
行驶证 —— 小程序传 vehicle,后端 OCR 用 vehicle_license
把入参直接透传下游,调用方不会收到任何错误,只会拿到另一种证件的字段,
问题要到人工核对时才发现。故用显式白名单逐一对应。
采用白名单而非「透传 + 兜底为通用识别」,是因为从业资格证没有对应的百度接口:
静默降级成通用文字识别会让前端以为识别成功,实际拿到一堆通用文本。
该类型明确报错并提示手动填写。
正反面:小程序目前不传 side,按 front 处理(正页是常用场景)。
10 个映射用例覆盖五个小程序类型、后端既有命名、大小写/分隔符变体、
未知类型、空值、不支持类型与 side 归一化。
全模块 58 个测试通过:mvn -o test -pl blade-service/blade-transport -am
|
2026-10-02 16:31:42 +08:00 |
|
weicw-dshsa
|
5747975152
|
✨ 管理端认证审核接口,并弃用旧车辆审核入口
审核作用于**一条认证记录**,不是车辆行或司机行。两条路径的差别是本次改造的关键:
- 通过:记录转已通过 + 写审核人/审核时间,并把该对象的生效快照指针**切换**到它
(切换而非追加,故一个对象至多一条生效快照);
- 驳回:记录转已驳回并留原因,生效快照指针**一个字都不动**。
因此「已认证的车被驳回」不会掉出可用池,只是这次提交没被采纳。
已终态(已通过/已驳回/已作废)的记录拒绝再次审核。理由:若允许,
把指针指着的那条「已通过」改成「已驳回」,生效值就凭空消失了。
审核详情同时返回待审快照与当前生效值两侧,供审核页做字段级 diff
(这正是「看出司机改了什么」的实质要求),并附 certified 标记,
便于前端提示「本次驳回不影响该对象继续使用」。
旧接口 POST /transport-vehicle/audit-certification 置为 @Deprecated 并加告警日志:
它作用于车辆行且原地覆盖,在生效值/待审值分离后语义已不成立。
保留而不删除是为了避免小程序历史版本或其它系统 404;它只写展示缓存,
不再影响可用性判定(可用性只看 effective_cert_record_id)。
修复过程中被测试抓到两个真实问题:
1. 通过路径原先对同一行连发两次 UPDATE(先切指针、再刷展示缓存),
合并为一次,消除了「后写覆盖先写」的可能;
2. 新增 EffectivePointerUpdateSqlTest,直接断言 MyBatis-Plus 生成的 UPDATE SET 片段:
指针列必须被「值非 null 才写」的 if 包住——驳回传 null 因此物理上碰不到它。
把「靠约定」变成「靠语句」,若有人给该字段加 ALWAYS 策略,测试立刻变红。
13 个审核用例 + 全模块 48 个测试通过:mvn -o test -pl blade-service/blade-transport -am
|
2026-10-02 16:26:20 +08:00 |
|
weicw-dshsa
|
63762b9dd0
|
✨ 司机端认证提交与记录查询接口(车辆/个人)
实现司机在小程序上提交认证、查看生效值与认证记录的能力。
提交链路的结构性保证(这是本次改造的核心约束「提交审核不影响车辆正常使用」):
- 提交只产生一条新的待审记录,**绝不修改 effective_cert_record_id**,
因此已认证的车重新提交后依然可用;待审内容在审核通过前只存在于记录表里;
- 同对象至多一条待审:落新记录前先把前一条待审转已作废,
且只动作待审——已通过/已驳回是终态,尤其不碰生效快照指着的那条;
- 新记录状态显式设为待审:框架会把空 status 静默填成 1,而 1 在本表是「已通过」,
不显式设置会让一次提交凭空变成审核通过;
- 新记录清空驳回原因,避免出现「审核中」却带着上一次驳回文案。
越权校验:司机只能提交/查看本人及本人绑定车辆的认证(复用 VehiclePlateSupport),
不可查看者返回业务异常而不是空列表——空列表会被误读成「没有记录」。
新增:
- DriverAuthController(/driver/auth/**,兼容 /blade-transport/driver/auth/**)
- IDriverCertService / DriverCertServiceImpl
- PersonCertSubmitRequest / VehicleCertSubmitRequest
- TransportCertRecordVO.statusText(状态文案统一在 Wrapper 翻译,四端一套说法)
- IDriverAppService.currentDriverEntity()(认证写入需要司机实体)
17 个用例覆盖票 02 的三条验收点与不变式(含「重新提交后生效值仍是旧的」)。
全模块 33 个测试通过:mvn -o test -pl blade-service/blade-transport -am
|
2026-10-02 16:17:06 +08:00 |
|
weicw-dshsa
|
e891100a23
|
✨ 认证记录状态机规则集中为 CertificationRuleSupport 并补测试
把「什么状态能做什么」从持久化里拎出来单独验证。这几条规则是认证改造的地基,
改坏的后果都是线上事故,故先锁住行为再写业务:
- prepareForSubmit:新提交一律待审,并清空驳回原因(否则会继承上一次的驳回文案,
出现「审核中」却带着驳回原因的自相矛盾状态);
- supersedeIfPending:再次提交只作废前一条待审,已通过/已驳回/已作废都是终态不碰
——尤其是不得改动已通过的记录,它可能正被生效快照指针指着;
- isCertified:唯一判据是生效快照指针,故「曾通过即永久保持」;
- isAuditable:只有待审可审,终态再审会把生效快照改坏;
- statusText:四种状态各一个中文说法,与列注释、前端文案保持一致。
TransportCertRecord.REJECT_REASON_MAX_LENGTH 与 reject_reason 列宽(200)对齐。
9 个用例覆盖上述规则与边界(null、未知状态、超长原因)。
可离线执行:mvn -o test -pl blade-service/blade-transport -am
|
2026-10-02 16:10:34 +08:00 |
|
weicw-dshsa
|
36d23cb426
|
📝 认证记录相关文件去掉外部文档引用,注释改为自解释
前一次提交的注释大量引用本仓库之外、同事看不到的东西:
docs/adr/0001、docs/adr/0002、GLOSSARY.md、.scratch/ 下的 spec 与 ticket 编号、
以及 ADR-0002 / D10 / 不变式 I1~I3 这类代号。这些都在另一个 git 仓库
(weicw/tms-erp)里,单独 checkout 本仓库的人根本找不到,只会困惑。
改为把结论直接写在注释里:
- 生效快照指针为何「一经设置永不回退」(原来只写「见 ADR-0002」);
- 为何 redis 状态字段不能用 0 兜底;
- 为何生成列要排除 is_deleted、为何 tenant_id 必须 NOT NULL;
- changeStatus 为何被禁用(原来写「破坏 I3 的留痕」)。
顺带对齐本仓库的既有排版习惯:
- 横幅破折号由 77 个改为 30 个(与 blade_annual_inspection_record.sql 等一致);
- 去掉 SQL 注释里的 markdown 粗体(本目录无其他脚本这么写)。
仅注释变更:SQL 的 diff 已逐行核对,非注释行改动为 0,DDL 一字未动;
迁移重跑仍 exit 0,audit-migrations 通过,mvn clean compile 成功。
|
2026-10-02 15:47:39 +08:00 |
|
weicw-dshsa
|
87f4c3a830
|
✨ 新增认证记录不可变快照数据模型与迁移脚本
按 ADR-0001/0002 建立司机与车辆共用的认证记录表 blade_transport_cert_record
(biz_type 区分、载荷存 JSON、检索字段提升为真实列),并为司机/车辆表补生效快照指针。
不变式结构性保证:
- I1 同对象至多一条待审:生成列 pending_biz_id + 唯一索引,数据库层拦截;
生成列同时排除 is_deleted,避免逻辑删除的待审记录永久占用唯一键。
- I3 快照不可变:snapshot_json 等 5 列标 FieldStrategy.NEVER,永不进入 UPDATE。
- status 承载审核状态(0审核中/1已通过/2已驳回/3已作废),新增时必须显式设置:
框架 resolveEntity 会把 null 的 status 静默填成 1(即「已通过」),
且继承来的 changeStatus 可直接写 status,两条通道均已封堵。
其他:司机表补身份证有效期三列并订正排序规则为 utf8mb4_general_ci
(原先为 0900_ai_ci,与车辆表 JOIN 已发生过 Illegal mix of collations);
生效快照指针加 @JsonProperty(READ_ONLY),防止以 /submit 请求体自行「认证」自己;
同步基线建表脚本与认证审核菜单/权限码。本票不含任何业务接口。
|
2026-10-02 14:40:56 +08:00 |
|
刘泉佳
|
4b3edf977c
|
Merge remote-tracking branch 'refs/remotes/origin/master' into feature/payment-apply-bfi-sync
# Conflicts:
# blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java
|
2026-10-01 13:47:00 +08:00 |
|