|
|
1aa4eacee2
|
feat(退款分佣): 佣金回溯明细替换全额失效并补齐读侧与导出
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m26s
用 PRD 2.14 语义整体替换退款佣金「整单全额失效」实现:原佣金保持已发放不变,
回溯事实落在新表 tb_commission_clawback_record 的负数、不可提现明细上。
- 新增成对迁移 000220 建 tb_commission_clawback_record,唯一约束
(refund_id, original_commission_id) 为权威幂等键,附店铺+时间/原佣金/订单索引。
- 回溯用例(internal/service/refund/clawback.go):准入仅由退款申请状态、审批异常
标记与退款方式决定;金额按分整数计算,分母取冻结实收(缺失回落审批尝试)、
分子原路取渠道成功金额,乘法用 math/big 中间量,舍入差自末条起向前补差;
终态判据要求订单佣金已离开待计算且不存在 status IN (1,2,99) 的记录。
- 三层幂等:唯一约束兜底、佣金行行锁 + 钱包乐观锁、commission_deducted 仅作投影
并带 WHERE commission_deducted = false 条件置位;闭合三结果为已回溯、无需回溯、
审批异常转人工。
- 事务内顺序固定:锁提现申请行 → 锁尝试行 → 解冻冻结 → 置驳回 → 插回溯明细 →
扣 balance(允许为负)→ 写负数流水 → 审计;删除旧全额失效写入与其两个审计调用点,
refund.invalidate_commission 仅保留常量与注册供历史审计读取。
- 读侧:佣金明细列表 status 筛选透传,两表 UNION ALL 合并分页并以 source ASC 作
末位次序键;新增佣金明细详情接口并同步路由与 OpenAPI 装配。
- 导出:新增 commission_record 场景(白名单、exporter 注册、DTO oneof、DataSource
与列定义),粒度为佣金记录,原佣金与回溯各一行,金额保持分且可为负。
- 新增退款佣金回溯周期补偿任务(@every 1m / MaxRetry(3) / Timeout(10m) /
Unique(10m),独立队列),保留启动时补偿扫描,判据与既有实现一致。
Refs: AUG26-012
|
2026-09-14 13:40:34 +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 |
|
|
|
ff25586dc9
|
修复已用完套餐展示
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m43s
|
2026-09-08 17:25:34 +08:00 |
|
|
|
c8052df8eb
|
补充退款列表应当让本店铺的人看见
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m30s
|
2026-08-18 11:44:30 +08:00 |
|
|
|
79e2d9ff92
|
重置项目上下文与规范文档
|
2026-08-07 16:18:07 +08:00 |
|
|
|
c64f3d8b80
|
全局审计完成
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m31s
|
2026-08-07 11:02:52 +08:00 |
|
|
|
5e552d99bc
|
收口审计治理与套餐任务进展
Constraint: 在线热修前必须保存当前迭代分支全部有效代码进展
Confidence: medium
Scope-risk: broad
Directive: 后续修改需保持审计事件与业务事务边界一致
Tested: git diff --cached --check
Not-tested: 未运行全量测试,提交用于切换分支前保存既有工作
|
2026-08-05 14:30:54 +08:00 |
|
|
|
b3a215b19e
|
越权问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m14s
|
2026-07-28 18:44:39 +08:00 |
|
|
|
dc080436bf
|
越权
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m6s
|
2026-07-28 16:57:27 +08:00 |
|
|
|
73f5125d3d
|
七月迭代短暂完结,还有很多后端的关键东西没有弄,这是一版赶时间做的东西
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s
|
2026-07-25 17:06:58 +08:00 |
|
|
|
a18ed8bc8d
|
暂存一下,防止丢失
|
2026-07-24 16:07:18 +08:00 |
|
|
|
f7e0f07692
|
修复 code review 问题:DTO 内部字段、错误消息、重复代码与测试覆盖
- 删除 ExpiryBaseOverrideSet 字段的 description 标签(json:"-" 内部字段不进文档)
- ValidateExpiryBaseOverride 两处 CodeInvalidParam 补充中文错误消息
- 提取 initPackageExpiryBaseFields 消除 toResponse/toResponseWithAllocation 中的重复初始化
- 删除 order/service.go 中"行业卡永远直接激活"过时注释
- 补充 T01 系列授权 HTTP 集成测试(Create + ManagePackages 两个入口)
- 补充 T03 C 端购买和平台代购(无分配)快照集成测试
- 补充 T04 from_purchase 默认值、卡未实名仍立即激活的自动购包测试
- 新增 testutil.NewRedisClient 供激活接续测试使用
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-07-23 10:56:46 +09:00 |
|
|
|
9818537239
|
实现套餐生效条件覆盖与购买快照
|
2026-07-22 21:07:08 +09:00 |
|
|
|
55bdc3a8d0
|
实现换货资产快照与新旧独立搜索
|
2026-07-22 16:37:08 +09:00 |
|
|
|
2fd11daaf0
|
实现店铺联系电话精确查询与索引
|
2026-07-22 15:06:06 +09:00 |
|
|
|
b3fb8c7a82
|
资产详情新增两个字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-07-02 16:49:50 +09:00 |
|
|
|
8f738ffbe8
|
导入的问题修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m51s
|
2026-07-02 13:04:36 +09:00 |
|
|
|
f4b6a55b27
|
驳回
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 7m17s
|
2026-06-26 12:12:15 +09:00 |
|
|
|
8cf921f11c
|
驳回接口
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
|
2026-06-25 17:10:24 +09:00 |
|
|
|
5c2ef97c24
|
相关问题优化以及新功能开发
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m57s
迁移 155- 157
|
2026-06-22 17:21:13 +09:00 |
|
|
|
ba435dd6a6
|
关于绑定的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-06-22 12:08:41 +09:00 |
|
|
|
3b7b856e48
|
企业授权增强与资产列表扩展
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m9s
- 企业卡授权唯一约束:新增 DB 迁移(000154),卡级部分唯一索引防止同一张卡被多个企业同时持有,Service 层新增跨企业冲突检测
- 单卡列表新增 network_status 过滤参数
- 单卡/设备列表新增 asset_status、asset_status_name、generation 响应字段
- 单卡/设备列表新增企业维度过滤(authorized_enterprise_id、is_authorized_to_enterprise)及响应中企业授权信息(批量加载,无 N+1)
- 主钱包流水/退款列表新增 asset_identifier 精确过滤参数
- 企业卡授权/收回接口升级为三模式(list/range/filter),企业设备授权/收回升级为双模式(list/filter)
- 升级 sonic v1.14.2 → v1.15.2 以兼容 Go 1.26
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-17 16:23:03 +09:00 |
|
Break
|
7ec84fbc0f
|
导出系统
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m50s
|
2026-06-15 15:28:29 +08:00 |
|
Break
|
016e7bee79
|
修改过期时间,以及修改套餐已用量
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-06-12 10:41:24 +08:00 |
|
Break
|
cce27975a1
|
设备关键词查询
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m7s
|
2026-06-04 10:34:58 +08:00 |
|
Break
|
d86ac46761
|
关键词查询
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-06-04 10:34:14 +08:00 |
|
Break
|
5f57429fb0
|
直接换货流程
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m28s
|
2026-06-03 16:55:32 +08:00 |
|
Break
|
cf689beceb
|
修复问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m9s
|
2026-05-26 18:06:51 +08:00 |
|
|
|
53e95751b1
|
task: 完成支付宝共享基础(迁移/WechatConfig/PaymentStore/pkg/alipay)
|
2026-05-22 14:07:20 +08:00 |
|
|
|
2768deb0b6
|
设备新增搜索条件
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m8s
|
2026-05-20 10:27:30 +08:00 |
|
|
|
9f5c5c3680
|
feat(卡列表): 新增 has_active_package 查询条件筛选生效中套餐
- DTO ListStandaloneIotCardRequest 增加 HasActivePackage *bool 字段,
query/json 名 has_active_package,description 中文
- Service ListStandalone 将 HasActivePackage 映射为 filters["has_active_package"]
- Store applyStandaloneFilters 新增 EXISTS/NOT EXISTS 子查询,
使用 constants.PackageUsageStatusActive,限制 master_usage_id IS NULL
且 deleted_at IS NULL,所有查询路径(默认/两阶段/并行)均复用此函数
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-19 12:15:06 +08:00 |
|
|
|
5e7e68cce7
|
feat(设备列表): 新增 has_active_package 查询条件
- DTO ListDeviceRequest 增加 HasActivePackage *bool 字段(query/json: has_active_package)
- Service List 方法将 HasActivePackage 透传至 filters["has_active_package"]
- Store applyDeviceFilters 新增 applyHasActivePackageFilter:
true → EXISTS 子查询(生效中主套餐)
false → NOT EXISTS 子查询
均限制 master_usage_id IS NULL、deleted_at IS NULL,状态使用 constants.PackageUsageStatusActive
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-19 12:15:06 +08:00 |
|
|
|
ed071918ed
|
钱包订单退款时应当正确退回,充值时允许最低充值1分
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m7s
|
2026-05-18 09:51:59 +08:00 |
|
|
|
a5388446d3
|
新增字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m7s
|
2026-05-12 14:10:48 +08:00 |
|
|
|
8f3a68a673
|
新增上游的停机原因
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m5s
|
2026-05-12 11:13:04 +08:00 |
|
|
|
1350a9ed79
|
批量
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m53s
|
2026-05-11 14:54:23 +08:00 |
|
|
|
98ff88d5c3
|
开放接口,修复上游同步不对的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
|
2026-05-11 11:20:48 +08:00 |
|
|
|
a9eaf1d697
|
修复缓存没有更新的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m13s
|
2026-05-11 10:38:52 +08:00 |
|
|
|
ebaf112c80
|
新增排查自己的逻辑
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m53s
|
2026-05-09 15:22:29 +08:00 |
|
|
|
09cf0be86e
|
联级,多选
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m52s
|
2026-05-09 15:06:27 +08:00 |
|
|
|
6a6672d0e4
|
允许代理看
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m11s
|
2026-05-09 11:03:32 +08:00 |
|
|
|
348cb4e670
|
修复绑定的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
|
2026-05-07 18:18:11 +08:00 |
|
|
|
66e12e9629
|
订单相关以及佣金相关修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m57s
|
2026-04-30 09:52:39 +08:00 |
|
|
|
37b4483183
|
赠送套餐逻辑
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
|
2026-04-28 17:40:06 +08:00 |
|
|
|
fe4c545308
|
修正数据
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
|
2026-04-27 18:10:08 +08:00 |
|
|
|
cb75b5668b
|
操作日志
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m10s
|
2026-04-27 12:16:38 +08:00 |
|
|
|
95104100c9
|
修复企业授权报错的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m57s
|
2026-04-27 10:30:10 +08:00 |
|
|
|
60debb7505
|
统一导出任务
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m4s
|
2026-04-27 09:47:03 +08:00 |
|
|
|
531de3c760
|
已退回后的还是可以继续提交
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m49s
|
2026-04-27 09:29:54 +08:00 |
|
|
|
a887f91686
|
修复卡轮训的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m14s
|
2026-04-26 12:41:16 +08:00 |
|