From b879982d29cb2dbfe72482b46c8f6f2064d663a2 Mon Sep 17 00:00:00 2001 From: zhanglin8526 <852614290@qq.com> Date: 星期六, 26 八月 2023 15:27:29 +0800 Subject: [PATCH] 支付调整 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 194 +++++++++++++++++++++++++++++++++++++----------- 1 files changed, 148 insertions(+), 46 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 a77412b..0971266 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 @@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsRequest; -import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult; -import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult; -import com.github.binarywang.wxpay.bean.ecommerce.TransactionsResult; +import com.github.binarywang.wxpay.bean.ecommerce.*; import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; import com.github.binarywang.wxpay.config.WxPayConfig; @@ -16,6 +13,7 @@ import com.github.binarywang.wxpay.service.WxPayService; import com.google.common.base.Joiner; import com.google.gson.Gson; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -558,6 +556,7 @@ BigDecimal orderPayMoney = new BigDecimal("0.00"); // 创建订单ID和订单号 String orderId = IdUtils.simpleUUID(); + String orderNo = CodeFactoryUtil.getShopOrderNo(); OrderGoods orderGoods; String orderGoodsId; @@ -754,11 +753,18 @@ goodsName = String.join(",", goodsNameList); } - // 小程序微信下单支付 - /*createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo, - orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), - appPlaceOrderDto.getSpbillCreateIp(), goodsNameList);*/ + if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){ + String outTradeNo = IdUtils.simpleUUID(); + // 保存订单 交易流水 + order.setOutTradeNo(outTradeNo); + this.saveOrUpdate(order); + + // 小程序微信下单支付 + createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo, + orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), + appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1); + } //减去优惠券 if (StringUtils.isNotBlank(memberCouponSJ.toString())) { @@ -787,7 +793,7 @@ * @param userId * @param shopId * @param goodsName - * @param orderNo + * @param outTradeNo * @param orderId * @param payMoney * @param openid @@ -795,13 +801,13 @@ * @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){ + String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){ try { // 创建支付订单 - //R<String> resultMch = remoteShopService.getShopSubMchId(shopId); - String subMchId = "1650744551"; + R<String> resultMch = remoteShopService.getShopSubMchId(shopId); + String subMchId = resultMch.getData(); if (StringUtils.isEmpty(subMchId)) { throw new ServiceException("获取微信商户号失败"); } @@ -816,11 +822,15 @@ String description = goodsName + "-商品购买"; request.setDescription(description); - request.setOutTradeNo(orderNo); + request.setOutTradeNo(outTradeNo); request.setNotifyUrl(config.getNotifyUrl()); // 结算信息 PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo(); - settleInfo.setProfitSharing(true); + if(orderFrom==2){ + settleInfo.setProfitSharing(true); + }else{ + settleInfo.setProfitSharing(false); + } settleInfo.setSubsidyAmount(BigDecimal.ZERO); request.setSettleInfo(settleInfo); @@ -863,9 +873,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()); } @@ -1134,7 +1145,25 @@ appPlaceOrderVo.setPackageStr(res.getPackageVal()); appPlaceOrderVo.setTradeType(res.getSignType()); appPlaceOrderVo.setPaySign(res.getPaySign()); + */ + List<String> goodsNameList = new ArrayList<>(); + goodsNameList.add(orderGoods.getGoodsName()); + + + 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(), + appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2); + } //生成活动参加记录 ActivityRecord activityRecord = new ActivityRecord(); activityRecord.setDelFlag(0); @@ -3490,6 +3519,9 @@ merTotalDto.setShopIdList(shopIdList); merTotalDto.setShopId(null); } + if(merTotalDto.getGoodsType()!=null&&merTotalDto.getGoodsType()==0){ + merTotalDto.setGoodsType(null); + } MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取订单年龄用户列表 //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); @@ -3537,10 +3569,10 @@ } }*/ List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listMerOrderDistributionTotal(merTotalDto); + String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; + Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; + BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { - String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; - Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; - BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; MgtMapTotalPlusVo mgtMapTotalPlusVo; for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); @@ -3549,6 +3581,10 @@ orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); + }else{ + orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); + orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); + orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); } // 返回订单分布总数对象 return orderDistributionTotalVo; @@ -3574,28 +3610,44 @@ List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { - MgtMapIntTotalVo MgtMapIntTotalVo; + MgtMapIntTotalVo mgtMapIntTotalVo; MgtMapBigTotalVo mgtMapBigTotalVo; + Integer intTotal = 0; + BigDecimal bigTotal = BigDecimal.ZERO; + for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){ + intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst(); + bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond()); + } + BigDecimal hundredBig = new BigDecimal("100"); + BigDecimal intTotalBig = hundredBig; + if(intTotal!=0){ + intTotalBig = new BigDecimal(intTotal.toString()); + } + if(bigTotal.compareTo(BigDecimal.ZERO)<1){ + bigTotal = hundredBig; + } // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { - MgtMapIntTotalVo = new MgtMapIntTotalVo(); + mgtMapIntTotalVo = new MgtMapIntTotalVo(); mgtMapBigTotalVo = new MgtMapBigTotalVo(); - MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); + mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { - MgtMapIntTotalVo.setMapKey("周期"); + mgtMapIntTotalVo.setMapKey("周期"); mgtMapBigTotalVo.setMapKey("周期"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { - MgtMapIntTotalVo.setMapKey("服务"); + mgtMapIntTotalVo.setMapKey("服务"); mgtMapBigTotalVo.setMapKey("服务"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { - MgtMapIntTotalVo.setMapKey("体验"); + mgtMapIntTotalVo.setMapKey("体验"); mgtMapBigTotalVo.setMapKey("体验"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { - MgtMapIntTotalVo.setMapKey("单品"); + mgtMapIntTotalVo.setMapKey("单品"); mgtMapBigTotalVo.setMapKey("单品"); } - goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeTotalList.add(mgtMapIntTotalVo); goodsTypeMoneyList.add(mgtMapBigTotalVo); } orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); @@ -3623,6 +3675,7 @@ List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto); if (goodsRankList != null && goodsRankList.size() > 0) { goodsRankList = bigListRemoveNull(goodsRankList); + Collections.reverse(goodsRankList); orderGoodsRankVo.setGoodsRankList(goodsRankList); } return orderGoodsRankVo; @@ -3648,6 +3701,7 @@ List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto); if (orderFromList != null && orderFromList.size() > 0) { orderFromList = bigListRemoveNull(orderFromList); + Collections.reverse(orderFromList); merOrderFromRankVo.setOrderFromRankList(orderFromList); } return merOrderFromRankVo; @@ -3813,9 +3867,12 @@ @Override @Transactional public void payBack(PartnerTransactionsResult transaction) { - // 更新订单状态 - String orderId = transaction.getOutTradeNo(); - Order order = this.getById(orderId); + + // Order order = this.getById(orderId); + // 更新订单状态 订单编号,就是 微信outTradeNo + String orderNo = transaction.getOutTradeNo(); + Order order = this.getByOrderNo(orderNo); + String orderId = order.getOrderId(); order.setOrderStatus(2); order.setPayTime(new Date()); this.saveOrUpdate(order); @@ -3936,8 +3993,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); @@ -3945,6 +4003,14 @@ payRecord.setPayTime(order.getPayTime()); payRecord.setPayType(1); payRecordService.save(payRecord); + } + + @Override + public Order getByOrderNo(String orderNo) { + LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Order::getOrderNo, orderNo) + .last(" limit 1 "); + return this.getOne(queryWrapper); } /** @@ -4104,7 +4170,7 @@ BigDecimal onlinePayMoney = order.getOnlinePayMoney(); if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ // 订单支付金额大于0,可发起退款 - //orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); + orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); } orderRefund.setRefundStatus(1); @@ -4114,7 +4180,7 @@ /** * 申请退款API */ - /*private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ + private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ try { // 创建支付订单 OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); @@ -4153,7 +4219,7 @@ } catch (WxPayException e) { throw new ServiceException(e.getMessage()); } - }*/ + } /** * @param staffTotalDto @@ -4200,6 +4266,9 @@ */ @Override public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) { + if(staffTotalDto.getGoodsType()!=null&&staffTotalDto.getGoodsType()==0){ + staffTotalDto.setGoodsType(null); + } MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取订单年龄用户列表 //MerTotalDto merTotalDto = new MerTotalDto(); @@ -4255,10 +4324,10 @@ }*/ if(staffTotalDto.getActivityFrom()==1){ List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listStaffActivityOrderDistributionTotal(staffTotalDto); + String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; + Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; + BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { - String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; - Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; - BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; MgtMapTotalPlusVo mgtMapTotalPlusVo; for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); @@ -4267,6 +4336,10 @@ orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); + }else{ + orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); + orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); + orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); } } // 返回订单分布总数对象 @@ -4341,28 +4414,44 @@ List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { - MgtMapIntTotalVo MgtMapIntTotalVo; + MgtMapIntTotalVo mgtMapIntTotalVo; MgtMapBigTotalVo mgtMapBigTotalVo; + Integer intTotal = 0; + BigDecimal bigTotal = BigDecimal.ZERO; + for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){ + intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst(); + bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond()); + } + BigDecimal hundredBig = new BigDecimal("100"); + BigDecimal intTotalBig = hundredBig; + if(intTotal!=0){ + intTotalBig = new BigDecimal(intTotal.toString()); + } + if(bigTotal.compareTo(BigDecimal.ZERO)<1){ + bigTotal = hundredBig; + } // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { - MgtMapIntTotalVo = new MgtMapIntTotalVo(); + mgtMapIntTotalVo = new MgtMapIntTotalVo(); mgtMapBigTotalVo = new MgtMapBigTotalVo(); - MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); + mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { - MgtMapIntTotalVo.setMapKey("周期"); + mgtMapIntTotalVo.setMapKey("周期"); mgtMapBigTotalVo.setMapKey("周期"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { - MgtMapIntTotalVo.setMapKey("服务"); + mgtMapIntTotalVo.setMapKey("服务"); mgtMapBigTotalVo.setMapKey("服务"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { - MgtMapIntTotalVo.setMapKey("体验"); + mgtMapIntTotalVo.setMapKey("体验"); mgtMapBigTotalVo.setMapKey("体验"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { - MgtMapIntTotalVo.setMapKey("单品"); + mgtMapIntTotalVo.setMapKey("单品"); mgtMapBigTotalVo.setMapKey("单品"); } - goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeTotalList.add(mgtMapIntTotalVo); goodsTypeMoneyList.add(mgtMapBigTotalVo); } orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); @@ -4691,4 +4780,17 @@ MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId); return serviceTotalVo; } + + /** + * @description 获取区域统计 + * @author jqs + * @date 2023/8/25 11:49 + * @param shopIdList + * @return AgencyTotalVo + */ + @Override + public AgencyTotalVo getAgencyTotalVo(List<Long> shopIdList){ + AgencyTotalVo agencyTotalVo = orderMapper.getAgencyTotalVo(shopIdList); + return agencyTotalVo; + } } -- Gitblit v1.7.1