package com.yeshi.fanli.controller.client.v2;
|
|
import java.io.IOException;
|
import java.io.PrintWriter;
|
import java.lang.reflect.Type;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
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.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.JsonElement;
|
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonSerializationContext;
|
import com.google.gson.JsonSerializer;
|
import com.google.gson.TypeAdapter;
|
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonWriter;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
|
import com.yeshi.fanli.entity.redpack.RedPackDetail.RedPackDetailTypeEnum;
|
import com.yeshi.fanli.entity.redpack.RedPackExchange;
|
import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
|
import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum;
|
import com.yeshi.fanli.exception.redpack.RedPackExchangeException;
|
import com.yeshi.fanli.exception.redpack.RedPackGiveRecordException;
|
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
|
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackDetailService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackExchangeService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackForbidService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackGiveRecordService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.util.UserInviteUtil;
|
import com.yeshi.fanli.vo.redpack.RedPackDetailVO;
|
import com.yeshi.fanli.vo.redpack.RedPackWinInviteVO;
|
|
import net.sf.json.JSONObject;
|
|
@Controller
|
@RequestMapping("api/v2/redpack")
|
public class RedPackControllerV2 {
|
|
@Resource
|
private RedPackConfigService redPackConfigService;
|
|
@Resource
|
private RedPackBalanceService redPackBalanceService;
|
|
@Resource
|
private RedPackDetailService redPackDetailService;
|
|
@Resource
|
private RedPackGiveRecordService redPackGiveRecordService;
|
|
@Resource
|
private RedPackExchangeService redPackExchangeService;
|
|
@Resource
|
private RedPackWinInviteService redPackWinInviteService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private JumpDetailV2Service jumpDetailV2Service;
|
|
@Resource
|
private SwiperPictureService swiperPictureService;
|
|
@Resource
|
private UserSystemCouponService userSystemCouponService;
|
|
@Resource
|
private RedPackForbidService redPackForbidService;
|
|
/**
|
* 统计
|
*
|
* @param acceptData
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "countInfo", method = RequestMethod.POST)
|
public void countInfo(AcceptData acceptData, Long uid, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
BigDecimal zero = new BigDecimal(0);
|
BigDecimal todayWin = zero;
|
BigDecimal yesterdayWin = zero;
|
BigDecimal thisMonthWin = zero;
|
BigDecimal lastMonthWin = zero;
|
|
BigDecimal todayUse = zero;
|
BigDecimal yesterdayUse = zero;
|
BigDecimal thisMonthUse = zero;
|
BigDecimal lastMonthUse = zero;
|
BigDecimal balance = redPackBalanceService.getBalance(uid);
|
;
|
if (balance == null) {
|
balance = zero;
|
} else {
|
// 获得
|
todayWin = redPackDetailService.countAddMoneyByDate(uid, 1);
|
yesterdayWin = redPackDetailService.countAddMoneyByDate(uid, 2);
|
thisMonthWin = redPackDetailService.countAddMoneyByDate(uid, 3);
|
lastMonthWin = redPackDetailService.countAddMoneyByDate(uid, 4);
|
|
// 消耗
|
todayUse = redPackDetailService.countUseMoneyByDate(uid, 1);
|
if (todayUse == null || todayUse.compareTo(zero) > 0) {
|
todayUse = zero;
|
}
|
|
yesterdayUse = redPackDetailService.countUseMoneyByDate(uid, 2);
|
if (yesterdayUse == null || yesterdayUse.compareTo(zero) > 0) {
|
yesterdayUse = zero;
|
}
|
thisMonthUse = redPackDetailService.countUseMoneyByDate(uid, 3);
|
if (thisMonthUse == null || thisMonthUse.compareTo(zero) > 0) {
|
thisMonthUse = zero;
|
}
|
lastMonthUse = redPackDetailService.countUseMoneyByDate(uid, 4);
|
if (lastMonthUse == null || lastMonthUse.compareTo(zero) > 0) {
|
lastMonthUse = zero;
|
}
|
}
|
|
List<String> tips = new ArrayList<String>();
|
tips.add("红包余额≥20元后可提现,当前余额不足,请继续加油哦!");
|
tips.add("你也可以选择使用红包,享受给力折扣。");
|
String giveMin = redPackConfigService.getValueByKey("give_money_min");
|
String giveMax = redPackConfigService.getValueByKey("give_money_max");
|
|
// 正在提现金额
|
BigDecimal extractingMoney = redPackExchangeService.countMoneyByUidAndState(uid, RedPackExchange.STATE_INIT);
|
|
JSONObject data = new JSONObject();
|
data.put("balance", balance.setScale(2).toString());
|
data.put("helpLink", redPackConfigService.getValueByKey("desc_help_link"));
|
data.put("giveMin", giveMin);
|
data.put("giveMax", giveMax);
|
data.put("giveDesc", "注:红包赠送金额至少" + giveMin + "元至多" + giveMax + "元");
|
|
if (extractingMoney != null && extractingMoney.compareTo(zero) > 0)
|
data.put("extractingInfo", "提现中:¥" + extractingMoney.setScale(2));
|
|
data.put("extractShortage", tips);
|
data.put("extractMin", redPackConfigService.getValueByKey("extract_money_min"));
|
data.put("extractMax", redPackConfigService.getValueByKey("extract_money_max"));
|
data.put("extractBanlenMin", redPackConfigService.getValueByKey("extract_banlen_min"));
|
data.put("extractDesc", "注:3个工作日内完成审核,红包提现成功后将会进入到余额。");
|
|
data.put("useLink", redPackConfigService.getValueByKey("use_link"));
|
|
data.put("todayWin", todayWin.setScale(2).toString());
|
data.put("yesterdayWin", yesterdayWin.setScale(2).toString());
|
data.put("thisMonthWin", thisMonthWin.setScale(2).toString());
|
data.put("lastMonthWin", lastMonthWin.setScale(2).toString());
|
data.put("todayUse", todayUse.setScale(2).toString().replaceAll("-", ""));
|
data.put("yesterdayUse", yesterdayUse.setScale(2).toString().replaceAll("-", ""));
|
data.put("thisMonthUse", thisMonthUse.setScale(2).toString().replaceAll("-", ""));
|
data.put("lastMonthUse", lastMonthUse.setScale(2).toString().replaceAll("-", ""));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 明细详情列表
|
*
|
* @param acceptData
|
* @param uid
|
* @param index List最末的主键ID
|
* @param year 年份
|
* @param month 月份
|
* @param out
|
*/
|
@RequestMapping(value = "getMoneyDetails")
|
public void getMoneyDetails(AcceptData acceptData, Long uid, Long index, Integer year, Integer month,
|
PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if ((year == null && month != null) || (year != null && month == null)) {
|
out.print(JsonUtil.loadFalseResult(1, "日期不完整"));
|
return;
|
}
|
|
Date date = null;
|
|
if (year != null && month != null) {
|
date = new Date(TimeUtil.convertToTimeTemp(year + "-" + month, "yyyy-M"));
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(date);
|
ca.add(Calendar.MONTH, 1);
|
date = new Date(ca.getTimeInMillis() - 1);
|
}
|
|
// 查询列表
|
List<RedPackDetailVO> list = redPackDetailService.listUserMoneyDetailForClient(uid, index, date);
|
// 统计总条数
|
long count = redPackDetailService.countUserMoneyDetailForClient(uid, index, date);
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
gsonBuilder.registerTypeAdapter(RedPackDetailTypeEnum.class, new TypeAdapter<RedPackDetailTypeEnum>() {
|
@Override
|
public RedPackDetailTypeEnum read(JsonReader arg0) throws IOException {
|
return null;
|
}
|
|
@Override
|
public void write(JsonWriter out, RedPackDetailTypeEnum arg1) throws IOException {
|
out.beginObject();
|
out.name("portrait").value(arg1.getPicture());
|
out.endObject();
|
}
|
}).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"));
|
}
|
}
|
}).registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
|
@Override
|
public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("");
|
} else {
|
// 保留2位小数
|
value = value.setScale(2);
|
return new JsonPrimitive(value.toString());
|
}
|
}
|
});
|
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
data.put("count", count);
|
data.put("data", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 赠送红包
|
*
|
* @param acceptData
|
* @param uid
|
* @param amount
|
* @param out
|
*/
|
@RequestMapping(value = "giving", method = RequestMethod.POST)
|
public void giving(AcceptData acceptData, Long uid, BigDecimal amount, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
try {
|
String tips = redPackGiveRecordService.giving(uid, amount);
|
out.print(JsonUtil.loadTrueResult(tips));
|
} catch (RedPackGiveRecordException e) {
|
out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
|
}
|
}
|
|
/**
|
* 转换红包为真实金钱
|
*
|
* @param acceptData
|
* @param uid
|
* @param amount
|
* @param out
|
*/
|
@RequestMapping(value = "exchangeCash", method = RequestMethod.POST)
|
public void exchangeCash(AcceptData acceptData, Long uid, BigDecimal amount, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
try {
|
redPackExchangeService.exchangeCash(uid, amount);
|
out.print(JsonUtil.loadTrueResult("提现申请成功"));
|
} catch (RedPackExchangeException e) {
|
out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
|
}
|
}
|
|
/**
|
* 红包邀请进度
|
*
|
* @param acceptData
|
* @param page
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getRewardList")
|
public void getRewardList(AcceptData acceptData, Integer page, Long uid, String callback, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if (page == null || page < 1) {
|
out.print(JsonUtil.loadFalseResult(1, "页码不正确"));
|
return;
|
}
|
|
List<RedPackWinInviteVO> list = new ArrayList<RedPackWinInviteVO>();
|
|
List<RedPackWinInvite> listRecord = redPackWinInviteService.getRewardList((page - 1) * Constant.PAGE_SIZE,
|
Constant.PAGE_SIZE, uid);
|
if (listRecord != null && !listRecord.isEmpty()) {
|
for (RedPackWinInvite record : listRecord) {
|
UserInfo user = null;
|
RedPackWinInviteVO winVO = new RedPackWinInviteVO();
|
RedPackWinInviteTypeEnum type = record.getType();
|
if (RedPackWinInviteTypeEnum.newUserReward == type) {
|
user = userInfoService.selectByPKey(uid);
|
} else {
|
user = userInfoService.selectByPKey(record.getTeamUid());
|
}
|
winVO.setPortrait(user.getPortrait());
|
winVO.setNickName(user.getNickName());
|
winVO.setDesc(type.getDesc());
|
winVO.setMoney(record.getMoney().toString());
|
list.add(winVO);
|
}
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("winMoney", redPackWinInviteService.getRewardMoney(uid).setScale(2));
|
data.put("count", redPackWinInviteService.countRewardRecord(uid));
|
data.put("list", JsonUtil.getApiCommonGson().toJson(list));
|
if (!StringUtil.isNullOrEmpty(callback)) {
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
|
} else {
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
}
|
|
/**
|
* 用户基础信息
|
*
|
* @param acceptData
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getBasicInfo")
|
public void getBasicInfo(AcceptData acceptData, Long uid, String callback, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("balance", redPackBalanceService.getBalance(uid));
|
data.put("ruleLink", redPackConfigService.getValueByKey("invite_reward_rule_link"));
|
data.put("shareLink", UserInviteUtil.getShareUrl(uid));
|
data.put("redPackLock", redPackForbidService.verifyForbid(uid));
|
|
UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
if (userInfoExtra != null && !StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
|
data.put("inviteCode", userInfoExtra.getInviteCode());
|
} else {
|
data.put("inviteCode", "");
|
}
|
|
//
|
long freeCouponCount = userSystemCouponService.countUsableFreeCouponForBuy(uid);
|
long rewardCouponCount = userSystemCouponService.countUsableRewardCoupon(uid);
|
|
data.put("freeCouponCount", freeCouponCount);
|
data.put("rewardCouponCount", rewardCouponCount);
|
|
if (!StringUtil.isNullOrEmpty(callback)) {
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
|
} else {
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
}
|
|
}
|