Przeglądaj źródła

Merge branch 'task-lyh-pay' into test

lyhzzz 2 lat temu
rodzic
commit
904cfc2a55

+ 3 - 0
src/main/java/com/fdkankan/ucenter/constant/OrderConstant.java

@@ -15,4 +15,7 @@ public class OrderConstant {
 
     public static final int FAILURE_CODE_8004 = 8004;
     public static final String FAILURE_MSG_8004 = "支付方式异常";
+
+    public static final int FAILURE_CODE_8005 = 8005;
+    public static final String FAILURE_MSG_8005= "下单失败";
 }

+ 20 - 0
src/main/java/com/fdkankan/ucenter/httpClient/address/PayAddressSource.java

@@ -0,0 +1,20 @@
+package com.fdkankan.ucenter.httpClient.address;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PayAddressSource implements AddressSource {
+
+    @Value("${4dkk.payService.basePath}")
+    private String basePath;
+
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",null,basePath);
+    }
+}

+ 34 - 0
src/main/java/com/fdkankan/ucenter/httpClient/client/PayClient.java

@@ -0,0 +1,34 @@
+package com.fdkankan.ucenter.httpClient.client;
+
+import com.dtflys.forest.annotation.*;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.common.ResultData;
+import com.fdkankan.ucenter.httpClient.address.LaserAddressSource;
+import com.fdkankan.ucenter.httpClient.param.PayOrderParam;
+import com.fdkankan.ucenter.httpClient.param.SSDownSceneParam;
+import com.fdkankan.ucenter.httpClient.param.SsBindParam;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 获取,调用激光服务
+ */
+@Address(source = LaserAddressSource.class)
+public interface PayClient {
+
+    /**
+     * 下单
+     */
+    @Post("/service/pay/order/down")
+    ResultData downOrder(@JSONBody PayOrderParam param);
+
+
+    /**
+     * 查询订单状态
+     */
+    @Get("/service/pay/order/info/{orderSn}")
+    ResultData queryOrder(@Var("orderSn")String orderSn);
+
+
+}

+ 17 - 0
src/main/java/com/fdkankan/ucenter/httpClient/param/PayOrderParam.java

@@ -0,0 +1,17 @@
+package com.fdkankan.ucenter.httpClient.param;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class PayOrderParam {
+    private String serveName = "ucenter";
+    private BigDecimal orderMoney;
+    private String orderType;
+
+    public PayOrderParam( BigDecimal orderMoney, String orderType) {
+        this.orderMoney = orderMoney;
+        this.orderType = orderType;
+    }
+}

+ 43 - 0
src/main/java/com/fdkankan/ucenter/httpClient/service/PayService.java

@@ -0,0 +1,43 @@
+package com.fdkankan.ucenter.httpClient.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.annotation.Get;
+import com.dtflys.forest.annotation.JSONBody;
+import com.dtflys.forest.annotation.Post;
+import com.dtflys.forest.annotation.Var;
+import com.fdkankan.ucenter.common.ResultData;
+import com.fdkankan.ucenter.httpClient.client.PayClient;
+import com.fdkankan.ucenter.httpClient.param.PayOrderParam;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+@Service
+public class PayService {
+
+    @Autowired
+    PayClient payClient;
+
+    public PayOrderVo downOrder(BigDecimal money, String type){
+        PayOrderParam param = new PayOrderParam(money,type);
+        ResultData resultData = payClient.downOrder(param);
+        if(resultData.getCode() == 200 ){
+            return (PayOrderVo ) resultData.getData();
+        }
+        return null;
+    }
+
+
+    /**
+     * 查询订单状态
+     */
+    public PayOrderVo queryOrder(String orderSn){
+        ResultData resultData = payClient.queryOrder(orderSn);
+        if(resultData.getCode() == 200 ){
+            return (PayOrderVo ) resultData.getData();
+        }
+        return null;
+    }
+}

+ 63 - 0
src/main/java/com/fdkankan/ucenter/httpClient/vo/PayOrderVo.java

@@ -0,0 +1,63 @@
+package com.fdkankan.ucenter.httpClient.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class PayOrderVo {
+
+    /**
+     * 订单表
+     */
+    private Integer orderId;
+
+    /**
+     * 服务名称
+     */
+    private String serveName;
+    /**
+     * 服务名称
+     */
+    private Integer serveId;
+
+    /**
+     * 订单编号
+     */
+    private String orderSn;
+
+    /**
+     * 订单类型
+     */
+    private String orderType;
+
+    /**
+     * 订单金额
+     */
+    private BigDecimal orderMoney;
+
+    /**
+     * 0微信h5,1微信jsapi,2,微信扫码支付,3支付宝扫码,4支付宝h5
+     */
+    private Integer payType;
+
+    /**
+     * 支付状态,0未支付,1支付成功,2支付失败
+     */
+    private Integer payStatus;
+
+    private String openId;
+
+    private String tradeNo;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    private Date payTime;
+
+}

+ 82 - 0
src/main/java/com/fdkankan/ucenter/mq/consumer/OrderDownConsumer.java

@@ -0,0 +1,82 @@
+package com.fdkankan.ucenter.mq.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.ucenter.entity.DownloadOrder;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.pay.strategy.impl.DownloadOrderImpl;
+import com.fdkankan.ucenter.pay.strategy.impl.EntityOrderImpl;
+import com.fdkankan.ucenter.pay.strategy.impl.IncrementOrderImpl;
+import com.fdkankan.ucenter.service.IIncrementOrderService;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.amqp.core.ExchangeTypes;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Exchange;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.QueueBinding;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import sun.rmi.runtime.Log;
+
+import java.nio.charset.StandardCharsets;
+
+@Slf4j
+@Component
+public class OrderDownConsumer {
+
+
+    @Autowired
+    RabbitMqProducer rabbitMqProducer;
+    @Autowired
+    IncrementOrderImpl incrementOrder;
+    @Autowired
+    DownloadOrderImpl downloadOrder;
+    @Autowired
+    EntityOrderImpl entityOrder;
+
+
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.orderPay.down-payResult:down-payResult}")
+    )
+    public void consumerQueue(Channel channel, Message message)  {
+        try {
+            String messageId = message.getMessageProperties().getMessageId();
+            String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+            log.info("接受下单结果mq--messageId:{},msg:{}",messageId,msg);
+
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+            msg = StringEscapeUtils.unescapeJava(msg);
+            PayOrderVo order = JSONObject.parseObject(msg, PayOrderVo.class);
+            if(order == null){
+                return;
+            }
+            //更新订单状态
+            Integer payType = 3;
+            //付款方式,0表示微信,1表示支付宝,2表示paypal,3表示其他
+            switch (order.getPayType()){
+                case 0 : case 1: case 2: payType = 0;break;
+                case 3 : case 4:  payType = 1;break;
+                case 5 :   payType = 2;break;
+            }
+            if("incrementOrder".equals(order.getOrderType())){
+                incrementOrder.handleOrder(order.getOrderSn(),order.getTradeNo(),order.getOpenId(),payType,null);
+            }
+            if("downOrder".equals(order.getOrderType())){
+                downloadOrder.handleOrder(order.getOrderSn(),order.getTradeNo(),order.getOpenId(),payType,null);
+            }
+            if("partOrder".equals(order.getOrderType())){
+                entityOrder.handleOrder(order.getOrderSn(),order.getTradeNo(),order.getOpenId(),payType,null);
+            }
+        }catch (Exception e){
+
+        }
+
+
+
+    }
+}

+ 13 - 1
src/main/java/com/fdkankan/ucenter/service/impl/DownloadOrderServiceImpl.java

@@ -5,11 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.constant.TbStatus;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.common.util.NumberUtils;
+import com.fdkankan.ucenter.constant.OrderConstant;
 import com.fdkankan.ucenter.entity.DownloadOrder;
 import com.fdkankan.ucenter.entity.Invoice;
 import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.httpClient.service.PayService;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.mapper.IDownloadOrderMapper;
 import com.fdkankan.ucenter.service.IDownloadOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -106,12 +110,20 @@ public class DownloadOrderServiceImpl extends ServiceImpl<IDownloadOrderMapper,
 
     }
 
+    @Autowired
+    PayService payService;
+
     @Override
     public DownloadOrder insertDownloadOrder(Long userId, DownNumParam param, BigDecimal price) {
         BigDecimal total = price.multiply(new BigDecimal(param.getCount()));
 
+        PayOrderVo payOrderVo = payService.downOrder(total, "downOrder");
+        if(payOrderVo == null){
+            throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
+        }
+
         DownloadOrder downloadOrderEntity = new DownloadOrder();
-        downloadOrderEntity.setOrderSn(NumberUtils.getOrderSn());
+        downloadOrderEntity.setOrderSn(payOrderVo.getOrderSn());
         downloadOrderEntity.setAmount(total);
         downloadOrderEntity.setPayType(param.getPayType());
         downloadOrderEntity.setPayStatus(-1);

+ 12 - 2
src/main/java/com/fdkankan/ucenter/service/impl/IncrementOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.service.impl;
 
+import com.amazonaws.services.simpleworkflow.flow.annotations.NoWait;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -10,7 +11,11 @@ import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.common.util.NumberUtils;
 import com.fdkankan.ucenter.common.SkuEnum;
 import com.fdkankan.ucenter.constant.LoginConstant;
+import com.fdkankan.ucenter.constant.OrderConstant;
 import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.httpClient.client.PayClient;
+import com.fdkankan.ucenter.httpClient.service.PayService;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.mapper.IIncrementOrderMapper;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -142,6 +147,8 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
 
         return responseGoodsSku;
     }
+    @Autowired
+    PayService payService;
 
     @Override
     public IncrementOrder insertIncrementOrder(Long userId, DownNumParam param,IncrementType incrementType) {
@@ -152,8 +159,11 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
         }
 
         IncrementOrder incrementOrderEntity = new IncrementOrder();
-
-        incrementOrderEntity.setOrderSn(NumberUtils.getOrderSn());
+        PayOrderVo payOrderVo = payService.downOrder(total, "incrementOrder");
+        if(payOrderVo == null){
+            throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
+        }
+        incrementOrderEntity.setOrderSn(payOrderVo.getOrderSn());
         incrementOrderEntity.setAmount(total);
         incrementOrderEntity.setPayType(param.getPayType());
         incrementOrderEntity.setPayStatus(-1);

+ 10 - 1
src/main/java/com/fdkankan/ucenter/service/impl/OrderServiceImpl.java

@@ -13,6 +13,8 @@ import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.constant.*;
 import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.httpClient.service.PayService;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.mapper.IOrderMapper;
 import com.fdkankan.ucenter.pay.alipay.sdk.AlipayService;
 import com.fdkankan.ucenter.pay.wx.WXPay;
@@ -121,6 +123,9 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
         this.update(wrapper);
     }
 
+   @Autowired
+    PayService payService;
+
     @Override
     public Order placeOrder(PlaceOrderParam param) {
         List<Long> id = param.getGoods().parallelStream().map(CartParam::getId).collect(Collectors.toList());
@@ -167,8 +172,12 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
             goodsAmount = goodsAmount.add(orderItemEntity.getGoodsPrice().multiply(new BigDecimal(orderItemEntity.getGoodsCount())));
         }
 
+        PayOrderVo payOrderVo = payService.downOrder(goodsAmount, "partOrder");
+        if(payOrderVo == null){
+            throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
+        }
         Order orderEntity = new Order();
-        orderEntity.setOrderSn(NumberUtils.getOrderSn());
+        orderEntity.setOrderSn(payOrderVo.getOrderSn());
         orderEntity.setOrderTime(DateUserUtil.getDate(new Date()));
         orderEntity.setOrderStatus(OrderStatus.unprocessed.name());
         orderEntity.setPaymentStatus(PaymentStatus.unpaid.name());