新增 超级币商转币商

This commit is contained in:
tianfeng 2026-03-04 16:19:11 +08:00
parent 4d725763a6
commit a0713bc80f
2 changed files with 40 additions and 38 deletions

View File

@ -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"),
;

View File

@ -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) {