From 25c2e11cf8045a2a59bc5c661a7d96e5b372b318 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期六, 24 八月 2024 09:48:07 +0800
Subject: [PATCH] 8.24.1

---
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java                      |    2 
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/controller/WxPayController.java            |    6 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java       |   25 ++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/Constant.java                   |   24 ++
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ExchangeDto.java                   |   11 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/SSLCipherSuiteUtil.java         |  209 +++++++++++++++++++
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java             |    3 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/HostName.java                   |   17 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java                  |   97 +++++++-
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java                    |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java                |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java       |    6 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java               |   65 +++++
 ruoyi-service/ruoyi-other/pom.xml                                                                         |    4 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java          |    5 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java            |   49 ++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java          |   81 +++---
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InviteInfoDto.java                    |   12 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/UnsupportProtocolException.java |   15 +
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WeixinProperties.java                |    6 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java                         |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java            |    5 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java                  |    5 
 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml                                |    4 
 24 files changed, 589 insertions(+), 68 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InviteInfoDto.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InviteInfoDto.java
new file mode 100644
index 0000000..c4ca8f2
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InviteInfoDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.account.api.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class InviteInfoDto {
+    @ApiModelProperty("已获得积分")
+    private Integer point;
+    @ApiModelProperty("已邀请人数")
+    private Integer inviteNum;
+}
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 20f36a2..76b4263 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
@@ -1,6 +1,7 @@
 package com.ruoyi.account.api.factory;
 
 import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppCoupon;
 import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.PointChangeDto;
@@ -37,6 +38,11 @@
             }
 
             @Override
+            public R<TAppCoupon> couponGetById(Long id) {
+                return R.fail("查询优惠券失败:"+throwable.getMessage());
+            }
+
+            @Override
             public R updateAppUser(TAppUser appUser) {
                 return R.fail("修改用户失败:"+throwable.getMessage());
             }
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 ea7adc9..20c7d65 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
@@ -1,5 +1,6 @@
 package com.ruoyi.account.api.feignClient;
 
+import com.ruoyi.account.api.model.TAppCoupon;
 import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.account.api.factory.AppUserFallbackFactory;
@@ -37,6 +38,10 @@
      */
     @PostMapping(value = "/t-app-user/user/getUserById/{id}")
     R<TAppUser> getUserById(@PathVariable("id") Long id);
+
+
+    @PostMapping(value = "/t-app-user/user/coupon/getById")
+    R<TAppCoupon> couponGetById(@RequestParam("id")Long id);
     
     
     
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
index e0dc45f..7c4b753 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.ExchangeDto;
 import com.ruoyi.order.api.feignClient.OrderClient;
+import com.ruoyi.order.api.model.TShoppingOrder;
 import com.ruoyi.order.api.query.TActivityStatisticsQuery;
 import com.ruoyi.order.api.vo.TActivityVO;
 import org.slf4j.Logger;
@@ -50,7 +51,7 @@
             }
 
             @Override
-            public R<Long> shopCreate(ExchangeDto exchangeDto) {
+            public R<TShoppingOrder> shopCreate(ExchangeDto exchangeDto) {
                 return R.fail("订单创建" + cause.getMessage());
             }
 
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
index 6e60d80..fc54b0f 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -4,6 +4,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.ExchangeDto;
 import com.ruoyi.order.api.factory.OrderFallbackFactory;
+import com.ruoyi.order.api.model.TShoppingOrder;
 import com.ruoyi.order.api.query.TActivityStatisticsQuery;
 import com.ruoyi.order.api.vo.TActivityVO;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -35,7 +36,9 @@
     @PostMapping("/t-exchange-order/create")
     public R<Long> exchangeCreate(@RequestBody ExchangeDto exchangeDto);
     @PostMapping("/t-shopping-order/create")
-    public R<Long> shopCreate(@RequestBody ExchangeDto exchangeDto);
+    public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto);
+    @PostMapping("/t-shopping-order/callBack")
+    public R callBack(@RequestParam("code")String code,@RequestParam("outTradeNo")String outTradeNo);
 
     /**
      * 管理后台 活动费用统计
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java
index a998845..b9c18a9 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java
@@ -29,5 +29,5 @@
 	/**
 	 * 回调地址
 	 */
-	private String notifyUrl;
+	private String notifyUrl ="/";
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ExchangeDto.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ExchangeDto.java
index 29456ee..b736df9 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ExchangeDto.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ExchangeDto.java
@@ -3,6 +3,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class ExchangeDto {
     @ApiModelProperty("商品id")
@@ -26,5 +28,14 @@
     @ApiModelProperty("1微信2支付宝")
     Integer payMethod;
 
+    @ApiModelProperty(hidden =true)
+    BigDecimal orderPrice;
+    @ApiModelProperty(hidden =true)
+    BigDecimal payPrice;
+    @ApiModelProperty(hidden =true)
+    BigDecimal discountPrice;
+    @ApiModelProperty(hidden =true)
+    BigDecimal vipDiscount;
+
 
 }
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 0443f6c..8cfd00d 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
@@ -201,6 +201,8 @@
     @PostMapping("/grantCoupon")
     public R  grantCoupon(@RequestBody GrantCouponDto dto){
         List<TAppCoupon> res = new ArrayList<>();
+        TCoupon coupon = otherClient.getCouponById(dto.getCouponId()).getData();
+
         switch (dto.getType()){
             case 1:
                 // 根据标签ids 查询用户ids
@@ -214,6 +216,7 @@
                     tAppCoupon.setEndTime(dto.getEndTime());
                     tAppCoupon.setWaysToObtain(dto.getWaysToObtain());
                     tAppCoupon.setStatus(1);
+                    tAppCoupon.setCouponJson(JSON.toJSONString(coupon));
                     res.add(tAppCoupon);
                 }
                 tAppCouponService.saveBatch(res);
@@ -230,6 +233,7 @@
                     tAppCoupon.setEndTime(dto.getEndTime());
                     tAppCoupon.setWaysToObtain(dto.getWaysToObtain());
                     tAppCoupon.setStatus(1);
+                    tAppCoupon.setCouponJson(JSON.toJSONString(coupon));
                     res.add(tAppCoupon);
                 }
                 tAppCouponService.saveBatch(res);
@@ -242,6 +246,7 @@
                     tAppCoupon.setEndTime(dto.getEndTime());
                     tAppCoupon.setWaysToObtain(dto.getWaysToObtain());
                     tAppCoupon.setStatus(1);
+                    tAppCoupon.setCouponJson(JSON.toJSONString(coupon));
                     res.add(tAppCoupon);
                 }
                 tAppCouponService.saveBatch(res);
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 e9e8ebb..432ccae 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
@@ -13,6 +13,7 @@
 import com.ruoyi.account.service.*;
 import com.ruoyi.account.util.PointDetailUtil;
 import com.ruoyi.account.util.SignDayUtil;
+import com.ruoyi.account.util.carBrand.CarBrandUtil;
 import com.ruoyi.account.wx.model.WeixinProperties;
 import com.ruoyi.account.util.GiveVipUtil;
 import com.ruoyi.common.core.constant.Constants;
@@ -24,6 +25,7 @@
 import com.ruoyi.common.core.utils.bean.BeanUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.domain.BasePojo;
+import com.ruoyi.common.core.web.page.BasePage;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.auth.AuthUtil;
 import com.ruoyi.common.security.service.TokenService;
@@ -110,6 +112,8 @@
 
     @Resource
     private VipClient vipClient;
+    @Resource
+    private TInviteUserService inviteUserService;
 
 
 
@@ -518,6 +522,13 @@
 
     }
 
+    @ApiOperation(value = "优惠卷列表不分页(1可使用2不可用)", tags = {"小程序-个人中心"})
+    @PostMapping(value = "/user/coupon/getById")
+    public R<TAppCoupon> couponGetById(@RequestParam("id")Long id) {
+        TAppCoupon appCoupon = appCouponService.getById(id);
+        return R.ok(appCoupon);
+    }
+
 
 
     @ApiOperation(value = "赠送会员", tags = {"用户管理-用户列表"})
@@ -539,13 +550,38 @@
         }
         //增加vipDetail
         giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay);
-
-
         appUserService.updateById(nowUser);
-        //执行一次赠送优惠卷的定时任务
         }
         return R.ok();
     }
+
+    @ApiOperation(value = "已赠送列表", tags = {"小程序-个人中心-邀请好友"})
+    @PostMapping(value = "/user/invite/page")
+    public R<Page<TInviteUser>> invitePage(@RequestBody BasePage basePage) {
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+
+        Page<TInviteUser> page = inviteUserService.lambdaQuery().eq(TInviteUser::getAppUserId, userId).isNotNull(TInviteUser::getAward).orderByDesc(TInviteUser::getCreateTime).page(Page.of(basePage.getPageCurr(), basePage.getPageSize()));
+        return R.ok(page);
+    }
+
+    @ApiOperation(value = "已赠送列表", tags = {"小程序-个人中心-邀请好友"})
+    @PostMapping(value = "/user/invite/info")
+    public R<InviteInfoDto> inviteInfo() {
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        Integer point = 0;
+        List<TInviteUser> list = inviteUserService.lambdaQuery().eq(TInviteUser::getAppUserId, userId).isNotNull(TInviteUser::getAward).orderByDesc(TInviteUser::getCreateTime).list();
+        for (TInviteUser tInviteUser : list) {
+            point = point +tInviteUser.getAward();
+        }
+        InviteInfoDto inviteInfoDto = new InviteInfoDto();
+        inviteInfoDto.setPoint(point);
+        inviteInfoDto.setInviteNum(list.size());
+
+
+        return R.ok(inviteInfoDto);
+    }
+
+
 
     @ApiOperation(value = "更换手机号", tags = {"小程序-用户管理-更换手机号"})
     @PostMapping(value = "/user/updatePhone")
@@ -766,5 +802,12 @@
 
         return R.ok();
     }
+
+    @ApiOperation(value = "获取车辆品牌", tags = {"小程序-个人中心-车辆"})
+    @GetMapping(value = "/user/car/getBrands")
+    public R getBrands() throws Exception {
+        String brand = CarBrandUtil.getBrand();
+        return R.ok(brand);
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
index a20ac1c..e5fdd18 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
@@ -78,7 +78,7 @@
 
 
         }else {
-            nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay));
+            nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay).minusDays(1));
             //获取detail里结束时间大于当前时间的数据,并将enttime延长
             TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one();
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java
new file mode 100644
index 0000000..ec42eb7
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java
@@ -0,0 +1,65 @@
+package com.ruoyi.account.util.carBrand;
+
+import com.cloud.apigateway.sdk.utils.Client;
+import com.cloud.apigateway.sdk.utils.Request;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CarBrandUtil {
+    private static final Logger LOGGER = LoggerFactory.getLogger(CarBrandUtil.class);
+    public static   String getBrand() throws Exception {
+        // Create a new request.
+        Request httpClientRequest = new Request();
+        try {
+            // Set the request parameters.
+            // AppKey, AppSecrect, Method and Url are required parameters.
+            // Directly writing AK/SK in code is risky. For security, encrypt your AK/SK and store them in the configuration file or environment variables.
+            // In this example, the AK/SK are stored in environment variables for identity authentication. 
+            // Before running this example, set environment variables HUAWEICLOUD_SDK_AK and HUAWEICLOUD_SDK_SK.
+            httpClientRequest.setKey("9a4a2b69afe141718f6843c5d39961ec");
+            httpClientRequest.setSecret("541845f206324bbc933065b44fc98c47");
+            httpClientRequest.setMethod("POST");
+            // Set a request URL in the format of https://{Endpoint}/{URI}.
+            httpClientRequest.setUrl("https://vehiclequery.apistore.huaweicloud.com/vehicle/query/brand");
+            httpClientRequest.addHeader("Content-Type", "text/plain");
+            // Set a body for http request.
+//            httpClientRequest.setBody("put your request body here");
+        } catch (Exception e) {
+//            LOGGER.error(e.getMessage());
+            return "";
+        }
+        CloseableHttpClient client = null;
+        try {
+            // Sign the request.
+            HttpRequestBase signedRequest = Client.sign(httpClientRequest, Constant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256);
+            if (Constant.DO_VERIFY) {
+                // creat httpClient and verify ssl certificate
+                HostName.setUrlHostName(httpClientRequest.getHost());
+                client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClientWithVerify(Constant.INTERNATIONAL_PROTOCOL);
+            } else {
+                // creat httpClient and do not verify ssl certificate
+                client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClient(Constant.INTERNATIONAL_PROTOCOL);
+            }
+            HttpResponse response = client.execute(signedRequest);
+            // Print the body of the response.
+            HttpEntity resEntity = response.getEntity();
+            if (resEntity != null) {
+                LOGGER.info("Processing Body with name: {} and value: {}", System.getProperty("line.separator"),
+                        EntityUtils.toString(resEntity, "UTF-8"));
+                String string = EntityUtils.toString(resEntity, "UTF-8");
+            }
+        } catch (Exception e) {
+            LOGGER.error(e.getMessage());
+        } finally {
+            if (client != null) {
+                client.close();
+            }
+        }
+        return "";
+    }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/Constant.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/Constant.java
new file mode 100644
index 0000000..a1a8941
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/Constant.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ */
+
+package com.ruoyi.account.util.carBrand;
+
+public final class Constant {
+    // verify ssl certificate (true) or do not verify (false)
+    public static final boolean DO_VERIFY = false;
+
+    public static final String HTTPS = "HTTPS";
+    public static final String TRUST_MANAGER_FACTORY = "SunX509";
+    public static final String GM_PROTOCOL = "GMTLS";
+    public static final String INTERNATIONAL_PROTOCOL = "TLSv1.2";
+    public static final String SIGNATURE_ALGORITHM_SDK_HMAC_SHA256 = "SDK-HMAC-SHA256";
+    public static final String SIGNATURE_ALGORITHM_SDK_HMAC_SM3 = "SDK-HMAC-SM3";
+    public static final String[] SUPPORTED_CIPHER_SUITES = {"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
+            "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
+            "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"};
+    public static final String SECURE_RANDOM_ALGORITHM_NATIVE_PRNG_NON_BLOCKING = "NativePRNGNonBlocking";
+
+    private Constant() {
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/HostName.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/HostName.java
new file mode 100644
index 0000000..76c30ce
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/HostName.java
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
+ */
+
+package com.ruoyi.account.util.carBrand;
+
+public class HostName {
+    private static String urlHostName;
+
+    public static void setUrlHostName(String hostName) {
+        urlHostName = hostName;
+    }
+
+    public static boolean checkHostName(String SSLHostName) {
+        return urlHostName.equals(SSLHostName);
+    }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/SSLCipherSuiteUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/SSLCipherSuiteUtil.java
new file mode 100644
index 0000000..499ac72
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/SSLCipherSuiteUtil.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ */
+
+package com.ruoyi.account.util.carBrand;
+
+import okhttp3.OkHttpClient;
+import org.apache.http.client.HttpClient;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.bouncycastle.crypto.BlockCipher;
+import org.bouncycastle.crypto.engines.AESEngine;
+import org.bouncycastle.crypto.prng.SP800SecureRandomBuilder;
+import org.openeuler.BGMProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.*;
+import java.security.cert.X509Certificate;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
+public class SSLCipherSuiteUtil {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SSLCipherSuiteUtil.class);
+    private static CloseableHttpClient httpClient;
+    private static OkHttpClient okHttpClient;
+
+    private static final int CIPHER_LEN = 256;
+
+    private static final int ENTROPY_BITS_REQUIRED = 384;
+
+    public static HttpClient createHttpClient(String protocol) throws Exception {
+        SSLContext sslContext = getSslContext(protocol);
+        // create factory
+        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
+                new String[]{protocol}, Constant.SUPPORTED_CIPHER_SUITES, new TrustAllHostnameVerifier());
+
+        httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
+        return httpClient;
+    }
+
+    public static HttpClient createHttpClientWithVerify(String protocol) throws Exception {
+        SSLContext sslContext = getSslContextWithVerify(protocol);
+        // create factory
+        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
+            new String[] {protocol}, Constant.SUPPORTED_CIPHER_SUITES, new TheRealHostnameVerifier());
+
+        httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
+        return httpClient;
+    }
+
+    public static OkHttpClient createOkHttpClient(String protocol) throws Exception {
+        SSLContext sslContext = getSslContext(protocol);
+        // Create an ssl socket factory with our all-trusting manager
+        SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+        OkHttpClient.Builder builder = new OkHttpClient.Builder()
+                .sslSocketFactory(sslSocketFactory, new TrustAllManager())
+                .hostnameVerifier(new TrustAllHostnameVerifier());
+        okHttpClient = builder.connectTimeout(10, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).build();
+        return okHttpClient;
+    }
+
+    public static OkHttpClient createOkHttpClientWithVerify(String protocol) throws Exception {
+        SSLContext sslContext = getSslContextWithVerify(protocol);
+        SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance(Constant.TRUST_MANAGER_FACTORY);
+        tmf.init((KeyStore) null);
+        TrustManager[] verify = tmf.getTrustManagers();
+        OkHttpClient.Builder builder = new OkHttpClient.Builder().sslSocketFactory(sslSocketFactory,
+            (X509TrustManager) verify[0]).hostnameVerifier(new TheRealHostnameVerifier());
+
+        okHttpClient = builder.connectTimeout(10, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).build();
+        return okHttpClient;
+    }
+
+    public static HttpURLConnection createHttpsOrHttpURLConnection(URL uUrl, String protocol) throws Exception {
+        // initial connection
+        if (uUrl.getProtocol().toUpperCase(Locale.getDefault()).equals(Constant.HTTPS)) {
+            SSLContext sslContext = getSslContext(protocol);
+            HttpsURLConnection.setDefaultHostnameVerifier(new TrustAllHostnameVerifier());
+            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
+            return (HttpsURLConnection) uUrl.openConnection();
+        }
+        return (HttpURLConnection) uUrl.openConnection();
+    }
+
+    public static HttpURLConnection createHttpsOrHttpURLConnectionWithVerify(URL uUrl, String protocol) throws Exception {
+        // initial connection
+        if (uUrl.getProtocol().toUpperCase(Locale.getDefault()).equals(Constant.HTTPS)) {
+            SSLContext sslContext = getSslContextWithVerify(protocol);
+            HttpsURLConnection.setDefaultHostnameVerifier(new TheRealHostnameVerifier());
+            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
+            return (HttpsURLConnection) uUrl.openConnection();
+        }
+        return (HttpURLConnection) uUrl.openConnection();
+    }
+
+    private static SSLContext getSslContext(String protocol) throws UnsupportProtocolException,
+            NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {
+        if (!Constant.GM_PROTOCOL.equals(protocol) && !Constant.INTERNATIONAL_PROTOCOL.equals(protocol)) {
+            LOGGER.info("Unsupport protocol: {}, Only support GMTLS TLSv1.2", protocol);
+            throw new UnsupportProtocolException("Unsupport protocol, Only support GMTLS TLSv1.2");
+        }
+        // Create a trust manager that does not validate certificate chains
+        TrustAllManager[] trust = {new TrustAllManager()};
+        KeyManager[] kms = null;
+        SSLContext sslContext;
+
+        sslContext = SSLContext.getInstance(Constant.INTERNATIONAL_PROTOCOL, "SunJSSE");
+
+        if (Constant.GM_PROTOCOL.equals(protocol)) {
+            Security.insertProviderAt(new BGMProvider(), 1);
+            sslContext = SSLContext.getInstance(Constant.GM_PROTOCOL, "BGMProvider");
+        }
+        SecureRandom secureRandom = getSecureRandom();
+        sslContext.init(kms, trust, secureRandom);
+        sslContext.getServerSessionContext().setSessionCacheSize(8192);
+        sslContext.getServerSessionContext().setSessionTimeout(3600);
+        return sslContext;
+    }
+
+    private static SSLContext getSslContextWithVerify(String protocol)
+        throws UnsupportProtocolException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException,
+        KeyStoreException {
+        if (!Constant.GM_PROTOCOL.equals(protocol) && !Constant.INTERNATIONAL_PROTOCOL.equals(protocol)) {
+            LOGGER.info("Unsupport protocol: {}, Only support GMTLS TLSv1.2", protocol);
+            throw new UnsupportProtocolException("Unsupport protocol, Only support GMTLS TLSv1.2");
+        }
+        KeyManager[] kms = null;
+        SSLContext sslContext = SSLContext.getInstance(Constant.INTERNATIONAL_PROTOCOL, "SunJSSE");
+        SecureRandom secureRandom = getSecureRandom();
+
+        if (Constant.GM_PROTOCOL.equals(protocol)) {
+            Security.insertProviderAt(new BGMProvider(), 1);
+            sslContext = SSLContext.getInstance(Constant.GM_PROTOCOL, "BGMProvider");
+        }
+
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance(Constant.TRUST_MANAGER_FACTORY);
+        tmf.init((KeyStore) null);
+        TrustManager[] verify = tmf.getTrustManagers();
+        sslContext.init(kms, verify, secureRandom);
+
+        sslContext.getServerSessionContext().setSessionCacheSize(8192);
+        sslContext.getServerSessionContext().setSessionTimeout(3600);
+        return sslContext;
+    }
+
+    // 不校验域名
+    private static class TrustAllHostnameVerifier implements HostnameVerifier {
+        public boolean verify(String hostname, SSLSession session) {
+            return true;
+        }
+    }
+
+    // 校验域名
+    private static class TheRealHostnameVerifier implements HostnameVerifier {
+        public boolean verify(String hostname, SSLSession session) {
+            if (HostName.checkHostName(hostname)) {
+                return true;
+            } else {
+                HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
+                return hv.verify(hostname, session);
+            }
+        }
+    }
+
+    // 不校验服务端证书
+    private static class TrustAllManager implements X509TrustManager {
+        private X509Certificate[] issuers;
+
+        public TrustAllManager() {
+            this.issuers = new X509Certificate[0];
+        }
+
+        public X509Certificate[] getAcceptedIssuers() {
+            return issuers;
+        }
+
+        public void checkClientTrusted(X509Certificate[] chain, String authType) {
+        }
+
+        public void checkServerTrusted(X509Certificate[] chain, String authType) {
+        }
+    }
+
+    private static SecureRandom getSecureRandom() {
+        SecureRandom source;
+        try {
+            source = SecureRandom.getInstance(Constant.SECURE_RANDOM_ALGORITHM_NATIVE_PRNG_NON_BLOCKING);
+        } catch (NoSuchAlgorithmException e) {
+            try {
+                source = SecureRandom.getInstanceStrong();
+            } catch (NoSuchAlgorithmException ex) {
+                LOGGER.error("get SecureRandom failed", e);
+                throw new RuntimeException("get SecureRandom failed");
+            }
+        }
+        boolean predictionResistant = true;
+        BlockCipher cipher = new AESEngine();
+        boolean reSeed = false;
+        return new SP800SecureRandomBuilder(source, predictionResistant).setEntropyBitsRequired(
+                ENTROPY_BITS_REQUIRED).buildCTR(cipher, CIPHER_LEN, null, reSeed);
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/UnsupportProtocolException.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/UnsupportProtocolException.java
new file mode 100644
index 0000000..033d2e3
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/UnsupportProtocolException.java
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ */
+
+package com.ruoyi.account.util.carBrand;
+
+public class UnsupportProtocolException extends Exception {
+    private static final long serialVersionUID = 4312820110480855928L;
+    private String msgDes; // 异常对应的描述信息
+
+    public UnsupportProtocolException(String message) {
+        super(message);
+        msgDes = message;
+    }
+}
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 5b448ec..01c381a 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
@@ -88,47 +88,44 @@
 		return AjaxResult.success(list);
 	}
 
-//	@PostMapping("/create")
-//	public R<Long> shopCreate(@RequestBody ExchangeDto exchangeDto){
-//		TShoppingOrder shoppingOrder = new TShoppingOrder();
-//		shoppingOrder.setCode(OrderCodeUtil.getOrderCode("GW"));
-//		shoppingOrder.setAppUserId(exchangeDto.getUserId());
-//		shoppingOrder.setOrderType(exchangeDto.getGoodType());
-//		if (exchangeDto.getGoodType()==1) {
-//			shoppingOrder.setGoodsId(exchangeDto.getGoodId());
-//		}else {
-//			shoppingOrder.setCouponId(exchangeDto.getGoodId());
-//		}
-//		shoppingOrder.setPurchaseQuantity(exchangeDto.getNum());
-//		shoppingOrder.setAppUserAddressId(Long.valueOf(exchangeDto.getAddressId()));
-//		shoppingOrder.setOrderAmount(new BigDecimal("0"));
-//		shoppingOrder.setAppCouponId(0L);
-//		shoppingOrder.setCouponDiscountAmount(new BigDecimal("0"));
-//		shoppingOrder.setVipDiscount(new BigDecimal("0"));
-//		shoppingOrder.setVipDiscountAmount(new BigDecimal("0"));
-//		shoppingOrder.setPaymentAmount(new BigDecimal("0"));
-//		shoppingOrder.setPaymentStatus(0);
-//		shoppingOrder.setPaymentType(0);
-//		shoppingOrder.setSerialNumber("");
-//		shoppingOrder.setRemark("");
-//		shoppingOrder.setStatus(0);
-//		shoppingOrder.setExpressCompany("");
-//		shoppingOrder.setExpressNumber("");
-//		shoppingOrder.setConsignerId(0);
-//		shoppingOrder.setConsignerTime(LocalDateTime.now());
-//		shoppingOrder.setReceivingTime(LocalDateTime.now());
-//		shoppingOrder.setCancellationTime(LocalDateTime.now());
-//		shoppingOrder.setCancellationId(0);
-//		shoppingOrder.setRefundCode("");
-//		shoppingOrder.setRefundAmount(new BigDecimal("0"));
-//		shoppingOrder.setRefundStatus(0);
-//		shoppingOrder.setRefundSerialNumber("");
-//		shoppingOrder.setRefundTime(LocalDateTime.now());
-//		shoppingOrder.setCreateTime(LocalDateTime.now());
-//		shoppingOrder.setDelFlag(false);
-//
-//
-//
-//	}
+	@PostMapping("/create")
+	public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto){
+		TShoppingOrder shoppingOrder = new TShoppingOrder();
+		shoppingOrder.setCode(OrderCodeUtil.getOrderCode("GW"));
+		shoppingOrder.setAppUserId(exchangeDto.getUserId());
+		shoppingOrder.setOrderType(exchangeDto.getGoodType());
+		if (exchangeDto.getGoodType()==1) {
+			shoppingOrder.setGoodsId(exchangeDto.getGoodId());
+		}else {
+			shoppingOrder.setCouponId(exchangeDto.getGoodId());
+		}
+		shoppingOrder.setPurchaseQuantity(exchangeDto.getNum());
+		shoppingOrder.setAppUserAddressId(Long.valueOf(exchangeDto.getAddressId()));
+		shoppingOrder.setOrderAmount(exchangeDto.getOrderPrice());
+		if (exchangeDto.getCouponId()!=null) {
+			shoppingOrder.setAppCouponId(exchangeDto.getCouponId());
+		}
+		shoppingOrder.setCouponDiscountAmount(exchangeDto.getDiscountPrice());
+		shoppingOrder.setVipDiscount(new BigDecimal("0"));
+		shoppingOrder.setVipDiscountAmount(exchangeDto.getVipDiscount());
+		shoppingOrder.setPaymentAmount(exchangeDto.getPayPrice());
+		shoppingOrder.setPaymentStatus(1);
+		shoppingOrder.setPaymentType(exchangeDto.getPayMethod());
+		shoppingOrder.setRemark(exchangeDto.getRemark());
+		shoppingOrder.setStatus(1);
+		shoppingOrder.setCreateTime(LocalDateTime.now());
+		shoppingOrder.setDelFlag(false);
+		shoppingOrderService.save(shoppingOrder);
+
+		return R.ok(shoppingOrder);
+
+	}
+
+	@PostMapping("/callBack")
+	public R callBack(@RequestParam("code")String code,@RequestParam("outTradeNo")String outTradeNo){
+		shoppingOrderService.callBack(code,outTradeNo);
+		return R.ok();
+
+	}
 }
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java
index c503367..70a4616 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java
@@ -59,4 +59,6 @@
      * @return
      */
     List<MyShoppingOrderList> getNoInvoicedOrder(GetNoInvoicedOrder query);
+
+    void callBack(String code,String outTradeNo);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
index b809d8f..172dd2f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -1,7 +1,10 @@
 package com.ruoyi.order.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.account.api.dto.GrantCouponDto;
+import com.ruoyi.account.api.feignClient.AppCouponClient;
 import com.ruoyi.account.api.feignClient.AppUserAddressClient;
 import com.ruoyi.account.api.model.TAppUserAddress;
 import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -24,6 +27,7 @@
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
@@ -50,6 +54,8 @@
     
     @Resource
     private AppUserAddressClient appUserAddressClient;
+    @Resource
+    private AppCouponClient appCouponClient;
     
     
     
@@ -309,4 +315,23 @@
         }
         return pageList;
     }
+
+    @Override
+    public void callBack(String code,String outTradeNo) {
+        //改变订单状态
+        TShoppingOrder shoppingOrder = this.baseMapper.selectOne(Wrappers.lambdaQuery(TShoppingOrder.class).eq(TShoppingOrder::getCode, code));
+        shoppingOrder.setPaymentStatus(2);
+        shoppingOrder.setSerialNumber(outTradeNo);
+        this.updateById(shoppingOrder);
+        //如果是优惠券,赠送优惠券
+        if (shoppingOrder.getOrderType()==2){
+            GrantCouponDto grantCouponDto = new GrantCouponDto();
+            grantCouponDto.setType(3);
+            grantCouponDto.setUserIds(String.valueOf(shoppingOrder.getAppUserId()));
+            grantCouponDto.setCouponId(shoppingOrder.getCouponId());
+            grantCouponDto.setWaysToObtain(2);
+            grantCouponDto.setEndTime(LocalDateTime.now());
+            appCouponClient.grantCoupon(grantCouponDto);
+        }
+    }
 }
diff --git a/ruoyi-service/ruoyi-other/pom.xml b/ruoyi-service/ruoyi-other/pom.xml
index 0ca03f6..864bea4 100644
--- a/ruoyi-service/ruoyi-other/pom.xml
+++ b/ruoyi-service/ruoyi-other/pom.xml
@@ -125,6 +125,10 @@
             <groupId>io.netty</groupId>
             <artifactId>netty-all</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-api-payment</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
index 14de43b..3e7d414 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -1,10 +1,13 @@
 package com.ruoyi.other.controller;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 
+import com.alibaba.fastjson.JSON;
 import com.ruoyi.account.api.dto.GrantCouponDto;
 import com.ruoyi.account.api.feignClient.AppCouponClient;
 import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppCoupon;
 import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.AppGoodQuery;
@@ -14,6 +17,7 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.feignClient.OrderClient;
+import com.ruoyi.order.api.model.TShoppingOrder;
 import com.ruoyi.other.api.domain.TCoupon;
 import com.ruoyi.other.api.domain.TGoods;
 import com.ruoyi.common.core.dto.ExchangeDto;
@@ -22,12 +26,16 @@
 import com.ruoyi.other.service.TActivityService;
 import com.ruoyi.other.service.TCouponService;
 import com.ruoyi.other.service.TGoodsService;
+import com.ruoyi.payment.api.feignClient.WxPaymentClient;
+import com.ruoyi.payment.api.vo.PaymentOrder;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.swing.*;
 import java.util.Arrays;
+import java.util.Map;
 
 /**
  * <p>
@@ -44,6 +52,7 @@
     private TGoodsService goodsService;
     @Autowired
     private TActivityService activityService;
+
     @Resource
     private TokenService tokenService;
     @Resource
@@ -54,6 +63,9 @@
     private AppCouponClient appCouponClient;
     @Resource
     private TCouponService couponService;
+    @Resource
+    private WxPaymentClient wxPaymentClient;
+
 
 
 
@@ -159,19 +171,78 @@
 
     }
 
-//    @ApiOperation(tags = {"小程序-兑换商城"},value = "支付商品")
-//    @PostMapping(value = "/app/pay")
-//    public AjaxResult<PageInfo<TGoods>> pay(@RequestBody ExchangeDto exchangeDto) {
-//
-//        //创建订单
-//
-//        //计算价格
-//
-//        //调起支付
-//
-//
-//
-//    }
+    @ApiOperation(tags = {"小程序-现金商城"},value = "支付商品")
+    @PostMapping(value = "/app/pay")
+    public R<Map<String, Object>> pay(@RequestBody ExchangeDto exchangeDto) {
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        TAppUser user = appUserClient.getUserById(userId).getData();
+        boolean isVip = false;
+        if (user.getVipEndTime().isAfter(LocalDateTime.now())){
+            isVip = true;
+        }
+        //计算价格
+        BigDecimal orderPrice = new BigDecimal(0);
+        BigDecimal payPrice = new BigDecimal(0);
+        BigDecimal discountPrice = new BigDecimal(0);
+        BigDecimal vipDiscount = new BigDecimal(0);
+        if (exchangeDto.getGoodType()==1){
+            TGoods good = goodsService.getById(exchangeDto.getGoodId());
+            BigDecimal originalPrice = good.getPreferentialPrice();
+            if (isVip){
+                if (good.getVipPrice()!=null){
+                    vipDiscount = originalPrice.subtract(good.getVipPrice()).multiply(BigDecimal.valueOf(exchangeDto.getNum()));
+                    originalPrice = good.getVipPrice();
+                }
+            }
+            orderPrice.add(originalPrice.multiply(BigDecimal.valueOf(exchangeDto.getNum())));
+        }else {
+            TCoupon coupon = couponService.getById(exchangeDto.getGoodId());
+            BigDecimal originalPrice = coupon.getPaymentAmount();
+            if (isVip){
+                if (coupon.getVipPaymentAmount()!=null) {
+                    vipDiscount = originalPrice.subtract(coupon.getVipPaymentAmount()).multiply(BigDecimal.valueOf(exchangeDto.getNum()));
+                    originalPrice = coupon.getVipPaymentAmount();
+                }
+            }
+            orderPrice.add(originalPrice);
+        }
+
+        exchangeDto.setOrderPrice(orderPrice);
+        //查看是否使用优惠券
+        if(exchangeDto.getCouponId()!=null) {
+            TAppCoupon appCoupon = appUserClient.couponGetById(exchangeDto.getCouponId()).getData();
+            TCoupon coupon = JSON.toJavaObject(JSON.parseObject(appCoupon.getCouponJson()), TCoupon.class);
+            if (coupon.getValidityPeriodMode()==1){
+                if (orderPrice.compareTo(coupon.getMeetTheConditions())<0){
+                    return R.fail("不满足使用优惠券条件");
+                }
+
+            }
+            payPrice = orderPrice.subtract(coupon.getDiscountAmount());
+            discountPrice = coupon.getDiscountAmount();
+        }
+        exchangeDto.setPayPrice(payPrice);
+        exchangeDto.setDiscountPrice(discountPrice);
+        exchangeDto.setVipDiscount(vipDiscount);
+        //创建订单
+        TShoppingOrder shopOrder = orderClient.shopCreate(exchangeDto).getData();
+        if (exchangeDto.getPayMethod()==1) {
+            //调起支付
+            PaymentOrder paymentOrder = new PaymentOrder();
+            paymentOrder.setCode(shopOrder.getCode());
+            paymentOrder.setAmount(shopOrder.getPaymentAmount());
+            paymentOrder.setOpenId(user.getWxOpenid());
+            paymentOrder.setDescription("购买商品");
+         return    wxPaymentClient.orderPay(paymentOrder);
+        }else {
+            //todo 罗 支付宝支付
+            return R.ok();
+        }
+
+
+
+
+    }
 
     
     /**
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
index 1797317..76d2e6b 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
@@ -144,7 +144,7 @@
 
     @ApiOperation(value = "会员信息", tags = {"小程序-个人中心"})
     @PostMapping("/vipInfo")
-    public AjaxResult vipInfo() {
+    public AjaxResult<VipInfoDto> vipInfo() {
         List<VipInfoDto> vipInfoDtos = new ArrayList<>();
         List<TVip> vips = vipService.lambdaQuery().eq(TVip::getReveal, 1).list();
         for (TVip vip : vips) {
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml
index 4c7d61e..417dd0b 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml
@@ -52,13 +52,13 @@
 
     <select id="pageList1" resultType="com.ruoyi.other.api.domain.TGoods">
         SELECT
-            id,name,redeem_points,inventory
+            id,name,redeem_points,inventory,original_price,preferential_price,vip_price
         FROM
             t_goods
         WHERE `status` = 1 and del_flag = 0 and type = #{appGoodQuery.type}
         UNION ALL
         SELECT
-            id,name,redeem_points,inventory_quantity as inventory
+            id,name,redeem_points,inventory_quantity as inventory,payment_amount as preferential_price,vip_payment_amount as vip_price
         FROM
             t_coupon
         WHERE `status`= 1 and del_flag = 0 and type = #{appGoodQuery.type}
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/controller/WxPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/controller/WxPayController.java
index f3e7274..6047049 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/controller/WxPayController.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/controller/WxPayController.java
@@ -87,17 +87,17 @@
     public R<Map<String, Object>> payNotify(HttpServletRequest request) throws Exception {
         try {
             Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() {});
+            log.info("支付回调:{}", params);
             String outRefundNo = (String) params.get("out_refund_no");
+            String out_trade_no = params.get("out_trade_no").toString();
             String substring = outRefundNo.substring(0, 2);
             switch (substring){
                 //购物订单
                 case "GW":
-                    //更改订单状态
-                    //如果是优惠卷赠送优惠卷
+
                     break;
             }
 
-            log.info("支付回调:{}", params);
             return R.ok(params);
         } catch (Exception e) {
             log.error("支付回调异常:{}", e, e);
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WeixinProperties.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WeixinProperties.java
index 5c1960b..058480d 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WeixinProperties.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/wx/model/WeixinProperties.java
@@ -1,5 +1,6 @@
 package com.ruoyi.payment.wx.model;
 
+import lombok.Data;
 import lombok.ToString;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.NestedConfigurationProperty;
@@ -13,6 +14,7 @@
 @ToString
 @Component
 @ConfigurationProperties(prefix = "wx.conf")
+@Data
 public class WeixinProperties {
     /**
      * 默认开启
@@ -37,6 +39,10 @@
      * @return secret ID
      */
     private String secretId;
+    /**
+     * 回调地址
+     */
+    private String callBackUrl;
 
     public String getSecretId() {
         return secretId;

--
Gitblit v1.7.1