From 0c51a577db337520452022d9d6a22b720ef858d4 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 31 十二月 2024 14:13:01 +0800 Subject: [PATCH] 全部代码、数据库提交 --- xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/impl/OrderServiceImpl.java | 678 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 596 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..529ed9d 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,22 @@ 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.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 +61,8 @@ private RemoteAppUserService remoteAppUserService; @Resource private OrderPaymentRecordService orderPaymentRecordService; - + @Autowired + private TokenService tokenService; /** * 创建待支付订单 * @@ -69,88 +76,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 +289,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 +341,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 +360,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 +444,324 @@ 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) { + // 获取当前登录用户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()); + 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()); + 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()); + 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()); + 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()); + 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()); + 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