From b29becf95484be48aa09e87fcc7cc19f94cf9c81 Mon Sep 17 00:00:00 2001 From: rentaiming <806181062@qq.com> Date: 星期三, 10 七月 2024 18:16:23 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java | 236 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 198 insertions(+), 38 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java index e585bc1..9ad3bc1 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java @@ -16,6 +16,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.BondStatusEnum; import com.ruoyi.common.core.enums.OrderStatusEnum; +import com.ruoyi.common.core.enums.PaymentMethodEnum; import com.ruoyi.common.core.enums.PointStatusEnum; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.order.domain.Paylog; @@ -33,6 +34,7 @@ import com.ruoyi.order.util.tencent.common.XMLParser; import com.ruoyi.order.util.tencent.protocol.AppPayReqData; import com.ruoyi.order.util.tencent.protocol.UnifiedorderReqData; +import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.BondDTO; @@ -40,12 +42,13 @@ import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.dto.updMembeOneDTO; import com.ruoyi.system.api.feignClient.AuctionClient; +import com.ruoyi.system.api.feignClient.GoodsSkuClient; import com.ruoyi.system.api.feignClient.MemberClient; -import java.io.IOException; -import java.io.PrintWriter; +import java.io.*; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; import java.util.regex.Matcher; @@ -84,6 +87,9 @@ @Resource private OrderAuctionBondMapper orderAuctionBondMapper; + @Resource + private GoodsSkuClient GoodsSkuClient; + @Override public R<Map<String, Object>> getPayInfo(Integer uid, Integer type, String orderNO,String openId, HttpServletRequest request) { Double price = 0.0; @@ -91,6 +97,124 @@ String body; try { if(judgeContainsStr(orderNO)){ + + + if (orderNO.contains("BO")) { + LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); + wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); + wrapper1.eq(OrderAuctionBond::getDelFlag,0); + OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); + one1.setBoundStatus(BondStatusEnum.PAID); + one1.setPaymentMethod(PaymentMethodEnum.WECHAT); + orderAuctionBondMapper.updateById(one1); + + }else{ + LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); + wrapper1.eq(Order::getOrderNo,orderNO); + wrapper1.eq(Order::getDelFlag,0); + Order page1 = OrderMapper.selectOne(wrapper1); + page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); + page1.setPaymentMethod(PaymentMethodEnum.WECHAT); + page1.setPayTime(LocalDateTime.now()); + OrderMapper.updateById(page1); + + if(page1.getOrderNo().contains("SP")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoods(goodsSku, SecurityConstants.INNER); + } + + if(page1.getOrderNo().contains("MS")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoodsSeckill1(goodsSku, SecurityConstants.INNER); + } + + MemberPointsDTO memberPointsDTO=new MemberPointsDTO(); + memberPointsDTO.setMemberId(page1.getMemberId()); + memberPointsDTO.setPointsType(1); + memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE); + memberPointsDTO.setPoints(page1.getPoints()); + memberClient.addMemberPoints(memberPointsDTO); + updMembeOneDTO MembeOneDTO=new updMembeOneDTO(); + MembeOneDTO.setType(1); + MembeOneDTO.setMemberId(page1.getMemberId()); + MembeOneDTO.setMoney(page1.getTotalAmount()); + MembeOneDTO.setTotalPoints(page1.getPoints()); + memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER); + } + + + + /*if (orderNO.contains("BO")) { + LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); + wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); + wrapper1.eq(OrderAuctionBond::getDelFlag,0); + OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); + if (one1.getBond().compareTo(new BigDecimal(0))==0){ + one1.setBoundStatus(BondStatusEnum.PAID); + Map<String, Object> returnMap = new HashMap<>(); + returnMap.put("Type",1); + return R.ok(returnMap); + } + + + }else{ + LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); + wrapper1.eq(Order::getOrderNo,orderNO); + wrapper1.eq(Order::getDelFlag,0); + Order page1 = OrderMapper.selectOne(wrapper1); + if (page1.getTotalAmount().compareTo(new BigDecimal(0))==0){ + page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); + page1.setPayTime(LocalDateTime.now()); + OrderMapper.updateById(page1); + Map<String, Object> returnMap = new HashMap<>(); + returnMap.put("Type",1); + + + page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); + page1.setPayTime(LocalDateTime.now()); + OrderMapper.updateById(page1); + + if(page1.getOrderNo().contains("SP")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoods(goodsSku, SecurityConstants.INNER); + } + + if(page1.getOrderNo().contains("MS")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoodsSeckill1(goodsSku, SecurityConstants.INNER); + } + + + MemberPointsDTO memberPointsDTO=new MemberPointsDTO(); + memberPointsDTO.setMemberId(page1.getMemberId()); + memberPointsDTO.setPointsType(1); + memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE); + memberPointsDTO.setPoints(page1.getPoints()); + memberClient.addMemberPoints(memberPointsDTO); + + updMembeOneDTO MembeOneDTO=new updMembeOneDTO(); + MembeOneDTO.setType(1); + MembeOneDTO.setMemberId(page1.getMemberId()); + MembeOneDTO.setMoney(page1.getTotalAmount()); + MembeOneDTO.setTotalPoints(page1.getPoints()); + memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER); + + + return R.ok(returnMap); + } + + + + }*/ + if (orderNO.contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); @@ -102,9 +226,9 @@ if (type == 1) { // 支付宝预下单 return this.alipay(orderNO, subject, body, price, request); - } else { + } if (type == 2){ // 微信预下单 - return this.wxpay(2, orderNO, body,openId, price, request); + return this.wxpay(2, orderNO, body, openId, price, request); } }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); @@ -118,9 +242,9 @@ if (type == 1) { // 支付宝预下单 return this.alipay(orderNO, subject, body, price, request); - } else { + } if (type == 2) { // 微信预下单 - return this.wxpay(2, orderNO, body,openId, price, request); + return this.wxpay(2,page1.getOrderTimeSx(), orderNO, body,openId, price, request); } } @@ -182,13 +306,26 @@ wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); one1.setBoundStatus(BondStatusEnum.PAID); - + orderAuctionBondMapper.updateById(one1); }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getOrderNo,paylog1.getOutTradeNo()); wrapper1.eq(Order::getDelFlag,0); Order page1 = OrderMapper.selectOne(wrapper1); - page1.setOrderStatus(OrderStatusEnum.GOODS_TO_BE_RECEIVED); + if(page1.getOrderNo().contains("SP")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoods(goodsSku, SecurityConstants.INNER); + } + + if(page1.getOrderNo().contains("MS")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoodsSeckill1(goodsSku, SecurityConstants.INNER); + } + page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); page1.setPayTime(LocalDateTime.now()); OrderMapper.updateById(page1); @@ -203,7 +340,7 @@ MembeOneDTO.setMemberId(page1.getMemberId()); MembeOneDTO.setMoney(page1.getTotalAmount()); MembeOneDTO.setTotalPoints(page1.getPoints()); - memberClient.updMembeOne(MembeOneDTO); + memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER); } } @@ -257,8 +394,6 @@ System.out.println("WxpayController.notify__notityXml:\n" + notityXml); // 验证签名 - if (Signature.checkIsSignValidFromResponseString(1, notityXml.toString()) - || Signature.checkIsSignValidFromResponseString(2, notityXml.toString())) { Map<String, Object> map = XMLParser.getMapFromXML(notityXml.toString()); // log.debug("WxpayController.notify__map:\n" + map); // 接口返回状态 @@ -300,15 +435,32 @@ wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); one1.setBoundStatus(BondStatusEnum.PAID); + one1.setPaymentMethod(PaymentMethodEnum.WECHAT); + orderAuctionBondMapper.updateById(one1); }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getOrderNo,paylog.getOutTradeNo()); wrapper1.eq(Order::getDelFlag,0); Order page1 = OrderMapper.selectOne(wrapper1); - page1.setOrderStatus(OrderStatusEnum.GOODS_TO_BE_RECEIVED); + page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); + page1.setPaymentMethod(PaymentMethodEnum.WECHAT); page1.setPayTime(LocalDateTime.now()); OrderMapper.updateById(page1); + + if(page1.getOrderNo().contains("SP")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoods(goodsSku, SecurityConstants.INNER); + } + + if(page1.getOrderNo().contains("MS")){ + GoodsSku goodsSku =new GoodsSku(); + goodsSku.setId(page1.getGoodsSkuId()); + goodsSku.setSoldQuantity(page1.getGoodsQuantity()); + GoodsSkuClient.updGoodsSeckill1(goodsSku, SecurityConstants.INNER); + } MemberPointsDTO memberPointsDTO=new MemberPointsDTO(); memberPointsDTO.setMemberId(page1.getMemberId()); @@ -321,7 +473,7 @@ MembeOneDTO.setMemberId(page1.getMemberId()); MembeOneDTO.setMoney(page1.getTotalAmount()); MembeOneDTO.setTotalPoints(page1.getPoints()); - memberClient.updMembeOne(MembeOneDTO); + memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER); } log.debug("WxpayController.notify__回调处理成功:SUCCESS"); @@ -333,10 +485,7 @@ log.debug("WxpayController.notify__回调处理:验证状态错误!" + result_code); System.out.println("验证状态错误!" + result_code); } - } else { - log.debug("WxpayController.notify__回调处理:通知签名验证失败!"); - System.out.println("通知签名验证失败!"); - } + } catch (Exception e) { e.printStackTrace(); } @@ -421,7 +570,7 @@ * @param request * @return */ - public static R<Map<String, Object>> wxpay(Integer apptype, String outTradeNo, String body,String openId, Double price, + public static R<Map<String, Object>> wxpay(Integer apptype,LocalDateTime sx,String outTradeNo, String body,String openId, Double price, HttpServletRequest request) { // 获取预支付接口返回参数 Map<String, Object> map1 = new HashMap<String, Object>(); @@ -461,6 +610,10 @@ paraMap.put("body", body); //设置请求参数(商户订单号) paraMap.put("out_trade_no", outTradeNo); + if (sx!=null){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + paraMap.put("time_expire",sx.format(formatter)); + } //设置请求参数(总金额) String money=SinataUtil.doubleRetainTwo(price*100d); @@ -501,6 +654,7 @@ returnMap.put("trade_type", map.get("trade_type")); returnMap.put("sign", signature); + returnMap.put("Type",2); returnMap.put("err_code_des", map.get("err_code_des")); // 对获取预支付返回接口参数进行封装(生成支付订单接口数据) return R.ok(returnMap); @@ -561,27 +715,33 @@ */ public static boolean refundForWxpay(Integer apptype, String transactionID, String outTradeNo, String outRefundNo, Integer totalFee, Integer refundFee, String pay_type) { - Map<String, Object> map = new HashMap<String, Object>(); - try { - // 构建接口请求参数 - com.tencent.protocol.RefundReqData refundReqData = new com.tencent.protocol.RefundReqData(transactionID, outTradeNo, outRefundNo, totalFee, refundFee, - pay_type); - // 请求接口返回结果 - String result = requestRefundService(apptype, refundReqData); - System.out.println("微信退款返回内容:" + result); - // 获取预支付接口返回参数 - map = XMLParser.getMapFromXML(result); - System.out.println("微信退款返回参数:" + map); - // 退款成功处理 - if ("SUCCESS".equals(map.get("result_code"))) { - return true; - } - } catch (Exception e) { - e.printStackTrace(); - return false; - } - return false; + //生成32位随机数 + UUID uuid = UUID.randomUUID(); + String nonceStr = uuid.toString().replaceAll("-", ""); + //商品描述 String body = "XX商城-支付订单"; + // 创建hashmap(用户获得签名) + SortedMap<String, String> paraMap = new TreeMap<>(); + //设置请求参数(小程序ID) + paraMap.put("appid", Configure.getAppid()); + //设置请求参数(商户号) + paraMap.put("mch_id", Configure.getMchid()); + //设置请求参数(随机字符串) + paraMap.put("nonce_str", nonceStr); + paraMap.put("transaction_id",transactionID); + paraMap.put("out_trade_no", outTradeNo); + paraMap.put("out_refund_no", outRefundNo); + //设置请求参数(支付的总金额) + paraMap.put("total_fee", totalFee.toString()); + //设置请求参数(退款的金额) + paraMap.put("refund_fee", refundFee.toString()); + //MD5运算生成签名 + paraMap.put("sign", PaymentKit.createSign(paraMap, "HSCEWrfSYiwxR6sesZ6De91Xh3m447sh")); + System.out.println("证书: " + Configure.getCertLocalPath_2()); + + String xmlResult = WxPayApi.orderRefund(false, paraMap,Configure.getCertLocalPath_2(), Configure.getMchid()); + + return true; } /** -- Gitblit v1.7.1