From 52ea057ea123e3343408e1f38a76cec356826090 Mon Sep 17 00:00:00 2001 From: 777 <123@qwe.com> Date: Sat, 29 Nov 2025 17:37:28 +0800 Subject: [PATCH] nnnn --- doc/20251128.sql | 6 +++ .../cai/admin/AccountController.java | 7 ++- .../web/controller/cai/app/PayController.java | 16 ++++--- .../java/com/ruoyi/cai/domain/Account.java | 4 ++ .../main/java/com/ruoyi/cai/domain/Goods.java | 2 + .../com/ruoyi/cai/domain/RechargeOrder.java | 2 + .../cai/dto/AddRechargeOrderAdminDto.java | 4 ++ .../vo/order/UpdateAdminRechargeOrderDTO.java | 11 +++++ .../com/ruoyi/cai/enums/SystemConfigEnum.java | 2 +- .../ruoyi/cai/manager/ConsumerManager.java | 22 +++++++++ .../src/main/java/com/ruoyi/cai/pay/V14R.java | 29 +++++++++++ .../com/ruoyi/cai/service/AccountService.java | 2 + .../cai/service/RechargeOrderService.java | 3 +- .../cai/service/impl/AccountServiceImpl.java | 16 +++++++ .../impl/RechargeOrderServiceImpl.java | 48 +++++++++++++++++-- 15 files changed, 159 insertions(+), 15 deletions(-) create mode 100644 doc/20251128.sql create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/order/UpdateAdminRechargeOrderDTO.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/pay/V14R.java diff --git a/doc/20251128.sql b/doc/20251128.sql new file mode 100644 index 00000000..24ebd83e --- /dev/null +++ b/doc/20251128.sql @@ -0,0 +1,6 @@ +alter table cai_account +add column `points` bigint(20) default 0 not null comment '积分'; +ALTER TABLE cai_goods +ADD COLUMN `give_point` bigint(20) default 0 not null comment '充值赠送积分'; +ALTER TABLE cai_recharge_order +ADD COLUMN `distribution` tinyint default 0 not null comment '是否參與分銷'; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AccountController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AccountController.java index 2f524179..8a5f9a3a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AccountController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AccountController.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.dto.AddRechargeOrderAdminDto; import com.ruoyi.cai.dto.admin.vo.AccountAdminVo; +import com.ruoyi.cai.manager.ConsumerManager; import com.ruoyi.cai.service.AccountService; import com.ruoyi.cai.service.RechargeOrderService; import com.ruoyi.common.annotation.Log; @@ -16,6 +17,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.enums.BusinessType; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -58,12 +60,15 @@ public class AccountController extends BaseController { return R.ok(accountService.getById(id)); } + @Autowired + private ConsumerManager consumerManager; + @SaCheckPermission("cai:account:add") @Log(title = "用户账户调账", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/updateCoin") public R add(@RequestBody AddRechargeOrderAdminDto bo) { - rechargeOrderService.updateAdminRechargeOrder(bo); + consumerManager.rechargeOrderSuccessAdmin(bo); return R.ok(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java index a738cae5..86ac26f5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java @@ -144,22 +144,22 @@ public class PayController { @Operation(summary = "微信支付efps") @Log(title = "微信支付efps", businessType = BusinessType.OTHER, isSaveDb = true) @SaIgnore - public R efpsWx(HttpServletRequest request, @RequestBody V14PayDTO payDTO){ + public V14R efpsWx(HttpServletRequest request, @RequestBody V14PayDTO payDTO){ String efpsToken = request.getHeader("Efps-Token"); if(StringUtils.isBlank(efpsToken)){ - return R.fail(600,"支付失败,鉴权失败或者未找到订单"); + return V14R.fail14(600,"支付失败,鉴权失败或者未找到订单"); } V14Token v14Token = v14Manager.checkToken(efpsToken); if(v14Token == null){ - return R.fail(600,"支付失败,鉴权失败或者未找到订单"); + return V14R.fail14(600,"支付失败,鉴权失败或者未找到订单"); } PayTrdConfig payTrdConfig = payTrdConfigService.getById(v14Token.getPayTrdConfigId()); if(payTrdConfig == null){ - return R.fail(600,"支付失败,未找到支付通道信息"); + return V14R.fail14(600,"支付失败,未找到支付通道信息"); } PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(v14Token.getOrderNo(),true); if(payOrderInfo == null){ - return R.fail(600,"支付失败,未找到订单"); + return V14R.fail14(600,"支付失败,未找到订单"); } try { V14ExtendMapDTO extendMap = JSON.parseObject(payTrdConfig.getExtendData(), V14ExtendMapDTO.class); @@ -167,10 +167,12 @@ public class PayController { payOrderInfo.setOpenId(openId); } catch (IOException e) { log.error("获取openid失败",e); - return R.fail(600,"微信登录失败"); + return V14R.fail14(600,"微信登录失败"); } WechatJSAPIResponse pay = v14Manager.pay(payOrderInfo, payTrdConfig); - return R.ok(pay); + V14R result = V14R.ok14(pay); + result.setWxJsapiParam(pay.getWxJsapiParam()); + return result; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java index 83ec028b..9acbbcdd 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java @@ -36,6 +36,10 @@ public class Account implements Serializable { * 收益的彩币数量 */ private Long incomeCoin; + /** + * 积分 + */ + private Long points; /** * 充值总额 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java index 48f1432d..dd56aeaa 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java @@ -47,6 +47,8 @@ public class Goods implements Serializable { private Long wxAmount; @TableField(exist = false) private Long aliAmountDiff; + @Schema(description = "赠送积分") + private Long givePoint; /** * 状态 0 可用 1不可用 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/RechargeOrder.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/RechargeOrder.java index 8dd976a1..6bdd2d84 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/RechargeOrder.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/RechargeOrder.java @@ -83,6 +83,8 @@ public class RechargeOrder implements Serializable { */ private Boolean admin; + private Boolean distribution; + private Long adminId; private String remark; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/AddRechargeOrderAdminDto.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/AddRechargeOrderAdminDto.java index 517d371b..0cff6866 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/AddRechargeOrderAdminDto.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/AddRechargeOrderAdminDto.java @@ -19,6 +19,10 @@ public class AddRechargeOrderAdminDto { * 调整的金额 */ private Long rechargeCoin; + /** + * 是否参与分销 + */ + private boolean distribution; private String remark; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/order/UpdateAdminRechargeOrderDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/order/UpdateAdminRechargeOrderDTO.java new file mode 100644 index 00000000..b3fa7c65 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/order/UpdateAdminRechargeOrderDTO.java @@ -0,0 +1,11 @@ +package com.ruoyi.cai.dto.admin.vo.order; + +import com.ruoyi.cai.domain.RechargeOrder; +import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp; +import lombok.Data; + +@Data +public class UpdateAdminRechargeOrderDTO { + private RechargeConsumerResp resp; + private RechargeOrder rechargeOrder; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java index 84db0111..ff42abb5 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java @@ -78,7 +78,7 @@ public enum SystemConfigEnum { GREET_INTERVAL_MIN("30", "群打招呼的间隔时间(分钟)",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), ANCHOR_TOP_MIN("30", "小火箭置顶间隔时间(分钟)",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), OPEN_ALI_PAY("1", "是否开启四方支付宝支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), - OPEN_SOURCE_ALI_PAY("1", "是否开启原生支付宝支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), + OPEN_SOURCE_ALI_PAY("1", "是否开启原生支付宝支付(废弃)",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), OPEN_WX_PAY("1", "是否开启微信支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), ALI_PAY_FIRST("1", "支付宝支付显示是否在前面",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), OPEN_WITHDRAW("1", "是否开启提现功能",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java index 8dad47d2..aa53b695 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java @@ -5,6 +5,8 @@ import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.domain.ConsumeLog; import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.dto.AddRechargeOrderAdminDto; +import com.ruoyi.cai.dto.admin.vo.order.UpdateAdminRechargeOrderDTO; import com.ruoyi.cai.dto.app.query.GiveGiftReq; import com.ruoyi.cai.dto.app.query.GiveGuardReq; import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp; @@ -158,6 +160,26 @@ public class ConsumerManager { @Autowired private RankAdminManager rankAdminManager; + public RechargeConsumerResp rechargeOrderSuccessAdmin(AddRechargeOrderAdminDto dto){ + UpdateAdminRechargeOrderDTO result = rechargeOrderService.updateAdminRechargeOrder(dto); + RechargeConsumerResp resp = result.getResp(); + try { + amqpHttpProducer.sendCalculateSales(resp.getConsumeLogId()+""); + }catch (Exception e){ + log.error("RabbitMq 发送失败, 充值分销流程流转失败!",e); + } + try { + Account account = accountService.getByUserId(resp.getUserId()); + if(account != null){ + Long totalCoin = account.getCoin() + account.getIncomeCoin(); + yunxinHttpService.rechargeCoinSendMessage(resp.getUserId(), resp.getRechargeCoin(),totalCoin); + } + }catch (Exception e){ + log.error("充值成功通知失败!",e); + } + return resp; + } + public RechargeConsumerResp rechargeOrderSuccess(String tradeNo, Map params, String appId, PayTypeEnum payTypeEnum){ RechargeConsumerResp resp = rechargeOrderService.orderSuccess(tradeNo,params,appId,payTypeEnum); if(resp.isSuccess()){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/V14R.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/V14R.java new file mode 100644 index 00000000..20d36e22 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/V14R.java @@ -0,0 +1,29 @@ +package com.ruoyi.cai.pay; + +import com.ruoyi.cai.trdpay.dto.v14.wechatJSAPI.WxJsapiParam; +import com.ruoyi.common.core.domain.R; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class V14R extends R { + private WxJsapiParam wxJsapiParam; + + public static V14R fail14(int code, String msg) { + return restResult14(null, code, msg); + } + + private static V14R restResult14(T data, int code, String msg) { + V14R r = new V14R<>(); + r.setCode(code); + r.setData(data); + r.setMsg(msg); + return r; + } + + public static V14R ok14(T data) { + return restResult14(data, SUCCESS, "操作成功"); + } + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java index 87816e8b..fa52894a 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java @@ -36,6 +36,8 @@ public interface AccountService extends IService { void recharge(ConsumeLog consumeLog); + void rechargeAdminIgnoreAccount(ConsumeLog consumeLog); + Page pageAdmin(PageQuery pageQuery, AccountAdminVo bo); boolean distribution(ConsumeLog consumeLog, Long userId, Long amount, AccountChangeCodeEnum accountChangeEnum); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/RechargeOrderService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/RechargeOrderService.java index 6812c330..8d059a06 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/RechargeOrderService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/RechargeOrderService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.RechargeOrder; import com.ruoyi.cai.dto.AddRechargeOrderAdminDto; +import com.ruoyi.cai.dto.admin.vo.order.UpdateAdminRechargeOrderDTO; import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto; import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo; @@ -29,7 +30,7 @@ public interface RechargeOrderService extends IService { RechargeConsumerResp orderSuccess(String orderNo, Map params, String appId, PayTypeEnum payTypeEnum); - RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto); + UpdateAdminRechargeOrderDTO updateAdminRechargeOrder(AddRechargeOrderAdminDto dto); void setFastPay(String orderNo); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java index bca89704..4dd9313e 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java @@ -232,6 +232,22 @@ public class AccountServiceImpl extends ServiceImpl impl consumeLogService.save(consumeLog); } + @Transactional(rollbackFor = Exception.class) + @Override + public void rechargeAdminIgnoreAccount(ConsumeLog consumeLog){ + log.info("开始管理員充值 consumeLog={}", JSON.toJSONString(consumeLog)); + Long userId = consumeLog.getSourceUserId(); + Long amount = consumeLog.getAmount(); + User user = userService.getById(userId); + Account account = this.getByUserId(userId); + if(account == null || user == null){ + throw new ServiceException("无效账号"); + } + // 获取分销的比例和用户 + consumeLogService.calculateInitFenxiao(consumeLog); + consumeLogService.save(consumeLog); + } + @Override public Page pageAdmin(PageQuery pageQuery, AccountAdminVo bo) { diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java index 1cf49c06..d9a670e9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java @@ -7,14 +7,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cai.domain.*; import com.ruoyi.cai.dto.AddRechargeOrderAdminDto; +import com.ruoyi.cai.dto.admin.vo.order.UpdateAdminRechargeOrderDTO; import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto; -import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo; import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp; import com.ruoyi.cai.enums.ConsumeLogType; import com.ruoyi.cai.enums.account.AccountChangeCodeEnum; import com.ruoyi.cai.enums.account.AccountTypeEnum; -import com.ruoyi.cai.enums.version.VersionPlatformEnum; import com.ruoyi.cai.manager.IdManager; import com.ruoyi.cai.mapper.AccountMapper; import com.ruoyi.cai.mapper.RechargeOrderMapper; @@ -142,7 +141,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl