|
|
93e072e1e2
|
feat(换货): AUG26-005 换货业务数据迁移状态与失败恢复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 11m42s
- 新增成对迁移 000222:tb_exchange_order 增加非空 migration_status 与
migration_failure_reason,按既有 migrate_data/migration_completed 回填历史,
并加四值 CHECK 约束,不新增索引
- 模型与常量定义四种迁移状态及中文名称,保留既有布尔字段兼容语义
- 物流换货创建恒 not_migrated,发货按请求落 pending/not_migrated,
完成成功写 migrated/not_migrated 并清空失败原因、同步兼容字段
- 直接换货创建即完成,任一步失败整体回滚,不持久化换货单、不产生 failed
- 迁移失败回滚全部业务修改后,在独立短事务内条件更新 failed 与安全失败原因
并写失败审计,RowsAffected 为 0 时跳过状态写入但仍写审计
- failed 物流单重试仅限超级管理员或平台用户,授权以锁内 FOR UPDATE 判定为准,
重试从钱包余额起整表重跑;非 failed 单沿用既有完成门禁
- 列表与详情返回迁移状态与中文名称,仅 failed 返回失败原因;既有三字段保持兼容
- 换货导出在「状态」列后新增中文「迁移状态」列,不导出失败原因
- 同步 order-refund-exchange 主 spec 与验证证据,归档本 Change
- 登记 KNOWN-ISSUE-001:既有标签复制 OnConflict 未声明部分索引谓词(42P10),
旧资产带标签时迁移最后一步失败,待另立变更修复
|
2026-09-14 18:32:26 +08:00 |
|
|
|
c7f9e005af
|
feat(业务用户组): AUG26-003 业务用户组与店铺负责人分组导入
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 1h43m42s
- 迁移 000221:新增 tb_business_user_group、tb_business_user_group_member、tb_shop_business_owner_import_task,成员一账号一行由部分唯一索引保证,店铺所属组按当前负责人实时推导,不回填历史分组。
- 用户组 CRUD、成员改组/清空归属、店铺批量交接(原子失败不部分写入)。
- 店铺负责人 CSV 导入任务:逐行独立事务、逐行明细、任务级与行级失败分离。
- 读侧推导与筛选:未分组、业务线、停用组可筛出并带停用标记。
- 补齐操作审计动作与资源、openapi 清单、发布门禁巡检表清单。
- 归档 add-shop-salesperson-groups 变更并同步 openspec/specs/business-user-group,补齐 AUG26-003 验证证据链。
|
2026-09-14 16:51:44 +08:00 |
|
|
|
18796b16ff
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 1m32s
|
2026-09-14 14:25:03 +08:00 |
|
|
|
67893617fe
|
feat(退款): AUG26-006 补充当前退款套餐已用量与总量
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m33s
补齐 PRD §2.3.1「退款管理补充字段」:退款列表、详情与导出新增
「当前退款套餐已用量」与「当前退款套餐总量」两个纯展示字段。
- 套餐定位口径与退款套餐失效保持一致,按优先级取唯一一条:
冻结的 package_usage_id(且属于该订单)→ 订单主套餐 → 订单任一套餐,
同级按标识升序。不按当前世代或当前生效套餐推断;不按套餐状态过滤,
使退款后套餐转已失效时仍能回看用量。
- 列表与详情用固定两次查询批量解析(按标识、按订单),查询次数不随条数增长;
详情复用同一函数。解析不到套餐或记录已物理删除时返回 0,不阻断读取。
- 导出新增两列并改用同一优先级的 LATERAL 取法,不再依赖只按 r.package_usage_id
的 join——生产库 1296 条退款仅 157 条带该字段,旧取法会让多数行显示零值。
- 不改变退款金额校验、冻结实收、套餐失效、接续、停机与佣金回溯任何规则。
验证:测试库 junhong_cmp_test 实测冻结记录、订单主套餐回退、记录缺失返回 0 三项
解析场景与「4 条退款固定 2 次查询」;并以同批 43 条退款对拍 Go 解析器与导出 SQL,
口径不一致 0 条;导出 43 行列数与表头一致。无迁移、无接口路径变化。
|
2026-09-14 12:11:55 +08:00 |
|
|
|
09abee9778
|
docs(归档): 归档退款方式与原路退款变更并同步主规格
- 将 add-refund-methods-and-original-route-refunds 归档为
2026-09-14-add-refund-methods-and-original-route-refunds。
- 合并两份 delta 到主规格:
* order-refund-exchange:改写「订单、退款与换货状态门禁」,新增「退款实收金额与方式矩阵」
「企业微信唯一终审与审批尝试重提」「原路退款渠道能力与执行」「退款权益与订单状态时点」
「退款终态事实与失败分类」五项行为要求。
* merchant-payment-routing:改写「商户与微信授权配置管理」与「新支付商户快照与历史兼容」
(删除「不得新增渠道退款能力」与「不新增富友退款」,改由退款能力按商户凭证执行;
微信 v2 客户端证书改为可选凭证键)。
- 同步上下文健康检查证据链与入口矩阵:为新要求登记证据行,并把退款创建、重提、
企微审批回调、退款详情与 refund:channel:recovery 任务与对应要求双向关联。
|
2026-09-14 12:00:35 +08:00 |
|
|
|
48c85a4916
|
docs(归档): 归档已用完套餐展示与支付购包即时复机两个变更
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m35s
- fix-depleted-package-display → archive/2026-09-14-fix-depleted-package-display;
补记验证:`GetCurrentMainPackage`(package_usage_store.go:63-66)按 status IN (1,2) 读取主套餐,
资产信息 `fillPackageInfo`(service/asset/service.go:348-349)复用该读取,
已用完主套餐返回名称、使用记录、时间与流量指标,待生效/已过期/已失效仍不作为当前套餐;
实现提交 ff25586,4 项任务全部完成。
- fix-immediate-package-payment-resume → archive/2026-09-14-fix-immediate-package-payment-resume;
补记八月迭代同步验证:定点同步提交 b38b2b3 已是 Iteration/8-11 的 HEAD 祖先,
在途支付商户装配保留(98c145f);services.go:277 `orderService.SetResumeCallback(stopResumeService)`
在位,`go build ./cmd/api ./cmd/worker` 通过;2.1/2.2 据此勾选。
- 主 Spec 同步:personal-customer 新增「资产信息展示当前可用或已用完主套餐」;
package-lifecycle 修改为支付成功后已生效主套餐触发一次即时自动复机检查。
openspec validate --all 为 38 passed / 0 failed;doctor healthy。
|
2026-09-14 09:49:03 +08:00 |
|
|
|
575d056f54
|
feat(代理分销提现): 落地扫码注册、提现资料资格与企微终审提现
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
AUG26-008。
- 迁移 000214–000217:tb_shop 全局唯一且不可修改的随机分销码(含存量回填)、
tb_agent_distribution_registration 待审批注册记录、tb_withdrawal_qualification 资料版本、
tb_commission_withdrawal_request_attempt 审批尝试记录,以及提现申请的 latest_*/异常标记列;
不修改既有迁移,down 在存在本 Change 业务事实或新类型场景行时拒绝破坏性回滚。
- 公开接口 POST /api/c/v1/agent-distribution-registrations:无认证,复用既有短信验证码校验、
消费与限流;无效分销码、停用上级、验证码无效或已消费统一返回「分销码不可用」且不落库,
审批通过前不创建店铺、账号或钱包。
- 审批通过才在同一事务内建启用店铺、代理主账号、钱包、上级层级与业务员快照,驳回不建实体,
重复回调不重复建实体,提交后清理上级下级缓存。
- 提现资料资格按不可变版本保存,替换合同或法人身份证即新增版本并同事务失效旧有效版本;
超管作废原因必填;代理停用与店铺删除联动失效。
- 提现每次提交或重提新增不可变审批尝试记录并冻结金额;企业微信通过仅一次从冻结扣减、
保持状态 2 并写 paid_at(不使用状态 4),驳回/cancelled/deleted 仅一次释放,
通过后撤销不回滚、不重新冻结、只写正交异常标记;加锁顺序统一为申请→尝试→钱包。
- 本地人工终审对已关联审批实例的申请返回状态冲突,approval_instance_id 为空的存量申请保持既有行为,
不新增任何配置开关。
- 补齐审批业务类型注册点全集:业务类型与场景字段常量、场景 DTO 两处枚举与中文描述、
场景字段白名单/合法类型/中文名、数据库 CHECK、Worker 决策消费者与装配、审批审计资源映射,
以及三个新审计资源与 13 个审计动作;失败/拒绝审计改为必达。
- 新增后台路由与 OpenAPI:资格提交/查询/作废、提现申请/重提/详情、店铺详情返回只读分销码。
- 归档本 Change:主 Spec 新增 agent-distribution-withdrawal 能力(5 个 Requirement)。
验证(junhong_cmp_test + Redis DB 6,显式 DB_*,未重置整库):
- 迁移 up → version 217 且 dirty=false → down 3 → up 回 217,fixture 复核残留为 0。
- 受控状态机脚手架 227 项通过 / 0 项失败,覆盖 18 组场景(幂等与乱序回调、资金冻结/释放/重提、
退款回扣 × 在途提现并发、负向场景拒绝审计与 14 个动作码审计真实落库)。
- gofmt 空、go build/go vet 通过、gendocs 与工作区逐字节一致、context-health 通过、
openspec validate --strict 通过、doctor healthy;自动化测试按项目决策为 N/A。
运行期前置(未完成,非代码交付物):由超管经 PUT /api/admin/wecom/scenes/{business_type} 为
agent_distribution_approval、withdrawal_qualification_approval、commission_withdrawal_approval
配置启用场景与模板控件映射;未配置时相应提交失败关闭。
|
2026-09-14 09:45:13 +08:00 |
|
|
|
315a7de3e4
|
docs(归档): 归档代理自充支付方式与员工代收款路由前缀两个变更
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 53s
- add-agent-self-recharge-payment-methods 归档为 2026-09-11-add-agent-self-recharge-payment-methods,delta 应用后主规格 agent-funds-commission 完成 1 条 Requirement 改名并新增 4 条 Requirement
- 在可达操作索引补充代理自充支付方式配置与付款凭证识别共 3 个端点
- 同步 requirement-evidence.json 与 entry-capability-requirement-matrix.json 证据链
- fix-employee-collection-route-prefix 归档为 2026-09-11-fix-employee-collection-route-prefix 并勾选任务 2.5
门禁:context-health 通过、openspec validate --all 40 passed / 0 failed、doctor healthy
|
2026-09-11 15:50:15 +08:00 |
|
|
|
9c3e3fe32b
|
归档员工代收款账单闭环变更并同步主规格
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 1m36s
- 新增主规格 openspec/specs/employee-collection-bill/spec.md(5 条 Requirement、22 个 Scenario)
- 变更目录归档至 openspec/changes/archive/2026-09-11-add-employee-collection-bills
|
2026-09-11 09:45:12 +08:00 |
|
|
|
dc4e0d4103
|
归档支付商户池变更并同步主规格
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 1m25s
|
2026-09-10 12:03:28 +08:00 |
|
|
|
a9e2302f7c
|
1
|
2026-09-10 10:53:07 +08:00 |
|
|
|
696120ab38
|
feat: 资产套餐历史增加主子层级查询
|
2026-09-07 17:17:15 +08:00 |
|
|
|
c7c2b17d78
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 54s
|
2026-09-07 11:34:23 +08:00 |
|
|
|
5424751993
|
修复停复机忽略免实名策略并归档变更
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-09-07 10:06:17 +08:00 |
|
|
|
370fd3e67f
|
update
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
|
2026-09-03 09:28:28 +08:00 |
|
|
|
395e5fb47c
|
修复套餐接续停机竞态与轮询兜底
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 11m13s
|
2026-08-29 16:27:48 +08:00 |
|
|
|
62f3d25e81
|
修复批量订购
|
2026-08-26 14:54:26 +08:00 |
|
|
|
5797fd0e94
|
修复企微兜底机制
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m40s
|
2026-08-20 18:06:45 +08:00 |
|
|
|
22b95db2f9
|
每日清理
|
2026-08-20 12:03:17 +08:00 |
|
|
|
656a921ff0
|
富友支付支持
|
2026-08-18 17:13:20 +08:00 |
|
|
|
46c8e819df
|
修改相关证据
|
2026-08-18 16:30:16 +08:00 |
|
|
|
c8052df8eb
|
补充退款列表应当让本店铺的人看见
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m30s
|
2026-08-18 11:44:30 +08:00 |
|
|
|
b5285877bf
|
归档
|
2026-08-13 17:45:49 +08:00 |
|
|
|
6883b5b42b
|
归档
|
2026-08-13 17:26:36 +08:00 |
|
|
|
fcfa347005
|
修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m38s
|
2026-08-12 10:42:35 +08:00 |
|
|
|
619d0c5efe
|
提案
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 51s
|
2026-08-11 15:39:51 +08:00 |
|
|
|
a795ca3650
|
修复通知
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m25s
|
2026-08-11 11:18:11 +08:00 |
|
|
|
f6b11eb9ac
|
修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m23s
|
2026-08-10 17:37:55 +08:00 |
|
|
|
77ce9db722
|
并发监控修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m20s
|
2026-08-10 16:58:33 +08:00 |
|
|
|
f15a64395f
|
修复反馈
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m30s
|
2026-08-10 16:30:38 +08:00 |
|
|
|
79e2d9ff92
|
重置项目上下文与规范文档
|
2026-08-07 16:18:07 +08:00 |
|
|
|
072ec1db7e
|
修复企微的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m15s
|
2026-07-27 17:04:32 +08:00 |
|
|
|
95fc0b0a1b
|
修复一些问题,主要是生效套餐
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m16s
|
2026-05-12 10:32:38 +08:00 |
|
|
|
3a2e3f2571
|
浅浅升级一下
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m8s
|
2026-05-06 14:41:14 +08:00 |
|
|
|
b4a9e0c1c9
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m52s
|
2026-04-30 15:59:40 +08:00 |
|
|
|
70fb7dadef
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m53s
|
2026-04-30 11:58:33 +08:00 |
|
|
|
9238eeb56e
|
更新提案
|
2026-04-30 11:18:13 +08:00 |
|
|
|
6b1fbf4a92
|
修复金额的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m30s
|
2026-04-23 10:09:23 +08:00 |
|
|
|
2b3a9cb33f
|
feat: 新增套餐使用记录实付金额快照字段 paid_amount
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m19s
- 新增迁移 000129:tb_package_usage 添加 paid_amount BIGINT 字段,存量数据通过 JOIN tb_order 回填
- PackageUsage Model 新增 PaidAmount *int64 字段
- 4 个写入点(order service 主套餐/加油包、auto_purchase 主套餐/加油包)赋值 order.ActualPaidAmount
- AssetPackageResponse DTO 新增 paid_amount 字段
- GetCurrentPackage / GetPackages 填充 paid_amount,接口直接返回购买价格无需 JOIN 订单表
|
2026-04-18 10:19:21 +08:00 |
|
|
|
e52671eaed
|
归档提案
|
2026-04-18 09:35:27 +08:00 |
|
|
|
4aab0bcbf2
|
提案以及归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m39s
|
2026-04-18 09:10:29 +08:00 |
|
|
|
5d9be1d7e4
|
fix: 修正轮询配置多匹配逻辑,支持同卡匹配多个配置并按 priority 合并 interval
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m27s
核心变更:
- MatchConfig 改为 MatchConfigs,返回所有匹配配置
- MergedTaskIntervals 按 task type 合并各配置,选取最高优先级(非 nil 且最小 priority 值)
- hasAnyEnabledInterval 过滤所有 interval 均为 NULL 的配置
- calcInitialDelay 重构为纯函数,接收 interval 参数
- 移除 getEnabledTaskTypes 和 getIntervalByTaskType(被 MergedTaskIntervals 替代)
- scheduler.go 新增心跳 key + 顶层 panic recovery + Init 完成守卫
- initializer.go 批量失败日志升级为 Error,逐条检查 Pipeline 命令错误
- 数据迁移:禁用 id=29 的轮询配置(所有 interval 均为 NULL)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-16 14:27:47 +08:00 |
|
|
|
5065d925ad
|
fix: 修正套餐激活和时间字段nullable问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m33s
核心变更:
1. Model层时间字段改为*time.Time并设为nullable
- PackageUsage.ActivatedAt/ExpiresAt
- PersonalCustomerDevice/ICCID/Phone.LastUsedAt/VerifiedAt
2. 数据库迁移:
- activated_at/expires_at列移除NOT NULL约束
- 清洗零值记录(status=0且activated_at<'2000-01-01')
3. 新增ActivateSpecificPackage方法:精准激活指定套餐,
修复HandlePackageQueueActivation从"查找过期包"改为直接激活payload指定套餐
4. 新增孤儿套餐恢复扫描:Worker启动或每次套餐检查时,
自动发现并恢复无status=1主套餐的孤儿载体
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-16 11:14:39 +08:00 |
|
|
|
8bf1282378
|
归档: add-polling-card-status-with-verbose-log,同步主规范
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m24s
change 目录归档至 openspec/changes/archive/2026-04-15-add-polling-card-status-with-verbose-log/
新建主规范 openspec/specs/polling-card-status-task/spec.md(6个需求)
追加 verbose log 需求至 openspec/specs/polling-task-handlers/spec.md(4个新需求)
protect handler 规范更新字段名:network_status → network_status_at_check + action_taken
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-15 12:23:05 +08:00 |
|
|
|
4a1e44f9e1
|
提案
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-04-15 11:17:23 +08:00 |
|
|
|
d9de704d73
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 49s
|
2026-04-14 12:14:29 +08:00 |
|
|
|
7308afe801
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m18s
|
2026-04-13 15:03:02 +08:00 |
|
|
|
7e613a0d2b
|
归档: fix-status-convention-comments
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-11 12:21:02 +08:00 |
|
|
|
677d6239ce
|
fix: 统一佣金状态常量并修复佣金明细关联查询
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m33s
- 删除 model/commission.go 中与 constants 包冲突的旧常量(值=1/2)
- 所有服务层改用 constants.CommissionStatusReleased(值=3)写入和查询
- 数据库迁移:status 1→3(已发放),2→4(已失效)
- 修复佣金明细列表接口,通过 JOIN 关联返回 order_no、iccid、virtual_no、order_created_at
- 新增 seller_shop_id / seller_shop_name 销售来源字段
- 统计接口过滤条件从精确匹配改为排除无效(NOT IN 4,99)
- 更新 OpenAPI 文档及 commission-record-query spec
|
2026-04-11 10:42:37 +08:00 |
|
|
|
5496cb58aa
|
feat: 订单创建时快照买家手机号/昵称和套餐类型
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
新增字段:
- tb_order: buyer_phone, buyer_nickname(个人客户下单时快照)
- tb_order_item: package_type(套餐类型快照)
后台订单列表支持按 buyer_phone 精确过滤查询。
OpenSpec: order-buyer-snapshot
|
2026-04-10 17:12:56 +08:00 |
|