diff --git a/src/main/java/com/peanut/modules/book/dao/BuyOrderDao.java b/src/main/java/com/peanut/modules/book/dao/BuyOrderDao.java index 874c26b9..4657bfe5 100644 --- a/src/main/java/com/peanut/modules/book/dao/BuyOrderDao.java +++ b/src/main/java/com/peanut/modules/book/dao/BuyOrderDao.java @@ -18,7 +18,7 @@ import java.util.List; @Mapper public interface BuyOrderDao extends BaseMapper { List orderList(BuyOrderListRequestVo requestVo); - List orderListCount(BuyOrderListRequestVo requestVo); + int orderListCount(BuyOrderListRequestVo requestVo); List orderStatusNum(Integer userId); diff --git a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java index 8ae36871..27771082 100644 --- a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java +++ b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java @@ -439,14 +439,17 @@ public class BuyOrderServiceImpl extends ServiceImpl impl List data = new ArrayList<>(); requestVo.setIndex((requestVo.getPageIndex()-1)*10); List buyOrderList = buyOrderDao.orderList(requestVo); - int count = buyOrderDao.orderListCount(requestVo).size(); + int count = buyOrderDao.orderListCount(requestVo); for (BuyOrder buyOrder : buyOrderList) { BuyOrderResponseVo responseVo = setBuyOrderInfo(buyOrder); data.add(responseVo); } Map result = new HashMap<>(); Integer totalSize = count; - Integer totalPage = totalSize / requestVo.getPageSize() + 1; + Integer totalPage = totalSize / requestVo.getPageSize(); + if (totalSize % requestVo.getPageSize()!=0){ + totalPage = totalPage + 1; + } result.put("totalDataSize", totalSize); result.put("totalPage", totalPage); result.put("data", data); @@ -614,6 +617,7 @@ public class BuyOrderServiceImpl extends ServiceImpl impl if ("2".equals(buyOrder.getPaymentMethod())){ LambdaQueryWrapper w = new LambdaQueryWrapper<>(); w.eq(PayZfbOrderEntity::getRelevanceoid, orderSn); + w.ne(PayZfbOrderEntity::getTradeNo, ""); PayZfbOrderEntity p = payZfbOrderService.getOne(w); if (p!=null){ outTradeNo = p.getOutTradeNo(); diff --git a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java index 14e8c5d8..3a7b10d2 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java +++ b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java @@ -24,13 +24,13 @@ public class AliPayConfig { * 应用公钥 */ - public static final String HS_ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmvqCFRgQCqflYxyHhPyBVBVon51FkGAT8H31hAufhCiW6hAv8HFUn2Tyl6TwAd09HOlessQjjMYLlGRHXkTOVvd1n9I5La7YrrN+F6O/b4Jy17I9k7QDdZLvUKeXm1VcPlj3aSJdZzhTcAqImkj5sFzrFSE+THHMVL5hlAzVIPHWFaA/Vh2Ltdzt9HOL5vo2Bgru5b4kanI5xBaKCfzkaHC6iWxxWk81jBoogGJ1FEky9QSOb4QzSQ4ZtwecFGe/4+PRFkGGW1dH15Qq2UXq3zy6wIF2EfeT/utivV4fHnc04U6z15i1z/f406s9tdfIo10qBfBIH4VQ9jSwkg4ndwIDAQAB"; + public static final String HS_ALI_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmvqCFRgQCqflYxyHhPyBVBVon51FkGAT8H31hAufhCiW6hAv8HFUn2Tyl6TwAd09HOlessQjjMYLlGRHXkTOVvd1n9I5La7YrrN+F6O/b4Jy17I9k7QDdZLvUKeXm1VcPlj3aSJdZzhTcAqImkj5sFzrFSE+THHMVL5hlAzVIPHWFaA/Vh2Ltdzt9HOL5vo2Bgru5b4kanI5xBaKCfzkaHC6iWxxWk81jBoogGJ1FEky9QSOb4QzSQ4ZtwecFGe/4+PRFkGGW1dH15Qq2UXq3zy6wIF2EfeT/utivV4fHnc04U6z15i1z/f406s9tdfIo10qBfBIH4VQ9jSwkg4ndwIDAQAB"; /** * 支付宝公钥 */ - public static final String HS_ALI_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiVLUVTnNuq+2C1FRtcIRcG3rCgtVVulkz2QljKbPr7NNWTJJIIfGwyhNuH76s5D1lvNmn2NkuoqM0cMJCSd+W+JW9KpdQ0dgumFHCoRA/OWUoqpLvEOmm2hRMaWpvd+OQq2aPz+p+z6pqZ9SAlgUIolzrUn4idCvgIycqRaGsf1sEJFR5W+rneqtMhNYHdwemqaqnysInwshHR3cHs1AC6y/eL6pcQhaYJ5qVMIRg54/6Lr4CU114Rmph7UM9C28ulmHkFMN/DKPUDbM1+glxjzmqHQChY293Db0dlwZeiDWF3Tli2BVd6pz5KEkQlUsGeLW1O0rT9T9sxzsavxArwIDAQAB"; + public static final String HS_ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiVLUVTnNuq+2C1FRtcIRcG3rCgtVVulkz2QljKbPr7NNWTJJIIfGwyhNuH76s5D1lvNmn2NkuoqM0cMJCSd+W+JW9KpdQ0dgumFHCoRA/OWUoqpLvEOmm2hRMaWpvd+OQq2aPz+p+z6pqZ9SAlgUIolzrUn4idCvgIycqRaGsf1sEJFR5W+rneqtMhNYHdwemqaqnysInwshHR3cHs1AC6y/eL6pcQhaYJ5qVMIRg54/6Lr4CU114Rmph7UM9C28ulmHkFMN/DKPUDbM1+glxjzmqHQChY293Db0dlwZeiDWF3Tli2BVd6pz5KEkQlUsGeLW1O0rT9T9sxzsavxArwIDAQAB"; /** * 回调地址 因为是内网开发 目前为内网穿透地址 diff --git a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java index 18925a4f..45bb0dbd 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java +++ b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java @@ -3,28 +3,19 @@ package com.peanut.modules.pay.alipay.config; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; -import com.alipay.api.domain.AlipayTradeAppPayModel; -import com.alipay.api.domain.AlipayTradeQueryModel; -import com.alipay.api.domain.AlipayTradeRefundModel; -import com.alipay.api.request.AlipayTradeAppPayRequest; -import com.alipay.api.request.AlipayTradeQueryRequest; -import com.alipay.api.request.AlipayTradeRefundRequest; -import com.alipay.api.request.AlipayTradeWapPayRequest; -import com.alipay.api.response.AlipayTradeAppPayResponse; -import com.alipay.api.response.AlipayTradeQueryResponse; -import com.alipay.api.response.AlipayTradeRefundResponse; -import com.alipay.api.response.AlipayTradeWapPayResponse; +import com.alipay.api.domain.*; +import com.alipay.api.request.*; +import com.alipay.api.response.*; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.peanut.modules.pay.alipay.config.AliPayConfig; import com.peanut.modules.pay.alipay.dto.AlipayDTO; import com.peanut.modules.pay.alipay.dto.ReFundDTO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; - import java.util.HashMap; import java.util.Map; +import java.util.UUID; @Component @@ -98,7 +89,7 @@ public class AliPayUtil { * @param reFundDTO * @return Map */ - public AlipayTradeRefundResponse aliPayRefund(ReFundDTO reFundDTO) { + public Map aliPayRefund(ReFundDTO reFundDTO) { log.info(">>>>>>>>>支付宝退款 订单号 = {}", reFundDTO.getOutTrandeNo()); Map map = new HashMap(); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); @@ -107,22 +98,22 @@ public class AliPayUtil { model.setRefundAmount(String.valueOf(reFundDTO.getRefundAmount())); // 支付宝交易号 model.setTradeNo(reFundDTO.getTradeNo()); - // 订单支付时传入的商户订单号 - model.setOutTradeNo(reFundDTO.getOutTrandeNo()); if (StringUtils.isNotBlank(reFundDTO.getRefundReason())) { // 退款原因 model.setRefundReason(reFundDTO.getRefundReason()); } + model.setOutRequestNo(UUID.randomUUID().toString().substring(0, 6)); request.setBizModel(model); AlipayTradeRefundResponse response = null; + try { response = AliPayConfig.getAliPayClient().execute(request); - return response; + map.put("msg", response.getBody()); } catch (Exception e) { log.info(">>>>>>>>>>退款出现异常 exception = {}", e); e.printStackTrace(); } - return response; + return map; } /** diff --git a/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java b/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java index 4e80169b..9bcf8bdc 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java +++ b/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java @@ -3,18 +3,17 @@ package com.peanut.modules.pay.alipay.controller; import com.alibaba.fastjson.JSONObject; import com.peanut.common.utils.R; import com.peanut.modules.pay.alipay.dto.AlipayDTO; +import com.peanut.modules.pay.alipay.dto.ReFundDTO; import com.peanut.modules.pay.alipay.service.AliPayService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - import javax.servlet.http.HttpServletRequest; import java.util.Map; - /** * 支付宝支付控制层 */ @@ -47,4 +46,14 @@ public class AliPayController { return R.ok().put("aliNotify",aliNotify); } + /** + * 支付宝退款 + */ + @RequestMapping("/refund") + public R refund(@RequestBody ReFundDTO reFundDTO) { + String refund = aliPayService.refund(reFundDTO); + return R.ok().put("msg",refund); + } + + } diff --git a/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java b/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java index 7933431f..22059550 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java +++ b/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java @@ -3,6 +3,7 @@ package com.peanut.modules.pay.alipay.service; import com.peanut.modules.pay.alipay.dto.AlipayDTO; +import com.peanut.modules.pay.alipay.dto.ReFundDTO; import javax.servlet.http.HttpServletRequest; @@ -23,6 +24,12 @@ public interface AliPayService { */ String aliNotify(HttpServletRequest request); + /** + * 支付宝退款 + * @param reFundDTO + * @return + */ + String refund(ReFundDTO reFundDTO); } diff --git a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java index b9d78a6a..f9827ba1 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java +++ b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java @@ -16,12 +16,12 @@ import com.peanut.modules.book.service.*; import com.peanut.modules.pay.alipay.config.AliPayConfig; import com.peanut.modules.pay.alipay.config.AliPayUtil; import com.peanut.modules.pay.alipay.dto.AlipayDTO; +import com.peanut.modules.pay.alipay.dto.ReFundDTO; import com.peanut.modules.pay.alipay.service.AliPayService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.*; @@ -109,7 +109,7 @@ public class AliPayServiceImpl implements AliPayService { log.info(">>>>>>>>>>支付宝回调 sign = {}, trade_status = {}, out_trade_no = {}, 参数 = {}", params.get("sign"), params.get("trade_status"), params.get("out_trade_no"), params.toString()); //调用SDK验证签名,验证是阿里回调,而不是其他恶意回调 - boolean flag = AlipaySignature.rsaCheckV1(params, AliPayConfig.HS_ALI_PUBLIC_KEY, AliPayConfig.CHARSET, AliPayConfig.SIGN_TYPE); + boolean flag = AlipaySignature.rsaCheckV1(params, AliPayConfig.HS_ALIPAY_PUBLIC_KEY, AliPayConfig.CHARSET, AliPayConfig.SIGN_TYPE); log.info(">>>>>>>>>>验签结果 flag = {}", flag); if (flag) { log.info(">>>>>>>>>>验签通过"); @@ -247,6 +247,24 @@ public class AliPayServiceImpl implements AliPayService { } } + @Override + public String refund(ReFundDTO reFundDTO) { + log.info(">>>>>>>>>>App请求支付宝退款接口"); + Map map = aliPayUtil.aliPayRefund(reFundDTO); + Object obj = map.get("msg"); + String resJson = obj.toString(); + log.info(">>>>>>>>>>>支付宝返回的信息是 resJson = {}", resJson); + Map res = JSONObject.parseObject(resJson); + //10000表示接口请求成功,Y表示资金变动成功 + if ("10000".equals(((Map)res.get("alipay_trade_refund_response")).get("code"))&& + "Y".equals(((Map)res.get("alipay_trade_refund_response")).get("fund_change"))){ + log.info(">>>>>>>>>>>支付宝退款成功!<<<<<<<<<<<<<"); + //表操作 + + + } + return resJson; + } //TODO 更新订单状态 diff --git a/src/main/resources/mapper/book/BuyOrderDao.xml b/src/main/resources/mapper/book/BuyOrderDao.xml index 414e3f0f..6050501c 100644 --- a/src/main/resources/mapper/book/BuyOrderDao.xml +++ b/src/main/resources/mapper/book/BuyOrderDao.xml @@ -81,38 +81,39 @@ - + select count(1) from ( select b.* from buy_order b - - left join buy_order_product p on b.order_id = p.order_id - left join shop_product s on s.product_id = p.product_id + left join buy_order_product p on b.order_id = p.order_id + left join + shop_product s on s.product_id = p.product_id - - - and (b.order_sn like concat('%',concat(#{searchKeyWord},'%')) - or b.shipping_user like concat('%',concat(#{searchKeyWord},'%')) - or b.user_phone like concat('%',concat(#{searchKeyWord},'%'))) - + + + and (b.order_sn like concat('%',concat(#{searchKeyWord},'%')) + or b.shipping_user like concat('%',concat(#{searchKeyWord},'%')) + or b.user_phone like concat('%',concat(#{searchKeyWord},'%'))) + + + and (s.product_name like concat('%',concat(#{productName},'%'))) + + + and b.order_status = #{orderStatus} + + + and b.create_time >= #{startTime} + + + and b.create_time <= #{endTime} + + and b.order_type = 'order' + and b.del_flag = 0 + - and (s.product_name like concat('%',concat(#{productName},'%'))) + group by b.order_id - - and b.order_status = #{orderStatus} - - - and b.create_time >= #{startTime} - - - and b.create_time <= #{endTime} - - and b.order_type = 'order' - and b.del_flag = 0 - - - group by b.order_id - + ) t