|
|
d597a25c69
|
机卡分离复机接口
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m1s
|
2026-05-14 09:50:48 +08:00 |
|
|
|
a5388446d3
|
新增字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m7s
|
2026-05-12 14:10:48 +08:00 |
|
|
|
b7369a9c71
|
修复并发,暂时的,不够完整,后续还是需要重新设计,这个太乱了,傻逼AI
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m22s
|
2026-05-11 17:19:40 +08:00 |
|
|
|
93200a9074
|
开放接口完成
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m57s
|
2026-05-11 14:26:10 +08:00 |
|
|
|
b6d21b81e3
|
文档生成
|
2026-05-11 11:59:36 +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 |
|
|
|
a93acc0784
|
有效天数问题,充值单回调问题
|
2026-05-08 11:46:34 +08:00 |
|
|
|
73a3a04204
|
跨域
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m59s
|
2026-05-07 16:28:23 +08:00 |
|
|
|
3a2e3f2571
|
浅浅升级一下
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m8s
|
2026-05-06 14:41:14 +08:00 |
|
|
|
21b73a750d
|
c端当前套餐开始时间过期时间,以及excel导入字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
|
2026-05-06 09:57:58 +08:00 |
|
|
|
8a3c45c577
|
设备导入卡槽不对的问题
|
2026-04-30 11:56:09 +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 |
|
|
|
bb33232b1b
|
日志记录不全
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m48s
|
2026-04-27 15:32:17 +08:00 |
|
|
|
cb75b5668b
|
操作日志
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m10s
|
2026-04-27 12:16:38 +08:00 |
|
|
|
60debb7505
|
统一导出任务
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m4s
|
2026-04-27 09:47:03 +08:00 |
|
|
|
bc344f892c
|
新增日志输出
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m33s
|
2026-04-24 11:25:13 +08:00 |
|
|
|
15cd26c81a
|
强制手机绑定
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m1s
|
2026-04-24 10:26:32 +08:00 |
|
|
|
a207c51bfb
|
修复设备套餐流量不同步的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m32s
|
2026-04-22 18:04:53 +08:00 |
|
|
|
e049080f6c
|
分裂iccid长度
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m47s
|
2026-04-21 10:55:12 +08:00 |
|
|
|
868f5a8ef3
|
fix: 修复轮询停机连坐、实名逆转防抖及carrier_stopped原因写入缺失三个逻辑缺陷
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m37s
|
2026-04-20 11:24:56 +08:00 |
|
|
|
28ac58ea18
|
feat: PollingRealnameHandler 新增设备级套餐实名激活联动
- 结构体新增 deviceSimBindingStore 字段,构造函数参数列表末尾追加
- 新增 triggerDeviceRealnameActivation:卡首次实名(0→1)时查询所属设备,
若有绑定则提交 carrier_type=device 的 TaskTypePackageFirstActivation 任务
- 独立卡(无绑定设备)静默跳过,任务提交失败仅记录 Warn 日志不阻断流程
- registerPollingHandlers 传入 h.workerResult.Stores.DeviceSimBinding
- 修复「购买后某张卡实名」场景下设备级套餐永不激活的缺陷
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-18 09:30:50 +08:00 |
|
|
|
6caf0f6141
|
feat: 新增全局操作密码功能,将线下充值验证从登录密码改为统一操作密码
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
- 新增 RedisSystemOperationPasswordKey 常量函数(pkg/constants/redis.go)
- 新增 operation_password Service(Set/IsSet/Verify,bcrypt 哈希存 Redis)
- 新增 SuperAdminHandler 及两个接口:
- POST /api/admin/super-admin/operation-password(设置/重置,仅超级管理员)
- GET /api/admin/super-admin/operation-password/status(查询是否已设置)
- AgentRecharge.OfflinePay 操作密码验证从"查当前用户登录密码"改为"全局操作密码 Verify"
- Bootstrap/路由/文档生成器同步注册
|
2026-04-18 09:06:33 +08:00 |
|
|
|
9d8e3926ff
|
docs: 更新 OpenAPI 文档,新增 realname-mode 更新接口文档
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-17 17:33:07 +08:00 |
|
|
|
908c5fa1de
|
feat: 新增 RealnamePolicy 常量枚举及 CodeRealnameNotAvailable 错误码
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-17 17:25:02 +08:00 |
|
|
|
4c284c422c
|
fix: 移除 IoT 卡导入 ICCID 长度限制
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m29s
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-17 12:04:44 +08:00 |
|
|
|
fa554c3930
|
feat: 注册 C 端微信 JSSDK 配置接口路由及文档生成
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m35s
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-16 18:38:43 +08:00 |
|
|
|
ed1facc1b8
|
feat: 公众号服务新增 GetJSSDKConfig 方法及 JSSDK 配置 DTO
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-16 18:37:59 +08:00 |
|
|
|
aef20d2ab1
|
fix: 修复禁用所有轮询配置重启后再启用无法工作的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m23s
- 新增 RedisPollingConfigChangedChannel 常量,用于跨进程配置变更通知
- ConfigService 注入 Redis,Create/Delete/UpdateStatus 后发布 Pub/Sub 事件
- PollingConfigManager 新增 WatchChanges() 方法,收到通知立即刷新内存缓存
- PollingInitializer 新增 Restart() 方法,支持初始化完成后安全重启(CAS 防并发)
- Worker 订阅配置变更事件,configs 从空变为非空时触发 Initializer.Restart()
根因:启动时所有配置禁用导致分片队列为空,Initializer 是一次性的,
之后启用配置只更新 DB 但不重建队列,调度器无卡可处理
|
2026-04-16 17:32:43 +08:00 |
|
|
|
520b126ecf
|
feat: JWT Claims 新增资产字段,登录 token 携带当前资产上下文
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-16 15:55:41 +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 |
|
|
|
e40ad462e1
|
feat: 注册卡状态轮询 Worker Handler
registerPollingHandlers 创建并注册 PollingCardStatusHandler
日志更新为 realname/carddata/package/protect/card_status
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-15 12:22:49 +08:00 |
|
|
|
9992e82a3c
|
feat: 新增卡状态轮询任务类型常量及 verbose_log 配置
constants.go: 新增 TaskTypePollingCardStatus = "polling:card_status"
config.go: 新增 PollingConfig struct 含 VerboseLog bool
config.yaml: polling.verbose_log 默认 false
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-15 12:21:43 +08:00 |
|
|
|
b972a776d9
|
重构充值订单模块:用 tb_recharge_order + tb_payment 替换 tb_asset_recharge_record
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m32s
- 新增 RechargeOrder 和 Payment 模型及对应 Store
- 新增 ClientRechargeOrderHandler 提供充值订单列表/详情接口
- 修改 client_wallet.go 使用新表读写充值数据
- 修改 callback/payment.go 将 CRCH 订单路由到 rechargeOrderService
- 修改 client_order/service.go 的强充流程使用新表
- 修改 auto_purchase.go 从 tb_recharge_order 读取 linked_package_ids
- 修改 order/service.go 的 WalletPay 使用 tb_payment 记录
- 修改 wechat_config_store.go 从 tb_recharge_order 统计待支付充值数
- 移除 AssetRechargeStore 和 AssetRechargeRecord 的注册引用
- 修复文档生成器缺失 ClientRechargeOrder handler
- 状态枚举改为 0-based: Pending=0, Paid=1, Closed=2, Refunded=3
|
2026-04-15 11:00:32 +08:00 |
|
|
|
7cdb66cbe4
|
refactor: 统一状态名称映射为公共函数,清理废弃换卡/商户类型常量和模型
|
2026-04-14 11:51:58 +08:00 |
|
|
|
548ec0cd6b
|
feat: 补全 _name 字段公共映射函数,修正实名认证注释
|
2026-04-14 11:44:23 +08:00 |
|
|
|
c35542f911
|
feat: 补全客户端订单和资产 DTO _name 字段,修复代码格式
|
2026-04-14 11:19:57 +08:00 |
|
|
|
42c5ec912f
|
feat: 技术债务清理(支付配置动态化、API文档补全、轮询常量提取、废弃代码清理)
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m13s
|
2026-04-14 11:11:15 +08:00 |
|
|
|
640ea8ec99
|
feat: 更新依赖注入,传入 ManualTriggerService
|
2026-04-13 14:52:50 +08:00 |
|
|
|
5196472d7e
|
fix: 修复手动触发去重TTL和日限制次数,优化权限检查和错误日志
|
2026-04-13 14:50:14 +08:00 |
|
|
|
814a2956b3
|
feat: 新增轮询自动触发配置(EnableAutoTrigger、AutoTriggerSystemUserID)
|
2026-04-13 14:48:12 +08:00 |
|
|
|
4879d9bf07
|
fix: 修复公众号登录初始化失败(PowerWeChat 日志写入权限)
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m29s
NewOfficialAccountAppFromConfig 未设置 Log.Stdout=true,PowerWeChat SDK
默认尝试在工作目录创建 wechat/info.log 文件,容器环境无写权限导致
NewOfficialAccount 返回 permission denied,触发 1181 配置不可用错误。
支付配置已有此修复(NewPaymentAppFromConfig),公众号配置漏掉了。
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-13 14:39:54 +08:00 |
|
|
|
510a5bfb21
|
chore: 删除未使用的僵尸状态常量 DevCapabilityStatusEnabled/Disabled
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-11 12:20:56 +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 |
|
|
|
23e12d8a73
|
fix: 卡导入 Excel 解析移除虚拟号强制校验
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m19s
虚拟号(virtual_no)为可选字段,解析时不应强制要求填写。
与 processBatch 中的处理逻辑保持一致。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-10 11:58:39 +08:00 |
|
|
|
cd807e58e3
|
feat: Excel 导入按列位置读取,IoT 卡导入支持卡业务类型
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m28s
- 重写 parseCardRows:移除列名识别,固定跳过第1行表头,按 col0=ICCID、
col1=MSISDN、col2=VirtualNo 取值,VirtualNo 升级为必填字段
- 重写 ParseDeviceExcel:移除 buildDeviceColumnIndex,IMEI 调整至第5列
新增 MaxSimSlots 范围校验 [1,4],整行为空时不计入 total
- 删除 findCardColumns 和 buildDeviceColumnIndex 两个冗余函数
- ImportIotCardRequest 新增 card_category 字段(normal/industry,默认 normal)
- IotCardImportTask model 新增 card_category 字段
- 迁移 000111:tb_iot_card_import_task 新增 card_category 列
- CreateImportTask 将 req.CardCategory 写入任务,空串兜底 normal
- processBatch 改用 task.CardCategory 替代写死的 CardCategoryNormal
- ImportTaskResponse 新增 card_category 字段返回
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-09 17:16:31 +08:00 |
|
|
|
0627ffec42
|
feat: 代理商资金可见性重构(agent-fund-visibility)
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m10s
- 将 GET /shops/commission-summary 重命名为 GET /shops/fund-summary,
响应新增 main_balance、main_frozen_balance 两个预充值钱包字段
- 新增 GET /shops/:id/main-wallet/transactions 预充值钱包流水接口
- 将佣金统计、每日统计、发起提现从 /my/ 路径迁移至 /shops/:id/ 路径:
GET /shops/:id/commission-stats
GET /shops/:id/commission-daily-stats
POST /shops/:id/withdrawal-requests
- 删除 MyCommissionService、MyCommissionHandler 及全部 /my/ 路由
- 补齐 ListShopWithdrawalRequests、ListShopCommissionRecords 的
CanManageShop 越权校验(安全修复)
- 提现接口增加严格权限:仅代理账号本人可为自己店铺发起提现
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-09 14:40:39 +08:00 |
|
|
|
384a54164b
|
feat: 新增批量移除角色权限接口
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
- 新增 DELETE /api/admin/roles/:role_id/permissions 接口
- Store 层新增 BatchDelete 方法,单次 SQL 批量软删除
- Service 层新增 BatchRemovePermissions 方法
- Handler 层新增 BatchRemovePermissions 处理函数
- DTO 新增 BatchRemovePermissionsRequest/Params
- 修复 openapi generator 对 DELETE 方法 requestBody 不生成的问题
- RouteSpec 新增 Body 字段,支持显式指定 JSON 请求体
💘 Generated with Crush
Assisted-by: Claude Sonnet 4.6 via Crush <crush@charm.land>
|
2026-04-09 11:41:58 +08:00 |
|
|
|
14a8ea5a2c
|
fix: 单卡导入虚拟号改为可选,非空时保证全局唯一
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m26s
|
2026-04-08 10:45:23 +08:00 |
|