skyline

skyline wypycha do master w kym/haha

  • fc8a2176e7 fix: 设备门店绑定穿梭框 label 错误导致解绑失效 问题: - el-transfer 的 label prop 写成了 'deviceName',但 ShopDeviceVO 和 Device 实体都不存在该字段(两者字段名均为 'name') - 导致穿梭框两侧所有条目标签为空,用户无法识别设备,操作无效 - 表现为「移出设备后刷新页面仍在原地」 修复: - label: 'deviceName' → label: 'name' - ShopServiceImpl.linkDevice/unlinkDevice 补充 @Transactional 注解 Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w kym/haha

  • e1dc2f8b21 fix: 退款金额使用 money/productNum 代替 price×quantity,消除 1 分钱舍入差 问题: - haha 平台 ORDER 回调中 price 和 money 存在 1 分钱舍入差 例:price=2.13, product_num=2 → price×2=4.26, 但 money=4.25(实付) - 前端退款页和后台 RefundServiceImpl 均用 price×quantity 计算退款金额 导致退 2 件时计算为 4.26 ≠ 实付 4.25,无法全额退款 修复: - 前端 hook.tsx: 退款金额显示用 money/productNum×quantity 代替 price×quantity - 前端 hook.tsx: 提交退款时传 money 和 productNum 给后端 - RefundDTO.RefundProductDTO: 新增 money、productNum 字段 - OrderController: 透传 money、productNum 到退款参数 - RefundServiceImpl.calculateRefundAmount: 优先用 money/productNum×quantity - RefundServiceImpl.createRefundRecord: 退款明细金额同上逻辑 Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w kym/haha

  • d01051b0f3 refactor: 移除 cancelOldDeviceOrders 和 Step2 CREATED 批量取消 移除理由: - cancelOldDeviceOrders: 同设备 CREATED 订单可能正在购物流程中等待 ORC_RESULT(DoorRecord 已关联但订单未创建),取消会导致 ORDER 回调 complete 失败。已有消费/无消费/TTL 三路径覆盖 lifecycle - Step2 取消 DB CREATED: ORC_RESULT 刚创建订单到 ORDER 回调到达之间 的窗口(~200ms)内可能被误取消,同样导致 complete 失败 pre-create 现在只做: 1. 自动补扣(恢复资金,非取消) 2. 超时孤儿清理(>30min + 无金额,真正的异常单) CREATED 状态订单唯一的取消路径:用户开门后 nobuy → cancelPayScoreForNoConsume Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w kym/haha

  • e2ce506e95 fix: scan-open 消费 Redis preauth,彻底解决连续开门 payScoreOrderId 错配 问题根源: - persistPayScorePreAuth 只读 Redis 不删除,旧 preauth 残留 - 用户连续购物时,下次 scan-open 读到的是上一个未被消费的旧 preauth - DoorRecord 错配 oldPayScoreOrderId,导致 cancelOldDeviceOrders 误取消、complete 失败 修改: 1. PayScoreServiceImpl 新增 consumePreAuthFromRedis(): scan-open 持久化到 DoorRecord 后立即删除 Redis key 2. PayScoreServiceImpl.storePreAuthToRedis(): 旧 Fix2 无条件阻止覆盖 → 改为 isPreAuthStillPending() 智能判断 - 旧 preauth 已有对应本地订单 → ORC_RESULT 已消费 → 允许覆盖 - 旧 preauth 无本地订单 → 可能还在等 ORC_RESULT → 保守不覆盖 3. DeviceServiceImpl.persistPayScorePreAuth(): 持久化成功后调用 consumePreAuthFromRedis 清理 Redis 效果: - 每次开门后 Redis 立即清空,下次 pre-create 从干净状态写入 - ORC_RESULT 通过 DoorRecord 层恢复(不依赖 Redis 层) Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w kym/haha

  • c2c0161a07 fix: cancelOldDeviceOrders 增加创建时间保护,防止误取消购物流程中的订单 问题: - 用户连续购物时,前一个 pre-create 的支付分订单(PayScore A) 尚未被 ORC_RESULT 关联(DoorRecord 因 Fix2 未覆盖 Redis 而错配了旧 PayScore), 下一个 pre-create 触发 cancelOldDeviceOrders 时将其取消 - 取消后 ORDER 回调 complete 失败(INVALID_REQUEST),订单扣费失败 修复: - cancelOldDeviceOrders 新增 isRecentlyCreated() 时间保护 - 创建不到 MIN_CANCEL_AGE_MINUTES(5分钟) 的 CREATED 订单不取消 - outOrderNo 格式 PS{10位timestamp}{suffix},直接提取时间戳判断 Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w kym/haha

  • c9acd08b1d fix: 关门日志持续时长显示null秒 DoorRecordServiceImpl.updateDoorClosed 中 record 在 UPDATE 前查询, getDuration() 拿到的是 SQL TIMESTAMPDIFF 计算前的旧值(null)。 改为用 record.getOpenTime() 和 closeTime 在 Java 侧计算 duration 后再输出日志。 Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w kym/haha

  • 566ae18927 feat: 支付分订单清理链路全链路优化 P0 - nobuy 场景取消支付分: - PayScoreServiceImpl 新增 cancelPayScoreForNoConsume() 公开方法 - HahaCallbackServiceImpl.handleNoConsume 中调用取消微信支付分+清理Redis P0 - 移除跨设备 tracking SET 清理: - cancelStalePayScoreOrdersAndCount 移除 Step4 跨设备清理 - tracking SET 清理改由正常流程/nobuy/cancelOldDeviceOrders/TTL 各自负责 P1 - scan-open 传入 payScoreOrderId: - ScanOpenDTO 新增 payScoreOrderId 字段 - 前端传参直接持久化到 DoorRecord,不依赖 Redis - 无参数时回退 Redis 兜底 P2 - 定时任务兜底 USER_PAYING 补扣: - PayScoreSyncTask.processSyncOrders 增加重试逻辑 - USER_PAYING + totalAmount>0 + UNPAID → 重试 completePayScoreOrder P2 - ORDER 回调 DoorRecord 恢复: - processPayScorePayment 新增 tryRecoverFromDoorRecord - tracking SET 未命中时从 DoorRecord 恢复 payScoreOrderId Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w kym/haha

  • d566f87def fix: 修复支付分订单连续扫码扣费失败及商品记录写入优化 问题: - 同一用户短时间内两次扫码,两笔支付分订单均未成功扣费 根因修复 (PayScoreServiceImpl): 1. isPayScoreOrderSafeToCancel 只看本地DB,微信侧已确认(DOING)的订单也会被取消 → 增加 isPayScoreOrderConfirmedOnWechat() 查询微信侧状态 2. 同一 deviceId:userId 的 Redis preauth key 被第二次 pre-create 覆盖 → storePreAuthToRedis 写入前检查 key 是否已存在 3. handlePayScoreCallback eventType 检查 PAYSCORE.USER_CONFIRMED 与微信实际 发送的 PAYSCORE.USER_CONFIRM 不匹配,且 complete 失败后无重试 → 修正 eventType + USER_CONFIRM 回调时若订单有金额未付则自动重试 complete 4. USER_CONFIRM 回调到达时本地订单可能尚未创建,回调状态丢失 → 缓存早到的回调到 Redis,订单创建后通过 applyCachedCallback 恢复 优化 (HahaCallbackServiceImpl): - saveOrderGoods: DELETE+INSERT 改为 code-based UPSERT ORDER 回调数据按商品编码匹配已有记录,匹配到则更新,未匹配到则新增, 避免每单「先清除再重写」的冗余操作 Co-Authored-By: Claude <noreply@anthropic.com>

2 tygodni temu

skyline wypycha do master w evolve/car-wash-java

  • 9f268792a0 fix: 删除 C 端全量用户列表接口,杜绝 PII 泄露 - GET /user/listUser 无任何权限/归属过滤,任意登录的 C 端用户 可枚举全量用户(含手机号、头像、昵称),且前端无任何调用方 (管理端用的是 /custom/listUser),属调试遗留接口,直接删除 Co-Authored-By: Claude <noreply@anthropic.com>
  • f1cecc2a97 fix: 操作日志列表不再匿名可查,清空日志需要独立权限 - GET /systemLog/list 去掉 @SaIgnore:原来匿名可查全量操作日志 (含操作人、请求参数),现需登录 - POST /systemLog/clear 增加 @SaCheckPermission('systemLog.clear'): 原来任何登录者可清空审计痕迹 - 新增 v22 迁移脚本:systemLog.clear 权限记录 + 超管自动授权, 其他角色可在角色管理中勾选 Co-Authored-By: Claude <noreply@anthropic.com>
  • 3d2db49f3e fix: 模板消息发送改为真异步,退款成功模板注册修正 - sendTemplateMessage 标有 @Async 但被同类方法自调用,代理失效, 微信 HTTP 调用同步执行在结算/充值事务内,消息失败会回滚已完成的 结算;改为注入自身代理(@Lazy)调用,真正异步且不再阻塞事务 - REFUND_SUCCESS 原来错误注册 RefundApplyParamBuilder(退款成功消息 按'退款申请'模板渲染),改为 RefundSuccessParamBuilder Co-Authored-By: Claude <noreply@anthropic.com>
  • e731cd1a18 fix: ID生成器改为进程内单例,多实例支持配置 workerId - IDGenerator.INS() 原实现每次 new 新实例(sequence/workerId 全 0), 同一毫秒两次调用生成完全相同 ID 导致主键冲突 - INS() 改为返回静态单例;CustomIdGenerator 的 workerId/datacenterId 支持 kym.id.worker-id / kym.id.datacenter-id 配置(默认0,兼容现有部署), 多实例部署时配置不同值即可避免跨进程撞号 Co-Authored-By: Claude <noreply@anthropic.com>
  • b12e34d1bd fix: 车辆设置默认校验归属,防止越权修改他人车辆 - 原 setDefault 按 carId 直接查车置默认,不校验归属, 任意用户可把他人车辆设为默认 - 查询条件增加 eq(userId),非本人车辆不做任何修改 Co-Authored-By: Claude <noreply@anthropic.com>
  • Zobacz porównanie tych 12 commitów »

3 tygodni temu

skyline wypycha do dev w evolve/car-wash-java

  • 9f268792a0 fix: 删除 C 端全量用户列表接口,杜绝 PII 泄露 - GET /user/listUser 无任何权限/归属过滤,任意登录的 C 端用户 可枚举全量用户(含手机号、头像、昵称),且前端无任何调用方 (管理端用的是 /custom/listUser),属调试遗留接口,直接删除 Co-Authored-By: Claude <noreply@anthropic.com>
  • f1cecc2a97 fix: 操作日志列表不再匿名可查,清空日志需要独立权限 - GET /systemLog/list 去掉 @SaIgnore:原来匿名可查全量操作日志 (含操作人、请求参数),现需登录 - POST /systemLog/clear 增加 @SaCheckPermission('systemLog.clear'): 原来任何登录者可清空审计痕迹 - 新增 v22 迁移脚本:systemLog.clear 权限记录 + 超管自动授权, 其他角色可在角色管理中勾选 Co-Authored-By: Claude <noreply@anthropic.com>
  • 3d2db49f3e fix: 模板消息发送改为真异步,退款成功模板注册修正 - sendTemplateMessage 标有 @Async 但被同类方法自调用,代理失效, 微信 HTTP 调用同步执行在结算/充值事务内,消息失败会回滚已完成的 结算;改为注入自身代理(@Lazy)调用,真正异步且不再阻塞事务 - REFUND_SUCCESS 原来错误注册 RefundApplyParamBuilder(退款成功消息 按'退款申请'模板渲染),改为 RefundSuccessParamBuilder Co-Authored-By: Claude <noreply@anthropic.com>
  • e731cd1a18 fix: ID生成器改为进程内单例,多实例支持配置 workerId - IDGenerator.INS() 原实现每次 new 新实例(sequence/workerId 全 0), 同一毫秒两次调用生成完全相同 ID 导致主键冲突 - INS() 改为返回静态单例;CustomIdGenerator 的 workerId/datacenterId 支持 kym.id.worker-id / kym.id.datacenter-id 配置(默认0,兼容现有部署), 多实例部署时配置不同值即可避免跨进程撞号 Co-Authored-By: Claude <noreply@anthropic.com>
  • b12e34d1bd fix: 车辆设置默认校验归属,防止越权修改他人车辆 - 原 setDefault 按 carId 直接查车置默认,不校验归属, 任意用户可把他人车辆设为默认 - 查询条件增加 eq(userId),非本人车辆不做任何修改 Co-Authored-By: Claude <noreply@anthropic.com>
  • Zobacz porównanie tych 12 commitów »

3 tygodni temu

skyline wypycha do dev w evolve/car-wash-java

  • 6fea128ac2 fix: 结束洗车通知剩余金额改为消费后余额
  • 6dd45526cb fix: 支付回调幂等门闩移到余额更新之前 - 原实现 PayLog 插入位于余额更新之后:并发重复回调时第二个线程 会先重复增加余额,再在插入 PayLog 时被唯一索引拦截 - 门闩作为事务内第一个写操作,重复回调在余额更新前即被拦截, 后续业务失败事务回滚时 payLog 一并回滚可安全重试 Co-Authored-By: Claude <noreply@anthropic.com>
  • 780946e2aa fix: 资金操作接口增加权限校验,低权限账号不再能操作资金 - 提现申请/审核/打款确认:@SaCheckPermission("withdrawnRecord.modify") - 用户退款处理/批量退款/代申请退款:@SaCheckPermission("refundLog.modify") - 手动触发结算/确认结算:@SaCheckPermission("settlement.modify")(新增权限) - 新增 v21 迁移脚本:settlement.modify 权限记录 + 自动授权给已拥有 settlement.list 的角色,现有角色功能不中断,超管自动补齐 Co-Authored-By: Claude <noreply@anthropic.com>
  • 980ff6b712 fix: 结算确认增加条件更新门闩,并发重复确认不再双倍入账 - 原逻辑读状态→加余额→改状态无锁,并发重复确认同一结算单会把可提现余额加两次 - 改为条件更新(status 待结算→已结算)判影响行数,第二个事务直接失败 - 状态更新前移作为门闩,余额转入与平台费记录只执行一次 Co-Authored-By: Claude <noreply@anthropic.com>
  • f549d96e45 fix: 提现申请改为原子条件扣减,杜绝并发超提与负数金额 - 金额增加正数校验,负数不再能绕过检查 - 余额校验与扣减合并为一条原子 UPDATE(available_balance >= amount 条件), 并发双提现不会把可提现余额扣成负数 - 站点账户不存在时给出明确异常而非 NPE Co-Authored-By: Claude <noreply@anthropic.com>
  • Zobacz porównanie tych 42 commitów »

3 tygodni temu

skyline wypycha do master w evolve/car-wash-java

  • 6fea128ac2 fix: 结束洗车通知剩余金额改为消费后余额

3 tygodni temu

skyline wypycha do master w evolve/car-wash-java

  • 6dd45526cb fix: 支付回调幂等门闩移到余额更新之前 - 原实现 PayLog 插入位于余额更新之后:并发重复回调时第二个线程 会先重复增加余额,再在插入 PayLog 时被唯一索引拦截 - 门闩作为事务内第一个写操作,重复回调在余额更新前即被拦截, 后续业务失败事务回滚时 payLog 一并回滚可安全重试 Co-Authored-By: Claude <noreply@anthropic.com>
  • 780946e2aa fix: 资金操作接口增加权限校验,低权限账号不再能操作资金 - 提现申请/审核/打款确认:@SaCheckPermission("withdrawnRecord.modify") - 用户退款处理/批量退款/代申请退款:@SaCheckPermission("refundLog.modify") - 手动触发结算/确认结算:@SaCheckPermission("settlement.modify")(新增权限) - 新增 v21 迁移脚本:settlement.modify 权限记录 + 自动授权给已拥有 settlement.list 的角色,现有角色功能不中断,超管自动补齐 Co-Authored-By: Claude <noreply@anthropic.com>
  • 980ff6b712 fix: 结算确认增加条件更新门闩,并发重复确认不再双倍入账 - 原逻辑读状态→加余额→改状态无锁,并发重复确认同一结算单会把可提现余额加两次 - 改为条件更新(status 待结算→已结算)判影响行数,第二个事务直接失败 - 状态更新前移作为门闩,余额转入与平台费记录只执行一次 Co-Authored-By: Claude <noreply@anthropic.com>
  • f549d96e45 fix: 提现申请改为原子条件扣减,杜绝并发超提与负数金额 - 金额增加正数校验,负数不再能绕过检查 - 余额校验与扣减合并为一条原子 UPDATE(available_balance >= amount 条件), 并发双提现不会把可提现余额扣成负数 - 站点账户不存在时给出明确异常而非 NPE Co-Authored-By: Claude <noreply@anthropic.com>
  • f229ed8cf6 fix: 充值归属站点改为服务端确定,客户端传值不再生效 - wxPay/promotionPay 移除客户端 stationId 参数,归属站点由服务端取用户归属 (KymCache 优先,查库兜底),防止恶意篡改充值分账归属虚增站点收入 - 前端继续传 stationId 参数会被 Spring 忽略,兼容现有客户端 Co-Authored-By: Claude <noreply@anthropic.com>
  • Zobacz porównanie tych 10 commitów »

3 tygodni temu

skyline wypycha do master w kym/haha

  • d87e1e4a4a fix: 退款详情弹窗(handleDetail)也加入订单视频展示 - 提取 fetchOrderMedia/renderVideoSection 公共方法 - handleDetail 和 handleOrderDetail 两个弹窗都展示视频 Co-Authored-By: Claude <noreply@anthropic.com>

1 miesiąc temu

skyline wypycha do master w kym/haha

  • 37fcdd19e6 fix: 退款详情使用多方式查询媒体,添加调试日志定位视频缺失原因 - 依次尝试 activityId → orderNo 查询哈哈媒体 - RefundApplicationItem 增加 activityId 字段 - 添加 console.log 便于浏览器控制台排查 Co-Authored-By: Claude <noreply@anthropic.com>

1 miesiąc temu

skyline wypycha do master w kym/charge-java

  • cd7af78a42 chore: 联系我们增加工作时间提示;充电状态定时任务补充注释 Co-Authored-By: Claude <noreply@anthropic.com>
  • 4cfa120f4e fix: 退款申请防重复提交,避免并发创建多条退款记录 前端:submit 按钮增加 submitting 标志位 + disabled + mask 遮罩防连点 后端:Redis SETNX 分布式锁(10s TTL) + 业务层查重(已存在NEW/PROCESSING状态申请时拒绝) finally 块释放锁,保证异常场景下用户可立即重试 Co-Authored-By: Claude <noreply@anthropic.com>
  • Zobacz porównanie tych 2 commitów »

1 miesiąc temu

skyline wypycha do dev w kym/charge-java

  • cd7af78a42 chore: 联系我们增加工作时间提示;充电状态定时任务补充注释 Co-Authored-By: Claude <noreply@anthropic.com>
  • 4cfa120f4e fix: 退款申请防重复提交,避免并发创建多条退款记录 前端:submit 按钮增加 submitting 标志位 + disabled + mask 遮罩防连点 后端:Redis SETNX 分布式锁(10s TTL) + 业务层查重(已存在NEW/PROCESSING状态申请时拒绝) finally 块释放锁,保证异常场景下用户可立即重试 Co-Authored-By: Claude <noreply@anthropic.com>
  • 59044113b8 Revert "feat: 登录页底部添加ICP备案号及工信部链接" This reverts commit 79b793f0518978b732cb04582a9144c86003e538.
  • 79b793f051 feat: 登录页底部添加ICP备案号及工信部链接 - 新增login-footer,显示粤ICP备2025408522号-2 - 链接跳转至 https://beian.miit.gov.cn - 样式:底部居中,hover变为主题色 Co-Authored-By: Claude <noreply@anthropic.com>
  • 1c00bc0a19 fix: 回退发票代码排查变更,导出去掉发票代码列 - 删除 InvoiceDetailBlueFapiaoTypeHandle(数电票无发票代码,非反序列化问题) - 恢复 InvoiceDetail.blueFapiao 使用 JacksonTypeHandler - 恢复 FapiaoApplications.FapiaoInfo 去掉 @JsonProperty - 移除导出中的发票代码列(航信数电票 fapiao_code 为空) - 移除临时调试日志 Co-Authored-By: Claude <noreply@anthropic.com>
  • Zobacz porównanie tych 21 commitów »

1 miesiąc temu

skyline wypycha do master w kym/haha

  • 29d1900af1 polish: 盘点页+/-按钮和输入框加大,提升操作体验 - 按钮: 36rpx→52rpx, 字号: 24rpx→32rpx - 输入框: 48×36→64×52rpx, 字号: 22→26rpx Co-Authored-By: Claude <noreply@anthropic.com>

1 miesiąc temu

skyline wypycha do master w kym/haha

  • 8a3dc20384 polish: 盘点页数量支持直接输入,中间数字改为input Co-Authored-By: Claude <noreply@anthropic.com>

1 miesiąc temu

skyline wypycha do master w kym/haha

  • adf93a8a99 feat: 补货员设备绑定弹窗增加门店搜索和全选功能 - 新增搜索框按门店名称/地址过滤 - 全选复选框一键选中/取消所有设备,显示已选/总数 - 关闭弹窗自动重置搜索词 Co-Authored-By: Claude <noreply@anthropic.com>

1 miesiąc temu