From da837b5a0e23b47bc1d038547702cab3cecce577 Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期六, 26 八月 2023 17:51:59 +0800 Subject: [PATCH] Merge branch 'master' of ssh://120.76.84.145:20202/java/HongRuiTang into master --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 91 ++++++++++++++++++++++++++++++++------------- 1 files changed, 65 insertions(+), 26 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index 5d57e7f..ef83ce7 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.order.service.impl.order; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -21,6 +22,7 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.order.config.WxPayConfiguration; import com.ruoyi.order.domain.dto.*; import com.ruoyi.order.domain.pojo.account.OrderPayment; import com.ruoyi.order.domain.pojo.account.OrderRefund; @@ -52,6 +54,7 @@ import com.ruoyi.system.api.domain.poji.member.MemberCoupon; import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord; import com.ruoyi.system.api.domain.poji.shop.Shop; +import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.*; @@ -63,6 +66,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; @@ -556,6 +560,7 @@ BigDecimal orderPayMoney = new BigDecimal("0.00"); // 创建订单ID和订单号 String orderId = IdUtils.simpleUUID(); + String orderNo = CodeFactoryUtil.getShopOrderNo(); OrderGoods orderGoods; String orderGoodsId; @@ -753,8 +758,14 @@ } if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){ + String outTradeNo = IdUtils.simpleUUID(); + + // 保存订单 交易流水 + order.setOutTradeNo(outTradeNo); + this.saveOrUpdate(order); + // 小程序微信下单支付 - createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo, + createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo, orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1); } @@ -786,7 +797,7 @@ * @param userId * @param shopId * @param goodsName - * @param orderNo + * @param outTradeNo * @param orderId * @param payMoney * @param openid @@ -794,7 +805,7 @@ * @param goodsNameList */ public void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, - String goodsName, String orderNo, + String goodsName, String outTradeNo, String orderId, BigDecimal payMoney, String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){ try { @@ -815,15 +826,16 @@ String description = goodsName + "-商品购买"; request.setDescription(description); - request.setOutTradeNo(orderNo); + request.setOutTradeNo(outTradeNo); request.setNotifyUrl(config.getNotifyUrl()); // 结算信息 PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo(); - if(orderFrom==2){ + // TODO 分账处理 + //if(orderFrom==2){ settleInfo.setProfitSharing(true); - }else{ - settleInfo.setProfitSharing(false); - } + //}else{ + // settleInfo.setProfitSharing(false); + // } settleInfo.setSubsidyAmount(BigDecimal.ZERO); request.setSettleInfo(settleInfo); @@ -866,9 +878,10 @@ paymentMessageService.savePaymentMessage("1", orderId, payRequestJson, payResponseJson); // 保存支付订单统一下单支付记录 - orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, payMoney, + orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, outTradeNo, payMoney, appPlaceOrderVo.getEndTime(), "Y", openid, Joiner.on(";").join(goodsNameList), result.getPackageValue()); + } catch (WxPayException e) { throw new ServiceException(e.getMessage()); } @@ -1144,6 +1157,13 @@ if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){ + + String outTradeNo = IdUtils.simpleUUID(); + + // 保存订单 交易流水 + order.setOutTradeNo(outTradeNo); + this.saveOrUpdate(order); + // 小程序微信下单支付 createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo, orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(), @@ -1533,10 +1553,11 @@ merVerifyOrderVo.setUserName(member.getRealName()); merVerifyOrderVo.setUserMobile(member.getMobile()); merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); - // - if (order.getOrderFrom() == 2) { - // profitsSharingService.applyProfitSharing(); - } + // TODO 活动才分账 + //if (order.getOrderFrom() == 2) { + // 活动才分账 + submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney()); + //} //创建支付记录 if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){ @@ -1548,12 +1569,11 @@ payRecord.setPayType(merVerifyOrderDto.getPayType()); payRecordService.save(payRecord); } - //submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney()); return merVerifyOrderVo; } - /*private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) { + private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) { String sendMessage = ""; String resultMessage = ""; try { @@ -1567,16 +1587,17 @@ R<String> resultMch = remoteShopService.getShopSubMchId(shopId); String subMchId = resultMch.getData(); if (!StringUtils.isEmpty(subMchId)) { - + WxPayConfig config = wxService.getConfig(); R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId); ShopProportionVo shopProportion = resultShopProportion.getData(); if (null != shopProportion) { ProfitSharingRequest request = new ProfitSharingRequest(); + request.setAppid(config.getAppId()); request.setSubMchid(subMchId); request.setTransactionId(transactionId); - request.setOutOrderNo(orderNo); - List<Receiver> receiverList = new ArrayList<>(); + request.setOutOrderNo(IdUtils.simpleUUID()); + List<ProfitSharingRequest.Receiver> receiverList = new ArrayList<>(); String description = "订单:" + orderNo + " 平台抽取佣金"; BigDecimal proportionPercent = shopProportion.getProportionPercent(); @@ -1593,7 +1614,7 @@ log.info("订单分账:{} 分账金额: {}", orderNo, amount); if (amount > 0) { // 分账创建 - Receiver receiver = new Receiver(); + ProfitSharingRequest.Receiver receiver = new ProfitSharingRequest.Receiver(); receiver.setType("MERCHANT_ID"); receiver.setReceiverAccount(platformTyMacId); receiver.setAmount(amount); @@ -1628,7 +1649,7 @@ // 保存分账信息 paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage); - }*/ + } /** * @param merVerifyCouponDto @@ -3917,10 +3938,11 @@ @Override @Transactional public void payBack(PartnerTransactionsResult transaction) { + // Order order = this.getById(orderId); - // 更新订单状态 订单编号,就是 微信outTradeNo - String orderNo = transaction.getOutTradeNo(); - Order order = this.getByOrderNo(orderNo); + // 更新订单状态 outTradeNo + String outTradeNo = transaction.getOutTradeNo(); + Order order = this.getByOutTradeNo(outTradeNo); String orderId = order.getOrderId(); order.setOrderStatus(2); order.setPayTime(new Date()); @@ -4042,8 +4064,9 @@ request.setTransactionId(transaction.getTransactionId()); profitsSharingService.applyProfitSharing(request);*/ } - //生成支付记录 - OrderPayment orderPayment = new OrderPayment(); + //修改支付记录生成支付记录 + orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), transaction.getTransactionId()); + PayRecord payRecord = new PayRecord(); payRecord.setDelFlag(0); payRecord.setOrderId(orderId); @@ -4057,6 +4080,14 @@ public Order getByOrderNo(String orderNo) { LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(Order::getOrderNo, orderNo) + .last(" limit 1 "); + return this.getOne(queryWrapper); + } + + @Override + public Order getByOutTradeNo(String outTradeNo) { + LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Order::getOutTradeNo, outTradeNo) .last(" limit 1 "); return this.getOne(queryWrapper); } @@ -4214,9 +4245,11 @@ remoteActivityService.changeActivityTotal(activityTotalChangeDto); } + log.info("用户取消订单退款, 检查退款"); // 用户取消订单退款 BigDecimal onlinePayMoney = order.getOnlinePayMoney(); if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ + log.info("订单支付金额大于0,可发起退款"); // 订单支付金额大于0,可发起退款 orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); } @@ -4235,6 +4268,9 @@ if (null == orderPayment) { return; } + + log.info("调用微信退款---发起退款"); + String subMchId = orderPayment.getSubMchId(); WxPayConfig config = wxService.getConfig(); @@ -4245,7 +4281,8 @@ request.setOutRefundNo(outRefundNo); request.setReason("用户取消订单"); // 订单金额 - int total = payMoney.multiply(new BigDecimal(100)).intValue(); + int total = orderPayment.getPayMoney().multiply(new BigDecimal(100)).intValue(); + RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build(); request.setAmount(amount); request.setNotifyUrl(config.getNotifyUrl()); @@ -4261,6 +4298,8 @@ // 返回参数 String refundResponseJson = gson.toJson(result); + log.info("调用微信退款返回参数---{}", refundResponseJson); + // 保存支付订单统一下单日志 paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson); -- Gitblit v1.7.1