From 523797c2e9e4e8934751327db754f1f77763f356 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期日, 26 一月 2025 16:24:30 +0800
Subject: [PATCH] 全部代码、数据库提交
---
xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/impl/OrderServiceImpl.java | 690 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 608 insertions(+), 82 deletions(-)
diff --git a/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/impl/OrderServiceImpl.java b/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/impl/OrderServiceImpl.java
index f3ecd59..4a87d8c 100644
--- a/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/impl/OrderServiceImpl.java
+++ b/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/impl/OrderServiceImpl.java
@@ -2,7 +2,6 @@
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xinquan.common.core.constant.Constants;
import com.xinquan.common.core.constant.SecurityConstants;
import com.xinquan.common.core.enums.ChargeTypeEnum;
import com.xinquan.common.core.enums.DisabledEnum;
@@ -10,7 +9,7 @@
import com.xinquan.common.core.enums.PaymentTypeEnum;
import com.xinquan.common.core.exception.ServiceException;
import com.xinquan.common.core.utils.ip.IpUtils;
-import com.xinquan.common.security.utils.SecurityUtils;
+import com.xinquan.common.security.service.TokenService;
import com.xinquan.course.api.domain.Course;
import com.xinquan.course.api.feign.RemoteCourseService;
import com.xinquan.meditation.api.domain.Meditation;
@@ -21,15 +20,23 @@
import com.xinquan.order.mapper.OrderMapper;
import com.xinquan.order.service.OrderPaymentRecordService;
import com.xinquan.order.service.OrderService;
-import com.xinquan.order.utils.JuHeFuUtil;
+import com.xinquan.common.core.utils.JuHeFuUtil;
+import com.xinquan.order.utils.MD5Generator;
import com.xinquan.order.utils.OrderUtil;
-import com.xinquan.user.api.domain.AppUser;
+import com.xinquan.system.api.domain.AppUser;
+import com.xinquan.system.api.domain.AppUserWalletRecord;
+import com.xinquan.system.api.model.LoginUser;
import com.xinquan.user.api.domain.dto.AppUserDTO;
import com.xinquan.user.api.feign.RemoteAppUserService;
import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDateTime;
import java.util.List;
+
+import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -55,7 +62,8 @@
private RemoteAppUserService remoteAppUserService;
@Resource
private OrderPaymentRecordService orderPaymentRecordService;
-
+ @Autowired
+ private TokenService tokenService;
/**
* 创建待支付订单
*
@@ -69,88 +77,201 @@
*/
@Override
@Transactional(rollbackFor = Exception.class)
- public ClientPlaceOrderVO placeOrder(Long targetId, Integer orderFrom, Long receiverId,
- Integer balanceFlag, Integer payType) throws Exception {
+ public ClientPlaceOrderVO placeOrder(Long targetId, Integer orderFrom, Long receiverId, Long orderId,
+ Integer balanceFlag, Integer payType,BigDecimal amount,Integer vipType,Integer type) throws Exception {
// 获取当前登录用户id
- Long userId = SecurityUtils.getUserId();
+ LoginUser loginUser = tokenService.getLoginUser();
+ if (loginUser==null){
+ return new ClientPlaceOrderVO();
+ }
+ Long userId = loginUser.getUserid();
+ if (amount!=null){
+ amount = amount.setScale(2, RoundingMode.HALF_DOWN);
+ }
// 获取用户信息
AppUser appUser = getAppUserById(userId);
ClientPlaceOrderVO clientPlaceOrderVO = new ClientPlaceOrderVO();
Order order = new Order();
+ order.setPayType(payType);
+ AppUser data = remoteAppUserService.getAppUserById(userId + "").getData();
+
// 购买冥想音频
if (orderFrom == 1) {
Meditation meditation = remoteMeditationService.getMeditationById(targetId,
SecurityConstants.INNER).getData();
String meditationTitle = meditation.getMeditationTitle();
- String detailDescription = meditation.getDetailDescription();
+ String detailDescription = "购买疗愈音频";
String wxOpenId = appUser.getWxOpenId();
// 创建订单
String orderNo = OrderUtil.getOrderNoForPrefix("MX");
- order.setOrderFrom(orderFrom);
- order.setBizOrderNo(orderNo);
- order.setBusinessId(meditation.getId());
- order.setAppUserId(userId);
- order.setTotalAmount(meditation.getGeneralPrice());
- this.save(order);
- Long orderId = order.getId();
- clientPlaceOrderVO.setOrderNo(orderNo);
- clientPlaceOrderVO.setId(orderId);
- // 如果冥想音频价格设定为单独收费,且需要使用余额抵扣
- if (balanceFlag.equals(1) && meditation.getChargeType()
- .equals(ChargeTypeEnum.SEPARATE_CHARGE.getCode())) {
- BigDecimal needPayAmount = handleBalancePayment(appUser,
- meditation.getGeneralPrice(),
- orderId);
+ if (orderId==null){
+ order.setPayType(payType);
+ order.setOrderFrom(orderFrom);
+ order.setBizOrderNo(orderNo);
+ order.setBusinessId(meditation.getId());
+ order.setAppUserId(userId);
+ order.setRealPayAmount(type==null?meditation.getGeneralPrice():meditation.getIosPrice());
+ order.setTotalAmount(type==null?meditation.getGeneralPrice():meditation.getIosPrice());
+ order.setPayType(payType);
+ order.setBuyContent("购买疗愈【"+meditationTitle+"】");
+ order.setGiveUserId(receiverId);
+ this.save(order);
+ }else{
+ order = this.getById(orderId);
+ order.setBizOrderNo(orderNo);
+ order.setBuyContent("购买疗愈【"+meditationTitle+"】");
+ this.updateById(order);
+ }
+ Long orderId9 = order.getId();
+ clientPlaceOrderVO.setOrderNo(orderNo);
+ clientPlaceOrderVO.setId(orderId9);
+
+ // 如果冥想音频价格设定为单独收费,且需要使用余额抵扣
+ if (data.getBalance().compareTo(new BigDecimal("0")) > 0 && balanceFlag.equals(1) && meditation.getChargeType().equals(ChargeTypeEnum.SEPARATE_CHARGE.getCode())) {
+ BigDecimal needPayAmount = handleBalancePayment(appUser,
+ type==null?meditation.getGeneralPrice():meditation.getIosPrice(),
+ orderId9);
if (needPayAmount.compareTo(BigDecimal.ZERO) <= 0) {
clientPlaceOrderVO.setZeroFlag(DisabledEnum.YES.getCode());
+ // 抵扣后金额为0 为余额支付
+ order.setPayType(4);
+ order.setBuyContent("购买疗愈【"+meditationTitle+"】");
+ this.updateById(order);
return clientPlaceOrderVO;
}
+ if (payType==1){
+ // 微信+余额
+ order.setPayType(5);
+ }else if (payType == 2){
+ // 支付宝+余额
+ order.setPayType(6);
+ }
+ order.setBuyContent("购买疗愈【"+meditationTitle+"】");
+ this.updateById(order);
// 创建支付订单
- createPayment(payType, orderNo, needPayAmount, meditationTitle, detailDescription,
- wxOpenId, orderId, clientPlaceOrderVO);
+ createPayment(payType, orderNo, needPayAmount, meditationTitle, "购买疗愈",
+ wxOpenId, orderId9, clientPlaceOrderVO);
} else {
// 创建支付订单
- createPayment(payType, orderNo, meditation.getGeneralPrice(), meditationTitle,
- detailDescription, wxOpenId, orderId, clientPlaceOrderVO);
+ createPayment(payType, orderNo, type==null?order.getRealPayAmount():order.getRealPayAmount(), meditationTitle,
+ "购买疗愈", wxOpenId, orderId9, clientPlaceOrderVO);
}
- } else {
+ }
+ else if (orderFrom == 2){
// 购买课程
- Course course = remoteCourseService.getCourseById(targetId,
- SecurityConstants.INNER).getData();
+ Course course = remoteCourseService.getCourseById(targetId).getData();
String courseTitle = course.getCourseTitle();
String wxOpenId = appUser.getWxOpenId();
- String description = course.getDescription();
+ String description = "购买课程";
// 创建订单
String orderNo = OrderUtil.getOrderNoForPrefix("KC");
- order.setOrderFrom(orderFrom);
- order.setBizOrderNo(orderNo);
- order.setBusinessId(course.getId());
- order.setAppUserId(userId);
- order.setTotalAmount(course.getGeneralPrice());
- this.save(order);
- Long orderId = order.getId();
- clientPlaceOrderVO.setOrderNo(orderNo);
- clientPlaceOrderVO.setId(orderId);
+ if (orderId==null){
+ order.setOrderFrom(orderFrom);
+ order.setBizOrderNo(orderNo);
+ order.setGiveUserId(receiverId);
+ order.setBusinessId(course.getId());
- if (balanceFlag.equals(1) && course.getChargeType()
+ order.setAppUserId(userId);
+ order.setBuyContent("购买课程【"+courseTitle+"】");
+ order.setRealPayAmount(type==null?course.getGeneralPrice():course.getIosPrice());
+ order.setTotalAmount(type==null?course.getGeneralPrice():course.getIosPrice());
+ this.save(order);
+ }else{
+ order = this.getById(orderId);
+ order.setBuyContent("购买课程【"+courseTitle+"】");
+ order.setBizOrderNo(orderNo);
+ this.updateById(order);
+
+ }
+ Long orderId8 = order.getId();
+ clientPlaceOrderVO.setOrderNo(orderNo);
+ clientPlaceOrderVO.setId(orderId8);
+
+ if (data.getBalance().compareTo(new BigDecimal("0")) > 0 && balanceFlag.equals(1) && course.getChargeType()
.equals(ChargeTypeEnum.SEPARATE_CHARGE.getCode())) {
- BigDecimal needPayAmount = handleBalancePayment(appUser, course.getGeneralPrice(),
- orderId);
+ BigDecimal needPayAmount = handleBalancePayment(appUser, type==null?course.getGeneralPrice():course.getIosPrice(),
+ orderId8);
if (needPayAmount.compareTo(BigDecimal.ZERO) <= 0) {
clientPlaceOrderVO.setZeroFlag(DisabledEnum.YES.getCode());
+ // 抵扣后金额为0 为余额支付
+ order.setPayType(4);
+ order.setBuyContent("购买课程【"+courseTitle+"】");
+
+ this.updateById(order);
return clientPlaceOrderVO;
}
+ if (payType==1){
+ // 微信+余额
+ order.setPayType(5);
+ }else if (payType == 2){
+ // 支付宝+余额
+ order.setPayType(6);
+ }
+ order.setBuyContent("购买课程【"+courseTitle+"】");
+
+ this.updateById(order);
// 创建支付订单
- createPayment(payType, orderNo, needPayAmount, courseTitle, description,
- wxOpenId, orderId, clientPlaceOrderVO);
+ createPayment(payType, orderNo, needPayAmount, courseTitle, "购买课程",
+ wxOpenId, orderId8, clientPlaceOrderVO);
} else {
// 创建支付订单
- createPayment(payType, orderNo, course.getGeneralPrice(), courseTitle,
- description, wxOpenId, orderId, clientPlaceOrderVO);
+ createPayment(payType, orderNo, order.getRealPayAmount(), courseTitle,
+ "购买课程", wxOpenId, orderId8, clientPlaceOrderVO);
}
+ }
+ else if (orderFrom == 3){
+ String wxOpenId = appUser.getWxOpenId();
+ // 创建订单
+ String orderNo = OrderUtil.getOrderNoForPrefix("HY");
+ order.setOrderFrom(orderFrom);
+ order.setBizOrderNo(orderNo);
+ order.setAppUserId(userId);
+ order.setTotalAmount(amount);
+ order.setPayType(payType);
+ order.setRealPayAmount(amount);
+ String vipType1 ="";
+ switch (vipType){
+ case 1:
+ vipType1="月会员";
+ break;
+ case 2:
+ vipType1="季会员";
+ break;
+ case 3:
+ vipType1="年会员";
+ break;
+ }
+ order.setBuyContent(vipType1);
+ this.save(order);
+ Long orderId7 = order.getId();
+ clientPlaceOrderVO.setOrderNo(orderNo);
+ clientPlaceOrderVO.setId(orderId7);
+ // 创建支付订单
+ createPayment(payType, orderNo, amount, "购买会员",
+ vipType1, wxOpenId, orderId7, clientPlaceOrderVO);
+
+ }else {
+ // 充值
+ String wxOpenId = appUser.getWxOpenId();
+ // 创建订单
+ String orderNo = OrderUtil.getOrderNoForPrefix("CZ");
+ order.setOrderFrom(orderFrom);
+ order.setBizOrderNo(orderNo);
+ order.setAppUserId(userId);
+ order.setTotalAmount(amount);
+ order.setRealPayAmount(amount);
+ order.setPayType(payType);
+ order.setBuyContent("充值");
+ this.save(order);
+ Long orderId6 = order.getId();
+ clientPlaceOrderVO.setOrderNo(orderNo);
+ clientPlaceOrderVO.setId(orderId6);
+ // 创建支付订单
+ createPayment(payType, orderNo, amount, "充值余额",
+ "充值余额", wxOpenId, orderId6, clientPlaceOrderVO);
}
return clientPlaceOrderVO;
}
@@ -169,21 +290,49 @@
if (appUser.getBalance().compareTo(BigDecimal.ZERO) < 0) {
throw new ServiceException("用户可用余额不足,请重新选择支付方案");
}
- // 更新用户余额
- remoteAppUserService.updateAppUser(
- AppUserDTO.builder().balance(
- appUser.getBalance().subtract(generalPrice))
- .build(), SecurityConstants.INNER);
+ Order one = this.lambdaQuery().eq(Order::getId, orderId).one();
- OrderPaymentRecord balancePaymentRecord = new OrderPaymentRecord();
- balancePaymentRecord.setOrderId(orderId);
- balancePaymentRecord.setPaymentType(PaymentTypeEnum.BALANCE_PAY.getCode());
- balancePaymentRecord.setPaymentStatus(PaymentStatusEnum.COMPLETED.getCode());
- orderPaymentRecordService.save(balancePaymentRecord);
+ // 如果余额大于通用价格 则实际支付价格为0
+ if (appUser.getBalance().compareTo(one.getRealPayAmount())>=0){
+ // 更新用户余额
+// remoteAppUserService.updateAppUser(
+// AppUserDTO.builder().balance(
+// appUser.getBalance().subtract(one.getRealPayAmount()))
+// .build(), SecurityConstants.INNER);
+ OrderPaymentRecord balancePaymentRecord = new OrderPaymentRecord();
+ balancePaymentRecord.setOrderId(orderId);
+ balancePaymentRecord.setPayAmount(one.getRealPayAmount());
+ balancePaymentRecord.setPaymentType(PaymentTypeEnum.BALANCE_PAY.getCode());
+ balancePaymentRecord.setPaymentStatus(PaymentStatusEnum.COMPLETED.getCode());
+ List<OrderPaymentRecord> list = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, orderId)
+ .eq(OrderPaymentRecord::getPaymentType, 4).list();
+ if (list.isEmpty()){
+ orderPaymentRecordService.save(balancePaymentRecord);
+ }
- // 计算除去余额还需支付的金额
- return generalPrice
- .subtract(appUser.getBalance());
+ return new BigDecimal("0");
+ }else {
+ // 更新用户余额
+// remoteAppUserService.updateAppUser(
+// AppUserDTO.builder().balance(
+// one.getRealPayAmount().subtract(appUser.getBalance()))
+// .build(), SecurityConstants.INNER);
+
+ OrderPaymentRecord balancePaymentRecord = new OrderPaymentRecord();
+ balancePaymentRecord.setOrderId(orderId);
+ balancePaymentRecord.setPaymentType(PaymentTypeEnum.BALANCE_PAY.getCode());
+ balancePaymentRecord.setPaymentStatus(PaymentStatusEnum.COMPLETED.getCode());
+ balancePaymentRecord.setPayAmount(appUser.getBalance());
+ List<OrderPaymentRecord> list = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, orderId)
+ .eq(OrderPaymentRecord::getPaymentType, 4).list();
+ if (list.isEmpty()){
+ orderPaymentRecordService.save(balancePaymentRecord);
+ }
+ // 计算除去余额还需支付的金额
+ return one.getRealPayAmount()
+ .subtract(appUser.getBalance());
+ }
+
}
/**
@@ -193,9 +342,7 @@
* @return AppUser
*/
private AppUser getAppUserById(Long userId) {
- return remoteAppUserService.getUserByCondition(
- AppUserDTO.builder().id(userId).build(),
- SecurityConstants.INNER).getData();
+ return remoteAppUserService.getAppUserById(userId+"").getData();
}
/**
@@ -214,28 +361,76 @@
private void createPayment(Integer payType, String orderNo, BigDecimal needPayAmount,
String goodsTitle, String goodsDesc, String wxOpenId, Long orderId,
ClientPlaceOrderVO clientPlaceOrderVO) throws Exception {
- // 截取前42个字符 商品描述信息,微信小程序和微信公众号该字段,最大长度 42 个字符
- goodsDesc = goodsDesc.substring(0, 42);
- // 调用第三方支付获取支付信息
- JSONObject payInfo = JuHeFuUtil.createPayment(orderNo, payType,
- needPayAmount.toString(), goodsTitle, goodsDesc,
- IpUtils.getIpAddr(), wxOpenId, Constants.PAYMENT_NOTIFY_URL);
- // 第三方支付记录
- OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
- paymentRecord.setOrderId(orderId);
-
- if (payType == 1) {
- clientPlaceOrderVO.setPayInfo(payInfo.getString("pay_info"));
+ if (payType == 1){
+ // 微信托管支付
+ // 截取前42个字符 商品描述信息,微信小程序和微信公众号该字段,最大长度 42 个字符
+ // 调用第三方支付获取支付信息
+ JSONObject payInfo = JuHeFuUtil.createPayment1(orderNo, payType,
+ needPayAmount.toString(), goodsTitle, goodsDesc,
+ IpUtils.getIpAddr(), wxOpenId,
+ "https://xq.xqzhihui.com/api/order/client/order/order/base/callback"
+// "https://xq.xqzhihui.com/api/order/client/order/order/base/callback"
+ );
+ // 第三方支付记录
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setOrderId(orderId);
+ Order byId = this.getById(orderId);
+ this.updateById(byId);
+ clientPlaceOrderVO.setPayAmt(payInfo.getString("pay_amt"));
+ clientPlaceOrderVO.setPath(payInfo.getJSONObject("expend").getString("path"));
+ clientPlaceOrderVO.setPayInfo(payInfo.getJSONObject("expend").getString("pay_info"));
+ clientPlaceOrderVO.setOrgId(payInfo.getJSONObject("expend").getString("orgId"));
+ clientPlaceOrderVO.setAppId(payInfo.getJSONObject("expend").getString("appId"));
paymentRecord.setPaymentType(PaymentTypeEnum.WECHAT_PAY.getCode());
- } else {
- clientPlaceOrderVO.setQrcodeUrl(payInfo.getString("qrcode_url"));
+ paymentRecord.setPayOrderNo(payInfo.getString("id"));
+ clientPlaceOrderVO.setOrderId(payInfo.getString("id"));
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+ paymentRecord.setPayAmount(needPayAmount);
+ OrderPaymentRecord list = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, orderId)
+ .ne(OrderPaymentRecord::getPaymentType, 4).one();
+ if (list==null){
+ orderPaymentRecordService.save(paymentRecord);
+ }else{
+ list.setPayOrderNo(payInfo.getString("id"));
+ orderPaymentRecordService.updateById(list);
+ }
+ // 设置订单是否需要支付标识
+ clientPlaceOrderVO.setZeroFlag(DisabledEnum.NO.getCode());
+ }else{
+ // 调用第三方支付获取支付信息
+ JSONObject payInfo = JuHeFuUtil.createPayment(orderNo, payType,
+ needPayAmount.toString(), goodsTitle, goodsDesc,
+ IpUtils.getIpAddr(), wxOpenId,
+ "https://xq.xqzhihui.com/api/order/client/order/order/base/callback"
+// "https://xq.xqzhihui.com/api/order/client/order/order/base/callback"
+
+ );
+ // 第三方支付记录
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setOrderId(orderId);
+ paymentRecord.setPayAmount(needPayAmount);
+ Order byId = this.getById(orderId);
+ this.updateById(byId);
+ JSONObject expend = payInfo.getJSONObject("expend");
+ String string = expend.getString("qrcode_url");
+ clientPlaceOrderVO.setQrcodeUrl(string);
paymentRecord.setPaymentType(PaymentTypeEnum.ALI_PAY.getCode());
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+ paymentRecord.setPayOrderNo(payInfo.getString("id"));
+ OrderPaymentRecord list = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, orderId)
+ .ne(OrderPaymentRecord::getPaymentType, 4).one();
+ if (list==null){
+ orderPaymentRecordService.save(paymentRecord);
+ }else{
+ list.setPayOrderNo(payInfo.getString("id"));
+ orderPaymentRecordService.updateById(list);
+ }
+ clientPlaceOrderVO.setPayAmt(payInfo.getString("pay_amt"));
+ clientPlaceOrderVO.setOrderId(payInfo.getString("id"));
+ // 设置订单是否需要支付标识
+ clientPlaceOrderVO.setZeroFlag(DisabledEnum.NO.getCode());
}
- paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
- orderPaymentRecordService.save(paymentRecord);
- // 设置订单是否需要支付标识
- clientPlaceOrderVO.setZeroFlag(DisabledEnum.NO.getCode());
}
/**
@@ -250,4 +445,335 @@
return this.lambdaQuery().eq(Order::getAppUserId, userId).eq(Order::getOrderFrom, orderFrom)
.eq(Order::getPaymentStatus, PaymentStatusEnum.COMPLETED.getCode()).list();
}
+
+ @Override
+ public String placeOrderApple(Long targetId, Integer orderFrom,
+ Long receiverId, Integer balanceFlag,
+ BigDecimal amount, Integer vipType, String transactionIdentifier
+ ,String originTransactionIdentifier,String receipt) {
+// String s = MD5Generator.generateMD5(receipt);
+
+ // 获取当前登录用户id
+ Long userId = tokenService.getLoginUser().getUserid();
+ // 获取用户信息
+ AppUser appUser = getAppUserById(userId);
+ ClientPlaceOrderVO clientPlaceOrderVO = new ClientPlaceOrderVO();
+ Order order = new Order();
+ // 购买冥想音频
+ if (orderFrom == 1) {
+ Meditation meditation = remoteMeditationService.getMeditationById(targetId,
+ SecurityConstants.INNER).getData();
+ // 创建订单
+ String orderNo = OrderUtil.getOrderNoForPrefix("MX");
+ order.setOrderFrom(orderFrom);
+ order.setBizOrderNo(orderNo);
+ order.setBusinessId(meditation.getId());
+ order.setAppUserId(userId);
+ order.setTotalAmount(meditation.getIosPrice());
+ order.setPayType(3);
+ order.setBuyContent("购买疗愈");
+ this.save(order);
+ Long orderId = order.getId();
+ clientPlaceOrderVO.setOrderNo(orderNo);
+ clientPlaceOrderVO.setId(orderId);
+ // 如果冥想音频价格设定为单独收费,且需要使用余额抵扣
+ if (balanceFlag.equals(1) && meditation.getChargeType().equals(ChargeTypeEnum.SEPARATE_CHARGE.getCode())) {
+ BigDecimal needPayAmount = handleBalancePayment(appUser,
+ meditation.getIosPrice(),
+ orderId);
+ if (needPayAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ clientPlaceOrderVO.setZeroFlag(DisabledEnum.YES.getCode());
+ // 抵扣后金额为0 为余额支付
+ order.setPayType(4);
+ order.setRealPayAmount(meditation.getIosPrice());
+ this.updateById(order);
+ return order.getId().toString();
+ }else{
+ order.setPayType(7);
+ this.updateById(order);
+ // 创建支付订单
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setPayAmount(meditation.getIosPrice());
+ paymentRecord.setPayOrderNo(transactionIdentifier);
+ paymentRecord.setOrderId(orderId);
+ paymentRecord.setPaymentType(PaymentTypeEnum.IOS_PAY.getCode());
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+// paymentRecord.setReceipt(s);
+ orderPaymentRecordService.save(paymentRecord);
+ }
+
+ } else {
+ order.setPayType(3);
+ this.updateById(order);
+ // 纯内购支付
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setPayAmount(meditation.getIosPrice());
+ paymentRecord.setPayOrderNo(transactionIdentifier);
+ paymentRecord.setOrderId(orderId);
+ paymentRecord.setPaymentType(PaymentTypeEnum.IOS_PAY.getCode());
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+// paymentRecord.setReceipt(s);
+
+ orderPaymentRecordService.save(paymentRecord);
+ }
+ }
+ else if (orderFrom == 2){
+ // 购买课程
+ Course course = remoteCourseService.getCourseById(targetId).getData();
+ // 创建订单
+ String orderNo = OrderUtil.getOrderNoForPrefix("KC");
+ order.setOrderFrom(orderFrom);
+ order.setBuyContent("购买课程");
+ order.setBizOrderNo(orderNo);
+ order.setPayOrderNo(transactionIdentifier);
+ order.setGiveUserId(receiverId);
+ order.setBusinessId(course.getId());
+ order.setAppUserId(userId);
+ order.setTotalAmount(course.getIosPrice());
+ this.save(order);
+ Long orderId = order.getId();
+ clientPlaceOrderVO.setOrderNo(orderNo);
+ clientPlaceOrderVO.setId(orderId);
+ if (balanceFlag.equals(1) && course.getChargeType()
+ .equals(ChargeTypeEnum.SEPARATE_CHARGE.getCode())) {
+ BigDecimal needPayAmount = handleBalancePayment(appUser, course.getGeneralPrice(),
+ orderId);
+ if (needPayAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ clientPlaceOrderVO.setZeroFlag(DisabledEnum.YES.getCode());
+ // 抵扣后金额为0 为余额支付
+ order.setPayType(4);
+ order.setRealPayAmount(course.getGeneralPrice());
+ this.updateById(order);
+ return order.getId()+"";
+ }else{
+ order.setPayType(7);
+ this.updateById(order);
+ // 创建支付订单
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setPayAmount(course.getIosPrice());
+ paymentRecord.setPayOrderNo(transactionIdentifier);
+ paymentRecord.setOrderId(orderId);
+ paymentRecord.setPaymentType(PaymentTypeEnum.IOS_PAY.getCode());
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+// paymentRecord.setReceipt(s);
+
+ orderPaymentRecordService.save(paymentRecord);
+ }
+ } else {
+ order.setPayType(3);
+ this.updateById(order);
+ // 创建支付订单
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setPayAmount(course.getIosPrice());
+ paymentRecord.setPayOrderNo(transactionIdentifier);
+ paymentRecord.setOrderId(orderId);
+ paymentRecord.setPaymentType(PaymentTypeEnum.IOS_PAY.getCode());
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+// paymentRecord.setReceipt(s);
+
+ orderPaymentRecordService.save(paymentRecord);
+ }
+ }
+ else if (orderFrom == 3){
+ // 创建订单
+ String orderNo = OrderUtil.getOrderNoForPrefix("HY");
+ order.setOrderFrom(orderFrom);
+ order.setBizOrderNo(orderNo);
+ order.setAppUserId(userId);
+ order.setTotalAmount(amount);
+ order.setRealPayAmount(amount);
+ String vipType1 ="";
+ switch (vipType){
+ case 1:
+ vipType1="月会员";
+ break;
+ case 2:
+ vipType1="季会员";
+ break;
+ case 3:
+ vipType1="年会员";
+ break;
+ }
+ order.setBuyContent(vipType1);
+ this.save(order);
+ Long orderId = order.getId();
+ order.setPayType(3);
+ this.updateById(order);
+ // 创建支付订单
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setPayAmount(amount);
+ paymentRecord.setPayOrderNo(transactionIdentifier);
+ paymentRecord.setOrderId(orderId);
+ paymentRecord.setPaymentType(PaymentTypeEnum.IOS_PAY.getCode());
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+// paymentRecord.setReceipt(s);
+
+ orderPaymentRecordService.save(paymentRecord);
+ }else {
+ // 充值
+ String wxOpenId = appUser.getWxOpenId();
+ // 创建订单
+ String orderNo = OrderUtil.getOrderNoForPrefix("CZ");
+ order.setOrderFrom(orderFrom);
+ order.setBizOrderNo(orderNo);
+ order.setAppUserId(userId);
+ order.setTotalAmount(amount);
+ order.setRealPayAmount(amount);
+ order.setBuyContent("充值");
+ this.save(order);
+ Long orderId = order.getId();
+ order.setPayType(3);
+ this.updateById(order);
+ // 创建支付订单
+ OrderPaymentRecord paymentRecord = new OrderPaymentRecord();
+ paymentRecord.setPayAmount(amount);
+ paymentRecord.setPayOrderNo(transactionIdentifier);
+ paymentRecord.setOrderId(orderId);
+ paymentRecord.setPaymentType(PaymentTypeEnum.IOS_PAY.getCode());
+ paymentRecord.setPaymentStatus(PaymentStatusEnum.TO_BE_PAID.getCode());
+// paymentRecord.setReceipt(s);
+ orderPaymentRecordService.save(paymentRecord);
+ }
+ return order.getId()+"";
+ }
+
+
+
+ @Override
+ public String refund(Long uid) throws Exception {
+ Order byId = this.getById(uid);
+ OrderPaymentRecord two = orderPaymentRecordService.lambdaQuery()
+ .eq(OrderPaymentRecord::getPaymentType,4)
+ .eq(OrderPaymentRecord::getOrderId, uid)
+ .one();
+ if (byId.getPayType() == 4){
+ // 纯余额支付 直接退还余额
+ // 回退余额记录
+ AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord();
+ appUserWalletRecord.setAppUserId(byId.getAppUserId());
+ appUserWalletRecord.setChangeType(1);
+ appUserWalletRecord.setReason("后台退款");
+ appUserWalletRecord.setOrderId(byId.getId());
+ appUserWalletRecord.setAmount(two.getPayAmount());
+ remoteAppUserService.addBalanceRecord(appUserWalletRecord);
+ remoteAppUserService.addBalance(byId.getAppUserId(),two.getPayAmount());
+ byId.setRefundStatus(3);
+ byId.setRefundRemark("后台退款");
+ byId.setRefundTime(LocalDateTime.now());
+ byId.setPaymentStatus(3);
+ byId.setCancelTime(LocalDateTime.now());
+ two.setPaymentStatus(3);
+
+ this.updateById(byId);
+ orderPaymentRecordService.updateById(two);
+ switch (byId.getOrderFrom()){
+ case 1:
+ // 冥想订单 删除
+ break;
+ case 2:
+ // 删除用户与课程的关系表
+ remoteAppUserService.deleteAppUserCourse(byId.getBusinessId(),byId.getAppUserId());
+ break;
+ case 3:
+ // 会员订单 将用户会员到期时间回退
+ if (byId.getBuyContent().contains("月")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),1);
+ }else if (byId.getBuyContent().contains("季")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),2);
+ }else if (byId.getBuyContent().contains("年")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),3);
+ }
+ break;
+ }
+ return "success";
+ }else if (byId.getPayType() == 5 || byId.getPayType() == 6 || byId.getPayType() == 7){
+ OrderPaymentRecord one = orderPaymentRecordService.lambdaQuery()
+ .eq(OrderPaymentRecord::getOrderId, uid)
+ .ne(OrderPaymentRecord::getPaymentType, 4)
+ .ne(OrderPaymentRecord::getPaymentType, 3)
+ .one();
+ JSONObject refund = JuHeFuUtil.refund(one.getPayOrderNo(), byId.getBizOrderNo());
+ if (refund.getString("error_msg")!=null){
+ return refund.getString("error_msg");
+ }
+ // 回退余额记录
+ AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord();
+ appUserWalletRecord.setAppUserId(byId.getAppUserId());
+ appUserWalletRecord.setChangeType(1);
+ appUserWalletRecord.setReason("后台退款");
+ appUserWalletRecord.setOrderId(byId.getId());
+ appUserWalletRecord.setAmount(two.getPayAmount());
+ remoteAppUserService.addBalanceRecord(appUserWalletRecord);
+ remoteAppUserService.addBalance(byId.getAppUserId(),two.getPayAmount());
+ byId.setRefundStatus(3);
+ byId.setRefundRemark("后台退款");
+ byId.setRefundTime(LocalDateTime.now());
+ byId.setPaymentStatus(3);
+ byId.setCancelTime(LocalDateTime.now());
+ two.setPaymentStatus(3);
+ this.updateById(byId);
+ orderPaymentRecordService.updateById(two);
+
+ switch (byId.getOrderFrom()){
+ case 1:
+ // 冥想订单 删除
+ break;
+ case 2:
+ // 删除用户与课程的关系表
+ remoteAppUserService.deleteAppUserCourse(byId.getBusinessId(),byId.getAppUserId());
+ break;
+ case 3:
+ // 会员订单 将用户会员到期时间回退
+ if (byId.getBuyContent().contains("月")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),1);
+ }else if (byId.getBuyContent().contains("季")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),2);
+ }else if (byId.getBuyContent().contains("年")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),3);
+ }
+ break;
+ }
+ return "success";
+ }
+ OrderPaymentRecord one = orderPaymentRecordService.lambdaQuery()
+ .eq(OrderPaymentRecord::getOrderId, uid)
+ .ne(OrderPaymentRecord::getPaymentType, 4)
+ .ne(OrderPaymentRecord::getPaymentType, 3)
+ .one();
+ JSONObject refund = JuHeFuUtil.refund(one.getPayOrderNo(), byId.getBizOrderNo());
+ if (refund.getString("error_msg")!=null){
+ return refund.getString("error_msg");
+ }
+ one.setPaymentStatus(3);
+
+ orderPaymentRecordService.updateById(one);
+ String string = refund.getString("payment_id");
+ if (string!=null){
+ byId.setRefundCode(string);
+ }
+ byId.setRefundTime(LocalDateTime.now());
+ byId.setRefundStatus(3);
+ byId.setRefundRemark("后台退款");
+ this.updateById(byId);
+ switch (byId.getOrderFrom()){
+ case 1:
+ // 冥想订单 删除
+ break;
+ case 2:
+ // 删除用户与课程的关系表
+ remoteAppUserService.deleteAppUserCourse(byId.getBusinessId(),byId.getAppUserId());
+ break;
+ case 3:
+ // 会员订单 将用户会员到期时间回退
+ if (byId.getBuyContent().contains("月")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),1);
+ }else if (byId.getBuyContent().contains("季")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),2);
+ }else if (byId.getBuyContent().contains("年")){
+ remoteAppUserService.subVipExpireTime(byId.getAppUserId(),3);
+ }
+ break;
+ }
+ return "success";
+ }
}
--
Gitblit v1.7.1