package com.yeshi.fanli.controller.client.v2;
|
|
import com.google.gson.*;
|
import com.yeshi.fanli.dto.msg.MsgCommonDTO;
|
import com.yeshi.fanli.entity.SystemEnum;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.homemodule.Special;
|
import com.yeshi.fanli.entity.bus.lable.QualityFactory;
|
import com.yeshi.fanli.entity.bus.msg.*;
|
import com.yeshi.fanli.entity.bus.msg.MsgOrderDetail.MsgTypeOrderTypeEnum;
|
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
|
import com.yeshi.fanli.entity.common.JumpDetailV2;
|
import com.yeshi.fanli.entity.goods.CommonGoods;
|
import com.yeshi.fanli.entity.goods.RecommendUserGoods;
|
import com.yeshi.fanli.entity.push.DeviceActive;
|
import com.yeshi.fanli.entity.push.PushGoods;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
|
import com.yeshi.fanli.exception.goods.CommonGoodsException;
|
import com.yeshi.fanli.exception.goods.RecommendUserGoodsException;
|
import com.yeshi.fanli.exception.msg.UserSystemMsgException;
|
import com.yeshi.fanli.exception.user.UserCustomSettingsException;
|
import com.yeshi.fanli.lijin.entity.MsgLijinVIPDetail;
|
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
|
import com.yeshi.fanli.service.inter.goods.RecommendUserGoodsService;
|
import com.yeshi.fanli.service.inter.homemodule.SpecialService;
|
import com.yeshi.fanli.service.inter.lable.QualityFactoryService;
|
import com.yeshi.fanli.service.inter.money.msg.MsgMoneyDetailService;
|
import com.yeshi.fanli.service.inter.msg.*;
|
import com.yeshi.fanli.service.inter.order.msg.MsgOrderDetailService;
|
import com.yeshi.fanli.service.inter.push.DeviceActiveService;
|
import com.yeshi.fanli.service.inter.push.PushGoodsService;
|
import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.service.inter.user.invite.MsgInviteDetailService;
|
import com.yeshi.fanli.service.inter.user.msg.MsgAccountDetailService;
|
import com.yeshi.fanli.util.*;
|
import com.yeshi.fanli.util.account.UserUtil;
|
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
|
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
|
import com.yeshi.fanli.util.factory.msg.UserMsgVOFactory;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
import com.yeshi.fanli.vo.msg.*;
|
import com.yeshi.fanli.vo.user.UserSettingsVO;
|
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
|
import net.sf.json.JSONObject;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.yeshi.utils.BigDecimalUtil;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.TimeUtil;
|
import org.yeshi.utils.taobao.TbImgUtil;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpSession;
|
import java.io.PrintWriter;
|
import java.lang.reflect.Type;
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
@Controller
|
@RequestMapping("api/v2/user/msg")
|
public class UserMsgControllerV2 {
|
|
@Resource
|
private UserMsgReadStateService userMsgReadStateService;
|
|
@Resource
|
private JumpDetailV2Service jumpDetailV2Service;
|
|
@Resource
|
private MsgOverViewsService msgOverViewsService;
|
|
@Resource
|
private ConfigService configService;
|
|
|
/**
|
* 获取消息列表
|
*
|
* @param acceptData
|
* @param uid
|
* @param page
|
* @param type
|
* @param out
|
*/
|
@RequestMapping(value = "getMsgList", method = RequestMethod.POST)
|
public void getMsgList(AcceptData acceptData, Long uid, int page, String type, PrintWriter out) {
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
List<MsgOverViews> list1 = msgOverViewsService.listByUid(uid, page, Constant.PAGE_SIZE);
|
long count = msgOverViewsService.countByUid(uid);
|
List<Object> msgList = msgOverViewsService.listDetail(list1);
|
userMsgReadStateService.setAllMsgRead(uid);
|
//检索overviews下的消息
|
List<UserMsgVO> list = new ArrayList<>();
|
|
for (Object obj : msgList) {
|
|
if (obj instanceof MsgOrderDetail) {
|
MsgOrderDetail detail = (MsgOrderDetail) obj;
|
JSONObject params = new JSONObject();
|
params.put("orderNo", detail.getOrderId());
|
if (detail.getType() == MsgTypeOrderTypeEnum.invite || detail.getType() == MsgTypeOrderTypeEnum.orderInvite)
|
params.put("orderHideNo", UserUtil.filterOrderId(detail.getOrderId()));
|
UserMsgVO msgVO = UserMsgVOFactory.create(detail, jumpDetailV2Service.getByTypeCache("order_search",acceptData.getSystem()), params);
|
msgVO.setType(MsgExtra.MSG_TYPE_ORDER);
|
list.add(msgVO);
|
} else if (obj instanceof MsgMoneyDetail) {
|
MsgMoneyDetail detail = (MsgMoneyDetail) obj;
|
UserMsgVO msgVO = UserMsgVOFactory.create(detail);
|
msgVO.setType(MsgExtra.MSG_TYPE_MONEY);
|
list.add(msgVO);
|
} else if (obj instanceof MsgAccountDetail) {
|
MsgAccountDetail detail = (MsgAccountDetail) obj;
|
UserMsgVO msgVO = UserMsgVOFactory.create(detail);
|
msgVO.setType(MsgExtra.MSG_TYPE_ACCOUNT);
|
list.add(msgVO);
|
} else if (obj instanceof MsgInviteDetail) {
|
MsgInviteDetail detail = (MsgInviteDetail) obj;
|
UserMsgVO vo = UserMsgVOFactory.create(detail);
|
if (vo != null) {
|
vo.setType(MsgExtra.MSG_TYPE_INVITE);
|
list.add(vo);
|
} else {
|
count--;
|
}
|
} else if (obj instanceof MsgOtherDetail) {
|
MsgOtherDetail detail = (MsgOtherDetail) obj;
|
UserMsgVO vo = UserMsgVOFactory.create(detail);
|
if (vo != null) {
|
vo.setType(MsgExtra.MSG_TYPE_OTHER);
|
list.add(vo);
|
} else {
|
count--;
|
}
|
} else if (obj instanceof MsgLijinVIPDetail) {
|
MsgLijinVIPDetail detail = (MsgLijinVIPDetail) obj;
|
JSONObject params = new JSONObject();
|
params.put("url", configService.getValue(ConfigKeyEnum.lijinVIPLink, acceptData.getSystem()));
|
UserMsgVO vo = UserMsgVOFactory.create(detail, jumpDetailV2Service.getByTypeCache("web",acceptData.getSystem()), params);
|
vo.setType(MsgExtra.MSG_TYPE_LIJIN_VIP);
|
list.add(vo);
|
} else if (obj instanceof UserSystemMsg) {
|
UserSystemMsg detail = (UserSystemMsg) obj;
|
UserMsgVO vo = UserMsgVOFactory.create(detail);
|
vo.setType(MsgExtra.MSG_TYPE_SYSTEM);
|
list.add(vo);
|
}
|
}
|
|
GsonBuilder builder = new GsonBuilder();
|
builder = getTimeDescJsonBuilder(builder);
|
JSONObject root = new JSONObject();
|
root.put("data", builder.create().toJson(list));
|
root.put("count", count);
|
out.print(JsonUtil.loadTrueResult(root));
|
}
|
|
|
private String getTimeDesc(Date nowDate, Date targetDate) {
|
Calendar now = Calendar.getInstance();
|
now.setTime(nowDate);
|
if (TimeUtil.getGernalTime(targetDate.getTime(), "yyyy-MM-dd")
|
.equalsIgnoreCase(TimeUtil.getGernalTime(now.getTimeInMillis(), "yyyy-MM-dd"))) {
|
return "今天 " + TimeUtil.getGernalTime(targetDate.getTime(), "HH:mm");
|
} else if (TimeUtil.getGernalTime(targetDate.getTime(), "yyyy-MM-dd")
|
.equalsIgnoreCase(TimeUtil.getGernalTime(now.getTimeInMillis() - 1000 * 60 * 60 * 24L, "yyyy-MM-dd"))) {
|
return "昨天 " + TimeUtil.getGernalTime(targetDate.getTime(), "HH:mm");
|
} else {
|
return TimeUtil.getGernalTime(targetDate.getTime(), "yyyy.MM.dd HH:mm");
|
}
|
}
|
|
private GsonBuilder getTimeDescJsonBuilder(GsonBuilder builder) {
|
builder = builder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
|
@Override
|
public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("");
|
} else {
|
Calendar now = Calendar.getInstance();
|
return new JsonPrimitive(getTimeDesc(new Date(now.getTimeInMillis()), value));
|
}
|
}
|
}).registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
|
@Override
|
public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("0");
|
} else {
|
return new JsonPrimitive(BigDecimalUtil.getWithNoZera(value).toString());
|
}
|
}
|
});
|
|
return builder;
|
}
|
|
|
}
|