package com.yeshi.fanli.controller.client.v1;
|
|
import java.io.PrintWriter;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.yeshi.utils.JsonUtil;
|
|
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.exception.user.UserSystemCouponException;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.config.SystemCouponService;
|
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
|
import com.yeshi.fanli.service.inter.order.CommonOrderService;
|
import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
|
import com.yeshi.fanli.service.inter.user.invite.UserInviteService;
|
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.RedisManager;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
|
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
|
import com.yeshi.fanli.util.jd.JDUtil;
|
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.vo.homemodule.BannerVO;
|
import com.yeshi.fanli.vo.user.UserSystemCouponRecordVO;
|
import com.yeshi.fanli.vo.user.UserSystemCouponVO;
|
|
import net.sf.json.JSONObject;
|
|
/**
|
* 福利中心
|
*
|
* @author Administrator
|
*
|
*/
|
@Controller
|
@RequestMapping("api/v1/user/coupon")
|
public class UserCouponController {
|
|
@Resource(name = "taskExecutor")
|
private TaskExecutor executor;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private SystemCouponService systemCouponService;
|
|
@Resource
|
private UserSystemCouponService UserSystemCouponService;
|
|
@Resource
|
private SwiperPictureService swiperPictureService;
|
|
@Resource
|
private CommonOrderService commonOrderService;
|
|
@Resource
|
private DeviceLotteryRecordService deviceLotteryRecordService;
|
|
@Resource
|
private UserSystemCouponService userSystemCouponService;
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private UserVIPInfoService userVIPInfoService;
|
|
@Resource
|
private UserInviteService userInviteService;
|
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private JDGoodsCacheUtil jdGoodsCacheUtil;
|
|
@Resource
|
private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
|
|
|
|
|
/**
|
* 用户券列表查询
|
*
|
* @param acceptData
|
* @param page
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getCouponList", method = RequestMethod.POST)
|
public void getCouponList(AcceptData acceptData, Integer page, Long uid, PrintWriter out) {
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
try {
|
if (page == null || page < 1) {
|
page = 1;
|
}
|
|
// 福利中心图片
|
String topPicture = null;
|
if (page == 1) {
|
List<BannerVO> listswiper = swiperPictureService.getByBannerCardAndVersion("welfare_top",acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()),acceptData.getSystem());
|
if (listswiper != null && listswiper.size() > 0) {
|
topPicture = listswiper.get(0).getSrc();
|
}
|
}
|
|
boolean changeJump = false;
|
String version = acceptData.getVersion();
|
int tversion = Integer.parseInt(version);
|
String platform = acceptData.getPlatform();
|
if ("android".equalsIgnoreCase(platform) && tversion > 34) {
|
changeJump = true;
|
} else if (tversion > 44){
|
changeJump = true;
|
}
|
|
long count = UserSystemCouponService.countCouponOld(uid);
|
List<UserSystemCouponVO> resultList = UserSystemCouponService
|
.getUserCouponVOList((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid, changeJump);
|
|
if (resultList == null) {
|
resultList = new ArrayList<UserSystemCouponVO>();
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("topPicture", topPicture);
|
data.put("count", count);
|
data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
|
|
out.print(JsonUtil.loadTrueResult(data));
|
|
// 更新福利中心未读数量
|
if (page == 1) {
|
executor.execute(new Runnable() {
|
@Override
|
public void run() {
|
UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
// 未读券是否大于0
|
if (userInfoExtra != null && userInfoExtra.getCouponNews() > 0) {
|
UserInfoExtra extra = new UserInfoExtra();
|
extra.setId(userInfoExtra.getId());
|
extra.setCouponNews(0);
|
userInfoExtraService.updateByPrimaryKeySelective(extra);
|
}
|
}
|
});
|
}
|
|
} catch (UserSystemCouponException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult(1, "查询失败"));
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 用户奖励券
|
*
|
* @param acceptData
|
* @param page
|
* @param uid
|
* @param auctionId 商品id
|
* @param out
|
*/
|
@RequestMapping(value = "getGoodsCouponList", method = RequestMethod.POST)
|
public void getGoodsCouponList(AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
try {
|
List<UserSystemCouponVO> resultList = UserSystemCouponService.getGoodsCouponList(uid, auctionId);
|
if (resultList == null) {
|
resultList = new ArrayList<UserSystemCouponVO>();
|
}
|
|
JSONObject dataTip = new JSONObject();
|
dataTip.put("content", configService.getValue(ConfigKeyEnum.freeCouponTip.getKey(),acceptData.getSystem()));
|
dataTip.put("fontColor", "#F14242");
|
|
JSONObject data = new JSONObject();
|
data.put("helpLink", configService.getValue(ConfigKeyEnum.freeCouponHelp.getKey(),acceptData.getSystem()));
|
data.put("tip", dataTip);
|
data.put("count", resultList.size());
|
data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (UserSystemCouponException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult(1, "查询失败"));
|
e.printStackTrace();
|
}
|
}
|
|
|
|
|
/**
|
* 免单券使用记录 以及状态修改
|
*
|
* @param acceptData
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "useFreeCoupon", method = RequestMethod.POST)
|
public void useFreeCoupon(AcceptData acceptData, Long uid, Long cid, Long goodId, Integer goodsType, PrintWriter out) {
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (goodsType == null || goodsType > 3 || goodsType < 1) {
|
goodsType = Constant.SOURCE_TYPE_TAOBAO;
|
}
|
|
try {
|
UserSystemCouponService.useGoodsCoupon(uid, cid, goodId, goodsType);
|
out.print(JsonUtil.loadTrueResult("使用成功"));
|
} catch (UserSystemCouponException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult(1, "使用失败"));
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 用户奖励券
|
*
|
* @param acceptData
|
* @param page
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getOrderCouponList", method = RequestMethod.POST)
|
public void getOrderCouponList(AcceptData acceptData, Long uid, PrintWriter out) {
|
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
try {
|
List<UserSystemCouponVO> resultList = UserSystemCouponService.getOrderCouponList(uid);
|
|
if (resultList == null) {
|
resultList = new ArrayList<UserSystemCouponVO>();
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("helpLink", configService.getValue(ConfigKeyEnum.rewardCouponHelp.getKey(),acceptData.getSystem()));
|
data.put("count", resultList.size());
|
data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
|
|
out.print(JsonUtil.loadTrueResult(data));
|
|
} catch (UserSystemCouponException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult(1, "查询失败"));
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 免单券使用记录 以及状态修改
|
*
|
* @param acceptData
|
* @param page
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "useRewardCoupon")
|
public void useRewardCoupon(String callback, AcceptData acceptData, Long uid, Long cid, String orderNo, Integer goodsType, PrintWriter out) {
|
if (uid == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
// 当前用户是否VIP
|
boolean vip = userInviteService.verifyVIP(uid);
|
if (vip) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("会员不可使用奖励券"));
|
return;
|
}
|
if (goodsType == null || goodsType > 3 || goodsType < 1) {
|
goodsType = Constant.SOURCE_TYPE_TAOBAO;
|
}
|
try {
|
UserSystemCouponService.useOrderCoupon(uid, cid, orderNo, goodsType, acceptData);
|
JSONObject data = commonOrderService.getRewardJumpInfo(orderNo, goodsType);
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
} catch (UserSystemCouponException e) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "使用失败"));
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 订单-奖励进度详情
|
*
|
* @param acceptData
|
* @param orderNo 订单号
|
* @param out
|
*/
|
@RequestMapping(value = "getRewardRecord", method = RequestMethod.POST)
|
public void getRewardCounponRecord(AcceptData acceptData, String orderNo, Integer goodsType, PrintWriter out) {
|
try {
|
if (goodsType == null || goodsType > 3 || goodsType < 1) {
|
goodsType = Constant.SOURCE_TYPE_TAOBAO;
|
}
|
|
UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getRewardCouponRecord(orderNo, goodsType);
|
JSONObject data = new JSONObject();
|
data.put("rewardRecord", rewardRecord);
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (UserSystemCouponException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult(1, "查询失败"));
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 订单-奖励进度详情
|
*
|
* @param acceptData
|
* @param orderNo 订单号
|
* @param out
|
*/
|
@RequestMapping(value = "getFreeCounponRecord", method = RequestMethod.POST)
|
public void getFreeCounponRecord(AcceptData acceptData, String orderNo, Integer goodsType, PrintWriter out) {
|
try {
|
if (goodsType == null || goodsType > 3 || goodsType < 1) {
|
goodsType = Constant.SOURCE_TYPE_TAOBAO;
|
}
|
|
UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getFreeCouponRecord(orderNo, goodsType);
|
JSONObject data = new JSONObject();
|
data.put("frreCouponRecord", rewardRecord);
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (UserSystemCouponException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult(1, "查询失败"));
|
e.printStackTrace();
|
}
|
}
|
|
|
|
/**
|
* 查询免单券
|
* @param acceptData
|
* @param uid
|
* @param auctionId
|
* @param out
|
*/
|
@RequestMapping(value = "getFreeCouponList", method = RequestMethod.POST)
|
public void getFreeCouponList(AcceptData acceptData, Long uid, String goodsId, Integer goodsType, PrintWriter out) {
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (goodsType == null || StringUtil.isNullOrEmpty(goodsId)) {
|
out.print(JsonUtil.loadFalseResult("参数不完整"));
|
return;
|
}
|
|
List<UserSystemCouponVO> list = UserSystemCouponService.getFreeCouponList(uid);
|
if (list == null)
|
list = new ArrayList<>();
|
|
|
if (list.size() > 0) {
|
boolean state = false;
|
BigDecimal priceLimit = BigDecimal.valueOf(9.9);
|
switch(goodsType) {
|
case Constant.SOURCE_TYPE_TAOBAO:
|
state = checkCanUsedTB(Long.parseLong(goodsId), priceLimit);
|
break;
|
case Constant.SOURCE_TYPE_JD:
|
state = checkCanUsedTB(Long.parseLong(goodsId), priceLimit);
|
break;
|
case Constant.SOURCE_TYPE_PDD:
|
state = checkCanUsedTB(Long.parseLong(goodsId), priceLimit);
|
break;
|
default:
|
break;
|
}
|
|
// 不能使用
|
if (!state) {
|
for (UserSystemCouponVO userCouponVO : list) {
|
userCouponVO.setState(0);
|
userCouponVO.setCouponPicture(userCouponVO.getCouponPictureInvalid());
|
Map<String, Object> map = userCouponVO.getRemainDays();
|
if (map != null) {
|
map.put("fontColor", "#CCCCCC");
|
}
|
userCouponVO.setRemainDays(map);
|
}
|
}
|
}
|
|
JSONObject dataTip = new JSONObject();
|
dataTip.put("content", configService.getValue(ConfigKeyEnum.freeCouponTip.getKey(),acceptData.getSystem()));
|
dataTip.put("fontColor", "#F14242");
|
|
JSONObject data = new JSONObject();
|
data.put("helpLink", configService.getValue(ConfigKeyEnum.freeCouponHelp.getKey(),acceptData.getSystem()));
|
data.put("tip", dataTip);
|
data.put("count", list.size());
|
data.put("list", JsonUtil.getApiCommonGson().toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
|
|
private boolean checkCanUsedTB(Long goodsId, BigDecimal priceLimit) {
|
try {
|
TaoBaoGoodsBrief goods = redisManager.getTaoBaoGoodsBrief(goodsId);
|
if (goods == null)
|
return false;
|
|
BigDecimal quanPrice = TaoBaoUtil.getCouponPrice(goods);
|
if (quanPrice.compareTo(priceLimit) <= 0)
|
return true;
|
} catch (TaobaoGoodsDownException e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
|
private boolean checkCanUsedJD(Long goodsId, BigDecimal priceLimit) {
|
JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
|
if (goods == null)
|
return false;
|
BigDecimal quanPrice = JDUtil.getCouponPrice(goods);
|
if (quanPrice.compareTo(priceLimit) <= 0)
|
return true;
|
|
return false;
|
}
|
|
private boolean checkCanUsedPDD(Long goodsId, BigDecimal priceLimit) {
|
PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
|
if (goods == null)
|
return false;
|
BigDecimal quanPrice = PinDuoDuoUtil.getCouponPrice(goods);
|
if (quanPrice.compareTo(priceLimit) <= 0)
|
return true;
|
|
return false;
|
}
|
|
}
|