package com.yeshi.buwan.controller.api;
|
|
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.exception.vip.VIPException;
|
import com.yeshi.buwan.service.inter.LoginUserService;
|
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 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 javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.lang.reflect.Type;
|
import java.util.List;
|
import java.util.UUID;
|
|
@Controller
|
@RequestMapping("api/v2/vip")
|
public class VIPController {
|
|
Logger logger = LoggerFactory.getLogger(VIPController.class);
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private VIPService vipService;
|
|
@Resource
|
private LoginUserService loginUserService;
|
|
@Resource
|
private VIPPriceService vipPriceService;
|
|
|
@RequestMapping("getVIPPriceList")
|
@ResponseBody
|
public String getVIPPriceList(AcceptData acceptData, String loginUid) {
|
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().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());
|
}
|
}
|
}).create();
|
JSONObject root = new JSONObject();
|
if (!StringUtil.isNullOrEmpty(loginUid)) {
|
LoginUser user = loginUserService.getLoginUser(loginUid);
|
if (user == null) {
|
return JsonUtilV2.loadFalseJson("用户不存在");
|
}
|
UserVIPInfo vipInfo = vipService.getVIPInfo(loginUid);
|
UserInfoVO userInfoVO = new UserInfoVO();
|
userInfoVO.setId(user.getId());
|
userInfoVO.setNickName(user.getName());
|
userInfoVO.setPortrait(user.getPortrait());
|
if (vipInfo != null && vipInfo.getExpireDate() != null)
|
userInfoVO.setVipExpireTime(vipInfo.getExpireDate().getTime());
|
root.put("user", new Gson().toJson(userInfoVO));
|
}
|
|
List<VIPPrice> vipPriceList = vipPriceService.listValidPrice();
|
root.put("list", gson.toJson(vipPriceList));
|
return JsonUtilV2.loadTrueJson(root.toString());
|
}
|
|
/**
|
* 生成订单
|
*
|
* @param acceptData
|
* @param loginUid
|
* @return
|
*/
|
@RequestMapping("createOrder")
|
@ResponseBody
|
public String createOrder(AcceptData acceptData, HttpServletRequest request, String loginUid, String priceId, int payWay) {
|
|
if (StringUtil.isNullOrEmpty(loginUid)) {
|
return JsonUtilV2.loadFalseJson("用户未登录");
|
}
|
|
LoginUser user = loginUserService.getLoginUser(loginUid);
|
if (user == null) {
|
return JsonUtilV2.loadFalseJson("用户不存在");
|
}
|
|
if (StringUtil.isNullOrEmpty(user.getPhone())) {
|
return JsonUtilV2.loadFalseJson(10001,"请绑定电话号码");
|
}
|
|
|
String ip = IPUtil.getRemotIP(request);
|
VIPPrice 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);
|
try {
|
vipService.addVIPRecord(record);
|
} catch (VIPException 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());
|
}
|
|
|
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("生成微信支付订单出错");
|
}
|
}
|
}
|
|
return JsonUtilV2.loadFalseJson("请选择支付方式");
|
}
|
|
|
}
|