Kaynağa Gözat

增加台币港币支付

zwhui 2 yıl önce
ebeveyn
işleme
d6266a4ac6

+ 9 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonSku.java

@@ -85,6 +85,15 @@ public class GoodsDonSku extends BaseEntity {
      */
     private BigDecimal price;
 
+    /**
+     * 台币
+     */
+    private BigDecimal twPrice;
+    /**
+     * 港币
+     */
+    private BigDecimal hkPrice;
+
     /**
      * 是否开启实物车票时长权益
      */

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java

@@ -51,6 +51,11 @@ public class OrderDon extends BaseEntity implements Serializable {
     /** 金额 */
     private BigDecimal money ;
 
+    /**
+     * 货币单位
+     */
+    private String currency;
+
     /**
      * 海外支付金额
      */

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSkuInsert.java

@@ -55,6 +55,14 @@ public class ReqGoodsSkuInsert {
         private String tags;
 
         private BigDecimal price;
+        /**
+         * 台币
+         */
+        private BigDecimal twPrice;
+        /**
+         * 港币
+         */
+        private BigDecimal hkPrice;
 
         /**
          * 数量

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java

@@ -36,6 +36,11 @@ public class OrderPayRequest {
     @NotNull(message = "请输入金额")
     private BigDecimal donMoney;
 
+    /**
+     * 货币单位
+     */
+    private String currency;
+
     /**
      * 推荐人id
      */

+ 9 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuFrontView.java

@@ -73,6 +73,15 @@ public class GoodsDonSkuFrontView {
 	 */
 	private BigDecimal price;
 
+	/**
+	 * 台币
+	 */
+	private BigDecimal twPrice;
+	/**
+	 * 港币
+	 */
+	private BigDecimal hkPrice;
+
 	/**
 	 * 月数
 	 */

+ 12 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java

@@ -76,6 +76,18 @@ public class GoodsFrontListView {
 	@DbField("g.min_price")
 	private BigDecimal price;
 
+	/**
+	 * 台币最低价格
+	 */
+	@DbIgnore
+	private BigDecimal twPrice;
+
+	/**
+	 * 港币最低价格
+	 */
+	@DbIgnore
+	private BigDecimal hkPrice;
+
 	/**
 	 * 最低规格月份
 	 */

+ 1 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -631,6 +631,7 @@ public class RedisService {
         ORDER_COMMENT_KEY("order_comment_key:", "订单评价", 10l),
         USER_BIND_ACCOUNT_INFO_KEY("user_bind_account_info_key:", "用户绑定其他账号key", 10l),
         TASK_RECEIVED_KEY("task_received_key:%s:%s", "领取任务奖励key", 10l),
+        EXCHANGE_RATE_KEY("exchange_rate_key","当日汇率",60 * 60 * 4L),
         ;
 
         private String name;

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -265,7 +265,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 		orderDon.setMoney(payRequest.getDonMoney());
 		orderDon.setRealMoney(payRequest.getDonMoney());
-
+		orderDon.setCurrency(payRequest.getCurrency());
 		List<Long> dpSkuIds = payRequest.getDpSkuIds();
 		if (CollUtil.isNotEmpty(dpSkuIds)) {
 			if (dpSkuIds.size() > 1) {

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/paypal/PayPalService.java

@@ -190,7 +190,7 @@ public class PayPalService{
         APIContext apiContext = getAPIContext(paypalPayConfig.getClientId(), paypalPayConfig.getClientSecret(),paypalPayConfig.getMode());
         Sale sale = Sale.get(apiContext, orderDon.getTransactionId());
         Refund refund = new Refund();
-        refund.setAmount(new Amount("USD", net.divide(new BigDecimal(100),2,RoundingMode.HALF_DOWN).toString()));
+        refund.setAmount(new Amount(orderDon.getCurrency(), net.divide(new BigDecimal(100),2,RoundingMode.HALF_DOWN).toString()));
         refund = sale.refund(apiContext, refund);
         log.info("paypal return refund:{}",refund);
         if (!"completed".equals(refund.getState())) {

+ 4 - 1
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -152,13 +152,16 @@ public class GoodsDonController {
         DateTime now = DateTime.now();
         list.forEach(data -> {
             data.setSpecs(beanSearcher.searchFirst(GoodsDonSpec.class, MapUtils.builder().field(GoodsDonSpec::getGoodsId, data.getId()).build()));
-            data.setSkuList(beanSearcher.searchAll(GoodsDonSkuFrontView.class, MapUtils.builder().field(GoodsDonSkuFrontView::getGoodsId, data.getId()).field(GoodsDonSkuFrontView::getStatus, true).orderBy(GoodsDonSkuFrontView::getPrice).asc().build()));
+            List<GoodsDonSkuFrontView> skuList = beanSearcher.searchAll(GoodsDonSkuFrontView.class, MapUtils.builder().field(GoodsDonSkuFrontView::getGoodsId, data.getId()).field(GoodsDonSkuFrontView::getStatus, true).orderBy(GoodsDonSkuFrontView::getPrice).asc().build());
+            data.setSkuList(skuList);
             data.getSkuList().forEach(sku -> {
                 if (sku.getIsDp()) {
                     List<GoodsDiscountPlusPurchaseRelationFrontView> dpSkuViews = beanSearcher.searchAll(GoodsDiscountPlusPurchaseRelationFrontView.class, MapUtils.builder().field(GoodsDiscountPlusPurchaseRelationFrontView::getSkuId, sku.getId()).build());
                     sku.setDpSkuViews(dpSkuViews);
                 }
             });
+            data.setTwPrice(skuList.get(0).getTwPrice());
+            data.setHkPrice(skuList.get(0).getHkPrice());
             Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
                     .eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
             data.setSold(sold + data.getVirtualSold());

+ 20 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/AdminController.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -18,6 +19,7 @@ import com.cyksj.mapper.PhoneCodeMapper;
 import com.cyksj.model.entity.PhoneCode;
 import com.cyksj.model.manage.dto.AdminInfo;
 import com.cyksj.model.manage.entity.Admin;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.mail.MailService;
 import com.cyksj.service.mange.AdminService;
 import lombok.RequiredArgsConstructor;
@@ -52,6 +54,8 @@ public class AdminController {
 
     private final MailService mailService;
 
+    private final RedisService redisService;
+
     private static final List<String> SEND_LIST = List.of(
             "1935822056@qq.com",
             "598488687@qq.com",
@@ -293,4 +297,20 @@ public class AdminController {
         return result;
     }
 
+
+
+    /**
+     * 获取当日汇率
+     */
+    @GetMapping("/latest/exchangerate")
+    public Result<String> latestExchangerate() {
+        String url = "https://api.exchangerate-api.com/v4/latest/USD";
+        String exchangeRate = redisService.getStr(RedisService.key.EXCHANGE_RATE_KEY.getName());
+        if (StrUtil.isBlank(exchangeRate)) {
+            exchangeRate = HttpUtil.get(url);
+            redisService.set(RedisService.key.EXCHANGE_RATE_KEY.getName(),exchangeRate);
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(exchangeRate);
+    }
+
 }