Переглянути джерело

Merge branch 'master' of http://git.izouma.com/xiongzhu/9th

xuqiang 4 роки тому
батько
коміт
54a68f6177

+ 23 - 0
src/main/java/com/izouma/nineth/event/TransferAssetEvent.java

@@ -0,0 +1,23 @@
+package com.izouma.nineth.event;
+
+import com.izouma.nineth.domain.Asset;
+import org.springframework.context.ApplicationEvent;
+
+public class TransferAssetEvent extends ApplicationEvent {
+    private final boolean success;
+    private final Asset   asset;
+
+    public TransferAssetEvent(Object source, boolean success, Asset asset) {
+        super(source);
+        this.success = success;
+        this.asset = asset;
+    }
+
+    public Asset getAsset() {
+        return asset;
+    }
+
+    public boolean isSuccess() {
+        return success;
+    }
+}

+ 25 - 152
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -1,45 +1,30 @@
 package com.izouma.nineth.service;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.alipay.api.AlipayClient;
-import com.alipay.api.request.AlipayTradeWapPayRequest;
-import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
-import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
-import com.github.binarywang.wxpay.constant.WxPayConstants;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
 import com.izouma.nineth.TokenHistory;
-import com.izouma.nineth.config.AlipayProperties;
-import com.izouma.nineth.config.WxPayProperties;
 import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
-import com.izouma.nineth.enums.*;
+import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.enums.CollectionSource;
+import com.izouma.nineth.enums.CollectionType;
+import com.izouma.nineth.enums.OrderStatus;
+import com.izouma.nineth.event.TransferAssetEvent;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.lock.RedisLockable;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.JpaUtils;
 import com.izouma.nineth.utils.SecurityUtils;
-import com.izouma.nineth.utils.SnowflakeIdWorker;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.codec.EncoderException;
-import org.apache.commons.codec.net.URLCodec;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.ApplicationContext;
-import org.springframework.core.env.Environment;
 import org.springframework.data.domain.Page;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.AsyncResult;
 import org.springframework.stereotype.Service;
-import org.springframework.ui.Model;
 
-import javax.transaction.Transactional;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.Future;
 
@@ -50,18 +35,10 @@ public class AssetService {
 
     private AssetRepo          assetRepo;
     private UserRepo           userRepo;
-    private NFTService         nftService;
     private CollectionRepo     collectionRepo;
     private ApplicationContext applicationContext;
     private OrderRepo          orderRepo;
-    private SysConfigService   sysConfigService;
-    private GiftOrderRepo      giftOrderRepo;
     private TokenHistoryRepo   tokenHistoryRepo;
-    private AlipayProperties   alipayProperties;
-    private AlipayClient       alipayClient;
-    private WxPayProperties    wxPayProperties;
-    private WxPayService       wxPayService;
-    private Environment        env;
     private AssetMintService   assetMintService;
 
     public Page<Asset> all(PageQuery pageQuery) {
@@ -245,130 +222,8 @@ public class AssetService {
         assetRepo.save(asset);
     }
 
-    @Transactional
-    public GiftOrder gift(Long userId, Long assetId, Long toUserId) {
-        Asset asset = assetRepo.findById(assetId).orElseThrow(new BusinessException("资产不存在"));
-        if (!(asset.getStatus() == AssetStatus.NORMAL)) {
-            throw new BusinessException("当前状态不可转赠");
-        }
-        if (asset.isConsignment()) {
-            throw new BusinessException("请先取消寄售");
-        }
-        if (asset.isPublicShow()) {
-            cancelPublic(asset);
-        }
-
-        asset.setStatus(AssetStatus.GIFTING);
-        assetRepo.save(asset);
-
-        GiftOrder giftOrder = GiftOrder.builder()
-                .userId(userId)
-                .assetId(assetId)
-                .toUserId(toUserId)
-                .gasPrice(sysConfigService.getBigDecimal("gas_fee"))
-                .status(OrderStatus.NOT_PAID)
-                .build();
-        return giftOrderRepo.save(giftOrder);
-    }
-
-    public void payOrderAlipay(Long id, Model model) {
-        try {
-            GiftOrder order = giftOrderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
-
-            if (order.getStatus() != OrderStatus.NOT_PAID) {
-                throw new BusinessException("订单状态错误");
-            }
-
-            JSONObject bizContent = new JSONObject();
-            bizContent.put("notifyUrl", alipayProperties.getNotifyUrl());
-            bizContent.put("returnUrl", alipayProperties.getReturnUrl());
-            bizContent.put("out_trade_no", String.valueOf(new SnowflakeIdWorker(0, 0).nextId()));
-            bizContent.put("total_amount", order.getGasPrice().stripTrailingZeros().toPlainString());
-            bizContent.put("disable_pay_channels", "pcredit,creditCard");
-            if (Arrays.stream(env.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
-                // 测试环境设为1分
-                bizContent.put("total_amount", "0.01");
-            }
-            bizContent.put("subject", "转赠GAS费");
-            bizContent.put("product_code", "QUICK_WAP_PAY");
-            JSONObject body = new JSONObject();
-            body.put("action", "payGiftOrder");
-            body.put("userId", order.getUserId());
-            body.put("orderId", order.getId());
-            bizContent.put("body", body.toJSONString());
-
-            AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
-            alipayRequest.setReturnUrl(alipayProperties.getReturnUrl());
-            alipayRequest.setNotifyUrl(alipayProperties.getNotifyUrl());
-            alipayRequest.setBizContent(JSON.toJSONString(bizContent));
-
-            String form = alipayClient.pageExecute(alipayRequest).getBody();
-            model.addAttribute("form", form);
-        } catch (BusinessException err) {
-            model.addAttribute("errMsg", err.getError());
-        } catch (Exception e) {
-            model.addAttribute("errMsg", e.getMessage());
-        }
-    }
-
-    public Object payOrderWeixin(Long id, String tradeType, String openId) throws WxPayException, EncoderException {
-        GiftOrder order = giftOrderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
-        if (order.getStatus() != OrderStatus.NOT_PAID) {
-            throw new BusinessException("订单状态错误");
-        }
-
-        WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
-        request.setBody("转赠GAS费");
-        request.setOutTradeNo(String.valueOf(new SnowflakeIdWorker(1, 1).nextId()));
-        request.setTotalFee(order.getGasPrice().multiply(BigDecimal.valueOf(100)).intValue());
-        if (Arrays.stream(env.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
-            // 测试环境设为1分
-//                    request.setTotalFee(1);
-        }
-        request.setSpbillCreateIp("180.102.110.170");
-        request.setNotifyUrl(wxPayProperties.getNotifyUrl());
-        request.setTradeType(tradeType);
-        request.setOpenid(openId);
-        request.setSignType("MD5");
-        JSONObject body = new JSONObject();
-        body.put("action", "payGiftOrder");
-        body.put("userId", order.getUserId());
-        body.put("orderId", order.getId());
-        request.setAttach(body.toJSONString());
-
-        if (WxPayConstants.TradeType.MWEB.equals(tradeType)) {
-            WxPayMwebOrderResult result = wxPayService.createOrder(request);
-            return result.getMwebUrl() + "&redirect_url=" + new URLCodec().encode(wxPayProperties.getReturnUrl());
-        } else if (WxPayConstants.TradeType.JSAPI.equals(tradeType)) {
-            return wxPayService.<WxPayMpOrderResult>createOrder(request);
-        }
-        throw new BusinessException("不支持此付款方式");
-    }
-
-    @Transactional
-    public void giftNotify(Long orderId, PayMethod payMethod, String transactionId) {
-        GiftOrder giftOrder = giftOrderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
-        Asset asset = assetRepo.findById(giftOrder.getAssetId()).orElseThrow(new BusinessException("资产不存在"));
-        User newOwner = userRepo.findById(giftOrder.getToUserId()).orElseThrow(new BusinessException("用户不存在"));
-
-        giftOrder.setPayMethod(payMethod);
-        giftOrder.setStatus(OrderStatus.FINISH);
-        giftOrder.setTransactionId(transactionId);
-        giftOrder.setPayTime(LocalDateTime.now());
-        giftOrder.setPayMethod(PayMethod.ALIPAY);
-
-        transfer(asset, newOwner);
-
-        tokenHistoryRepo.save(TokenHistory.builder()
-                .fromUser(asset.getOwner())
-                .fromUserId(asset.getOwnerId())
-                .toUser(newOwner.getNickname())
-                .toUserId(newOwner.getId())
-                .operation("转赠")
-                .build());
-    }
-
-    public void transfer(Asset asset, User toUser) {
+    @Async
+    public void transfer(Asset asset, BigDecimal price, User toUser, String reason, Long orderId) {
         Asset newAsset = new Asset();
         BeanUtils.copyProperties(asset, newAsset);
         newAsset.setId(null);
@@ -377,17 +232,35 @@ public class AssetService {
         newAsset.setOwnerId(toUser.getId());
         newAsset.setOwnerAvatar(toUser.getAvatar());
         newAsset.setPublicShow(false);
+        newAsset.setConsignment(false);
         newAsset.setPublicCollectionId(null);
         newAsset.setStatus(AssetStatus.NORMAL);
+        newAsset.setPrice(price);
+        newAsset.setSellPrice(null);
+        newAsset.setOrderId(orderId);
         assetRepo.save(newAsset);
 
         asset.setPublicShow(false);
+        asset.setConsignment(false);
         asset.setPublicCollectionId(null);
         asset.setStatus(AssetStatus.GIFTED);
         asset.setOwner(toUser.getNickname());
         asset.setOwnerId(toUser.getId());
         asset.setOwnerAvatar(toUser.getAvatar());
         assetRepo.save(asset);
+
+        tokenHistoryRepo.save(TokenHistory.builder()
+                .tokenId(asset.getTokenId())
+                .fromUser(asset.getOwner())
+                .fromUserId(asset.getOwnerId())
+                .toUser(toUser.getNickname())
+                .toUserId(toUser.getId())
+                .operation(reason)
+                .build());
+
+        if (orderId != null) {
+            applicationContext.publishEvent(new TransferAssetEvent(this, true, newAsset));
+        }
     }
 
     public List<TokenHistory> tokenHistory(String tokenId, Long assetId) {

+ 173 - 0
src/main/java/com/izouma/nineth/service/GiftOrderService.java

@@ -0,0 +1,173 @@
+package com.izouma.nineth.service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.request.AlipayTradeWapPayRequest;
+import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
+import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.izouma.nineth.config.AlipayProperties;
+import com.izouma.nineth.config.WxPayProperties;
+import com.izouma.nineth.domain.Asset;
+import com.izouma.nineth.domain.GiftOrder;
+import com.izouma.nineth.domain.User;
+import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.enums.OrderStatus;
+import com.izouma.nineth.enums.PayMethod;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.*;
+import com.izouma.nineth.utils.SnowflakeIdWorker;
+import lombok.AllArgsConstructor;
+import org.apache.commons.codec.EncoderException;
+import org.apache.commons.codec.net.URLCodec;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.Model;
+
+import javax.transaction.Transactional;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+
+@Service
+@AllArgsConstructor
+public class GiftOrderService {
+
+    private AssetRepo          assetRepo;
+    private UserRepo           userRepo;
+    private NFTService         nftService;
+    private CollectionRepo     collectionRepo;
+    private ApplicationContext applicationContext;
+    private OrderRepo          orderRepo;
+    private SysConfigService   sysConfigService;
+    private GiftOrderRepo      giftOrderRepo;
+    private TokenHistoryRepo   tokenHistoryRepo;
+    private AlipayProperties   alipayProperties;
+    private AlipayClient       alipayClient;
+    private WxPayProperties    wxPayProperties;
+    private WxPayService       wxPayService;
+    private Environment        env;
+    private AssetMintService   assetMintService;
+    private AssetService       assetService;
+
+    @Transactional
+    public GiftOrder gift(Long userId, Long assetId, Long toUserId) {
+        Asset asset = assetRepo.findById(assetId).orElseThrow(new BusinessException("资产不存在"));
+        if (!(asset.getStatus() == AssetStatus.NORMAL)) {
+            throw new BusinessException("当前状态不可转赠");
+        }
+        if (asset.isConsignment()) {
+            throw new BusinessException("请先取消寄售");
+        }
+        if (asset.isPublicShow()) {
+            assetService.cancelPublic(asset);
+        }
+
+        asset.setStatus(AssetStatus.GIFTING);
+        assetRepo.save(asset);
+
+        GiftOrder giftOrder = GiftOrder.builder()
+                .userId(userId)
+                .assetId(assetId)
+                .toUserId(toUserId)
+                .gasPrice(sysConfigService.getBigDecimal("gas_fee"))
+                .status(OrderStatus.NOT_PAID)
+                .build();
+        return giftOrderRepo.save(giftOrder);
+    }
+
+
+    @Transactional
+    public void giftNotify(Long orderId, PayMethod payMethod, String transactionId) {
+        GiftOrder giftOrder = giftOrderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        Asset asset = assetRepo.findById(giftOrder.getAssetId()).orElseThrow(new BusinessException("资产不存在"));
+        User newOwner = userRepo.findById(giftOrder.getToUserId()).orElseThrow(new BusinessException("用户不存在"));
+
+        giftOrder.setPayMethod(payMethod);
+        giftOrder.setStatus(OrderStatus.FINISH);
+        giftOrder.setTransactionId(transactionId);
+        giftOrder.setPayTime(LocalDateTime.now());
+        giftOrder.setPayMethod(PayMethod.ALIPAY);
+
+        assetService.transfer(asset, asset.getPrice(), newOwner, "转赠", null);
+    }
+
+    public void payOrderAlipay(Long id, Model model) {
+        try {
+            GiftOrder order = giftOrderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
+
+            if (order.getStatus() != OrderStatus.NOT_PAID) {
+                throw new BusinessException("订单状态错误");
+            }
+
+            JSONObject bizContent = new JSONObject();
+            bizContent.put("notifyUrl", alipayProperties.getNotifyUrl());
+            bizContent.put("returnUrl", alipayProperties.getReturnUrl());
+            bizContent.put("out_trade_no", String.valueOf(new SnowflakeIdWorker(0, 0).nextId()));
+            bizContent.put("total_amount", order.getGasPrice().stripTrailingZeros().toPlainString());
+            bizContent.put("disable_pay_channels", "pcredit,creditCard");
+            if (Arrays.stream(env.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
+                // 测试环境设为1分
+                bizContent.put("total_amount", "0.01");
+            }
+            bizContent.put("subject", "转赠GAS费");
+            bizContent.put("product_code", "QUICK_WAP_PAY");
+            JSONObject body = new JSONObject();
+            body.put("action", "payGiftOrder");
+            body.put("userId", order.getUserId());
+            body.put("orderId", order.getId());
+            bizContent.put("body", body.toJSONString());
+
+            AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
+            alipayRequest.setReturnUrl(alipayProperties.getReturnUrl());
+            alipayRequest.setNotifyUrl(alipayProperties.getNotifyUrl());
+            alipayRequest.setBizContent(JSON.toJSONString(bizContent));
+
+            String form = alipayClient.pageExecute(alipayRequest).getBody();
+            model.addAttribute("form", form);
+        } catch (BusinessException err) {
+            model.addAttribute("errMsg", err.getError());
+        } catch (Exception e) {
+            model.addAttribute("errMsg", e.getMessage());
+        }
+    }
+
+    public Object payOrderWeixin(Long id, String tradeType, String openId) throws WxPayException, EncoderException {
+        GiftOrder order = giftOrderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+
+        WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
+        request.setBody("转赠GAS费");
+        request.setOutTradeNo(String.valueOf(new SnowflakeIdWorker(1, 1).nextId()));
+        request.setTotalFee(order.getGasPrice().multiply(BigDecimal.valueOf(100)).intValue());
+        if (Arrays.stream(env.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
+            // 测试环境设为1分
+//                    request.setTotalFee(1);
+        }
+        request.setSpbillCreateIp("180.102.110.170");
+        request.setNotifyUrl(wxPayProperties.getNotifyUrl());
+        request.setTradeType(tradeType);
+        request.setOpenid(openId);
+        request.setSignType("MD5");
+        JSONObject body = new JSONObject();
+        body.put("action", "payGiftOrder");
+        body.put("userId", order.getUserId());
+        body.put("orderId", order.getId());
+        request.setAttach(body.toJSONString());
+
+        if (WxPayConstants.TradeType.MWEB.equals(tradeType)) {
+            WxPayMwebOrderResult result = wxPayService.createOrder(request);
+            return result.getMwebUrl() + "&redirect_url=" + new URLCodec().encode(wxPayProperties.getReturnUrl());
+        } else if (WxPayConstants.TradeType.JSAPI.equals(tradeType)) {
+            return wxPayService.<WxPayMpOrderResult>createOrder(request);
+        }
+        throw new BusinessException("不支持此付款方式");
+    }
+}

+ 22 - 11
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -17,6 +17,7 @@ import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.*;
 import com.izouma.nineth.event.CreateAssetEvent;
+import com.izouma.nineth.event.TransferAssetEvent;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.JpaUtils;
@@ -299,7 +300,7 @@ public class OrderService {
             } else {
                 if (collection.getSource() == CollectionSource.TRANSFER) {
                     Asset asset = assetRepo.findById(collection.getAssetId()).orElse(null);
-                    assetService.transfer(asset, user);
+                    assetService.transfer(asset, order.getPrice(), user, "转让", order.getId());
                     collectionRepo.delete(collection);
                 } else {
                     order.setStatus(OrderStatus.PROCESSING);
@@ -321,25 +322,20 @@ public class OrderService {
                 .orElseThrow(new BusinessException("藏品不存在"));
         User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("用户不存在"));
         if (order.getStatus() == OrderStatus.NOT_PAID) {
+            order.setStatus(OrderStatus.PROCESSING);
+            order.setPayTime(LocalDateTime.now());
+            order.setTransactionId(transactionId);
+            order.setPayMethod(payMethod);
             if (order.getType() == CollectionType.BLIND_BOX) {
                 BlindBoxItem winItem = collectionService.draw(collection.getId());
-
-                order.setStatus(OrderStatus.PROCESSING);
-                order.setPayTime(LocalDateTime.now());
-                order.setTransactionId(transactionId);
-                order.setPayMethod(payMethod);
                 orderRepo.save(order);
                 assetService.createAsset(winItem, user, order.getId(), order.getPrice(), "出售");
             } else {
                 if (collection.getSource() == CollectionSource.TRANSFER) {
                     Asset asset = assetRepo.findById(collection.getAssetId()).orElse(null);
-                    assetService.transfer(asset, user);
+                    assetService.transfer(asset, order.getPrice(), user, "转让", order.getId());
                     collectionRepo.delete(collection);
                 } else {
-                    order.setStatus(OrderStatus.PROCESSING);
-                    order.setPayTime(LocalDateTime.now());
-                    order.setTransactionId(transactionId);
-                    order.setPayMethod(payMethod);
                     orderRepo.save(order);
                     assetService.createAsset(collection, user, order.getId(), order.getPrice(), "出售");
                 }
@@ -363,6 +359,21 @@ public class OrderService {
         }
     }
 
+    @EventListener
+    public void onTransferAsset(TransferAssetEvent event) {
+        Asset asset = event.getAsset();
+        Order order = orderRepo.findById(asset.getOrderId()).orElseThrow(new BusinessException("订单不存在"));
+        if (event.isSuccess()) {
+            order.setTxHash(asset.getTxHash());
+            order.setGasUsed(asset.getGasUsed());
+            order.setBlockNumber(asset.getBlockNumber());
+            order.setStatus(OrderStatus.FINISH);
+            orderRepo.save(order);
+        } else {
+            log.error("创建asset失败");
+        }
+    }
+
     public void cancel(Long id) {
         Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
         cancel(order);

+ 5 - 3
src/main/java/com/izouma/nineth/web/AssetController.java

@@ -7,6 +7,7 @@ import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AssetRepo;
 import com.izouma.nineth.service.AssetService;
+import com.izouma.nineth.service.GiftOrderService;
 import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.SecurityUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
@@ -24,8 +25,9 @@ import java.util.List;
 @RequestMapping("/asset")
 @AllArgsConstructor
 public class AssetController extends BaseController {
-    private AssetService assetService;
-    private AssetRepo    assetRepo;
+    private AssetService     assetService;
+    private AssetRepo        assetRepo;
+    private GiftOrderService giftOrderService;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -95,7 +97,7 @@ public class AssetController extends BaseController {
     @PostMapping("/gift")
     @ApiOperation("转赠")
     public GiftOrder gift(@RequestParam Long assetId, @RequestParam Long toUserId) {
-        return assetService.gift(SecurityUtils.getAuthenticatedUser().getId(), assetId, toUserId);
+        return giftOrderService.gift(SecurityUtils.getAuthenticatedUser().getId(), assetId, toUserId);
     }
 
     @GetMapping("/tokenHistory")

+ 4 - 2
src/main/java/com/izouma/nineth/web/OrderNotifyController.java

@@ -11,6 +11,7 @@ import com.github.binarywang.wxpay.service.WxPayService;
 import com.izouma.nineth.config.AlipayProperties;
 import com.izouma.nineth.enums.PayMethod;
 import com.izouma.nineth.service.AssetService;
+import com.izouma.nineth.service.GiftOrderService;
 import com.izouma.nineth.service.OrderService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -38,6 +39,7 @@ public class OrderNotifyController {
     private final OrderService     orderService;
     private final WxPayService     wxPayService;
     private final AssetService     assetService;
+    private final GiftOrderService giftOrderService;
 
     @PostMapping("/order/alipay")
     @ResponseBody
@@ -74,7 +76,7 @@ public class OrderNotifyController {
                 }
                 case "payGiftOrder": {
                     Long orderId = body.getLong("orderId");
-                    assetService.giftNotify(orderId, PayMethod.ALIPAY, MapUtils.getString(params, "trade_no"));
+                    giftOrderService.giftNotify(orderId, PayMethod.ALIPAY, MapUtils.getString(params, "trade_no"));
                     break;
                 }
             }
@@ -99,7 +101,7 @@ public class OrderNotifyController {
             }
             case "payGiftOrder": {
                 Long orderId = attach.getLong("orderId");
-                assetService.giftNotify(orderId, PayMethod.WEIXIN, notifyResult.getTransactionId());
+                giftOrderService.giftNotify(orderId, PayMethod.WEIXIN, notifyResult.getTransactionId());
                 break;
             }
         }

+ 9 - 7
src/main/java/com/izouma/nineth/web/OrderPayController.java

@@ -5,6 +5,7 @@ import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.izouma.nineth.service.AssetService;
+import com.izouma.nineth.service.GiftOrderService;
 import com.izouma.nineth.service.OrderService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -24,9 +25,10 @@ import java.util.regex.Pattern;
 @Slf4j
 @AllArgsConstructor
 public class OrderPayController {
-    private final OrderService orderService;
-    private final AssetService assetService;
-    private final WxMpService  wxMpService;
+    private final OrderService     orderService;
+    private final AssetService     assetService;
+    private final WxMpService      wxMpService;
+    private final GiftOrderService giftOrderService;
 
     @RequestMapping(value = "/alipay", method = RequestMethod.GET)
     public String payOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) {
@@ -60,14 +62,14 @@ public class OrderPayController {
     @RequestMapping(value = "/gift/alipay", method = RequestMethod.GET)
     public String payGiftOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) {
         detectUA(userAgent, model);
-        assetService.payOrderAlipay(id, model);
+        giftOrderService.payOrderAlipay(id, model);
         return "AlipayHtml";
     }
 
     @RequestMapping(value = "/gift/weixin_h5")
     public String payGiftOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
         detectUA(userAgent, model);
-        model.addAttribute("payUrl", assetService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
+        model.addAttribute("payUrl", giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
         return "WeixinPayHtml";
     }
 
@@ -75,7 +77,7 @@ public class OrderPayController {
     public String payGiftOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
         WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
         WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
-        WxPayMpOrderResult payParams = (WxPayMpOrderResult) assetService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
+        WxPayMpOrderResult payParams = (WxPayMpOrderResult) giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
         model.addAttribute("payParams", JSON.toJSONString(payParams));
         return "PayOrderPC";
     }
@@ -92,6 +94,6 @@ public class OrderPayController {
     @RequestMapping(value = "/gift/weixin")
     @ResponseBody
     public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException {
-        return assetService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
+        return giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
     }
 }