yujian
2019-01-22 88b54772dbcf5ecab1e2316e4e4626ac901b8908
fanli/src/main/java/com/yeshi/fanli/controller/client/PushController.java
@@ -1,24 +1,43 @@
package com.yeshi.fanli.controller.client;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;
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.entity.accept.AcceptData;
import com.yeshi.fanli.entity.common.JumpDetailV2;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.push.DeviceActive;
import com.yeshi.fanli.entity.push.DeviceTokenIOS;
import com.yeshi.fanli.entity.push.PushGoods;
import com.yeshi.fanli.entity.push.PushGoodsGroup;
import com.yeshi.fanli.entity.push.PushGoodsRecord;
import com.yeshi.fanli.entity.system.System;
import com.yeshi.fanli.exception.push.PushGoodsGroupException;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemService;
import com.yeshi.fanli.service.inter.push.DeviceActiveService;
import com.yeshi.fanli.service.inter.push.DeviceTokenHWService;
import com.yeshi.fanli.service.inter.push.IOSPushService;
import com.yeshi.fanli.service.inter.push.PushGoodsGroupService;
import com.yeshi.fanli.service.inter.push.PushGoodsRecordService;
import com.yeshi.fanli.service.inter.push.PushGoodsService;
import com.yeshi.fanli.service.inter.push.PushRecordService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.factory.JumpDetailParamsFactory;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@Controller
@RequestMapping(value = "api/v1/push")
@@ -38,6 +57,27 @@
   @Resource
   private DeviceActiveService deviceActiveService;
   @Resource
   private PushService pushService;
   @Resource
   private PushGoodsService PushGoodsService;
   @Resource
   private PushGoodsGroupService pushGoodsGroupService;
   @Resource
   private PushGoodsRecordService pushGoodsRecordService;
   @Resource
   private JumpDetailV2Service jumpDetailV2Service;
   @Resource
   private ConfigService configService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   @RequestMapping(value = "callback", method = RequestMethod.POST)
   public void callback(AcceptData acceptData, String pushId, PrintWriter out) {
@@ -70,16 +110,10 @@
         da.setDeviceToken(deviceToken);
         da.setPlatform(DeviceActive.PLATFORM_IOS);
         da.setVersionCode(Integer.parseInt(acceptData.getVersion()));
         da.setDevice(acceptData.getDevice());
         deviceActiveService.addDeviceActive(da);
         DeviceTokenIOS deviceTokenIOS = iosPushService.getDeviceTokenByDeviceToken(deviceToken);
         if (deviceTokenIOS == null)
            iosPushService.addDeviceToken(null, Integer.parseInt(acceptData.getVersion()), deviceToken,
                  acceptData.getDevice());
         else {
            deviceTokenIOS.setDevice(acceptData.getDevice());
            iosPushService.updateDeviceToken(deviceTokenIOS);
         }
         iosPushService.addDeviceToken(null, Integer.parseInt(acceptData.getVersion()), deviceToken,
               acceptData.getDevice());
         out.print(JsonUtil.loadTrue(0, null, "成功"));
      }
   }
@@ -100,19 +134,11 @@
         da.setDeviceToken(deviceToken);
         da.setPlatform(DeviceActive.PLATFORM_IOS);
         da.setVersionCode(Integer.parseInt(acceptData.getVersion()));
         da.setDevice(acceptData.getDevice());
         deviceActiveService.addDeviceActive(da);
         // 添加token
         DeviceTokenIOS deviceTokenIOS = iosPushService.getDeviceTokenByDeviceToken(acceptData.getDevice());
         if (deviceTokenIOS != null) {
            deviceTokenIOS.setUid(uid);
            deviceTokenIOS.setDevice(acceptData.getDevice());
            deviceTokenIOS.setVersion(Integer.parseInt(acceptData.getVersion()));
            iosPushService.updateDeviceToken(deviceTokenIOS);
         } else {
            iosPushService.addDeviceToken(uid, Integer.parseInt(acceptData.getVersion()), deviceToken,
                  acceptData.getDevice());
         }
         out.print(JsonUtil.loadTrueResult(""));
         iosPushService.addDeviceToken(uid, Integer.parseInt(acceptData.getVersion()), deviceToken,
               acceptData.getDevice());
      }
   }
@@ -124,12 +150,8 @@
    */
   @RequestMapping(value = "/unBind", method = RequestMethod.POST)
   public void unBind(AcceptData acceptData, String deviceToken, PrintWriter out) {
      if (!StringUtil.isNullOrEmpty(deviceToken)) {
         DeviceTokenIOS deviceTokenIOS = iosPushService.getDeviceTokenByDeviceToken(deviceToken);
         if (deviceTokenIOS != null) {
            deviceTokenIOS.setUid(null);
            iosPushService.updateDeviceToken(deviceTokenIOS);
         }
      if (!StringUtil.isNullOrEmpty(acceptData.getDevice())) {
         iosPushService.unBindUidAndDevice(acceptData.getDevice());
         out.print(JsonUtil.loadTrue(0, null, "解绑成功"));
      }
   }
@@ -162,4 +184,161 @@
      out.print(JsonUtil.loadTrueResult("成功"));
   }
   /**
    * 解绑推送
    *
    * @param acceptData
    * @param out
    */
   @RequestMapping(value = "/gethistory", method = RequestMethod.POST)
   public void getHistory(AcceptData acceptData, Long uid, String deviceToken, int page, PrintWriter out) {
      long count = 0;
      List<PushGoods> list = null;
      JSONArray resultList = new JSONArray();
      DeviceActive deviceActive = deviceActiveService.getDeviceByDeviceAndPlatform(acceptData.getDevice(),
            deviceToken, acceptData.getPlatform());
      if (deviceActive != null) {
         // 设备注册时间
         Date createTime = deviceActive.getCreateTime();
         count = PushGoodsService.countHistoryByPushTime(uid, createTime);
         int pageSize = Constant.PAGE_SIZE;
         list = PushGoodsService.listHistoryByPushTime((page - 1) * pageSize, pageSize, uid, createTime);
         if (list != null && list.size() > 0) {
            for (PushGoods pushGoods : list) {
               JSONObject result = new JSONObject();
               Long pushId = pushGoods.getId();
               String picture = pushGoods.getPicture();
               String alertContent = pushGoods.getAlertContent();
               Date pushTime = pushGoods.getPushTime();
               result.put("content", alertContent);
               result.put("pushtime", pushTime.getTime());
               // 统计商品数量
               long totalgoods = 0;
               // 商品id
               Long auctionId = null;
               if (StringUtil.isNullOrEmpty(picture)) {
                  try {
                     List<PushGoodsGroup> listGroup = pushGoodsGroupService.getAllInfoByPushId(pushId);
                     if (listGroup != null && listGroup.size() > 0) {
                        totalgoods = listGroup.size();
                        PushGoodsGroup pushGoodsGroup = listGroup.get(0);
                        if (pushGoodsGroup != null) {
                           CommonGoods commonGoods = pushGoodsGroup.getCommonGoods();
                           if (commonGoods != null) {
                              picture = commonGoods.getPicture();
                              auctionId = commonGoods.getGoodsId();
                           }
                        }
                     }
                  } catch (PushGoodsGroupException e) {
                     e.printStackTrace();
                  }
               }
               result.put("picture", picture);
               String fontColor1 = "#666666";
               String fontColor2 = "#E5005C";
               JSONArray array = new JSONArray();
               JSONObject contentJson1 = new JSONObject();
               contentJson1.put("color", fontColor1);
               contentJson1.put("content", "本次推荐共");
               JSONObject contentJson2 = new JSONObject();
               contentJson2.put("color", fontColor2);
               contentJson2.put("content", totalgoods);
               JSONObject contentJson3 = new JSONObject();
               contentJson3.put("color", fontColor1);
               contentJson3.put("content", "个商品");
               array.add(contentJson1);
               array.add(contentJson2);
               array.add(contentJson3);
               result.put("totalwords", array);
               String params = "";
               JumpDetailV2 jumpDetail = null;
               if (totalgoods == 1) {
                  params = JumpDetailParamsFactory.createGoodsParams(auctionId);
                  // 单个商品跳转商品详情
                  jumpDetail = jumpDetailV2Service.getByTypeCache("goodsdetail");
               } else {
                  String url = configService.get("push_goods_details");
                  if (url == null) {
                     url = "";
                  }
                  url = url + "?id=" + pushId;
                  params = JumpDetailParamsFactory.createWEBParams(url);
                  // 跳转推荐详情
                  jumpDetail = jumpDetailV2Service.getByTypeCache("web");
               }
               result.put("params", params);
               result.put("jumpDetail", jumpDetail);
               resultList.add(result);
            }
         }
      }
      JSONObject resultJson = new JSONObject();
      resultJson.put("count", count);
      resultJson.put("result_list", resultList);
      out.print(JsonUtil.loadTrueResult(resultJson));
      // 列表参数、设备参数信息不为空
      if (list != null && list.size() > 0 && deviceActive != null) {
         final List<PushGoods> listPush = list;
         // 记录访问信息
         executor.execute(new Runnable() {
            @Override
            public void run() {
               try {
                  Long deviceId = deviceActive.getId();
                  for (PushGoods pushGoods : listPush) {
                     List<PushGoodsRecord> listRecord = pushGoodsRecordService
                           .listByPushIdAndDeviceId(pushGoods.getId(), deviceId);
                     if (listRecord != null && listRecord.size() > 0) {
                        continue; // 已被记录
                     }
                     PushGoodsRecord pushGoodsRecord = new PushGoodsRecord();
                     pushGoodsRecord.setCreateTime(new Date());
                     pushGoodsRecord.setPushGoods(pushGoods);
                     pushGoodsRecord.setDeviceActive(deviceActive);
                     pushGoodsRecordService.insert(pushGoodsRecord);
                  }
               } catch (Exception e) {
                  e.printStackTrace();
               }
            }
         });
      }
   }
}