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