package com.yeshi.fanli.controller.client.v2;
|
|
import java.io.PrintWriter;
|
import java.lang.reflect.Type;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
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.reflect.TypeToken;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.bus.user.UserRank;
|
import com.yeshi.fanli.entity.integral.CodePublishRecord;
|
import com.yeshi.fanli.entity.integral.IntegralExchange;
|
import com.yeshi.fanli.entity.integral.IntegralTaskClass;
|
import com.yeshi.fanli.entity.integral.IntegralTaskClass.UniqueKeyEnum;
|
import com.yeshi.fanli.entity.integral.IntegralTaskRecord;
|
import com.yeshi.fanli.exception.integral.IntegralExchangeException;
|
import com.yeshi.fanli.exception.integral.IntegralTaskRecordException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.integral.CodePublishRecordService;
|
import com.yeshi.fanli.service.inter.integral.IntegralExchangeRecordService;
|
import com.yeshi.fanli.service.inter.integral.IntegralExchangeService;
|
import com.yeshi.fanli.service.inter.integral.IntegralTaskClassService;
|
import com.yeshi.fanli.service.inter.integral.IntegralTaskRecordService;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.vo.integral.DailySignVO;
|
import com.yeshi.fanli.vo.integral.ExchangeTipVO;
|
import com.yeshi.fanli.vo.integral.IntegralTaskClassVO;
|
import com.yeshi.fanli.vo.user.UserInfoExtraVO;
|
|
import net.sf.json.JSONObject;
|
|
@Controller
|
@RequestMapping("api/v2/integral")
|
public class IntegralControllerV2 {
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private IntegralTaskClassService integralTaskClassService;
|
|
@Resource
|
private IntegralTaskRecordService integralTaskRecordService;
|
|
@Resource
|
private IntegralExchangeService integralExchangeService;
|
|
@Resource
|
private IntegralExchangeRecordService integralExchangeRecordService;
|
|
@Resource
|
private CodePublishRecordService codePublishRecordService;
|
|
/**
|
* 获取任务列表
|
*
|
* @param acceptData
|
* @param uid
|
* @param page
|
* @param out
|
*/
|
@RequestMapping(value = "getTaskList", method = RequestMethod.POST)
|
public void getTaskList(AcceptData acceptData, Long uid, Integer page, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if (page == null || page < 1) {
|
out.print(JsonUtil.loadFalseResult(1, "页码不正确"));
|
return;
|
}
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
try {
|
JSONObject data = new JSONObject();
|
List<IntegralTaskClassVO> list = integralTaskClassService.getIntegralTaskClassVO(uid,
|
(page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE);
|
if (list == null) {
|
list = new ArrayList<IntegralTaskClassVO>();
|
}
|
long count = integralTaskClassService.countTaskClass();
|
|
if (page == 1) {
|
UserInfoExtraVO extraVO = userInfoExtraService.getInfoExtraVOByUid(uid);
|
if (extraVO == null) {
|
out.print(JsonUtil.loadFalseResult(1, "用户相关信息不存在"));
|
return;
|
}
|
|
UserInfo userInfo = extraVO.getUserInfo();
|
if (userInfo == null) {
|
out.print(JsonUtil.loadFalseResult(1, "查询用户信息不全"));
|
return;
|
}
|
|
UserRank userRank = extraVO.getUserRank();
|
if (userRank == null) {
|
out.print(JsonUtil.loadFalseResult(1, "用户等级不存在"));
|
return;
|
}
|
|
boolean signState = false;
|
IntegralTaskClass taskClass = integralTaskClassService.getByUniqueKey(UniqueKeyEnum.dailySign.name());
|
if (taskClass != null)
|
signState = integralTaskRecordService.isToDaySign(uid, taskClass.getId());
|
|
// 签到日期
|
DailySignVO dailySignVO = integralTaskClassService.getDailySignList(uid, userRank.getId());
|
data.put("signState", signState);
|
data.put("goldCoin", extraVO.getGoldCoin());
|
data.put("portrait", userInfo.getPortrait());
|
data.put("userRank", gson.toJson(userRank));
|
data.put("dailySign", dailySignVO);
|
}
|
|
data.put("count", count);
|
data.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
}
|
|
/**
|
* 获取已完成任务 未领取金币
|
*
|
* @param acceptData
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getNotReceived", method = RequestMethod.POST)
|
public void getNotReceived(AcceptData acceptData, Long uid, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
List<IntegralTaskRecord> list = integralTaskRecordService.listNotReceived(5, uid);
|
if (list == null) {
|
list = new ArrayList<IntegralTaskRecord>();
|
}
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
data.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 领取金币
|
*
|
* @param acceptData
|
* @param uid
|
* @param ids
|
* @param out
|
*/
|
@RequestMapping(value = "receiveGoldCoin", method = RequestMethod.POST)
|
public void receiveGoldCoin(AcceptData acceptData, Long uid, String ids, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
Gson gson = new Gson();
|
Set<Long> idList = gson.fromJson(ids, new TypeToken<HashSet<Long>>() {
|
}.getType());
|
if (idList == null || idList.size() == 0) {
|
out.print(JsonUtil.loadFalseResult("领取id不能为空"));
|
return;
|
}
|
|
try {
|
Integer goldCoin = integralTaskRecordService.receiveGoldCoin(uid, idList);
|
JSONObject data = new JSONObject();
|
data.put("goldCoin", goldCoin);
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (IntegralTaskRecordException e) {
|
out.print(JsonUtil.loadFalseResult(e.getMsg()));
|
}
|
}
|
|
/**
|
* 金币兑换列表
|
*
|
* @param acceptData
|
* @param uid
|
* @param ids
|
* @param out
|
*/
|
@RequestMapping(value = "getExchangeList", method = RequestMethod.POST)
|
public void getExchangeList(AcceptData acceptData, Long uid, Integer page, PrintWriter out) {
|
if (uid == null || uid <= 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if (page == null || page < 1) {
|
out.print(JsonUtil.loadFalseResult(1, "页码不正确"));
|
return;
|
}
|
|
UserInfoExtraVO extraVO = userInfoExtraService.getInfoExtraVOByUid(uid);
|
if (extraVO == null) {
|
out.print(JsonUtil.loadFalseResult(1, "用户相关信息不存在"));
|
return;
|
}
|
|
List<IntegralExchange> list = integralExchangeRecordService.listExchange((page - 1) * Constant.PAGE_SIZE,
|
Constant.PAGE_SIZE, uid);
|
if (list == null)
|
list = new ArrayList<IntegralExchange>();
|
|
Long count = integralExchangeService.countValid();
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
data.put("goldCoin", extraVO.getGoldCoin() + "枚");
|
data.put("count", count);
|
data.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 兑换金币检验
|
*
|
* @param acceptData
|
* @param uid
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "verifyExchange", method = RequestMethod.POST)
|
public void verifyExchange(AcceptData acceptData, Long uid, Long id, PrintWriter out) {
|
try {
|
ExchangeTipVO exchange = integralExchangeService.verifyExchange(uid, id);
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
data.put("result", gson.toJson(exchange));
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (IntegralExchangeException e) {
|
out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
|
}
|
}
|
|
/**
|
* 兑换金币
|
*
|
* @param acceptData
|
* @param uid
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "exchange", method = RequestMethod.POST)
|
public void exchange(AcceptData acceptData, Long uid, Long id, PrintWriter out) {
|
try {
|
IntegralExchange exchange = integralExchangeService.exchange(uid, id);
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
data.put("result", gson.toJson(exchange));
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (IntegralExchangeException e) {
|
out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
|
}
|
}
|
|
/**
|
* 兑换金币检验-邀请码
|
*
|
* @param acceptData
|
* @param uid
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "verifyInviteCode", method = RequestMethod.POST)
|
public void verifyInviteCode(AcceptData acceptData, Long uid, Long id, PrintWriter out) {
|
try {
|
ExchangeTipVO exchange = integralExchangeService.verifyInviteCode(uid, id);
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
data.put("result", gson.toJson(exchange));
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (IntegralExchangeException e) {
|
out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
|
}
|
}
|
|
/**
|
* 兑换金币-邀请码
|
*
|
* @param acceptData
|
* @param uid
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "exchangeInviteCode", method = RequestMethod.POST)
|
public void exchangeInviteCode(AcceptData acceptData, Long uid, Long id, PrintWriter out) {
|
try {
|
integralExchangeService.exchangeInviteCode(uid, id);
|
out.print(JsonUtil.loadTrueResult("邀请码激活成功"));
|
} catch (IntegralExchangeException e) {
|
out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
|
}
|
}
|
|
/**
|
* 邀请码发布列表
|
*
|
* @param acceptData
|
* @param page
|
* @param out
|
*/
|
@RequestMapping(value = "getPublishList", method = RequestMethod.POST)
|
public void getPublishList(AcceptData acceptData, Integer page, PrintWriter out) {
|
if (page == null || page < 1) {
|
out.print(JsonUtil.loadFalseResult(1, "页码不正确"));
|
return;
|
}
|
|
List<CodePublishRecord> list = codePublishRecordService.listValid((page - 1) * Constant.PAGE_SIZE,
|
Constant.PAGE_SIZE);
|
if (list == null) {
|
list = new ArrayList<CodePublishRecord>();
|
}
|
|
long count = codePublishRecordService.countValid();
|
|
JSONObject data = new JSONObject();
|
data.put("count", count);
|
data.put("list", getGson().toJson(list));
|
data.put("helpLink", configService.get("publish_list_help_link"));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 事件推送
|
*
|
* @param acceptData
|
* @param event
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "pushEvent", method = RequestMethod.POST)
|
public void pushEvent(AcceptData acceptData, String event, Long uid, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult("用户尚未登录"));
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(event)) {
|
out.print(JsonUtil.loadFalseResult("事件为空"));
|
return;
|
}
|
|
JSONObject data = new JSONObject();
|
if ("recommendSearch".equalsIgnoreCase(event) || "scanGoods".equalsIgnoreCase(event)
|
|| "scanTBCart".equalsIgnoreCase(event)) {
|
JSONObject notify = new JSONObject();
|
switch (event) {
|
|
case "recommendSearch":
|
notify.put("name", "完成一次智能搜索");
|
notify.put("score", "+20金币");
|
break;
|
case "scanGoods":
|
notify.put("name", "完成一次商品浏览");
|
notify.put("score", "+100金币");
|
break;
|
case "scanTBCart":
|
notify.put("name", "完成一次购物车浏览");
|
notify.put("score", "+300金币");
|
break;
|
}
|
|
data.put("notify", notify);
|
}
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 时间处理
|
*
|
* @return
|
*/
|
private Gson getGson() {
|
GsonBuilder gb = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
|
gb.excludeFieldsWithoutExposeAnnotation();
|
gb.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
|
@Override
|
public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
|
String desc = "";
|
if (value != null) {
|
// 判断是否是同一天
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(value);
|
int y1 = calendar.get(Calendar.YEAR);// 获取年份
|
int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
|
|
Date nowDate = new Date();
|
Calendar calendar2 = Calendar.getInstance();
|
calendar2.setTime(nowDate);
|
int y2 = calendar2.get(Calendar.YEAR);// 获取年份
|
int d2 = calendar2.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
|
|
long old = value.getTime();
|
long now = nowDate.getTime();
|
if (y1 == y2) {
|
if (d1 == d2) {
|
long cha = now - old;
|
if (cha < 1000 * 60 * 2L) {
|
desc = "刚刚";
|
} else if (cha < 1000 * 60 * 60L) {
|
desc = (cha / (1000 * 60)) + "分钟前";
|
} else {
|
desc = (cha / (1000 * 60 * 60)) + "小时前";
|
}
|
} else if (d2 - d1 == 1) {
|
desc = "昨天";
|
} else {
|
desc = (d2 - d1) + "天前";
|
}
|
} else {
|
int timeDistance = 0;
|
for (int i = y1; i < y2; i++) {
|
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
|
timeDistance += 366; // 闰年
|
} else {
|
timeDistance += 365; // 不是闰年
|
}
|
}
|
desc = timeDistance + (d2 - d1) + "天前";
|
}
|
|
return new JsonPrimitive(desc);
|
}
|
|
return new JsonPrimitive("");
|
}
|
});
|
|
Gson gson = gb.create();
|
return gson;
|
}
|
|
}
|