From a0713bc80f1a866948512ca9739861dec53abb50 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Wed, 4 Mar 2026 16:19:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E8=B6=85=E7=BA=A7?= =?UTF-8?q?=E5=B8=81=E5=95=86=E8=BD=AC=E5=B8=81=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallet/inner/error/FreightErrorCode.java | 6 ++ .../freight/SendFreightShipCmdExe.java | 72 +++++++++---------- 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/error/FreightErrorCode.java b/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/error/FreightErrorCode.java index 4563a3f5..f03547f6 100644 --- a/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/error/FreightErrorCode.java +++ b/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/error/FreightErrorCode.java @@ -73,6 +73,12 @@ public enum FreightErrorCode implements IResponseErrorCode { * 不正确的订单编号 */ INCORRECT_ORDER_NUMBER(5511, "Incorrect order number"), + + + /** + * 不是超级货运代理 + */ + NOT_SUPER_FREIGHT(5512, "Not a Super Freight forwarder"), ; diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java index b8f13ea7..e88b693b 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java @@ -104,14 +104,12 @@ public class SendFreightShipCmdExe { // 账号已关闭 ResponseAssert.isFalse(UserErrorCode.ACCOUNT_CLOSED, freightBalanceService.checkClose(cmd.requireReqSysOriginEnum(), cmd.requiredReqUserId())); + ResponseAssert.isTrue(FreightErrorCode.NOT_FREIGHT, freightBalanceService.checkFreightAgent(cmd.requiredReqUserId())); // 余额不足 ResponseAssert.isTrue(WalletErrorCode.INSUFFICIENT_BALANCE, ArithmeticUtils.gte(cmd.getQuantity(), BigDecimal.ZERO)); - // 支付密码效验 - checkPayPassword(cmd); - ResponseAssert.isTrue( CommonErrorCode.RESOURCE_RESTRICT_ACCESS, redisService.lock(getLockKey(cmd), 10)); @@ -128,19 +126,39 @@ public class SendFreightShipCmdExe { // 插入流水 FreightBalanceRunningWater runningWater = saveRunningWater(cmd, balance); - // 发货 - walletGoldGateway.changeBalance(new WalletReceipt() - .setReqTraceId(cmd.getReqTraceId()) - .setReceiptType(ReceiptType.INCOME) - .setUserId(cmd.getAcceptUserId()) - .setSysOrigin(cmd.requireReqSysOrigin()) - .setEventType(Objects.toString(GoldOrigin.SHIPPING_AGENT)) - .setEventDesc(GoldOrigin.SHIPPING_AGENT.getDesc()) - .setEventId(Objects.toString(runningWater.getId())) - .setAmount(PennyAmount.ofDollar(cmd.getQuantity().longValue())) - .setOpUserType(OpUserType.APP) - .setCreateTime(cmd.reqTimeElseNow()) - ); + // 判断发送者和接收者的代理类型 + boolean senderIsSuperFreight = freightBalanceService.checkSuperFreightAgent(cmd.requiredReqUserId()); + boolean acceptIsSuperFreight = freightBalanceService.checkSuperFreightAgent(cmd.getAcceptUserId()); + boolean acceptIsFreight = freightBalanceService.checkFreightAgent(cmd.getAcceptUserId()); + + // 权限校验:超级经销商才可以发货给经销商和超级经销商,普通经销商不能发货给经销商或超级经销商 + if (acceptIsFreight || acceptIsSuperFreight) { + ResponseAssert.isTrue(FreightErrorCode.NOT_SUPER_FREIGHT, senderIsSuperFreight); + } + + // 发货:目标是普通经销商 → incrCandyBalance 进货运钱包;目标是超级经销商(或普通用户) → changeBalance 进金币钱包 + if (acceptIsFreight && !acceptIsSuperFreight) { + // 目标是经销商,入货运余额 + ResponseAssert.isTrue(WalletErrorCode.DEDUCTION_FAILED, + freightBalanceService.incrCandyBalance( + cmd.requireReqSysOriginEnum(), + cmd.getAcceptUserId(), + cmd.getQuantity())); + } else { + // 目标是超级经销商(或普通用户),入金币钱包 + walletGoldGateway.changeBalance(new WalletReceipt() + .setReqTraceId(cmd.getReqTraceId()) + .setReceiptType(ReceiptType.INCOME) + .setUserId(cmd.getAcceptUserId()) + .setSysOrigin(cmd.requireReqSysOrigin()) + .setEventType(Objects.toString(GoldOrigin.SHIPPING_AGENT)) + .setEventDesc(GoldOrigin.SHIPPING_AGENT.getDesc()) + .setEventId(Objects.toString(runningWater.getId())) + .setAmount(PennyAmount.ofDollar(cmd.getQuantity().longValue())) + .setOpUserType(OpUserType.APP) + .setCreateTime(cmd.reqTimeElseNow()) + ); + } try { String noticeContent = getNoticeContent(cmd, cmd.getQuantity()); @@ -256,28 +274,6 @@ public class SendFreightShipCmdExe { ); } - private void checkPayPassword(FreightShipSendCmd cmd) { - if (Objects.equals(cmd.requiredReqUserId(), 1639905817928880129L) || Objects.equals( - cmd.requiredReqUserId(), 1680509528015880193L)) { - return; - } - if (cmd.originEqAswat() && cmd.checkAndroid()) { - if (ArithmeticUtils.gte(cmd.getQuantity(), new BigDecimal("80000"))) { - // 查询密码输入错误次数 - Integer times = userPayAuthCacheService.getPayAuthTimes(cmd.requiredReqUserId()); - ResponseAssert.isFalse(WalletErrorCode.PAY_PASSWORD_EXHAUSTED, times > 3); - PayAuth payAuth = payAuthService.getByPassword(cmd.getPassword(), - cmd.requiredReqUserId()); - - if (Objects.isNull(payAuth)) { - // 密码输错次数 - userPayAuthCacheService.recordPayAuth(cmd.requiredReqUserId()); - ResponseAssert.isFalse(WalletErrorCode.PAY_PASSWORD_ERROR, Boolean.TRUE); - } - } - } - } - private BigDecimal getGoldToSUD(FreightShipSendCmd cmd) {