From 4178aef23242c8689bbf320a607f2de12676d32c Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期六, 26 八月 2023 18:40:16 +0800 Subject: [PATCH] bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 156 +++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 136 insertions(+), 20 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 6ff0f42..a6e83da 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,10 +826,11 @@ String description = goodsName + "-商品购买"; request.setDescription(description); - request.setOutTradeNo(orderNo); + request.setOutTradeNo(outTradeNo); request.setNotifyUrl(config.getNotifyUrl()); // 结算信息 PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo(); + // TODO 分账处理 if(orderFrom==2){ settleInfo.setProfitSharing(true); }else{ @@ -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,9 +1553,10 @@ merVerifyOrderVo.setUserName(member.getRealName()); merVerifyOrderVo.setUserMobile(member.getMobile()); merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); - // + // TODO 活动才分账 if (order.getOrderFrom() == 2) { - // profitsSharingService.applyProfitSharing(); + // 活动才分账 + submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney()); } //创建支付记录 @@ -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 @@ -2836,6 +2857,12 @@ public MgtTotalActivityTotalVo getTotalActivityTotal(MgtBaseShopDto mgtBaseShopDto) { //获取基础统计 MgtTotalActivityTotalVo totalActivityTotalVo = orderMapper.getTotalActivityTotal(mgtBaseShopDto); + //获客人数 + MgtTotalActivityTotalVo totalActivityMemberTotalVo = orderMapper.getTotalActivityMemberTotal(mgtBaseShopDto); + totalActivityTotalVo.setOrderPerson(totalActivityMemberTotalVo.getOrderPerson()); + totalActivityTotalVo.setCyclePerson(totalActivityMemberTotalVo.getCyclePerson()); + totalActivityTotalVo.setServicePerson(totalActivityMemberTotalVo.getServicePerson()); + totalActivityTotalVo.setExperiencePerson(totalActivityMemberTotalVo.getExperiencePerson()); //获取商品分类销售数据 List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalActivityTotalGoodsType(mgtBaseShopDto); if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { @@ -2896,6 +2923,8 @@ totalActivityTotalVo.setOrderTotalValue(orderTotalValue); totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue); } + //参与人数 + return totalActivityTotalVo; } @@ -3152,6 +3181,12 @@ mgtBasePlatformDto.setShopIdList(shopIdList); //获取基础统计 MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto); + //获客人数 + MgtPlTotalActivityTotalVo totalActivityMemberTotalVo = orderMapper.getPlTotalActivityMemberTotal(mgtBasePlatformDto); + totalActivityTotalVo.setOrderPerson(totalActivityMemberTotalVo.getOrderPerson()); + totalActivityTotalVo.setCyclePerson(totalActivityMemberTotalVo.getCyclePerson()); + totalActivityTotalVo.setServicePerson(totalActivityMemberTotalVo.getServicePerson()); + totalActivityTotalVo.setExperiencePerson(totalActivityMemberTotalVo.getExperiencePerson()); //获取商品分类销售数据 List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto); List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); @@ -3241,6 +3276,57 @@ activitySalesRank = bigListRemoveNull(activitySalesRank); totalActivityTotalVo.setActivitySalesRankList(activitySalesRank); } + MerTotalDto merTotalDto = new MerTotalDto(); + merTotalDto.setAgeType(mgtBasePlatformDto.getAgeType()); + if(mgtBasePlatformDto.getAgeType()!=null){ + List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); + mgtBasePlatformDto.setUserIdList(userIdList); + } + //参与人数 + List<MgtMapIntTotalVo> joinList = orderMapper.getMgtActivityMemberTotal(mgtBasePlatformDto); + // 将查询结果转为Map + Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>(); + if (joinList != null && !joinList.isEmpty()) { + mgtMapIntTotalVoMap = joinList.stream() + .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); + } + // 获取日期范围 + List<String> dateList = getDateRange(mgtBasePlatformDto.getStartDate(), mgtBasePlatformDto.getEndDate()); + int size = dateList.size(); + // 创建日期和成员总数的数组 + String[] joinMemberTotalKey = new String[size]; + Integer[] joinMemberTotalValue = new Integer[size]; + // 遍历日期列表,设置日期和成员总数的数组 + String str; + Integer value; + for (int i = 0; i < size; i++) { + str = dateList.get(i); + joinMemberTotalKey[i] = str; + value = mgtMapIntTotalVoMap.get(str); + joinMemberTotalValue[i] = (value != null) ? value : 0; + } + totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey); + totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue); + //获客人数 + List<MgtMapIntTotalVo> getList = orderMapper.getMgtActivityGetMemberTotal(mgtBasePlatformDto); + // 将查询结果转为Map + Map<String, Integer> getMemberMap = new HashMap<>(); + if (getList != null && !getList.isEmpty()) { + getMemberMap = getList.stream() + .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); + } + // 创建日期和成员总数的数组 + String[] getMemberTotalKey = new String[size]; + Integer[] getMemberTotalValue = new Integer[size]; + // 遍历日期列表,设置日期和成员总数的数组 + for (int i = 0; i < size; i++) { + str = dateList.get(i); + joinMemberTotalKey[i] = str; + value = getMemberMap.get(str); + joinMemberTotalValue[i] = (value != null) ? value : 0; + } + totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey); + totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue); return totalActivityTotalVo; } @@ -3660,6 +3746,7 @@ List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto); if (goodsRankList != null && goodsRankList.size() > 0) { goodsRankList = bigListRemoveNull(goodsRankList); + Collections.reverse(goodsRankList); orderGoodsRankVo.setGoodsRankList(goodsRankList); } return orderGoodsRankVo; @@ -3685,6 +3772,7 @@ List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto); if (orderFromList != null && orderFromList.size() > 0) { orderFromList = bigListRemoveNull(orderFromList); + Collections.reverse(orderFromList); merOrderFromRankVo.setOrderFromRankList(orderFromList); } return merOrderFromRankVo; @@ -3850,9 +3938,12 @@ @Override @Transactional public void payBack(PartnerTransactionsResult transaction) { - // 更新订单状态 - String orderId = transaction.getOutTradeNo(); - Order order = this.getById(orderId); + + // Order order = this.getById(orderId); + // 更新订单状态 outTradeNo + String outTradeNo = transaction.getOutTradeNo(); + Order order = this.getByOutTradeNo(outTradeNo); + String orderId = order.getOrderId(); order.setOrderStatus(2); order.setPayTime(new Date()); this.saveOrUpdate(order); @@ -3973,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); @@ -3982,6 +4074,22 @@ 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); + } + + @Override + public Order getByOutTradeNo(String outTradeNo) { + LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Order::getOutTradeNo, outTradeNo) + .last(" limit 1 "); + return this.getOne(queryWrapper); } /** @@ -4137,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); } @@ -4158,6 +4268,9 @@ if (null == orderPayment) { return; } + + log.info("调用微信退款---发起退款"); + String subMchId = orderPayment.getSubMchId(); WxPayConfig config = wxService.getConfig(); @@ -4168,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()); @@ -4184,6 +4298,8 @@ // 返回参数 String refundResponseJson = gson.toJson(result); + log.info("调用微信退款返回参数---{}", refundResponseJson); + // 保存支付订单统一下单日志 paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson); -- Gitblit v1.7.1