From f788607ff771a47bc60d6a86e00b3433c40f3d2c Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 24 九月 2021 15:22:03 +0800
Subject: [PATCH] 接入视频直播

---
 src/main/java/com/yeshi/buwan/controller/api/VIPController.java |  220 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 160 insertions(+), 60 deletions(-)

diff --git a/src/main/java/com/yeshi/buwan/controller/api/VIPController.java b/src/main/java/com/yeshi/buwan/controller/api/VIPController.java
index e1d6c43..ed0912e 100644
--- a/src/main/java/com/yeshi/buwan/controller/api/VIPController.java
+++ b/src/main/java/com/yeshi/buwan/controller/api/VIPController.java
@@ -1,22 +1,28 @@
 package com.yeshi.buwan.controller.api;
 
 import com.google.gson.*;
-import com.yeshi.buwan.domain.system.SystemConfig;
 import com.yeshi.buwan.domain.user.LoginUser;
-import com.yeshi.buwan.domain.vip.UserVIPInfo;
-import com.yeshi.buwan.domain.vip.VIPOrderRecord;
-import com.yeshi.buwan.domain.vip.VIPPrice;
-import com.yeshi.buwan.domain.vip.VIPPriceType;
+import com.yeshi.buwan.domain.vip.*;
+import com.yeshi.buwan.dto.order.PPTVVideoPrice;
+import com.yeshi.buwan.dto.order.PayWayInfoDTO;
+import com.yeshi.buwan.exception.PPTVException;
+import com.yeshi.buwan.exception.goldcorn.GoldCornException;
+import com.yeshi.buwan.exception.order.OrderException;
+import com.yeshi.buwan.exception.order.PayException;
 import com.yeshi.buwan.exception.vip.VIPException;
+import com.yeshi.buwan.exception.vip.VideoBuyRecordException;
+import com.yeshi.buwan.videos.pptv.entity.PPTVSeries;
+import com.yeshi.buwan.videos.pptv.entity.VideoPPTVMap;
 import com.yeshi.buwan.service.inter.LoginUserService;
+import com.yeshi.buwan.service.inter.juhe.PPTVService;
+import com.yeshi.buwan.service.inter.order.OrderService;
 import com.yeshi.buwan.service.inter.system.SystemConfigService;
 import com.yeshi.buwan.service.inter.vip.VIPPriceService;
 import com.yeshi.buwan.service.inter.vip.VIPService;
 import com.yeshi.buwan.util.*;
-import com.yeshi.buwan.util.user.VipUtil;
-import com.yeshi.buwan.util.vip.VIPOrderUtil;
 import com.yeshi.buwan.vo.AcceptData;
 import com.yeshi.buwan.vo.client.user.UserInfoVO;
+import com.yeshi.buwan.vo.order.OrderInfoVO;
 import net.sf.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,8 +34,11 @@
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
-import java.util.UUID;
 
 @Controller
 @RequestMapping("api/v2/vip")
@@ -44,6 +53,9 @@
     private VIPService vipService;
 
     @Resource
+    private OrderService orderService;
+
+    @Resource
     private LoginUserService loginUserService;
 
     @Resource
@@ -51,6 +63,9 @@
 
     @Resource
     private SystemConfigService systemConfigService;
+
+    @Resource
+    private PPTVService pptvService;
 
 
     @RequestMapping("getVIPPriceList")
@@ -92,6 +107,43 @@
         return JsonUtilV2.loadTrueJson(root.toString());
     }
 
+
+    @RequestMapping("getOrderList")
+    @ResponseBody
+    public String getOrderList(AcceptData acceptData, String loginUid, String type, int page) {
+        Gson gson = new GsonBuilder().registerTypeAdapter(VIPPriceType.class, new JsonSerializer<VIPPriceType>() {
+            @Override
+            public JsonElement serialize(VIPPriceType value, Type theType, JsonSerializationContext context) {
+                if (value == null) {
+                    return new JsonPrimitive("");
+                } else {
+                    return new JsonPrimitive(value.getName());
+                }
+            }
+        }).registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
+            @Override
+            public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
+                if (value == null) {
+                    return new JsonPrimitive("");
+                } else {
+                    return new JsonPrimitive(TimeUtil.getGernalTime(value.getTime(), "yyyy.MM.dd HH:mm"));
+                }
+            }
+        }).create();
+        JSONObject root = new JSONObject();
+
+        List<OrderRecord> list = orderService.listOrderRecord(loginUid, type == null ? null : OrderType.valueOf(type), null, page, Constant.pageCount);
+
+        List<OrderInfoVO> voList = new ArrayList<>();
+        for (OrderRecord record : list) {
+            voList.add(OrderInfoVO.create(record));
+        }
+        long count = orderService.countOrderRecord(loginUid, type == null ? null : OrderType.valueOf(type), null);
+        root.put("list", gson.toJson(voList));
+        root.put("count", count);
+        return JsonUtilV2.loadTrueJson(root.toString());
+    }
+
     /**
      * 鐢熸垚璁㈠崟
      *
@@ -101,7 +153,7 @@
      */
     @RequestMapping("createOrder")
     @ResponseBody
-    public String createOrder(AcceptData acceptData, HttpServletRequest request, String loginUid, String priceId, int payWay) {
+    public String createOrder(AcceptData acceptData, HttpServletRequest request, String loginUid, String priceId, String cid, String vid, Integer goldCorn, int payWay) {
 
         if (StringUtil.isNullOrEmpty(loginUid)) {
             return JsonUtilV2.loadFalseJson("鐢ㄦ埛鏈櫥褰�");
@@ -112,65 +164,103 @@
             return JsonUtilV2.loadFalseJson("鐢ㄦ埛涓嶅瓨鍦�");
         }
 
-        if (StringUtil.isNullOrEmpty(user.getPhone())) {
+        if (StringUtil.isNullOrEmpty(user.getPhone()) && payWay != OrderRecord.PAY_WAY_IAPP) {
             return JsonUtilV2.loadFalseJson(10001, "璇风粦瀹氱數璇濆彿鐮�");
+        }
+
+        if (StringUtil.isNullOrEmpty(priceId) && StringUtil.isNullOrEmpty(cid)) {
+            return JsonUtilV2.loadFalseJson("璇烽�夋嫨璐拱绫诲瀷");
+        }
+
+        if (goldCorn == null)
+            goldCorn = 0;
+
+        OrderType orderType = OrderType.vip;
+
+        if (!StringUtil.isNullOrEmpty(cid)) {
+            orderType = OrderType.video;
         }
 
 
         String ip = IPUtil.getRemotIP(request);
-        VIPPrice vipPrice = vipPriceService.selectByPrimaryKey(priceId);
-        if (vipPrice == null) {
-            return JsonUtilV2.loadFalseJson("濂楅涓嶅瓨鍦�");
+
+        OrderRecord record = new OrderRecord();
+
+        VIPPrice vipPrice = null;
+
+        if (orderType == OrderType.video) {
+            PPTVSeries pptvSeries = pptvService.selectSeriesBySeriesCode(cid);
+            if (pptvSeries == null) {
+                return JsonUtilV2.loadFalseJson("褰辩墖涓嶅瓨鍦�");
+            }
+            //瑙嗛
+            VideoPPTVMap map = pptvService.selectVideoPPTVMapByPPInfo(pptvSeries.getInfoID(), vid);
+            if (map == null) {
+                return JsonUtilV2.loadFalseJson("褰辩墖涓嶅瓨鍦�");
+            }
+            record.setRemarks(pptvSeries.getName());
+        } else {
+            vipPrice = vipPriceService.selectByPrimaryKey(priceId);
+            if (vipPrice == null) {
+                return JsonUtilV2.loadFalseJson("濂楅涓嶅瓨鍦�");
+            }
         }
 
-        VIPOrderRecord record = new VIPOrderRecord();
+
         record.setUid(loginUid);
-        record.setType(vipPrice.getType());
-        record.setMoney(vipPrice.getActualPrice());
+        if (vipPrice != null) {
+            record.setType(vipPrice.getType());
+            record.setMoney(vipPrice.getActualPrice());
+        } else {
+            PPTVVideoPrice price = new Gson().fromJson(systemConfigService.getConfigValueByKeyCache("videoPrice"), PPTVVideoPrice.class);
+            record.setMoney(price.getActualPrice().subtract(new BigDecimal(goldCorn).divide(new BigDecimal(100), 2, RoundingMode.UP)));
+        }
+
+        record.setOrderType(orderType);
+        record.setVideoCid(cid);
+        record.setVideoVid(vid);
+        record.setGoldCorn(goldCorn);
         record.setPayWay(payWay);
-        record.setState(VIPOrderRecord.STATE_NOT_PAY);
+        record.setState(OrderRecord.STATE_NOT_PAY);
         record.setIpInfo(IPUtil.getRemotIP(request) + ":" + IPUtil.getRemotePort(request));
         try {
-            vipService.addVIPRecord(record);
-        } catch (VIPException e) {
+            orderService.createOrder(record);
+        } catch (OrderException e) {
             logger.error("鐢熸垚璁㈠崟鍑洪敊", e);
             return JsonUtilV2.loadFalseJson("鐢熸垚璁㈠崟鍑洪敊");
         }
 
-        String orderNo = VIPOrderUtil.getOutOrderNo(record.getId());
-        switch (payWay) {
-            case VIPOrderRecord
-                    .PAY_WAY_ALIPAY: {
-                //鐢熸垚鏀粯瀹濇敮浠樿鍗�
-                String form = VipUtil.getVipChargeAlipayForm(record.getId(), orderNo, record.getMoney());
-                //鏆傚瓨2鍒嗛挓
-                String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
-                redisManager.cacheCommonString(id, form, 120);
-                org.json.JSONObject data = new org.json.JSONObject();
-                data.put("payUrl", Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id);
-                data.put("payWay", payWay);
-                return JsonUtilV2.loadTrueJson(data.toString());
-            }
 
+        PayWayInfoDTO payResult = null;
 
-            case VIPOrderRecord
-                    .PAY_WAY_WX: {
-                //鐢熸垚寰俊鏀粯璁㈠崟
-                try {
-                    String payUrl = VipUtil.createWXOrder(record.getId(), ip, orderNo, vipPrice.getActualPrice(), "褰辫澶у叏VIP-" + vipPrice.getType().getName());
-                    org.json.JSONObject data = new org.json.JSONObject();
-                    data.put("payUrl", payUrl);
-                    data.put("payWay", payWay);
-                    return JsonUtilV2.loadTrueJson(data.toString());
-                } catch (Exception e) {
-                    logger.error("鐢熸垚寰俊鏀粯璁㈠崟鍑洪敊", e);
-                    return JsonUtilV2.loadFalseJson("鐢熸垚寰俊鏀粯璁㈠崟鍑洪敊");
-                }
-            }
+        try {
+            payResult = orderService.payOrder(record);
+        } catch (OrderException e) {
+            return JsonUtilV2.loadFalseJson(e.getMessage());
+        } catch (GoldCornException e) {
+            e.printStackTrace();
+            return JsonUtilV2.loadFalseJson(e.getMessage());
+        } catch (PayException e) {
+            e.printStackTrace();
+            return JsonUtilV2.loadFalseJson(e.getMessage());
+        } catch (VIPException e) {
+            return JsonUtilV2.loadFalseJson(e.getMessage());
+        } catch (PPTVException e) {
+            return JsonUtilV2.loadFalseJson(e.getMessage());
+        } catch (VideoBuyRecordException e) {
+            return JsonUtilV2.loadFalseJson("鍗曠墖璐拱澶辫触");
         }
-
-        return JsonUtilV2.loadFalseJson("璇烽�夋嫨鏀粯鏂瑰紡");
+        if (payResult.getPayWay() == OrderRecord.PAY_WAY_IAPP) {
+            //鑻规灉鍐呰喘
+            JSONObject root = new JSONObject();
+            root.put("orderNo", record.getId());
+            root.put("productId", vipPrice.getIosProductId());
+            return JsonUtilV2.loadTrueJson(root.toString());
+        } else {
+            return JsonUtilV2.loadTrueJson(new Gson().toJson(payResult));
+        }
     }
+
 
     /**
      * 妫�鏌ユ槸鍚︽敮浠�
@@ -178,27 +268,37 @@
      * @param acceptData
      * @param loginUid
      * @param id
+     * @param receipt    -ios鏀粯缁撴灉receipt
      * @return
      */
     @RequestMapping("checkPay")
     @ResponseBody
     @RequestSerializableByKey(key = "'vip-checkPay-'+#id")
-    public String checkPay(AcceptData acceptData, String loginUid, String id) {
-        VIPOrderRecord record = vipService.getOrderRecord(id);
+    public String checkPay(AcceptData acceptData, String loginUid, String id, String receipt) {
+        OrderRecord record = orderService.getOrderRecord(id);
         if (record == null || !record.getUid().equalsIgnoreCase(loginUid)) {
             return JsonUtilV2.loadFalseJson("璁板綍涓嶅瓨鍦�/涓嶆槸鎮ㄧ殑璁㈠崟");
         }
 
-        record = vipService.checkOrderPayState(id);
-        //鏈敮浠�
-        if (record != null && record.getState() != VIPOrderRecord.STATE_PAY) {
-            return JsonUtilV2.loadFalseJson(1, "鏀粯鏈畬鎴�");
+        if (record.getPayWay() == OrderRecord.PAY_WAY_IAPP) {
+            try {
+                orderService.checkApplePay(record.getId(), receipt);
+                JSONObject data = new JSONObject();
+                return JsonUtilV2.loadTrueJson(data.toString());
+            } catch (Exception e) {
+                return JsonUtilV2.loadFalseJson(e.getMessage());
+            }
+        } else {
+            record = orderService.checkOrderPayState(id);
+            //鏈敮浠�
+            if (record != null && record.getState() != OrderRecord.STATE_PAY) {
+                return JsonUtilV2.loadFalseJson(1, "鏀粯鏈畬鎴�");
+            }
+
+            JSONObject data = new JSONObject();
+            data.put("money", record.getPayMoney() == null ? record.getMoney() : record.getPayMoney());
+            return JsonUtilV2.loadTrueJson(data.toString());
         }
-
-        JSONObject data = new JSONObject();
-        data.put("money", record.getPayMoney() == null ? record.getMoney() : record.getPayMoney());
-
-        return JsonUtilV2.loadTrueJson(data.toString());
     }
 
 

--
Gitblit v1.8.0