package com.yeshi.fanli.controller.client.v1;
|
|
import java.io.PrintWriter;
|
import java.util.ArrayList;
|
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.bus.activity.ActivityUser;
|
import com.yeshi.fanli.entity.common.JumpDetailV2;
|
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
|
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.DeviceTokenVIVO;
|
import com.yeshi.fanli.entity.push.DeviceTokenXM;
|
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.entity.system.ConfigKeyEnum;
|
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.dynamic.GoodsEvaluateService;
|
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.DeviceTokenVIVOService;
|
import com.yeshi.fanli.service.inter.push.DeviceTokenXMService;
|
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 com.yeshi.fanli.vo.msg.ClientTextStyleVO;
|
import com.yeshi.fanli.vo.push.PushRecommendVO;
|
|
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;
|
|
@Resource
|
private DeviceTokenVIVOService deviceTokenVIVOService;
|
|
@Resource
|
private DeviceTokenXMService deviceTokenXMService;
|
|
@Resource
|
private GoodsEvaluateService goodsEvaluateService;
|
|
|
@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;
|
JSONArray resultList = new JSONArray();
|
DeviceActive deviceActive = deviceActiveService.getDeviceByDeviceAndPlatform(acceptData.getDevice(),
|
deviceToken, acceptData.getPlatform());
|
|
if (deviceActive == null) {
|
JSONObject resultJson = new JSONObject();
|
resultJson.put("count", count);
|
resultJson.put("result_list", resultList);
|
out.print(JsonUtil.loadTrueResult(resultJson));
|
return;
|
}
|
|
// 设备注册时间
|
Date createTime = deviceActive.getCreateTime();
|
count = pushGoodsService.countHistoryByPushTime(uid, createTime);
|
|
int pageSize = Constant.PAGE_SIZE;
|
List<PushGoods> list = pushGoodsService.listHistoryByPushTime((page - 1) * pageSize, pageSize, uid, createTime);
|
if (list == null)
|
list = new ArrayList<>();
|
|
for (PushGoods pushGoods : list) {
|
Long id = pushGoods.getId();
|
|
PushRecommendVO vo = new PushRecommendVO();
|
vo.setTitle(pushGoods.getTitle());
|
vo.setContent(pushGoods.getContent());
|
vo.setPicture(pushGoods.getPicture());
|
vo.setPushtime(pushGoods.getPushTime().getTime());
|
|
Integer scanNum = pushGoods.getScanNum();
|
if (scanNum == null) {
|
vo.setScanNum("0");
|
} else if (scanNum >= 10000) {
|
double num = scanNum;
|
String numMidea = String.format("%.1f", num / 10000);
|
vo.setScanNum(numMidea + "万");
|
} else {
|
vo.setScanNum(scanNum +"");
|
}
|
|
|
String params = "";
|
String nickName = "";
|
JumpDetailV2 jumpDetail = null;
|
List<ClientTextStyleVO> totalwords = new ArrayList<ClientTextStyleVO>();
|
|
Integer type = pushGoods.getType();
|
if (type == null || type == PushGoods.TYPE_GOODS) {
|
long totalgoods = 0;
|
CommonGoods goods = null;
|
try {
|
List<PushGoodsGroup> listGroup = pushGoodsGroupService.getAllInfoByPushId(id);
|
if (listGroup != null && listGroup.size() > 0) {
|
totalgoods = listGroup.size();
|
PushGoodsGroup pushGoodsGroup = listGroup.get(0);
|
if (pushGoodsGroup != null) {
|
goods = pushGoodsGroup.getCommonGoods();
|
}
|
}
|
} catch (PushGoodsGroupException e) {
|
e.printStackTrace();
|
}
|
|
if (goods != null && StringUtil.isNullOrEmpty(vo.getPicture())) {
|
vo.setPicture(TbImgUtil.getTBSize320Img(goods.getPicture()));
|
}
|
|
if (totalgoods == 1) {
|
params = JumpDetailParamsFactory.createGoodsParams(goods.getGoodsId(), goods.getGoodsType());
|
jumpDetail = jumpDetailV2Service.getByTypeCache("goodsdetail",Constant.getPlatformCode(acceptData.getPlatform()),
|
Integer.parseInt(acceptData.getVersion()));
|
} else {
|
String url = configService.get(ConfigKeyEnum.pushGoodsDetails.getKey());
|
if (url == null) {
|
url = "";
|
}
|
url = url + "?id=" + id;
|
|
params = JumpDetailParamsFactory.createWEBParams(url);
|
jumpDetail = jumpDetailV2Service.getByTypeCache("web",Constant.getPlatformCode(acceptData.getPlatform()),
|
Integer.parseInt(acceptData.getVersion()));
|
}
|
|
totalwords.add(new ClientTextStyleVO("本次推荐共", "#666666"));
|
totalwords.add(new ClientTextStyleVO(totalgoods + "", "#E5005C"));
|
totalwords.add(new ClientTextStyleVO("个商品", "#666666"));
|
} else if (type == PushGoods.TYPE_ACTIVITY) {
|
GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(pushGoods.getOtherId());
|
if (goodsEvaluate != null) {
|
ActivityUser user = goodsEvaluate.getUser();
|
if (user != null) {
|
nickName = user.getNickName();
|
}
|
}
|
|
String url = configService.get(ConfigKeyEnum.pushActivityLink.getKey());
|
if (url == null) {
|
url = "";
|
}
|
url = url + "?id=" + id + "&otherId=" + pushGoods.getOtherId();
|
params = JumpDetailParamsFactory.createWEBParams(url);
|
jumpDetail = jumpDetailV2Service.getByTypeCache("web",
|
Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()));
|
} else {
|
continue;
|
}
|
vo.setNickName(nickName);
|
vo.setParams(params);
|
vo.setJumpDetail(jumpDetail);
|
vo.setTotalwords(totalwords);
|
resultList.add(vo);
|
}
|
|
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(""));
|
}
|
|
@RequestMapping("registerVivo")
|
public void registerVivo(AcceptData acceptData, String regId, Long uid, PrintWriter out) {
|
DeviceActive deviceActive = deviceActiveService.getFirstActiveInfo(acceptData.getDevice());
|
if (deviceActive != null) {
|
DeviceTokenVIVO vivo = new DeviceTokenVIVO();
|
vivo.setDeviceActiveId(deviceActive.getId());
|
vivo.setRegisterId(regId);
|
vivo.setUid(uid);
|
deviceTokenVIVOService.addDeviceTokenVIVO(vivo);
|
}
|
out.print(JsonUtil.loadTrueResult(""));
|
}
|
|
@RequestMapping("registerXM")
|
public void registerXM(AcceptData acceptData, String regId, Long uid, PrintWriter out) {
|
DeviceActive deviceActive = deviceActiveService.getFirstActiveInfo(acceptData.getDevice());
|
if (deviceActive != null) {
|
DeviceTokenXM xm = new DeviceTokenXM();
|
xm.setDeviceActiveId(deviceActive.getId());
|
xm.setRegisterId(regId);
|
xm.setUid(uid);
|
deviceTokenXMService.addDeviceToken(xm);
|
}
|
out.print(JsonUtil.loadTrueResult(""));
|
}
|
|
}
|