| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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.*; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | |
| | | BigDecimal orderPayMoney = new BigDecimal("0.00"); |
| | | // 创建订单ID和订单号 |
| | | String orderId = IdUtils.simpleUUID(); |
| | | |
| | | String orderNo = CodeFactoryUtil.getShopOrderNo(); |
| | | OrderGoods orderGoods; |
| | | String orderGoodsId; |
| | |
| | | } |
| | | |
| | | 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); |
| | | } |
| | |
| | | * @param userId |
| | | * @param shopId |
| | | * @param goodsName |
| | | * @param orderNo |
| | | * @param outTradeNo |
| | | * @param orderId |
| | | * @param payMoney |
| | | * @param openid |
| | |
| | | * @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 { |
| | |
| | | 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); |
| | | |
| | |
| | | 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()); |
| | | } |
| | |
| | | |
| | | |
| | | 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(), |
| | |
| | | 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){ |
| | |
| | | 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 { |
| | |
| | | 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(); |
| | |
| | | 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); |
| | |
| | | |
| | | // 保存分账信息 |
| | | paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage); |
| | | }*/ |
| | | } |
| | | |
| | | /** |
| | | * @param merVerifyCouponDto |
| | |
| | | @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()); |
| | |
| | | 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); |
| | |
| | | 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); |
| | | } |
| | |
| | | remoteActivityService.changeActivityTotal(activityTotalChangeDto); |
| | | } |
| | | |
| | | log.info("用户取消订单退款, 检查退款"); |
| | | // 用户取消订单退款 |
| | | BigDecimal onlinePayMoney = order.getOnlinePayMoney(); |
| | | if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ |
| | | log.info("订单支付金额大于0,可发起退款"); |
| | | // 订单支付金额大于0,可发起退款 |
| | | orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); |
| | | } |
| | |
| | | if (null == orderPayment) { |
| | | return; |
| | | } |
| | | |
| | | log.info("调用微信退款---发起退款"); |
| | | |
| | | String subMchId = orderPayment.getSubMchId(); |
| | | WxPayConfig config = wxService.getConfig(); |
| | | |
| | |
| | | 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()); |
| | |
| | | // 返回参数 |
| | | String refundResponseJson = gson.toJson(result); |
| | | |
| | | log.info("调用微信退款返回参数---{}", refundResponseJson); |
| | | |
| | | // 保存支付订单统一下单日志 |
| | | paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson); |
| | | |