From 9f35dc84a6af0a9019e5ae2c8ac4b2c8e2c99fe9 Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期一, 26 八月 2024 17:10:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java                         |   21 +++
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/WxPaymentFallbackFactory.java                        |    7 +
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java                                        |   34 +++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java |   15 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/TApplyChargingPileDTO.java                     |   15 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java              |   20 +++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java                             |    7 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java                         |    2 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java                                   |    8 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java                             |   20 +++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java                               |   20 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java    |   13 +-
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java                                  |   33 +++++
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java                               |    6 +
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxAbstractPay.java                                      |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java                             |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java                        |    5 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/MsgConstants.java                                |    4 
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxV3Pay.java                                            |    2 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java                         |    6 +
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/WxPaymentClient.java                             |    6 +
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java                                 |   11 +
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/WxPaymentRefundModel.java                              |    2 
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/AliPaymentFallbackFactory.java                       |    7 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java             |    9 +
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java                          |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java                |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java           |   17 ++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java                             |   43 +++++++
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java                            |    8 +
 30 files changed, 317 insertions(+), 35 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java
index eeabca3..fb8ff40 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java
@@ -48,6 +48,11 @@
             public R grantCoupon(GrantCouponDto dto) {
                 return R.fail("给用户发放优惠券:"+throwable.getMessage());
             }
+
+            @Override
+            public R refund(String id) {
+                return R.fail("后台退款 退回优惠券失败:"+throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
index bab9b05..47eccaf 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
@@ -59,6 +59,11 @@
             }
 
             @Override
+            public R refundPoints(String param) {
+                return R.fail("后台兑换订单退款回退用户积分失败:"+throwable.getMessage());
+            }
+
+            @Override
             public R<List<TAppUser>> getUserByIds(List<Long> appUserIds) {
                 return R.fail("根据用户id查询用户信息失败:"+throwable.getMessage());
             }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java
index b45a58a..a2d36ea 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java
@@ -47,4 +47,6 @@
      */
     @PostMapping("/t-app-coupon/grantCoupon")
     R  grantCoupon(@RequestBody GrantCouponDto dto);
+    @PostMapping(value = "/t-app-coupon/refund/{id}")
+     R refund(@PathVariable("id") String id);
 }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
index 4058a9c..0ad197c 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -66,4 +66,10 @@
      */
     @GetMapping("/t-app-user/user/selectByPhone")
     R<TAppUser> selectByPhone(@RequestParam("phone") String phone);
+    /**
+     * 远程调用 积分兑换订单 退款回退积分
+     * @return
+     */
+    @PostMapping(value = "/t-app-user/refundPoints/{param}")
+    public R refundPoints(@PathVariable("param")String param);
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/TApplyChargingPileDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/TApplyChargingPileDTO.java
new file mode 100644
index 0000000..bb30bf5
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/TApplyChargingPileDTO.java
@@ -0,0 +1,15 @@
+package com.ruoyi.chargingPile.api.dto;
+
+import com.ruoyi.chargingPile.api.model.TApplyChargingPile;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "TApplyChargingPileDTO对象",description = "申请建桩")
+public class TApplyChargingPileDTO extends TApplyChargingPile {
+
+    @ApiModelProperty(value = "验证码")
+    private String code;
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
index 890d00c..4587086 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
@@ -14,4 +14,10 @@
     @ApiModelProperty(value = "充电枪总数数量")
     private Integer totalCount;
 
+    public ChargingGunCountVO(Integer freeCount, Integer totalCount) {
+        this.freeCount = freeCount;
+        this.totalCount = totalCount;
+    }
+    public ChargingGunCountVO() {
+    }
 }
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/AliPaymentFallbackFactory.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/AliPaymentFallbackFactory.java
index a552827..97ebf3e 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/AliPaymentFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/AliPaymentFallbackFactory.java
@@ -2,6 +2,8 @@
 
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+import com.ruoyi.payment.api.model.RefundReq;
+import com.ruoyi.payment.api.model.RefundResp;
 import com.ruoyi.payment.api.vo.AliPaymentReq;
 import com.ruoyi.payment.api.vo.AliPaymentResp;
 import com.ruoyi.payment.api.vo.AliQueryOrder;
@@ -40,6 +42,11 @@
             public void close(String outTradeNo) {
                 throw new RuntimeException("关闭支付订单失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<RefundResp> refund(RefundReq dto) {
+                throw new RuntimeException("支付宝退款失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/WxPaymentFallbackFactory.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/WxPaymentFallbackFactory.java
index 0938408..ee40d32 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/WxPaymentFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/WxPaymentFallbackFactory.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
+import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody;
 import com.ruoyi.payment.api.vo.PaymentOrder;
 import org.slf4j.Logger;
@@ -51,6 +52,12 @@
             public void close(String outTradeNo) {
                 throw new RuntimeException("关闭支付订单失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<String> refundOrderR(WxPaymentRefundModel model) {
+                return R.fail("微信退款失败:" + throwable.getMessage());
+
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java
index 91e5014..496217c 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java
@@ -3,11 +3,14 @@
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.payment.api.factory.WxPaymentFallbackFactory;
+import com.ruoyi.payment.api.model.RefundReq;
+import com.ruoyi.payment.api.model.RefundResp;
 import com.ruoyi.payment.api.vo.AliPaymentReq;
 import com.ruoyi.payment.api.vo.AliPaymentResp;
 import com.ruoyi.payment.api.vo.AliQueryOrder;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * @author zhibing.pu
@@ -40,4 +43,9 @@
 	 */
 	@PostMapping("/ali/close")
 	void close(String outTradeNo);
+	/**
+	 * 后台退款 远程调用
+	 */
+	@PostMapping("/ali/refund")
+	public R<RefundResp> refund(@RequestBody RefundReq dto);
 }
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/WxPaymentClient.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/WxPaymentClient.java
index 7c8f21f..a09b432 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/WxPaymentClient.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/WxPaymentClient.java
@@ -3,8 +3,10 @@
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.payment.api.factory.WxPaymentFallbackFactory;
+import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody;
 import com.ruoyi.payment.api.vo.PaymentOrder;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -59,4 +61,8 @@
 	 */
 	@PostMapping("/wx/pay/close")
 	void close(String outTradeNo);
+
+	@ApiOperation("订单退款")
+	@PostMapping(value = "/wx/refundOrderR")
+	public R<String> refundOrderR(@RequestBody WxPaymentRefundModel model);
 }
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WxPaymentRefundModel.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/WxPaymentRefundModel.java
similarity index 97%
rename from ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WxPaymentRefundModel.java
rename to ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/WxPaymentRefundModel.java
index 2920b93..79cebc5 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WxPaymentRefundModel.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/WxPaymentRefundModel.java
@@ -1,4 +1,4 @@
-package com.ruoyi.payment.wx.model;
+package com.ruoyi.payment.api.model;
 
 import lombok.*;
 
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
index 3a06693..ca886c7 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
@@ -128,9 +128,13 @@
     public static final String DATE_FORMATTER_TIME = "yyyy-MM-dd HH:mm:ss";
     public static final String DATE_FORMATTER_DATE = "yyyy-MM-dd";
     /**
-     * 后缀
+     * 修改手机号后缀
      */
-    public static final String APPLET = "_applet";
+    public static final String UPDATE_PHONE = "_updatePhone";
+    /**
+     * 申请建桩后缀
+     */
+    public static final String APPLY_CHARGING = "_applyCharging";
     /**
      * 定时任务违规的字符
      */
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/MsgConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/MsgConstants.java
index 4a04905..17019d1 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/MsgConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/MsgConstants.java
@@ -11,6 +11,8 @@
     public static final String SEND_URL = "http://112.35.1.155:1992/sms/tmpsubmit";
     /** 更换手机号短信验证码 TEMPLATE_ID */
     public static final String CODE_TEMPLATE_ID = "5bf3949463e54c03a25c6fce3ad48139";
+    /** 建桩申请短信验证码 TEMPLATE_ID */
+    public static final String APPLY_TEMPLATE_ID = "44ac24b86a9f4dd6bee41577e2703472";
 
     /** 停车占位提醒 TEMPLATE_ID */
     public static final String STOP_TEMPLATE_ID = "4940ce98a3f94f67aa9f5cd2d4e05cbd";
@@ -22,6 +24,8 @@
     public static final String FAULT_TEMPLATE_ID = "37956469a14a47e484a747a1e7e462de";
     /** 更换手机号短信验证码 AP_ID */
     public static final String CODE_AP_ID = "GH123";
+    /** 建桩短信验证码 AP_ID */
+    public static final String APPLY_AP_ID = "JZ123";
 
     /** 停车占位提醒 AP_ID */
     public static final String STOP_AP_ID = "TC123";
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java
index 54eb150..14c12e1 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java
@@ -49,6 +49,40 @@
         return encode;
     }
 
+    /**
+     * 更换手机号:【签名】验证码:XXX,用于更换手机号。请勿转发。
+     * @param phone 手机号
+     * @param code 验证码
+     * @return
+     */
+    public static String applyCodeMsg(String phone,String code){
+        SubmitTempletReq submitReq = new SubmitTempletReq();
+        String[] paramss = {code};
+        submitReq.setApId(MsgConstants.APPLY_AP_ID);
+        submitReq.setEcName(ecName);
+        submitReq.setSecretKey(secretKey);
+        submitReq.setParams(JSON.toJSONString(paramss));
+        submitReq.setMobiles(phone);
+        submitReq.setAddSerial("");
+        submitReq.setSign(sign);
+        submitReq.setTemplateId(MsgConstants.APPLY_TEMPLATE_ID);
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append(submitReq.getEcName());
+        stringBuffer.append(submitReq.getApId());
+        stringBuffer.append(submitReq.getSecretKey());
+        stringBuffer.append(submitReq.getTemplateId());
+        stringBuffer.append(submitReq.getMobiles());
+        stringBuffer.append(submitReq.getParams());
+        stringBuffer.append(submitReq.getSign());
+        stringBuffer.append(submitReq.getAddSerial());
+        submitReq.setMac(MD5Util.getMD5(stringBuffer.toString()));
+        String reqText = JSON.toJSONString(submitReq);
+        //加密
+        String encode = Base64.encodeBase64String(reqText.getBytes());
+        System.err.println(encode);
+        return encode;
+    }
+
 
     /**
      * 停车占位提醒:车辆已在3小时前完成充电,请及时取车,避免长时间占用充电资源。
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
index 8cfd00d..6288f56 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -38,6 +38,7 @@
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -72,7 +73,17 @@
     @Resource
     private ChargingGunClient chargingGunClient;
 
-
+    /**
+     * 后台退款 回退优惠券使用状态
+     * @return
+     */
+    @PostMapping(value = "/refund/{id}")
+    public R refund(@PathVariable("id") String id) {
+        TAppCoupon byId = tAppCouponService.getById(id);
+        byId.setStatus(1);
+        tAppCouponService.updateById(byId);
+        return R.ok();
+    }
     /**
      * 小程序扫一扫 添加车辆
      * @param dto
@@ -190,6 +201,13 @@
         return R.ok(tAppCouponService.pagelist(couponId));
     }
 
+    @ApiOperation(value = "优惠卷可用数量", tags = {"小程序-站点管理-站点详情"})
+    @GetMapping(value = "/couponCount")
+    public R<Long> couponCount() {
+        LocalDateTime now = LocalDateTime.now();
+        return R.ok(tAppCouponService.lambdaQuery().le(TAppCoupon::getStartTime, now).ge(TAppCoupon::getEndTime, now).eq(TAppCoupon::getStatus, 1).count());
+    }
+
     @Autowired
     private TAppUserTagService appUserTagService;
     @Autowired
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
index 3745fd9..1f5ac8c 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -116,7 +116,20 @@
     private TInviteUserService inviteUserService;
 
 
-
+    /**
+     * 远程调用 积分兑换订单 退款回退积分
+     * @return
+     */
+    @PostMapping(value = "/refundPoints/{param}")
+    public R refundPoints(@PathVariable("param")String param) {
+        String[] split = param.split("-");
+        String userId = split[0];
+        String points = split[1];
+        TAppUser byId = appUserService.getById(userId);
+        byId.setPoints(byId.getPoints()+Integer.parseInt(points));
+        appUserService.updateById(byId);
+        return R.ok();
+    }
 
     @ApiOperation(value = "查询当前用户是否为会员 0否1是", tags = {"小程序--查询当前用户是否为会员"})
     @PostMapping(value = "/getUserInfo")
@@ -537,7 +550,8 @@
 
     }
 
-    @ApiOperation(value = "优惠卷列表不分页(1可使用2不可用)", tags = {"小程序-个人中心"})
+
+    @ApiOperation(value = "优惠卷详情(1可使用2不可用)", tags = {"小程序-个人中心"})
     @PostMapping(value = "/user/coupon/getById")
     public R<TAppCoupon> couponGetById(@RequestParam("id")Long id) {
         TAppCoupon appCoupon = appCouponService.getById(id);
@@ -601,7 +615,7 @@
     @ApiOperation(value = "更换手机号", tags = {"小程序-用户管理-更换手机号"})
     @PostMapping(value = "/user/updatePhone")
     public AjaxResult<String> updatePhone(@Validated @RequestBody UpdatePhoneDTO dto) {
-        String code = redisService.getCacheObject(dto.getPhone() + Constants.APPLET);
+        String code = redisService.getCacheObject(dto.getPhone() + Constants.UPDATE_PHONE);
         if(StringUtils.isEmpty(code)){
             return AjaxResult.error("验证码已过期,请重新获取验证码!");
         }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java
index 14b8403..0eaf607 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java
@@ -42,7 +42,7 @@
             return AjaxResult.error("该手机号已绑定账号");
         }
         String code = MsgUtil.createCode();
-        redisService.setCacheObject(phone+ Constants.APPLET,code,5L, TimeUnit.MINUTES);
+        redisService.setCacheObject(phone+ Constants.UPDATE_PHONE,code,5L, TimeUnit.MINUTES);
         String reqStr = MsgUtil.codeMsg(phone, code);
         String result = HttpUtils.post(MsgConstants.SEND_URL, reqStr);
         // 记录短信发送
@@ -50,4 +50,23 @@
         return AjaxResult.success(result);
     }
 
+    /**
+     * 获取验证码
+     *
+     * @param phone 手机号
+     * @return 结果
+     */
+    @ApiOperation(value = "获取验证码",notes = "获取验证码",tags = {"申请建桩"})
+    @GetMapping("getApplyCode")
+    public AjaxResult getApplyCode(@RequestParam("phone") String phone)
+    {
+        String code = MsgUtil.createCode();
+        redisService.setCacheObject(phone+ Constants.APPLY_CHARGING,code,5L, TimeUnit.MINUTES);
+        String reqStr = MsgUtil.applyCodeMsg(phone, code);
+        String result = HttpUtils.post(MsgConstants.SEND_URL, reqStr);
+        // 记录短信发送
+        chargingPileNotificationService.saveData(1,null,null,phone,"验证码:"+code+",用于申请建桩。请勿转发。");
+        return AjaxResult.success(result);
+    }
+
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index c0352fe..b2ae5fe 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -153,7 +153,7 @@
 	@ApiOperation(value = "获取站点下充电桩及充电枪列表", tags = {"小程序-站点管理-站点详情"})
 	@GetMapping("/getChargingGunList")
 	public AjaxResult<List<TChargingPileVO>> getChargingGunList(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId,
-																@RequestParam(value = "siteId",required = false)@ApiParam(value = "类型 1=超充,2=快充,3=慢充")Integer type){
+																@RequestParam(value = "type",required = false)@ApiParam(value = "类型 1=超充,2=快充,3=慢充")Integer type){
 		return AjaxResult.success(chargingPileService.getChargingGunList(siteId,type));
 	}
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
index e60d631..ffc0dfa 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
@@ -2,9 +2,11 @@
 
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TAccountingStrategy;
 import com.ruoyi.chargingPile.api.vo.StrategyPriceVO;
 import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO;
+import com.ruoyi.chargingPile.service.ISiteService;
 import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService;
 import com.ruoyi.chargingPile.service.TAccountingStrategyService;
 import com.ruoyi.common.core.exception.ServiceException;
@@ -17,8 +19,6 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.time.LocalTime;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -35,11 +35,13 @@
 @RequestMapping("/t-accounting-strategy-detail")
 public class TAccountingStrategyDetailController {
 
+    private final ISiteService siteService;
     private final TAccountingStrategyService accountingStrategyService;
     private final TAccountingStrategyDetailService accountingStrategyDetailService;
 
     @Autowired
-    public TAccountingStrategyDetailController(TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) {
+    public TAccountingStrategyDetailController(ISiteService siteService, TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) {
+        this.siteService = siteService;
         this.accountingStrategyService = accountingStrategyService;
         this.accountingStrategyDetailService = accountingStrategyDetailService;
     }
@@ -50,9 +52,8 @@
     @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "通过站点id查询计费策略明细列表")
     @GetMapping(value = "/queryAccountingStrategyDetailBySiteId")
     public AjaxResult<List<TAccountingStrategyDetailVO>> queryAccountingStrategyDetailBySiteId(@RequestParam("siteId") Integer siteId) {
-        TAccountingStrategy accountingStrategy = accountingStrategyService.getOne(Wrappers.lambdaQuery(TAccountingStrategy.class)
-                .eq(TAccountingStrategy::getSiteId, siteId)
-                .last("limit 1"));
+        Site site = siteService.getById(siteId);
+        TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId());
         if(Objects.isNull(accountingStrategy)){
             throw new ServiceException("未查询到计费策略");
         }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
index 376534d..8e85f92 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -11,15 +11,18 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.chargingPile.api.dto.ApplyChargingQuery;
 import com.ruoyi.chargingPile.api.dto.ApplyChargingRemarkDto;
+import com.ruoyi.chargingPile.api.dto.TApplyChargingPileDTO;
 import com.ruoyi.chargingPile.api.model.TApplyChargingPile;
 import com.ruoyi.chargingPile.dto.TApplyChargingPileExportDto;
 import com.ruoyi.chargingPile.service.TApplyChargingPileService;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.codec.CharEncoding;
@@ -51,11 +54,13 @@
 
     private final TApplyChargingPileService applyChargingPileService;
     private final TokenService tokenService;
+    private final RedisService redisService;
 
     @Autowired
-    public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService) {
+    public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService, RedisService redisService) {
         this.applyChargingPileService = applyChargingPileService;
         this.tokenService = tokenService;
+        this.redisService = redisService;
     }
 
     /**
@@ -64,7 +69,15 @@
     @Log(title = "建桩申请", businessType = BusinessType.INSERT,operatorType = OperatorType.MOBILE)
     @ApiOperation(tags = {"小程序-建桩申请"},value = "建桩申请")
     @PostMapping(value = "/add")
-    public AjaxResult<Boolean> add(@RequestBody TApplyChargingPile dto) {
+    public AjaxResult<Boolean> add(@RequestBody TApplyChargingPileDTO dto) {
+        // 验证验证码
+        String code = redisService.getCacheObject(dto.getLandlordPhone() + Constants.APPLY_CHARGING);
+        if(StringUtils.isEmpty(code)){
+            return AjaxResult.error("验证码已过期,请重新获取验证码!");
+        }
+        if(!code.equals(dto.getCode())){
+            return AjaxResult.error("验证码错误!");
+        }
         // 用户id
         Long userId = tokenService.getLoginUserApplet().getUserId();
         dto.setAppUserId(userId);
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
index 0857bc3..b5de0af 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -65,7 +65,7 @@
      * 查询充电桩列表
      */
     @ApiOperation(tags = {"小程序-充电桩"},value = "通过站点id查询充电桩列表")
-    @PostMapping(value = "/list")
+    @GetMapping(value = "/list")
     @ApiImplicitParams({
 		    @ApiImplicitParam(name = "siteId", value = "站点id")
     })
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
index fbfb178..785ad38 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -82,12 +82,17 @@
             accountingStrategyDetailVO.setEndTime("23:59:59".equals(accountingStrategyDetailVO.getEndTime())? "00:00":accountingStrategyDetailVO.getEndTime());
             accountingStrategyDetailNext = list.stream().filter(detail -> detail.getStartTime().compareTo(accountingStrategyDetailVO.getEndTime()) == 0)
                     .findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细"));
-            if(Objects.nonNull(vip) && vip.getType() == 2){
-                accountingStrategyDetailVO.setDiscount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(vip.getDiscount()));
-                accountingStrategyDetailNext.setDiscount(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(vip.getDiscount()));
+            if(Objects.nonNull(vip)) {
+                if (vip.getType() == 2) {
+                    accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(vip.getDiscount()));
+                    accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(vip.getDiscount()));
+                } else {
+                    accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
+                    accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
+                }
             }else {
-                accountingStrategyDetailVO.setDiscount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
-                accountingStrategyDetailNext.setDiscount(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
+                accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()));
+                accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()));
             }
             list = new ArrayList<>();
             list.add(accountingStrategyDetailVO);
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
index e88f663..ac10f19 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.chargingPile.api.dto.TChargingGunDTO;
 import com.ruoyi.chargingPile.api.model.TChargingGun;
+import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
 import com.ruoyi.chargingPile.api.vo.ChargingGunCountVO;
 import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
@@ -13,6 +14,7 @@
 import com.ruoyi.chargingPile.mapper.TChargingGunMapper;
 import com.ruoyi.chargingPile.service.IPartnerService;
 import com.ruoyi.chargingPile.service.TChargingGunService;
+import com.ruoyi.chargingPile.service.TChargingPileService;
 import com.ruoyi.common.core.enums.status.ChargingGunModeEnum;
 import com.ruoyi.common.core.enums.status.ChargingGunStatusEnum;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -23,7 +25,9 @@
 import com.ruoyi.other.api.feignClient.UserSiteClient;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.Arrays;
@@ -56,6 +60,8 @@
     
     @Resource
     private RoleSiteClient roleSiteClient;
+    @Autowired
+    private TChargingPileService chargingPileService;
 
     
     
@@ -142,8 +148,20 @@
     @Override
     public Map<String, ChargingGunCountVO> getChargingGunCount(Integer siteId) {
         Map<String, ChargingGunCountVO> map = new HashMap<>(4);
+        //查询充电桩
+        List<TChargingPile> pileList = chargingPileService.list(Wrappers.lambdaQuery(TChargingPile.class)
+                .eq(TChargingPile::getSiteId, siteId));
+        if(CollectionUtils.isEmpty(pileList)){
+            map.put("superSufficient", new ChargingGunCountVO(0,0));
+            map.put("fastSufficient", new ChargingGunCountVO(0,0));
+            map.put("slowSufficient", new ChargingGunCountVO(0,0));
+            map.put("totalSufficient", new ChargingGunCountVO(0,0));
+            return map;
+        }
+        Set<Integer> pileIds = pileList.stream().map(TChargingPile::getId).collect(Collectors.toSet());
         // 查询全部充电枪
-        List<TChargingGun> list = this.list(Wrappers.lambdaQuery(TChargingGun.class).eq(TChargingGun::getSiteId, siteId));
+        List<TChargingGun> list = this.list(Wrappers.lambdaQuery(TChargingGun.class).eq(TChargingGun::getSiteId, siteId)
+                .in(TChargingGun::getChargingPileId, pileIds));
         int freeCount = 0;
         // 超级充
         ChargingGunCountVO superSufficient = getGunCount(ChargingGunModeEnum.SUPER_SUFFICIENT.getCode(), list);
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
index a6567a5..12c5b72 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -244,9 +244,12 @@
 	@Override
 	public List<TChargingPileVO> getChargingGunList(Integer siteId,Integer type) {
 		List<TChargingPileVO> chargingPileVOS = this.baseMapper.getChargingGunList(siteId);
-		List<TChargingGun> chargingGuns = chargingGunService.list(Wrappers.lambdaQuery(TChargingGun.class)
-				.eq(TChargingGun::getSiteId, siteId)
-				.eq(TChargingGun::getChargeMode, type));
+		LambdaQueryWrapper<TChargingGun> wrapper = new LambdaQueryWrapper<>();
+		if(Objects.nonNull(type)){
+			wrapper.eq(TChargingGun::getChargeMode, type);
+		}
+		wrapper.eq(TChargingGun::getSiteId, siteId);
+		List<TChargingGun> chargingGuns = chargingGunService.list(wrapper);
 		// 查询充电枪信息
 		chargingPileVOS.forEach(item -> {
 			item.setChargingGunList(chargingGuns.stream().filter(gun -> gun.getChargingPileId().equals(item.getId())).collect(Collectors.toList()));
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
index e2a563a..721c8ba 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
@@ -27,6 +27,8 @@
 import com.ruoyi.common.core.utils.OrderCodeUtil;
 import com.ruoyi.other.api.feignClient.CouponClient;
 import com.ruoyi.other.api.feignClient.GoodsClient;
+import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+import com.ruoyi.payment.api.feignClient.WxPaymentClient;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.swagger.annotations.Api;
@@ -67,6 +69,7 @@
     private GoodsClient goodsClient;
     @Resource
     private CouponClient couponClient;
+
 
     @PostMapping("/getExchangeOrderList")
     @ApiOperation(value = "列表查询", tags = {"管理后台-兑换订单"})
@@ -131,11 +134,13 @@
     public AjaxResult cancelShoppingOrder(String id) {
         TExchangeOrder byId = exchangeOrderService.getById(id);
         Long userid = tokenService.getLoginUser().getUserid();
-        // todo 根据支付方式 取消订单
         byId.setCancellationId(userid);
         byId.setCancellationTime(LocalDateTime.now());
         byId.setStatus(4);
         exchangeOrderService.updateById(byId);
+        // 回退积分
+        Integer points = byId.getPoints();
+        appUserClient.refundPoints(byId.getAppUserId()+"-"+points);
         return AjaxResult.success();
     }
     @GetMapping("/consignerShoppingOrder")
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
index ba052cc..5312f64 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -3,6 +3,7 @@
 import java.time.LocalDateTime;
 
 
+import com.ruoyi.account.api.feignClient.AppCouponClient;
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.model.TAppUserAddress;
 import com.ruoyi.common.core.domain.R;
@@ -18,6 +19,11 @@
 import com.ruoyi.order.service.TShoppingOrderService;
 import com.ruoyi.other.api.feignClient.CouponClient;
 import com.ruoyi.other.api.feignClient.GoodsClient;
+import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+import com.ruoyi.payment.api.feignClient.WxPaymentClient;
+import com.ruoyi.payment.api.model.RefundReq;
+import com.ruoyi.payment.api.model.RefundResp;
+import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.swagger.annotations.Api;
@@ -111,6 +117,12 @@
 	}
 	@Resource
 	private TokenService tokenService;
+	@Resource
+	private AliPaymentClient aliPaymentClient;
+	@Resource
+	private WxPaymentClient wxPaymentClient;
+	@Resource
+	private AppCouponClient appCouponClient;
 	@GetMapping("/cancelShoppingOrder")
 	@ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"})
 	public AjaxResult cancelShoppingOrder(String id) {
@@ -123,9 +135,40 @@
 		switch (byId.getPaymentType()){
 			case 1:
 				// 微信
+				WxPaymentRefundModel wxPaymentRefundModel = new WxPaymentRefundModel();
+				wxPaymentRefundModel.setTransaction_id(byId.getSerialNumber());
+				wxPaymentRefundModel.setOut_trade_no(byId.getCode());
+				wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GW"));
+				// todo 部署到线上之后写回调地址
+//				wxPaymentRefundModel.setNotify_url("");
+				String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString();
+				int i = Integer.parseInt(string);
+				WxPaymentRefundModel.RefundAmount refundAmount = new WxPaymentRefundModel.RefundAmount();
+				refundAmount.setTotal(i);
+				refundAmount.setRefund(i);
+				wxPaymentRefundModel.setAmount(refundAmount);
+				wxPaymentClient.refundOrderR(wxPaymentRefundModel);
 				break;
 			case 2:
 				// 支付宝
+				RefundReq refundReq = new RefundReq();
+				refundReq.setOutTradeNo(byId.getSerialNumber());
+				String gw = OrderCodeUtil.getOrderCode("GW");
+				refundReq.setOutRequestNo(gw);
+				refundReq.setRefundAmount(byId.getPaymentAmount().toString());
+				refundReq.setRefundReason("后台退款");
+				RefundResp data = aliPaymentClient.refund(refundReq).getData();
+				if (data!=null){
+					// 退款成功 回退优惠券
+//					byId.setStatus(4);
+					if (byId.getAppCouponId()!=null){
+						appCouponClient.refund(byId.getAppCouponId().toString());
+						byId.setRefundCode(gw);
+						byId.setRefundAmount(byId.getPaymentAmount());
+						byId.setRefundStatus(2);
+						byId.setRefundSerialNumber(data.getTradeNo());
+					}
+				}
 				break;
 		}
 		shoppingOrderService.updateById(byId);
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java
index 38bf74f..ea2bb50 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java
@@ -3,9 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.payment.ali.config.AliProperties;
 import com.ruoyi.payment.ali.v2.AppletPayUtil;
-import com.ruoyi.payment.api.model.PaymentReq;
-import com.ruoyi.payment.api.model.PaymentResp;
-import com.ruoyi.payment.api.model.QueryResp;
+import com.ruoyi.payment.api.model.*;
 import com.ruoyi.payment.api.vo.AliPaymentReq;
 import com.ruoyi.payment.api.vo.AliPaymentResp;
 import com.ruoyi.payment.api.vo.AliQueryOrder;
@@ -78,6 +76,13 @@
 			throw new RuntimeException("关闭支付宝订单失败");
 		}
 	}
+	/**
+	 * 后台退款 远程调用
+	 */
+	@PostMapping("/refund")
+	public R<RefundResp> refund(@RequestBody RefundReq dto){
+		return R.ok(appletPayUtil.refund(dto));
+	}
 	
 	
 	
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
index d51b017..81ea044 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
@@ -5,7 +5,7 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.payment.api.vo.PaymentOrder;
 import com.ruoyi.payment.wx.enums.RefundEnum;
-import com.ruoyi.payment.wx.model.WxPaymentRefundModel;
+import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.wx.resp.NotifyV3PayDecodeRespBody;
 import com.ruoyi.payment.wx.utils.WxV3Pay;
 import io.swagger.annotations.Api;
@@ -79,7 +79,30 @@
         // TODO 退款业务处理
         return AjaxResult.success();
     }
-
+    /**
+     * 微信v3支付-订单退款 远程调用
+     *
+     * @return
+     */
+    @ApiOperation("订单退款")
+    @PostMapping(value = "refundOrderR")
+    public R<String> refundOrderR(@RequestBody WxPaymentRefundModel model) {
+        Map<String, Object> result = wxV3Pay.refund(model);
+        log.info("退款结果:{}", result);
+        // 微信支付退款单号
+        String refund_id = result.get("refund_id").toString();
+        // 商户退款单号
+        String out_refund_no = result.get("out_refund_no").toString();
+        // 微信支付订单号
+        String transaction_id = result.get("transaction_id").toString();
+        // 商户订单号 tradeNo
+        String out_trade_no = result.get("out_trade_no").toString();
+        // 退款成功时间
+        String success_time = Objects.nonNull(result.get("success_time")) ? result.get("success_time").toString() : null;
+        // 退款状态 RefundEnum
+        String status = result.get("status").toString();
+        return R.ok(status);
+    }
     /**
      * 支付回调
      */
@@ -144,6 +167,12 @@
             // 时间不对的话,可以调用  WxTimeUtils.toRfc3339Date(success_time)转换一下
             String success_time = params.get("success_time").toString();
             if (tradeState.equals(RefundEnum.SUCCESS.name())) {
+                String substring = out_refund_no.substring(0, 2);
+                switch (substring){
+                    case "GW":
+                        break;
+
+                }
                 // TODO 退款成功处理
                 wxV3Pay.ack();
             } else {
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxAbstractPay.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxAbstractPay.java
index dbbae3a..8e040ac 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxAbstractPay.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxAbstractPay.java
@@ -4,7 +4,7 @@
 import com.ruoyi.common.core.utils.WebUtils;
 import com.ruoyi.payment.wx.model.WxCloseOrderModel;
 import com.ruoyi.payment.wx.model.WxPaymentInfoModel;
-import com.ruoyi.payment.wx.model.WxPaymentRefundModel;
+import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.wx.resp.NotifyV3PayDecodeRespBody;
 import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
 import com.wechat.pay.contrib.apache.httpclient.auth.Verifier;
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxV3Pay.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxV3Pay.java
index 4e01120..af10ca3 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxV3Pay.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/utils/WxV3Pay.java
@@ -7,7 +7,7 @@
 import com.ruoyi.payment.wx.model.WeixinProperties;
 import com.ruoyi.payment.wx.model.WxCloseOrderModel;
 import com.ruoyi.payment.wx.model.WxPaymentInfoModel;
-import com.ruoyi.payment.wx.model.WxPaymentRefundModel;
+import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.wx.resp.NotifyV3PayDecodeRespBody;
 import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
 import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;

--
Gitblit v1.7.1