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 | 238 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 190 insertions(+), 48 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 762c037..ed0912e 100644 --- a/src/main/java/com/yeshi/buwan/controller/api/VIPController.java +++ b/src/main/java/com/yeshi/buwan/controller/api/VIPController.java @@ -2,31 +2,43 @@ import com.google.gson.*; 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; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import org.yeshi.utils.annotation.RequestSerializableByKey; 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") @@ -41,10 +53,19 @@ private VIPService vipService; @Resource + private OrderService orderService; + + @Resource private LoginUserService loginUserService; @Resource private VIPPriceService vipPriceService; + + @Resource + private SystemConfigService systemConfigService; + + @Resource + private PPTVService pptvService; @RequestMapping("getVIPPriceList") @@ -71,6 +92,11 @@ userInfoVO.setId(user.getId()); userInfoVO.setNickName(user.getName()); userInfoVO.setPortrait(user.getPortrait()); + if (StringUtil.isNullOrEmpty(userInfoVO.getPortrait())) { + String portrait = systemConfigService.getConfigValueByKeyCache("default_portrait"); + userInfoVO.setPortrait(portrait); + } + if (vipInfo != null && vipInfo.getExpireDate() != null) userInfoVO.setVipExpireTime(vipInfo.getExpireDate().getTime()); root.put("user", new Gson().toJson(userInfoVO)); @@ -78,6 +104,43 @@ List<VIPPrice> vipPriceList = vipPriceService.listValidPrice(); root.put("list", gson.toJson(vipPriceList)); + 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()); } @@ -90,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("鐢ㄦ埛鏈櫥褰�"); @@ -101,62 +164,141 @@ return JsonUtilV2.loadFalseJson("鐢ㄦ埛涓嶅瓨鍦�"); } - if (StringUtil.isNullOrEmpty(user.getPhone())) { - return JsonUtilV2.loadFalseJson(10001,"璇风粦瀹氱數璇濆彿鐮�"); + 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.getPrice()); - record.setState(VIPOrderRecord.STATE_NOT_PAY); + 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(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(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", "http://api.ysdq.yeshitv.com:8089/BuWan/alipay/printPayForm?formId=" + id); - data.put("payWay", payWay); - return JsonUtilV2.loadTrueJson(data.toString()); - } + + PayWayInfoDTO payResult = null; + + 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("鍗曠墖璐拱澶辫触"); + } + 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)); + } + } - case VIPOrderRecord - .PAY_WAY_WX: { - //鐢熸垚寰俊鏀粯璁㈠崟 - try { - String payUrl = VipUtil.createWXOrder(ip, orderNo, vipPrice.getPrice(), "褰辫澶у叏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("鐢熸垚寰俊鏀粯璁㈠崟鍑洪敊"); - } - } + /** + * 妫�鏌ユ槸鍚︽敮浠� + * + * @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, String receipt) { + OrderRecord record = orderService.getOrderRecord(id); + if (record == null || !record.getUid().equalsIgnoreCase(loginUid)) { + return JsonUtilV2.loadFalseJson("璁板綍涓嶅瓨鍦�/涓嶆槸鎮ㄧ殑璁㈠崟"); } - return JsonUtilV2.loadFalseJson("璇烽�夋嫨鏀粯鏂瑰紡"); + 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()); + } } -- Gitblit v1.8.0