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.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") public class PushController { @Resource private SystemService systemService; @Resource private PushRecordService pushRecordService; @Resource private IOSPushService iosPushService; @Resource private DeviceTokenHWService deviceTokenHWService; @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) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult("不存在该系统")); return; } int platform = system.getPlatform(); if (platform == 1) { pushRecordService.increaseByAndroid(pushId); } else { pushRecordService.increaseByIOS(pushId); } out.print(JsonUtil.loadTrueResult("回调成功")); } /** * * 插入苹果推送的deviceToken * * @author mawurui createTime 2018年5月8日 下午4:15:44 * @param deviceToken */ @RequestMapping(value = "/insertDeviceToken", method = RequestMethod.POST) public void insertIOSDeviceToken(AcceptData acceptData, String deviceToken, PrintWriter out) { if (!StringUtil.isNullOrEmpty(acceptData.getDevice()) && !StringUtil.isNullOrEmpty(deviceToken)) { // 添加设备活跃记录 DeviceActive da = new DeviceActive(); da.setDeviceToken(deviceToken); da.setPlatform(DeviceActive.PLATFORM_IOS); da.setVersionCode(Integer.parseInt(acceptData.getVersion())); da.setDevice(acceptData.getDevice()); deviceActiveService.addDeviceActive(da); iosPushService.addDeviceToken(null, Integer.parseInt(acceptData.getVersion()), deviceToken, acceptData.getDevice()); out.print(JsonUtil.loadTrue(0, null, "成功")); } } /** * IOS推送 方法说明: 将用户id和deviceToken绑定 * * @author mawurui createTime 2018年5月8日 下午4:29:45 * @param uid * @param deviceToken */ @RequestMapping(value = "/uidBindDeviceToken", method = RequestMethod.POST) public void uidBindIOSDeviceToken(AcceptData acceptData, Long uid, String deviceToken, PrintWriter out) { if (uid != null && uid != 0 && !StringUtil.isNullOrEmpty(deviceToken)) { // 添加设备活跃记录 DeviceActive da = new DeviceActive(); da.setDeviceToken(deviceToken); da.setPlatform(DeviceActive.PLATFORM_IOS); da.setVersionCode(Integer.parseInt(acceptData.getVersion())); da.setDevice(acceptData.getDevice()); deviceActiveService.addDeviceActive(da); // 添加token iosPushService.addDeviceToken(uid, Integer.parseInt(acceptData.getVersion()), deviceToken, acceptData.getDevice()); } } /** * IOS推送 方法说明: 解绑 * * @author mawurui createTime 2018年5月9日 上午9:49:58 * @param deviceToken */ @RequestMapping(value = "/unBind", method = RequestMethod.POST) public void unBind(AcceptData acceptData, String deviceToken, PrintWriter out) { if (!StringUtil.isNullOrEmpty(acceptData.getDevice())) { iosPushService.unBindUidAndDevice(acceptData.getDevice()); out.print(JsonUtil.loadTrue(0, null, "解绑成功")); } } /** * 绑定华为推送 * * @param acceptData * @param token * -华为token * @param uid * -用户ID * @param out */ @RequestMapping(value = "/bindHWPush", method = RequestMethod.POST) public void bindHWDeviceToken(AcceptData acceptData, String token, Long uid, PrintWriter out) { deviceTokenHWService.addDeviceToken(token, acceptData.getDevice(), uid); out.print(JsonUtil.loadTrueResult("成功")); } /** * 解绑推送 * * @param acceptData * @param out */ @RequestMapping(value = "/unBindHWPush", method = RequestMethod.POST) public void unBindHWDeviceToken(AcceptData acceptData, PrintWriter out) { deviceTokenHWService.unBindDeviceToken(acceptData.getDevice()); 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 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 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 listPush = list; // 记录访问信息 executor.execute(new Runnable() { @Override public void run() { try { Long deviceId = deviceActive.getId(); for (PushGoods pushGoods : listPush) { List 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(); } } }); } } }