package com.yeshi.fanli.controller.client.v1;
|
|
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 org.yeshi.utils.taobao.TbImgUtil;
|
|
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.DeviceTokenOPPO;
|
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.BusinessSystem;
|
import com.yeshi.fanli.exception.push.PushGoodsGroupException;
|
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
|
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.push.DeviceActiveService;
|
import com.yeshi.fanli.service.inter.push.DeviceTokenHWService;
|
import com.yeshi.fanli.service.inter.push.DeviceTokenOPPOService;
|
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.annotation.RequestSerializableByKey;
|
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 BusinessSystemService businessSystemService;
|
|
@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;
|
|
@Resource
|
private DeviceTokenOPPOService deviceTokenOPPOService;
|
|
@RequestMapping(value = "callback", method = RequestMethod.POST)
|
public void callback(AcceptData acceptData, String pushId, PrintWriter out) {
|
BusinessSystem system = businessSystemService.getBusinessSystemCache(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)) {
|
// 添加设备活跃记录
|
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
|
*/
|
@RequestSerializableByKey(key = "#acceptData.device")
|
@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)) {
|
// 添加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
|
*/
|
@RequestSerializableByKey(key = "#acceptData.device")
|
@RequestMapping(value = "/bindHWPush", method = RequestMethod.POST)
|
public void bindHWDeviceToken(AcceptData acceptData, String token, Long uid, PrintWriter out) {
|
deviceTokenHWService.addDeviceToken(token, acceptData.getDevice(), uid,
|
Integer.parseInt(acceptData.getVersion()));
|
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<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
|
CommonGoods commonGoods = 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 = pushGoodsGroup.getCommonGoods();
|
if (commonGoods != null) {
|
picture = commonGoods.getPicture();
|
}
|
}
|
}
|
} catch (PushGoodsGroupException e) {
|
e.printStackTrace();
|
}
|
}
|
|
result.put("picture", TbImgUtil.getTBSize320Img(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(commonGoods.getGoodsId(),
|
commonGoods.getGoodsType());
|
// 单个商品跳转商品详情
|
jumpDetail = jumpDetailV2Service.getByTypeCache("goodsdetail",
|
Constant.getPlatformCode(acceptData.getPlatform()),
|
Integer.parseInt(acceptData.getVersion()));
|
|
} else {
|
String url = configService.get("push_goods_details");
|
if (url == null) {
|
url = "";
|
}
|
url = url + "?id=" + pushId;
|
|
params = JumpDetailParamsFactory.createWEBParams(url);
|
|
// 跳转推荐详情
|
jumpDetail = jumpDetailV2Service.getByTypeCache("web",
|
Constant.getPlatformCode(acceptData.getPlatform()),
|
Integer.parseInt(acceptData.getVersion()));
|
}
|
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();
|
}
|
|
}
|
});
|
}
|
}
|
|
|
|
@RequestMapping("registerOppo")
|
public void registerOppo(AcceptData acceptData, String registerId, Long uid, PrintWriter out) {
|
DeviceActive deviceActive = deviceActiveService.getFirstActiveInfo(acceptData.getDevice());
|
if (deviceActive != null) {
|
DeviceTokenOPPO oppo = new DeviceTokenOPPO();
|
oppo.setDeviceActiveId(deviceActive.getId());
|
oppo.setRegisterId(registerId);
|
oppo.setUid(uid);
|
deviceTokenOPPOService.addDeviceTokenOPPO(oppo);
|
}
|
out.print(JsonUtil.loadTrueResult(""));
|
}
|
|
}
|