From 3ffd3ab0899390721aabe6fc1a0f2d8a6a038759 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 15 十二月 2023 10:48:49 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 211 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 183 insertions(+), 28 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 8eaf64d..c5713ed 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 @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -46,6 +47,7 @@ import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.activity.Activity; import com.ruoyi.system.api.domain.poji.activity.ActivityRecord; import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.poji.goods.Goods; @@ -954,6 +956,41 @@ R<com.alibaba.fastjson.JSONObject> r = HuiFuTianXiaUtil.weixinPayment(outTradeNo, description, payMoney.doubleValue(), openid, request.getNotifyUrl()); if(r.getCode() != 200){ throw new ServiceException(r.getMsg()); + }else{ + new Thread(new Runnable() { + @Override + public void run() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + int time = 0; + for (int i = 0; i < 13; i++) { + try { + time += (5000 * i); + Thread.sleep(time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + R<WeixinPaymentNotifyVo> voR = HuiFuTianXiaUtil.queryPayment(outTradeNo, sdf.format(new Date())); + if(voR.getCode() == 200){ + WeixinPaymentNotifyVo data = voR.getData(); + //P:处理中;S:成功;F:失败;I: 初始(初始状态很罕见,请联系汇付技术人员处理); + String transStat = data.getTransStat(); + if("S".equals(transStat)){ + PartnerTransactionsResult transaction = new PartnerTransactionsResult(); + transaction.setOutTradeNo(data.getReqSeqId()); + payBack(transaction, data.getFeeFlag() == 1 ? BigDecimal.ZERO : new BigDecimal(data.getFeeAmount())); + return; + } + if("P".equals(transStat) || "F".equals(transStat)){ + continue; + } + log.error("支付失败,流水号:{}, 状态码:{}", outTradeNo, transStat); + return; + }else{ + log.error("支付查询失败!流水号:{},结果:{}", outTradeNo, voR.getMsg()); + } + } + } + }).start(); } com.alibaba.fastjson.JSONObject data = r.getData(); String mainMchId = WxPayConfiguration.getPlatformTyMacId(); @@ -1318,11 +1355,104 @@ //处理订单回显 for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { if(member.getBindingFlag()==0&&appUserOrderPageVo.getOrderFrom()==2){ - appUserOrderPageVo.setShopName("全部店铺"); + //查询秒杀活动的参与店铺 + R<Activity> activity = remoteActivityService.getActivity(appUserOrderPageVo.getActivityId()); + if(activity.getCode() != 200){ + throw new RuntimeException(activity.getMsg()); + } + Activity data = activity.getData(); + if(data.getAreaFlag() == 1){ + appUserOrderPageVo.setShopNumber(0); + appUserOrderPageVo.setShopName("全部店铺"); + } + if(data.getAreaFlag() == 2 && data.getShopFlag() == 1){ + String designatedArea = data.getDesignatedArea(); + String[] split = designatedArea.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByCityCode(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data1 = listR.getData(); + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data1)); + } + if(data.getShopFlag() == 2){ + String applicableShop = data.getApplicableShop(); + String[] split = applicableShop.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByIds(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data1 = listR.getData(); + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data1)); + } + }else if(member.getBindingFlag()==1&&appUserOrderPageVo.getOrderFrom()==2){ + Long relationShopId = member.getRelationShopId(); + R<Shop> shop = remoteShopService.getShop(relationShopId); + if(shop.getCode() != 200){ + throw new RuntimeException(shop.getMsg()); + } + Shop data1 = shop.getData(); + //查询秒杀活动的参与店铺 + R<Activity> activity = remoteActivityService.getActivity(appUserOrderPageVo.getActivityId()); + if(activity.getCode() != 200){ + throw new RuntimeException(activity.getMsg()); + } + Activity data = activity.getData(); + if(data.getAreaFlag() == 1){ + appUserOrderPageVo.setShopNumber(2); + appUserOrderPageVo.setShopName(data1.getShopName()); + appUserOrderPageVo.setShopServicePhone(data1.getShopServicePhone()); + } + if(data.getAreaFlag() == 2 && data.getShopFlag() == 1){ + String designatedArea = data.getDesignatedArea(); + String[] split = designatedArea.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByCityCode(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data2 = listR.getData(); + List<Long> collect = data2.stream().map(Shop::getShopId).collect(Collectors.toList()); + if(collect.contains(relationShopId)){ + appUserOrderPageVo.setShopNumber(2); + appUserOrderPageVo.setShopName(data1.getShopName()); + appUserOrderPageVo.setShopServicePhone(data1.getShopServicePhone()); + }else{ + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data2)); + } + } + if(data.getShopFlag() == 2){ + String applicableShop = data.getApplicableShop(); + String[] split = applicableShop.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByIds(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data2 = listR.getData(); + List<Long> collect = data2.stream().map(Shop::getShopId).collect(Collectors.toList()); + if(collect.contains(relationShopId)){ + appUserOrderPageVo.setShopNumber(2); + appUserOrderPageVo.setShopName(data1.getShopName()); + appUserOrderPageVo.setShopServicePhone(data1.getShopServicePhone()); + }else{ + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data2)); + } + } + + + }else{ simpleShopVo = shopMap.get(appUserOrderPageVo.getShopId()); appUserOrderPageVo.setShopName(simpleShopVo.getShopName()); appUserOrderPageVo.setShopServicePhone(simpleShopVo.getShopServicePhone()); + appUserOrderPageVo.setShopNumber(2); if (appUserOrderPageVo.getShopId().equals(appUserOrderPageDto.getShopId())) { appUserOrderPageVo.setSameShop(1); } else { @@ -1897,10 +2027,14 @@ } this.saveOrUpdate(order); // 订单金额大于0时进行分账 - if (order.getOnlinePayMoney().compareTo(BigDecimal.ZERO)>0) { + OrderPayment orderPayment = orderPaymentService.getOne(new QueryWrapper<OrderPayment>() + .eq("order_id", order.getOrderId()).eq("pay_status", 2) + .eq("del_flag", 0)); + BigDecimal bigDecimal = orderPayment.getPayMoney().subtract(orderPayment.getFeeAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN); + if (bigDecimal.compareTo(BigDecimal.ZERO)>0) { // TODO: 2023/10/17 更换分账渠道(汇付天下) // submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom()); - submitProfitSharing1(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom()); + submitProfitSharing1(orderId, order.getOrderNo(), order.getShopId(), bigDecimal, order.getOrderFrom()); } //创建支付记录 if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){ @@ -2850,7 +2984,7 @@ // 根据用户ID列表获取用户信息 MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userIdSj.toString()); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userIdSj.toString()).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历订单列表,设置用户信息 @@ -3010,13 +3144,14 @@ .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历列表,设置店铺名称、用户名称和未支付金额 for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) { if(mgtActivityOrderPageVo.getShopId()!=null){ - mgtActivityOrderPageVo.setShopName(shopMap.get(mgtActivityOrderPageVo.getShopId()).getShopName()); + MgtSimpleShopVo mgtSimpleShopVo = shopMap.get(mgtActivityOrderPageVo.getShopId()); + mgtActivityOrderPageVo.setShopName(null == mgtSimpleShopVo ? "" : mgtSimpleShopVo.getShopName()); } if (userMap.get(mgtActivityOrderPageVo.getUserId()) != null) { @@ -3135,7 +3270,7 @@ String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); } @@ -3186,8 +3321,6 @@ Order order = this.getById(orderId); // 获取会员信息 Member member = remoteMemberService.getMember(order.getUserId()).getData(); - // 获取商店信息 - Shop shop = remoteShopService.getShop(order.getShopId()).getData(); // 获取订单商品详细信息 List<MgtOrderGoodsDetailVo> orderGoodsDetailVoList = orderGoodsService.listMgtVoByOrderId(orderId); // 设置MgtOrderDetailVo属性 @@ -3217,6 +3350,7 @@ } // 设置订单编号 mgtOrderDetailVo.setOrderNo(order.getOrderNo()); + mgtOrderDetailVo.setOutTradeNo(order.getOutTradeNo()); // 设置订单来源 switch (order.getOrderFrom()) { case 1: @@ -3247,10 +3381,12 @@ mgtOrderDetailVo.setCancelTime(order.getCancelTime()); mgtOrderDetailVo.setOrderRemark(order.getOrderRemark()); mgtOrderDetailVo.setShopId(order.getShopId()); - if (shop != null) { + if (3 == order.getOrderStatus()) { + // 获取商店信息 + Shop shop = remoteShopService.getShop(order.getShopId()).getData(); mgtOrderDetailVo.setShopName(shop.getShopName()); } else { - mgtOrderDetailVo.setShopName("商户已被删除"); + mgtOrderDetailVo.setShopName(""); } mgtOrderDetailVo.setVerifyTime(order.getUseTime()); //获取支付记录 @@ -3877,7 +4013,7 @@ mgtTotalOrderTotalVo.setOrderTotal(totalOrderTotalVo.getOrderTotal()); mgtTotalOrderTotalVo.setOnlineTotal(totalOrderTotalVo.getOnlineTotal()); mgtTotalOrderTotalVo.setOfflineTotal(totalOrderTotalVo.getOfflineTotal()); - mgtTotalOrderTotalVo.setActivityTotal(0); + mgtTotalOrderTotalVo.setActivityTotal(totalOrderTotalVo.getActivityTotal()); mgtTotalOrderTotalVo.setOrderMoney(totalOrderTotalVo.getOrderMoney()); mgtTotalOrderTotalVo.setOnlineMoney(totalOrderTotalVo.getOnlineMoney()); mgtTotalOrderTotalVo.setOfflineMoney(totalOrderTotalVo.getOfflineMoney()); @@ -5012,7 +5148,7 @@ String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); } @@ -5072,6 +5208,9 @@ try { redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); + if(null == surpNum){ + surpNum = 0; + } redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); } finally { redissonLock.unlock(); @@ -5122,7 +5261,7 @@ @Override @Transactional @GlobalTransactional(rollbackFor = Exception.class) - public void payBack(PartnerTransactionsResult transaction) { + public void payBack(PartnerTransactionsResult transaction, BigDecimal feeAmount) { log.info("订单支付回调---"+transaction.toString()); // Order order = this.getById(orderId); // 更新订单状态 outTradeNo @@ -5176,12 +5315,8 @@ goodsTotalChangeDto.setChangeType(1); goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); - Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId()); - if (bugGoodsNum == null || bugGoodsNum < 1) { - goodsTotalChangeDto.setPersonNum(1); - }else{ - goodsTotalChangeDto.setPersonNum(0); - } + Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(orderGoods.getGoodsId()); + goodsTotalChangeDto.setPersonNum(bugGoodsNum); goodsTotalChangeDtoList.add(goodsTotalChangeDto); } //更新商品统计 @@ -5256,7 +5391,7 @@ profitsSharingService.applyProfitSharing(request);*/ } //修改支付记录生成支付记录 - orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), transaction.getTransactionId()); + orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), feeAmount, transaction.getTransactionId()); PayRecord payRecord = new PayRecord(); payRecord.setDelFlag(0); payRecord.setOrderId(orderId); @@ -5337,6 +5472,9 @@ try { redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); + if(null == surpNum){ + surpNum = 0; + } redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); } finally { redissonLock.unlock(); @@ -5387,12 +5525,8 @@ goodsTotalChangeDto.setChangeType(2); goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); - Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId()); - if (bugGoodsNum == null || bugGoodsNum <= orderGoods.getBuyNum()) { - goodsTotalChangeDto.setPersonNum(1); - }else{ - goodsTotalChangeDto.setPersonNum(0); - } + Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(orderGoods.getGoodsId()); + goodsTotalChangeDto.setPersonNum(bugGoodsNum); goodsTotalChangeDtoList.add(goodsTotalChangeDto); } remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList); @@ -6074,6 +6208,9 @@ try { redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); + if(null == surpNum){ + surpNum = 0; + } redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); } finally { redissonLock.unlock(); @@ -6153,7 +6290,7 @@ // 获取用户列表 MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userIdSj.toString()); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userIdSj.toString()).getData(); // 将用户列表转换为Map,以便根据用户ID快速查找用户信息 Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); @@ -6234,4 +6371,22 @@ ProfitSharingResult profitSharingResult = wxService.getEcommerceService().queryProfitSharing(request); return profitSharingResult; } + + @Override + public List<String> getActivityOrderGoods(String activityId) { + List<Order> orders = this.baseMapper.selectList(new QueryWrapper<Order>() + .eq("del_flag", 0) + .in("order_status", Arrays.asList(1, 2, 3)) + .eq("activity_id", activityId) + ); + if(orders.size() > 0){ + List<String> collect = orders.stream().map(Order::getOrderId).collect(Collectors.toList()); + List<OrderGoods> list = orderGoodsService.list(new QueryWrapper<OrderGoods>() + .eq("del_flag", 0) + .in("order_id", collect) + ); + return list.stream().map(OrderGoods::getGoodsId).collect(Collectors.toList()); + } + return new ArrayList<>(); + } } -- Gitblit v1.7.1