init
This commit is contained in:
@@ -65,7 +65,7 @@ public class PayConfigController extends BaseController {
|
|||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PostMapping()
|
@PostMapping()
|
||||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody PayConfig bo) {
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody PayConfig bo) {
|
||||||
return toAjax(payConfigService.save(bo));
|
return toAjax(payConfigService.addPayConfig(bo));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,7 +76,7 @@ public class PayConfigController extends BaseController {
|
|||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PutMapping()
|
@PutMapping()
|
||||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PayConfig bo) {
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PayConfig bo) {
|
||||||
return toAjax(payConfigService.updateById(bo));
|
return toAjax(payConfigService.updatePayConfig(bo));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SaCheckPermission("cai:payConfig:remove")
|
@SaCheckPermission("cai:payConfig:remove")
|
||||||
@@ -84,6 +84,6 @@ public class PayConfigController extends BaseController {
|
|||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{id}")
|
||||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
@PathVariable Long id) {
|
@PathVariable Long id) {
|
||||||
return toAjax(payConfigService.removeById(id));
|
return toAjax(payConfigService.deletePayConfig(id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
package com.ruoyi.cai.controller.app;
|
package com.ruoyi.cai.controller.app;
|
||||||
|
|
||||||
|
import com.ruoyi.cai.domain.RechargeOrder;
|
||||||
|
import com.ruoyi.cai.domain.VipOrder;
|
||||||
import com.ruoyi.cai.dto.ConsumeResp;
|
import com.ruoyi.cai.dto.ConsumeResp;
|
||||||
import com.ruoyi.cai.dto.app.query.GiveGiftRes;
|
import com.ruoyi.cai.dto.app.query.GiveGiftRes;
|
||||||
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
|
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
|
||||||
|
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
|
||||||
|
import com.ruoyi.cai.dto.app.query.order.AddVipOrderDto;
|
||||||
|
import com.ruoyi.cai.dto.app.vo.order.OrderCreateVo;
|
||||||
import com.ruoyi.cai.manager.ConsumerManager;
|
import com.ruoyi.cai.manager.ConsumerManager;
|
||||||
|
import com.ruoyi.cai.service.RechargeOrderService;
|
||||||
|
import com.ruoyi.cai.service.VipOrderService;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
@@ -22,6 +29,10 @@ public class ConsumeController {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ConsumerManager consumerManager;
|
private ConsumerManager consumerManager;
|
||||||
|
@Autowired
|
||||||
|
private RechargeOrderService rechargeOrderService;
|
||||||
|
@Autowired
|
||||||
|
private VipOrderService vipOrderService;
|
||||||
|
|
||||||
@PostMapping("/give/guard")
|
@PostMapping("/give/guard")
|
||||||
@Operation(summary = "赠送主播守护")
|
@Operation(summary = "赠送主播守护")
|
||||||
@@ -38,4 +49,29 @@ public class ConsumeController {
|
|||||||
ConsumeResp resp = consumerManager.sendGift(query);
|
ConsumeResp resp = consumerManager.sendGift(query);
|
||||||
return R.ok(resp.isSuccess());
|
return R.ok(resp.isSuccess());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/order/vip/create")
|
||||||
|
@Operation(summary = "创建VIP订单")
|
||||||
|
@Log(title = "创建VIP订单", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||||
|
public R<OrderCreateVo> vipOrderCreate(@RequestBody AddRechargeOrderDto dto){
|
||||||
|
RechargeOrder order = rechargeOrderService.addRechargeOrder(dto);
|
||||||
|
OrderCreateVo vo = new OrderCreateVo();
|
||||||
|
vo.setPrice(order.getPrice());
|
||||||
|
vo.setOrderNo(order.getOrderNo());
|
||||||
|
vo.setOrderName(order.getRechargeName());
|
||||||
|
return R.ok(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/order/recharge/create")
|
||||||
|
@Operation(summary = "创建充值订单")
|
||||||
|
@Log(title = "创建充值订单", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||||
|
public R<OrderCreateVo> giveGift(@RequestBody AddVipOrderDto dto){
|
||||||
|
VipOrder order = vipOrderService.addVipOrder(dto);
|
||||||
|
OrderCreateVo vo = new OrderCreateVo();
|
||||||
|
vo.setPrice(order.getPrice());
|
||||||
|
vo.setOrderNo(order.getOrderNo());
|
||||||
|
vo.setOrderName(order.getVipName());
|
||||||
|
return R.ok(vo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,174 @@
|
|||||||
|
package com.ruoyi.cai.controller.app;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.alipay.api.AlipayApiException;
|
||||||
|
import com.alipay.api.domain.AlipayTradeAppPayModel;
|
||||||
|
import com.alipay.api.internal.util.AlipaySignature;
|
||||||
|
import com.ijpay.alipay.AliPayApi;
|
||||||
|
import com.ijpay.alipay.AliPayApiConfigKit;
|
||||||
|
import com.ijpay.core.enums.SignType;
|
||||||
|
import com.ijpay.core.enums.TradeType;
|
||||||
|
import com.ijpay.core.kit.HttpKit;
|
||||||
|
import com.ijpay.core.kit.WxPayKit;
|
||||||
|
import com.ijpay.wxpay.WxPayApi;
|
||||||
|
import com.ijpay.wxpay.model.UnifiedOrderModel;
|
||||||
|
import com.ruoyi.cai.domain.PayConfig;
|
||||||
|
import com.ruoyi.cai.pay.*;
|
||||||
|
import com.ruoyi.common.annotation.Log;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
|
import com.ruoyi.common.utils.ServletUtils;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/pay")
|
||||||
|
@Tag(name = "支付相关的接口")
|
||||||
|
@Validated
|
||||||
|
@Slf4j
|
||||||
|
public class PayController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PayConfigManager payConfigManager;
|
||||||
|
@Autowired
|
||||||
|
private PayManager payManager;
|
||||||
|
|
||||||
|
@PostMapping(value = "/wx")
|
||||||
|
@Operation(summary = "微信支付")
|
||||||
|
@Log(title = "微信支付", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||||
|
public R<PayReturnResp> appPay(@RequestBody PayControllerDTO dto) {
|
||||||
|
PayConfig payConfig = payConfigManager.getWxConfig();
|
||||||
|
String ip = ServletUtils.getClientIP();
|
||||||
|
Map<String, String> params = UnifiedOrderModel
|
||||||
|
.builder()
|
||||||
|
.appid(dto.getWxAppId())
|
||||||
|
.mch_id(payConfig.getWxMcid())
|
||||||
|
.nonce_str(WxPayKit.generateStr())
|
||||||
|
.body("微信支付")
|
||||||
|
.out_trade_no(WxPayKit.generateStr())
|
||||||
|
.total_fee("1000")
|
||||||
|
.spbill_create_ip(ip)
|
||||||
|
.notify_url(payConfig.getNotifyUrl())
|
||||||
|
.trade_type(TradeType.APP.getTradeType())
|
||||||
|
.build()
|
||||||
|
.createSign(payConfig.getWxKey(), SignType.HMACSHA256);
|
||||||
|
String xmlResult = WxPayApi.pushOrder(false, params);
|
||||||
|
log.info(xmlResult);
|
||||||
|
Map<String, String> result = WxPayKit.xmlToMap(xmlResult);
|
||||||
|
String returnCode = result.get("return_code");
|
||||||
|
String returnMsg = result.get("return_msg");
|
||||||
|
if (!WxPayKit.codeIsOk(returnCode)) {
|
||||||
|
log.error("微信支付失败 returnMsg={}",returnMsg);
|
||||||
|
return R.fail("微信支付失败,请联系客服");
|
||||||
|
}
|
||||||
|
String resultCode = result.get("result_code");
|
||||||
|
if (!WxPayKit.codeIsOk(resultCode)) {
|
||||||
|
log.error("微信支付失败 returnMsg={}",returnMsg);
|
||||||
|
return R.fail("微信支付失败,请联系客服");
|
||||||
|
}
|
||||||
|
// 以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回
|
||||||
|
String prepayId = result.get("prepay_id");
|
||||||
|
Map<String, String> packageParams = WxPayKit.appPrepayIdCreateSign(payConfig.getAppid(), payConfig.getWxMcid(), prepayId,
|
||||||
|
payConfig.getWxKey(), SignType.HMACSHA256);
|
||||||
|
String jsonStr = JSON.toJSONString(packageParams);
|
||||||
|
log.info("返回apk的参数:" + jsonStr);
|
||||||
|
PayReturnResp resp = new PayReturnResp();
|
||||||
|
resp.setData(jsonStr);
|
||||||
|
return R.ok(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/ali")
|
||||||
|
@Operation(summary = "支付宝支付")
|
||||||
|
@Log(title = "支付宝支付", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||||
|
public R<PayReturnResp> aliPay(@RequestBody PayControllerDTO dto) {
|
||||||
|
try {
|
||||||
|
boolean b = payConfigManager.initAliPay();
|
||||||
|
if(!b){
|
||||||
|
return R.fail("支付宝支付失败!请联系管理员");
|
||||||
|
}
|
||||||
|
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
|
||||||
|
model.setBody("我是测试数据-By Javen");
|
||||||
|
model.setSubject("App支付测试-By Javen");
|
||||||
|
model.setOutTradeNo(WxPayKit.generateStr());
|
||||||
|
model.setTimeoutExpress("30m");
|
||||||
|
model.setTotalAmount("0.01");
|
||||||
|
String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getServiceUrl();
|
||||||
|
String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl).getBody();
|
||||||
|
PayReturnResp resp = new PayReturnResp();
|
||||||
|
resp.setData(orderInfo);
|
||||||
|
return R.ok(resp);
|
||||||
|
} catch (AlipayApiException e) {
|
||||||
|
log.error("支付宝支付失败",e);
|
||||||
|
return R.fail("支付宝支付失败,请联系客服");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/wx/notify")
|
||||||
|
@Operation(hidden = true)
|
||||||
|
@Log(title = "微信回调", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||||
|
public String payNotify(HttpServletRequest request) {
|
||||||
|
String xmlMsg = HttpKit.readData(request);
|
||||||
|
log.info("支付通知=" + xmlMsg);
|
||||||
|
Map<String, String> params = WxPayKit.xmlToMap(xmlMsg);
|
||||||
|
String returnCode = params.get("return_code");
|
||||||
|
String mchId = params.get("mch_id");
|
||||||
|
PayConfig payConfig = payConfigManager.getWxConfigByMchId(mchId);
|
||||||
|
if(payConfig == null){
|
||||||
|
log.error("未找到微信配置 mchId={}",mchId);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
|
||||||
|
// 注意此处签名方式需与统一下单的签名类型一致
|
||||||
|
if (WxPayKit.verifyNotify(params, payConfig.getWxKey(), SignType.HMACSHA256)) {
|
||||||
|
if (WxPayKit.codeIsOk(returnCode)) {
|
||||||
|
String outTradeNo = params.get("out_trade_no");
|
||||||
|
String transactionId = params.get("transaction_id");
|
||||||
|
// String appId = params.get("appid");
|
||||||
|
payManager.callBack(outTradeNo,transactionId,params,mchId, PayTypeEnum.WX);
|
||||||
|
Map<String, String> xml = new HashMap<>(2);
|
||||||
|
xml.put("return_code", "SUCCESS");
|
||||||
|
xml.put("return_msg", "OK");
|
||||||
|
return WxPayKit.toXml(xml);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping(value = "/ali/notify")
|
||||||
|
@Operation(hidden = true)
|
||||||
|
@Log(title = "支付宝回调", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||||
|
public String notifyUrl(HttpServletRequest request) {
|
||||||
|
try {
|
||||||
|
Map<String, String> params = AliPayApi.toMap(request);
|
||||||
|
log.info("支付宝回调信息:{}",JSON.toJSONString(params));
|
||||||
|
String appId = params.get("auth_app_id");
|
||||||
|
PayConfig aliConfig = payConfigManager.getAliConfigByAppId(appId);
|
||||||
|
boolean verifyResult = AlipaySignature.rsaCheckV1(params, aliConfig.getPublicKey(), "UTF-8", "RSA2");
|
||||||
|
if (verifyResult) {
|
||||||
|
String outTradeNo = params.get("out_trade_no");
|
||||||
|
String transactionId = params.get("trade_no");
|
||||||
|
payManager.callBack(outTradeNo,transactionId,params,appId, PayTypeEnum.ALI);
|
||||||
|
return "success";
|
||||||
|
} else {
|
||||||
|
log.error("notify_url 验证失败");
|
||||||
|
return "failure";
|
||||||
|
}
|
||||||
|
} catch (AlipayApiException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return "failure";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package com.ruoyi.cai.controller.app;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/api/user/member")
|
|
||||||
@Slf4j
|
|
||||||
@Tag(name = "用户会员接口")
|
|
||||||
public class UserMemberAppController {
|
|
||||||
}
|
|
||||||
@@ -2,8 +2,8 @@ package com.ruoyi.cai.controller.test;
|
|||||||
|
|
||||||
import com.ruoyi.cai.domain.RechargeOrder;
|
import com.ruoyi.cai.domain.RechargeOrder;
|
||||||
import com.ruoyi.cai.domain.VipOrder;
|
import com.ruoyi.cai.domain.VipOrder;
|
||||||
import com.ruoyi.cai.dto.AddRechargeOrderDto;
|
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
|
||||||
import com.ruoyi.cai.dto.dto.AddVipOrderDto;
|
import com.ruoyi.cai.dto.app.query.order.AddVipOrderDto;
|
||||||
import com.ruoyi.cai.pay.PayManager;
|
import com.ruoyi.cai.pay.PayManager;
|
||||||
import com.ruoyi.cai.service.RechargeOrderService;
|
import com.ruoyi.cai.service.RechargeOrderService;
|
||||||
import com.ruoyi.cai.service.VipOrderService;
|
import com.ruoyi.cai.service.VipOrderService;
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ public class RechargeOrder implements Serializable {
|
|||||||
* 状态 0-待支付 1-已支付 2-已退款 10-无需支付
|
* 状态 0-待支付 1-已支付 2-已退款 10-无需支付
|
||||||
*/
|
*/
|
||||||
private Integer payStatus;
|
private Integer payStatus;
|
||||||
|
|
||||||
|
private LocalDateTime payTime;
|
||||||
/**
|
/**
|
||||||
* appId
|
* appId
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ public class VipOrder implements Serializable {
|
|||||||
* 状态 0-待支付 1-已支付 2-已退款
|
* 状态 0-待支付 1-已支付 2-已退款
|
||||||
*/
|
*/
|
||||||
private Integer payStatus;
|
private Integer payStatus;
|
||||||
|
private LocalDateTime payTime;
|
||||||
/**
|
/**
|
||||||
* appId
|
* appId
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
package com.ruoyi.cai.dto;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class AddRechargeOrderDto {
|
|
||||||
/**
|
|
||||||
* 员工ID
|
|
||||||
*/
|
|
||||||
private Long userId;
|
|
||||||
/**
|
|
||||||
* 商品ID
|
|
||||||
*/
|
|
||||||
private Long goodId;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -2,8 +2,11 @@ package com.ruoyi.cai.dto;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ConsumeResp {
|
public class ConsumeResp {
|
||||||
|
private BigDecimal price;
|
||||||
private Long userId;
|
private Long userId;
|
||||||
private Long consumeLogId;
|
private Long consumeLogId;
|
||||||
private Long traceId;
|
private Long traceId;
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.ruoyi.cai.dto.app.query.order;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AddRechargeOrderDto {
|
||||||
|
/**
|
||||||
|
* 员工ID
|
||||||
|
*/
|
||||||
|
@Schema(description = "用户ID",hidden = true)
|
||||||
|
private Long userId;
|
||||||
|
/**
|
||||||
|
* 商品ID
|
||||||
|
*/
|
||||||
|
@Schema(description = "商品ID")
|
||||||
|
private Long goodId;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.ruoyi.cai.dto.app.query.order;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AddVipOrderDto {
|
||||||
|
@Schema(description = "用户ID",hidden = true)
|
||||||
|
private Long userId;
|
||||||
|
@Schema(description = "VIP价格ID")
|
||||||
|
private Long memberPriceId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.ruoyi.cai.dto.app.vo.order;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class OrderCreateVo {
|
||||||
|
@Schema(description = "订单号")
|
||||||
|
private String orderNo;
|
||||||
|
@Schema(description = "支付金额")
|
||||||
|
private BigDecimal price;
|
||||||
|
@Schema(description = "订单名称")
|
||||||
|
private String orderName;
|
||||||
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
package com.ruoyi.cai.dto.dto;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class AddVipOrderDto {
|
|
||||||
|
|
||||||
private Long userId;
|
|
||||||
private Long memberPriceId;
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,7 @@ import com.ruoyi.cai.dto.app.query.GiveGiftRes;
|
|||||||
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
|
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
|
||||||
import com.ruoyi.cai.dto.video.VideoSettleResp;
|
import com.ruoyi.cai.dto.video.VideoSettleResp;
|
||||||
import com.ruoyi.cai.mq.AmqpProducer;
|
import com.ruoyi.cai.mq.AmqpProducer;
|
||||||
|
import com.ruoyi.cai.pay.PayTypeEnum;
|
||||||
import com.ruoyi.cai.rank.RankManager;
|
import com.ruoyi.cai.rank.RankManager;
|
||||||
import com.ruoyi.cai.service.AccountService;
|
import com.ruoyi.cai.service.AccountService;
|
||||||
import com.ruoyi.cai.service.GuardTotalService;
|
import com.ruoyi.cai.service.GuardTotalService;
|
||||||
@@ -16,6 +17,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ConsumerManager {
|
public class ConsumerManager {
|
||||||
@@ -68,8 +71,8 @@ public class ConsumerManager {
|
|||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConsumeResp rechargeOrderSuccess(String tradeNo){
|
public ConsumeResp rechargeOrderSuccess(String tradeNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
|
||||||
ConsumeResp resp = rechargeOrderService.orderSuccess(tradeNo);
|
ConsumeResp resp = rechargeOrderService.orderSuccess(tradeNo,params,appId,payTypeEnum);
|
||||||
if(resp.isSuccess()){
|
if(resp.isSuccess()){
|
||||||
try {
|
try {
|
||||||
amqpProducer.sendCalculateSales(resp.getConsumeLogId()+"");
|
amqpProducer.sendCalculateSales(resp.getConsumeLogId()+"");
|
||||||
|
|||||||
106
ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java
Normal file
106
ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
package com.ruoyi.cai.pay;
|
||||||
|
|
||||||
|
import com.alipay.api.domain.AppItemDataDiffVO;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.ijpay.alipay.AliPayApiConfig;
|
||||||
|
import com.ijpay.alipay.AliPayApiConfigKit;
|
||||||
|
import com.ruoyi.cai.domain.PayConfig;
|
||||||
|
import com.ruoyi.cai.service.PayConfigService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class PayConfigManager {
|
||||||
|
private static final Map<Long,PayConfig> PAY_CONFIGS_MAP = new HashMap<>();
|
||||||
|
@Autowired
|
||||||
|
private PayConfigService payConfigService;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init(){
|
||||||
|
List<PayConfig> list = payConfigService.list(Wrappers.lambdaQuery(PayConfig.class));
|
||||||
|
for (PayConfig payConfig : list) {
|
||||||
|
PAY_CONFIGS_MAP.put(payConfig.getId(), payConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1支付宝2微信
|
||||||
|
public void addPayConfig(PayConfig payConfig) {
|
||||||
|
PAY_CONFIGS_MAP.put(payConfig.getId(),payConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updatePayConfig(PayConfig payConfig) {
|
||||||
|
PAY_CONFIGS_MAP.put(payConfig.getId(),payConfig);
|
||||||
|
if(PayTypeEnum.ALI.getCode().equals(payConfig.getPayType())){
|
||||||
|
AliPayApiConfigKit.removeApiConfig(payConfig.getAppid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deletePayConfig(PayConfig payConfig) {
|
||||||
|
PAY_CONFIGS_MAP.remove(payConfig.getId());
|
||||||
|
if(PayTypeEnum.ALI.getCode().equals(payConfig.getPayType())){
|
||||||
|
AliPayApiConfigKit.removeApiConfig(payConfig.getAppid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PayConfig getWxConfig(){
|
||||||
|
Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
|
||||||
|
for (PayConfig value : values) {
|
||||||
|
if(PayTypeEnum.WX.getCode().equals(value.getPayType())){
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PayConfig getAliConfig(){
|
||||||
|
Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
|
||||||
|
for (PayConfig value : values) {
|
||||||
|
if(PayTypeEnum.ALI.getCode().equals(value.getPayType())){
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean initAliPay() {
|
||||||
|
PayConfig payConfig = this.getAliConfig();
|
||||||
|
if(payConfig == null){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
AliPayApiConfig aliPayApiConfig;
|
||||||
|
try {
|
||||||
|
aliPayApiConfig = AliPayApiConfigKit.getApiConfig(payConfig.getAppid());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("实例化AliPayApiConfig...");
|
||||||
|
// 如果Map中没有当前支付宝的实例就初始化并添加到Map中
|
||||||
|
aliPayApiConfig = AliPayApiConfig.builder()
|
||||||
|
.setAppId(payConfig.getAppid())
|
||||||
|
.setAliPayPublicKey(payConfig.getPublicKey())
|
||||||
|
.setCharset("UTF-8")
|
||||||
|
.setPrivateKey(payConfig.getPrivateKey())
|
||||||
|
.setServiceUrl(payConfig.getNotifyUrl())
|
||||||
|
.setSignType("RSA2")
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PayConfig getAliConfigByAppId(String appId) {
|
||||||
|
this.getWxConfigByMchId(appId);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PayConfig getWxConfigByMchId(String mchId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.ruoyi.cai.pay;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PayControllerDTO {
|
||||||
|
@Schema(description = "订单号")
|
||||||
|
private String tradeNo;
|
||||||
|
@Schema(description = "微信支付的时候需要传")
|
||||||
|
private String wxAppId;
|
||||||
|
}
|
||||||
@@ -8,6 +8,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class PayManager {
|
public class PayManager {
|
||||||
@@ -20,6 +22,10 @@ public class PayManager {
|
|||||||
private AwardManager awardManager;
|
private AwardManager awardManager;
|
||||||
|
|
||||||
public void callBack(String orderNo){
|
public void callBack(String orderNo){
|
||||||
|
callBack(orderNo,null,null,null,null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void callBack(String orderNo, String transId, Map<String,String> params, String appId,PayTypeEnum payTypeEnum){
|
||||||
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
|
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
|
||||||
if(orderTypeEnum == null){
|
if(orderTypeEnum == null){
|
||||||
log.error("订单类型有误!orderNo={}",orderNo);
|
log.error("订单类型有误!orderNo={}",orderNo);
|
||||||
@@ -27,17 +33,20 @@ public class PayManager {
|
|||||||
}
|
}
|
||||||
switch (orderTypeEnum){
|
switch (orderTypeEnum){
|
||||||
case VIP_ORDER_SUB:
|
case VIP_ORDER_SUB:
|
||||||
vipOrderService.orderSuccess(orderNo);
|
ConsumeResp vipResp = vipOrderService.orderSuccess(orderNo,params,appId,payTypeEnum);
|
||||||
|
if(vipResp.isSuccess()){
|
||||||
|
// 记录数据 TODO
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case RECHARGE_ORDER_SUB:
|
case RECHARGE_ORDER_SUB:
|
||||||
ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo);
|
ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo,params,appId,payTypeEnum);
|
||||||
if(resp.isSuccess()){
|
if(resp.isSuccess()){
|
||||||
awardManager.giveFastPayAsync(resp.getUserId(), resp.getTraceId());
|
awardManager.giveFastPayAsync(resp.getUserId(), resp.getTraceId());
|
||||||
|
// 记录数据 TODO
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.ruoyi.cai.pay;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PayReturnResp {
|
||||||
|
private String data;
|
||||||
|
}
|
||||||
16
ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayTypeEnum.java
Normal file
16
ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayTypeEnum.java
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package com.ruoyi.cai.pay;
|
||||||
|
|
||||||
|
public enum PayTypeEnum {
|
||||||
|
ALI(1),
|
||||||
|
WX(2),
|
||||||
|
;
|
||||||
|
private final Integer code;
|
||||||
|
|
||||||
|
PayTypeEnum(Integer code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,4 +11,9 @@ import com.ruoyi.cai.domain.PayConfig;
|
|||||||
*/
|
*/
|
||||||
public interface PayConfigService extends IService<PayConfig> {
|
public interface PayConfigService extends IService<PayConfig> {
|
||||||
|
|
||||||
|
boolean addPayConfig(PayConfig payConfig);
|
||||||
|
|
||||||
|
boolean updatePayConfig(PayConfig payConfig);
|
||||||
|
|
||||||
|
boolean deletePayConfig(Long id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.ruoyi.cai.domain.RechargeOrder;
|
import com.ruoyi.cai.domain.RechargeOrder;
|
||||||
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
|
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
|
||||||
import com.ruoyi.cai.dto.AddRechargeOrderDto;
|
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
|
||||||
import com.ruoyi.cai.dto.ConsumeResp;
|
import com.ruoyi.cai.dto.ConsumeResp;
|
||||||
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
|
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
|
||||||
|
import com.ruoyi.cai.pay.PayTypeEnum;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 充值订单Service接口
|
* 充值订单Service接口
|
||||||
@@ -24,7 +26,7 @@ public interface RechargeOrderService extends IService<RechargeOrder> {
|
|||||||
|
|
||||||
RechargeOrder addRechargeOrder(AddRechargeOrderDto addRechargeOrderDto);
|
RechargeOrder addRechargeOrder(AddRechargeOrderDto addRechargeOrderDto);
|
||||||
|
|
||||||
ConsumeResp orderSuccess(String orderNo);
|
ConsumeResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum);
|
||||||
|
|
||||||
RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto);
|
RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,14 @@ package com.ruoyi.cai.service;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.ruoyi.cai.domain.VipOrder;
|
import com.ruoyi.cai.domain.VipOrder;
|
||||||
|
import com.ruoyi.cai.dto.ConsumeResp;
|
||||||
import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo;
|
import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo;
|
||||||
import com.ruoyi.cai.dto.dto.AddVipOrderDto;
|
import com.ruoyi.cai.dto.app.query.order.AddVipOrderDto;
|
||||||
|
import com.ruoyi.cai.pay.PayTypeEnum;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VIP订单Service接口
|
* VIP订单Service接口
|
||||||
*
|
*
|
||||||
@@ -21,7 +25,7 @@ public interface VipOrderService extends IService<VipOrder> {
|
|||||||
|
|
||||||
VipOrder getByOrderNo(String orderNo);
|
VipOrder getByOrderNo(String orderNo);
|
||||||
|
|
||||||
void orderSuccess(String orderNo);
|
ConsumeResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum);
|
||||||
|
|
||||||
Page<VipOrderAdminVo> pageAdmin(PageQuery pageQuery, VipOrderAdminVo bo);
|
Page<VipOrderAdminVo> pageAdmin(PageQuery pageQuery, VipOrderAdminVo bo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ package com.ruoyi.cai.service.impl;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.ruoyi.cai.domain.PayConfig;
|
import com.ruoyi.cai.domain.PayConfig;
|
||||||
import com.ruoyi.cai.mapper.PayConfigMapper;
|
import com.ruoyi.cai.mapper.PayConfigMapper;
|
||||||
|
import com.ruoyi.cai.pay.PayConfigManager;
|
||||||
import com.ruoyi.cai.service.PayConfigService;
|
import com.ruoyi.cai.service.PayConfigService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付配置Service业务层处理
|
* 支付配置Service业务层处理
|
||||||
@@ -13,7 +15,46 @@ import org.springframework.stereotype.Service;
|
|||||||
* @author 77
|
* @author 77
|
||||||
* @date 2024-01-20
|
* @date 2024-01-20
|
||||||
*/
|
*/
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Service
|
@Service
|
||||||
public class PayConfigServiceImpl extends ServiceImpl<PayConfigMapper,PayConfig> implements PayConfigService {
|
public class PayConfigServiceImpl extends ServiceImpl<PayConfigMapper,PayConfig> implements PayConfigService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PayConfigManager payConfigManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean addPayConfig(PayConfig payConfig){
|
||||||
|
boolean save = this.save(payConfig);
|
||||||
|
if(save){
|
||||||
|
payConfigManager.addPayConfig(payConfig);
|
||||||
|
}
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean updatePayConfig(PayConfig payConfig){
|
||||||
|
boolean update = this.updateById(payConfig);
|
||||||
|
if(update){
|
||||||
|
payConfig = this.getById(payConfig.getId());
|
||||||
|
payConfigManager.updatePayConfig(payConfig);
|
||||||
|
}
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean deletePayConfig(Long id){
|
||||||
|
PayConfig payConfig = this.getById(id);
|
||||||
|
if(payConfig == null){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
boolean b = this.removeById(id);
|
||||||
|
if(b){
|
||||||
|
payConfigManager.deletePayConfig(payConfig);
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.ruoyi.cai.domain.*;
|
import com.ruoyi.cai.domain.*;
|
||||||
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
|
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
|
||||||
import com.ruoyi.cai.dto.AddRechargeOrderDto;
|
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
|
||||||
import com.ruoyi.cai.dto.ConsumeResp;
|
import com.ruoyi.cai.dto.ConsumeResp;
|
||||||
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
|
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
|
||||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||||
@@ -15,10 +15,7 @@ import com.ruoyi.cai.enums.account.AccountTypeEnum;
|
|||||||
import com.ruoyi.cai.manager.IdManager;
|
import com.ruoyi.cai.manager.IdManager;
|
||||||
import com.ruoyi.cai.mapper.AccountMapper;
|
import com.ruoyi.cai.mapper.AccountMapper;
|
||||||
import com.ruoyi.cai.mapper.RechargeOrderMapper;
|
import com.ruoyi.cai.mapper.RechargeOrderMapper;
|
||||||
import com.ruoyi.cai.pay.OrderNoUtil;
|
import com.ruoyi.cai.pay.*;
|
||||||
import com.ruoyi.cai.pay.OrderTypeEnum;
|
|
||||||
import com.ruoyi.cai.pay.PayStatusEnum;
|
|
||||||
import com.ruoyi.cai.pay.PlatformTypeEnum;
|
|
||||||
import com.ruoyi.cai.service.*;
|
import com.ruoyi.cai.service.*;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
@@ -31,6 +28,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 充值订单Service业务层处理
|
* 充值订单Service业务层处理
|
||||||
@@ -93,7 +92,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public ConsumeResp orderSuccess(String orderNo){
|
public ConsumeResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
|
||||||
RechargeOrder rechargeOrder = this.getByOrderNo(orderNo);
|
RechargeOrder rechargeOrder = this.getByOrderNo(orderNo);
|
||||||
if(rechargeOrder == null){
|
if(rechargeOrder == null){
|
||||||
throw new ServiceException("订单不存在");
|
throw new ServiceException("订单不存在");
|
||||||
@@ -103,10 +102,15 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
|||||||
throw new ServiceException("订单支付状态错误!");
|
throw new ServiceException("订单支付状态错误!");
|
||||||
}
|
}
|
||||||
Long traceId = IdManager.nextId();
|
Long traceId = IdManager.nextId();
|
||||||
|
Integer payType = payTypeEnum == null ? null : payTypeEnum.getCode();
|
||||||
boolean update = this.update(Wrappers.lambdaUpdate(RechargeOrder.class)
|
boolean update = this.update(Wrappers.lambdaUpdate(RechargeOrder.class)
|
||||||
.eq(RechargeOrder::getOrderNo, rechargeOrder.getOrderNo())
|
.eq(RechargeOrder::getOrderNo, rechargeOrder.getOrderNo())
|
||||||
.eq(RechargeOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode())
|
.eq(RechargeOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode())
|
||||||
.set(RechargeOrder::getPayStatus, PayStatusEnum.PAY.getCode())
|
.set(RechargeOrder::getPayStatus, PayStatusEnum.PAY.getCode())
|
||||||
|
.set(RechargeOrder::getPayTime, LocalDateTime.now())
|
||||||
|
.set(payType!=null, RechargeOrder::getPlatformType, payType)
|
||||||
|
.set(RechargeOrder::getAppid,appId)
|
||||||
|
.set(RechargeOrder::getReturnContent,JSON.toJSONString(params))
|
||||||
.set(RechargeOrder::getTraceId,traceId));
|
.set(RechargeOrder::getTraceId,traceId));
|
||||||
if(!update){
|
if(!update){
|
||||||
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(rechargeOrder));
|
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(rechargeOrder));
|
||||||
@@ -124,6 +128,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
|||||||
resp.setConsumeLogId(consumeLog.getId());
|
resp.setConsumeLogId(consumeLog.getId());
|
||||||
resp.setUserId(user.getId());
|
resp.setUserId(user.getId());
|
||||||
resp.setTraceId(traceId);
|
resp.setTraceId(traceId);
|
||||||
|
resp.setPrice(rechargeOrder.getPrice());
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import com.ruoyi.cai.domain.MemberPrice;
|
|||||||
import com.ruoyi.cai.domain.User;
|
import com.ruoyi.cai.domain.User;
|
||||||
import com.ruoyi.cai.domain.UserMember;
|
import com.ruoyi.cai.domain.UserMember;
|
||||||
import com.ruoyi.cai.domain.VipOrder;
|
import com.ruoyi.cai.domain.VipOrder;
|
||||||
|
import com.ruoyi.cai.dto.ConsumeResp;
|
||||||
import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo;
|
import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo;
|
||||||
import com.ruoyi.cai.dto.dto.AddVipOrderDto;
|
import com.ruoyi.cai.dto.app.query.order.AddVipOrderDto;
|
||||||
import com.ruoyi.cai.mapper.VipOrderMapper;
|
import com.ruoyi.cai.mapper.VipOrderMapper;
|
||||||
import com.ruoyi.cai.pay.*;
|
import com.ruoyi.cai.pay.*;
|
||||||
import com.ruoyi.cai.service.*;
|
import com.ruoyi.cai.service.*;
|
||||||
@@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VIP订单Service业务层处理
|
* VIP订单Service业务层处理
|
||||||
@@ -118,7 +120,7 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void orderSuccess(String orderNo){
|
public ConsumeResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
|
||||||
VipOrder vipOrder = this.getByOrderNo(orderNo);
|
VipOrder vipOrder = this.getByOrderNo(orderNo);
|
||||||
if(vipOrder == null){
|
if(vipOrder == null){
|
||||||
throw new ServiceException("订单不存在");
|
throw new ServiceException("订单不存在");
|
||||||
@@ -127,16 +129,27 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
|
|||||||
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(vipOrder));
|
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(vipOrder));
|
||||||
throw new ServiceException("订单支付状态错误!");
|
throw new ServiceException("订单支付状态错误!");
|
||||||
}
|
}
|
||||||
|
Integer payType = payTypeEnum == null ? null : payTypeEnum.getCode();
|
||||||
boolean update = this.update(Wrappers.lambdaUpdate(VipOrder.class)
|
boolean update = this.update(Wrappers.lambdaUpdate(VipOrder.class)
|
||||||
.eq(VipOrder::getOrderNo, vipOrder.getOrderNo())
|
.eq(VipOrder::getOrderNo, vipOrder.getOrderNo())
|
||||||
.eq(VipOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode())
|
.eq(VipOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode())
|
||||||
.set(VipOrder::getPayStatus, PayStatusEnum.PAY.getCode()));
|
.set(VipOrder::getPayStatus, PayStatusEnum.PAY.getCode())
|
||||||
|
.set(VipOrder::getPayTime, LocalDateTime.now())
|
||||||
|
.set(VipOrder::getAppid,appId)
|
||||||
|
.set(payType != null, VipOrder::getPlatformType,payType)
|
||||||
|
.set(VipOrder::getReturnContent,JSON.toJSONString(params))
|
||||||
|
);
|
||||||
if(!update){
|
if(!update){
|
||||||
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(vipOrder));
|
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(vipOrder));
|
||||||
throw new ServiceException("订单支付状态错误!");
|
throw new ServiceException("订单支付状态错误!");
|
||||||
}
|
}
|
||||||
// 新增会员
|
// 新增会员
|
||||||
incVip(vipOrder.getUserId(),vipOrder.getVipType(),vipOrder.getVipExpire(),vipOrder.getVipLongs());
|
incVip(vipOrder.getUserId(),vipOrder.getVipType(),vipOrder.getVipExpire(),vipOrder.getVipLongs());
|
||||||
|
ConsumeResp consumeResp = new ConsumeResp();
|
||||||
|
consumeResp.setPrice(vipOrder.getPrice());
|
||||||
|
consumeResp.setUserId(vipOrder.getUserId());
|
||||||
|
consumeResp.setSuccess(true);
|
||||||
|
return consumeResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean incVip(Long userId,Integer memberType,Integer expire,Integer longs){
|
public boolean incVip(Long userId,Integer memberType,Integer expire,Integer longs){
|
||||||
|
|||||||
Reference in New Issue
Block a user