admin
2020-01-17 81a2c8e297787cc7dc405d6db4972cb917cd80b5
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMsgController.java
@@ -39,9 +39,11 @@
import com.yeshi.fanli.entity.bus.msg.MsgInviteDetail;
import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail;
import com.yeshi.fanli.entity.bus.msg.MsgOrderDetail;
import com.yeshi.fanli.entity.bus.msg.MsgOrderDetail.MsgTypeOrderTypeEnum;
import com.yeshi.fanli.entity.bus.msg.MsgOtherDetail;
import com.yeshi.fanli.entity.bus.msg.UserMsgUnReadNum;
import com.yeshi.fanli.entity.bus.msg.UserSystemMsg;
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;
@@ -59,23 +61,28 @@
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.msg.MsgAccountDetailService;
import com.yeshi.fanli.service.inter.money.msg.MsgMoneyDetailService;
import com.yeshi.fanli.service.inter.msg.MsgConfigService;
import com.yeshi.fanli.service.inter.msg.MsgDeviceReadStateService;
import com.yeshi.fanli.service.inter.msg.MsgInviteDetailService;
import com.yeshi.fanli.service.inter.msg.MsgMoneyDetailService;
import com.yeshi.fanli.service.inter.msg.MsgOrderDetailService;
import com.yeshi.fanli.service.inter.msg.MsgOtherDetailService;
import com.yeshi.fanli.service.inter.msg.UserMsgReadStateService;
import com.yeshi.fanli.service.inter.msg.UserSystemMsgService;
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.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.VersionUtil;
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;
@@ -151,6 +158,9 @@
   @Resource
   private MsgDeviceReadStateService msgDeviceReadStateService;
   @Resource
   private UserInfoExtraService userInfoExtraService;
   // 消息的类型
   final static String MSG_TYPE_ORDER = "order";
   final static String MSG_TYPE_MONEY = "money";
@@ -189,8 +199,15 @@
         List<MsgOrderDetail> detailList = msgOrderDetailService.listMsgOrderDetail(uid, page);
         count = msgOrderDetailService.countMsgOrderDetail(uid);
         if (detailList != null)
            for (MsgOrderDetail detail : detailList)
               list.add(UserMsgVOFactory.create(detail));
            for (MsgOrderDetail detail : detailList) {
               JSONObject params = new JSONObject();
               params.put("orderNo", detail.getOrderId());
               if (detail.getType() == MsgTypeOrderTypeEnum.share
                     || detail.getType() == MsgTypeOrderTypeEnum.invite)
                  params.put("orderHideNo", UserUtil.filterOrderId(detail.getOrderId()));
               list.add(UserMsgVOFactory.create(detail, jumpDetailV2Service.getByTypeCache("order_search"),
                     params));
            }
         break;
      case MSG_TYPE_MONEY:
         userMsgReadStateService.readMoneyMsg(uid);
@@ -251,6 +268,7 @@
    * @param uid
    * @param out
    */
   @RequestSerializableByKey(key = "#acceptData.device")
   @RequestMapping(value = "getUnReadMsgCount", method = RequestMethod.POST)
   public void getUnReadMsgCount(AcceptData acceptData, Long uid, PrintWriter out) {
      GsonBuilder androidBuilder = new GsonBuilder().registerTypeAdapter(Integer.class,
@@ -292,9 +310,14 @@
               data.put("totalCount", 0);
            }
         } catch (UserCustomSettingsException e) {
            e.printStackTrace();
         }
         if (VersionUtil.greaterThan_1_5_50(acceptData.getPlatform(), acceptData.getVersion())) {
            int totalCount = msgDeviceReadStateService.getUnReadCount(acceptData.getDevice(),
                  "android".equalsIgnoreCase(acceptData.getPlatform()) ? 1 : 2, MsgDeviceReadState.TYPE_KEFU);
            data.put("totalCount", totalCount);
         }
         data.put("mineCount", 0);
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
@@ -303,6 +326,12 @@
      int totalCount = num.getTypeAccount() + num.getTypeInvite() + num.getTypeMoney() + num.getTypeOrder()
            + num.getTypeScore() + num.getTypeSystem() + num.getTypeOther();
      // 1.5.50及以后的版本需要添加设备未读消息
      if (VersionUtil.greaterThan_1_5_50(acceptData.getPlatform(), acceptData.getVersion())) {
         totalCount += msgDeviceReadStateService.getUnReadCount(acceptData.getDevice(),
               "android".equalsIgnoreCase(acceptData.getPlatform()) ? 1 : 2, MsgDeviceReadState.TYPE_KEFU);
      }
      JSONObject data = null;
      if ("android".equalsIgnoreCase(acceptData.getPlatform())) {
         data = JSONObject.fromObject(androidBuilder.excludeFieldsWithoutExposeAnnotation().create().toJson(num));
@@ -310,6 +339,18 @@
         data = JSONObject.fromObject(JsonUtil.getApiCommonGson().toJson(num));
      }
      data.put("totalCount", totalCount);
      // "我的"选项角标
      int welfareCenterNews = 0;
      if (uid != null) {
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
         if (userInfoExtra != null) {
            if (userInfoExtra.getCouponNews() != null) {
               welfareCenterNews = userInfoExtra.getCouponNews();
            }
         }
      }
      data.put("mineCount", welfareCenterNews);
      try {
         UserSettingsVO vo = userCustomSettingsService.getMySettings(uid);
@@ -363,7 +404,7 @@
   }
   private void addRecommendGoods(Long uid, String device, String imei, String idfa) {
      TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(1, 50, imei, idfa);
      TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(1, 50, imei, idfa,"");
      if (result != null && result.getTaoBaoGoodsBriefs() != null) {
         for (int i = 0; i < result.getTaoBaoGoodsBriefs().size(); i++) {
            if (result.getTaoBaoGoodsBriefs().get(i).getCouponAmount() == null
@@ -452,6 +493,9 @@
   public void getHomeMsgList(AcceptData acceptData, Long uid, int page, HttpSession session, PrintWriter out) {
      if (uid != null && uid == 0)
         uid = null;
      if (uid != null)
         userSystemMsgService.syncSystemZNX(uid);
      String device = acceptData.getDevice();
      if (device == null || device.trim().length() == 0) {
         out.print(JsonUtil.loadFalseResult("设备号不能为空"));
@@ -476,7 +520,7 @@
         }
         // String key = "recommend-goods-user-" + uid;
         String key = "recommend-goods-user-" + device;
         String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.recommendGoodsUser, device);
         if (Constant.IS_OUTNET) {
            if (canAdd && StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) {
               if (Constant.IS_OUTNET)
@@ -551,7 +595,9 @@
         // 创建时间在28号后的才有新人欢迎
         if ((time > TimeUtil.convertToTimeTemp("2019-01-28", "yyyy-MM-dd") || uid == null)) {
            UserHomeMsgVO vo = new UserHomeMsgVO();
            vo.setContent("恭喜你,成为返利券的用户\n独家优惠券帮你省钱;\n参与奖金活动帮你赚钱;\n让返利券成为你的省钱助手吧!");
            vo.setContent(String.format("恭喜你,成为%s的用户\n独家优惠券帮你省钱;\n参与奖金活动帮你赚钱;\n让%s成为你的省钱助手吧!",
                  Constant.getAppName(acceptData.getPlatform(), acceptData.getVersion()),
                  Constant.getAppName(acceptData.getPlatform(), acceptData.getVersion())));
            vo.setTitle("新人欢迎");
            vo.setCreateTime(getTimeDesc(now, new Date(time)));
            vo.setType(UserHomeMsgVO.TYPE_WELCOME);
@@ -592,7 +638,15 @@
            vo.setRead(false);
         else
            vo.setRead(true);
      }
         if (kefuState.getLatestContentTime() != null)
            vo.setTime(kefuState.getLatestContentTime());
      } else
         vo.setRead(true);
      if (StringUtil.isNullOrEmpty(vo.getLatestMsg()))
         vo.setLatestMsg("[点击打开人工客服]");
      return vo;
   }
@@ -606,10 +660,14 @@
    * @param type
    * @param out
    */
   @RequestSerializableByKey(key = "#acceptData.device")
   @RequestMapping(value = "getHomeMsgListNew", method = RequestMethod.POST)
   public void getHomeMsgListNew(AcceptData acceptData, Long uid, PrintWriter out) {
      if (uid != null && uid == 0)
         uid = null;
      if (uid != null) {
         userSystemMsgService.syncSystemZNX(uid);
      }
      List<UserMsgCenter> listCenter = new ArrayList<>();
@@ -638,7 +696,7 @@
         }
      }
      // 返利券小助手
      // 板栗快省小助手
      MsgCommonDTO zhuShouMsg = msgConfigService.getZhuShouMsg();
      if (zhuShouMsg != null && zhuShouMsg.getShow() == true) {
         boolean read = false;
@@ -675,11 +733,11 @@
                  acceptData.getPlatform().equalsIgnoreCase("android") ? 1 : 2);
            boolean read = false;
            if (state != null && state.getReadTime() != null
                  && list.get(0).getCreateTime().getTime() < state.getReadTime().getTime())
                  && list.get(0).getPushTime().getTime() < state.getReadTime().getTime())
               read = true;
            commonMsgList.add(new UserCommonMsgVO("http://img.flqapp.com/resource/msg/icon_recommend.png", "推荐记录",
                  list.get(0).getCreateTime(), UserCommonMsgVO.TYPE_RECOMMEND, list.get(0).getContent(), read,
                  list.get(0).getPushTime(), UserCommonMsgVO.TYPE_RECOMMEND, list.get(0).getContent(), read,
                  jumpDetailV2Service.getByTypeCache("recommend_list"), null, 0));
         }
      }
@@ -689,7 +747,10 @@
      // list = pushGoodsService.listHistoryByPushTime(0, 1, uid, createTime);
      // 1、活动区域
      List<Special> listSpecial = specialService.listByPlaceKey("msg_activities");
      int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
      List<Special> listSpecial = specialService.listByPlaceKey("msg_activities", platformCode,
            Integer.parseInt(acceptData.getVersion()));
      if (listSpecial != null && listSpecial.size() > 0) {
         for (Special special : listSpecial) {
@@ -713,7 +774,13 @@
         List<MsgOrderDetail> detailList = msgOrderDetailService.listMsgOrderDetail(uid, page);
         if (detailList != null && detailList.size() > 0) {
            for (MsgOrderDetail detail : detailList) {
               UserMsgVO userMsgVO = UserMsgVOFactory.create(detail);
               JSONObject params = new JSONObject();
               params.put("orderNo", detail.getOrderId());
               if (detail.getType() == MsgTypeOrderTypeEnum.share
                     || detail.getType() == MsgTypeOrderTypeEnum.invite)
                  params.put("orderHideNo", UserUtil.filterOrderId(detail.getOrderId()));
               UserMsgVO userMsgVO = UserMsgVOFactory.create(detail,
                     jumpDetailV2Service.getByTypeCache("order_search"), params);
               userMsgVO.setType(MSG_TYPE_ORDER);
               list.add(userMsgVO);
            }
@@ -781,7 +848,10 @@
      if ((time > TimeUtil.convertToTimeTemp("2019-01-28", "yyyy-MM-dd") || uid == null)) {
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("title", "新人欢迎");
         map.put("content", "恭喜你,成为返利券的用户\n独家优惠券帮你省钱;\n参与奖金活动帮你赚钱;\n让返利券成为你的省钱助手吧!");
         map.put("content",
               String.format("恭喜你,成为%s的用户\n独家优惠券帮你省钱;\n参与奖金活动帮你赚钱;\n让%s成为你的省钱助手吧!",
                     Constant.getAppName(acceptData.getPlatform(), acceptData.getVersion()),
                     Constant.getAppName(acceptData.getPlatform(), acceptData.getVersion())));
         map.put("createTime", new Date(time));
         UserMsgCenter msgCenternre = new UserMsgCenter();
         msgCenternre.setWelcomeMsg(map);
@@ -807,6 +877,30 @@
         }
      }
      /**
       * 提醒大图
       */
      if (!"douyin".equalsIgnoreCase(acceptData.getChannel())) {
         MsgCommonDTO notify = msgConfigService.getNotifyMsg();
         if (notify != null && notify.getShow() == true) {
            boolean read = false;
            MsgDeviceReadState state = msgDeviceReadStateService.getByDeviceAndPlatformAndType(
                  UserCommonMsgVO.TYPE_NOTIFY, acceptData.getDevice(),
                  acceptData.getPlatform().equalsIgnoreCase("android") ? 1 : 2);
            if (state != null && state.getReadTime() != null
                  && zhuShouMsg.getUpdateTime().getTime() < state.getReadTime().getTime())
               read = true;
            if (notify.getJumpDetail() == null)
               read = true;
            // 查询是否已读
            UserCommonMsgVO vo = new UserCommonMsgVO(notify.getIcon(), notify.getTitle(), notify.getUpdateTime(),
                  UserCommonMsgVO.TYPE_NOTIFY, notify.getContent(), read, notify.getJumpDetail(),
                  notify.getParams(), 0);
            vo.setPicture(notify.getPicture());
            root.put("notifyMsg", builder.create().toJson(vo));
         }
      }
      root.put("list", builder.create().toJson(listCenter));
      root.put("commonList", builder.create().toJson(commonMsgList));
      root.put("count", listCenter.size());
@@ -953,4 +1047,24 @@
      out.print(JsonUtil.loadTrueResult(""));
   }
   /**
    * 上传最近的客服消息
    *
    * @param acceptData
    * @param content
    * @param time
    * @param out
    */
   @RequestMapping(value = "uploadLatestKeFuMsg", method = RequestMethod.POST)
   public void uploadLatestKeFuMsg(AcceptData acceptData, String content, Long datetime, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(content) || datetime == null) {
         out.print(JsonUtil.loadFalseResult("参数不完整"));
         return;
      }
      msgDeviceReadStateService.addUnreadDeviceMsg(MsgDeviceReadState.TYPE_KEFU, acceptData.getDevice(),
            "android".equalsIgnoreCase(acceptData.getPlatform()) ? 1 : 2, 0, content, new Date(datetime));
      out.print(JsonUtil.loadTrueResult(""));
   }
}