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 com.ks.push.pojo.DO.BPushDeviceToken;
|
import com.ks.push.pojo.DO.PushPlatform;
|
import com.ks.push.service.BDeviceTokenService;
|
import org.apache.commons.beanutils.PropertyUtils;
|
import org.apache.dubbo.config.annotation.Reference;
|
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.google.gson.GsonBuilder;
|
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.dynamic.ImgInfo;
|
import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
|
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 org.yeshi.utils.TimeUtil;
|
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
|
import com.yeshi.fanli.util.factory.JumpDetailParamsFactory;
|
import com.yeshi.common.vo.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;
|
|
@Reference(version = "1.0", check = false)
|
private BDeviceTokenService bDeviceTokenService;
|
|
/**
|
* 店铺列表
|
*
|
* @param acceptData
|
* @param out
|
*/
|
@RequestMapping(value = "bindToken", method = RequestMethod.POST)
|
public void bindToken(AcceptData acceptData, Long uid, String type, String token, PrintWriter out) {
|
BPushDeviceToken deviceToken = new BPushDeviceToken();
|
deviceToken.setAppCode(acceptData.getSystem().name());
|
deviceToken.setDeviceId(StringUtil.isNullOrEmpty(acceptData.getUtdid()) ? acceptData.getDevice() : acceptData.getUtdid());
|
deviceToken.setBuildModel(acceptData.getDeviceType());
|
deviceToken.setBuildVersion(acceptData.getOsVersion());
|
deviceToken.setToken(token);
|
switch (type) {
|
case "huawei":
|
type = "hw";
|
break;
|
case "xiaomi":
|
type = "xm";
|
break;
|
case "meizu":
|
type = "mz";
|
break;
|
}
|
deviceToken.setType(PushPlatform.valueOf(type));
|
deviceToken.setUid(uid + "");
|
deviceToken.setVersionCode(Integer.parseInt(acceptData.getVersion()));
|
try {
|
bDeviceTokenService.save(deviceToken);
|
out.print(JsonUtil.loadTrueResult(""));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult("绑定出错:" + e.getMessage()));
|
e.printStackTrace();
|
}
|
}
|
|
|
|
@RequestMapping(value = "callback", method = RequestMethod.POST)
|
public void callback(AcceptData acceptData, String pushId, PrintWriter out) {
|
BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
|
acceptData.getPackages(),acceptData.getSystem());
|
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,acceptData.getSystem());
|
|
int pageSize = Constant.PAGE_SIZE;
|
List<PushGoods> list = pushGoodsService.listHistoryByPushTime((page - 1) * pageSize, pageSize, uid, createTime,acceptData.getSystem());
|
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()),acceptData.getSystem());
|
} else {
|
String url = configService.getValue(ConfigKeyEnum.pushGoodsDetails.getKey(),acceptData.getSystem());
|
if (url == null) {
|
url = "";
|
}
|
url = url + "?id=" + id;
|
|
params = JumpDetailParamsFactory.createWEBParams(url);
|
jumpDetail = jumpDetailV2Service.getByTypeCache("web",Constant.getPlatformCode(acceptData.getPlatform()),
|
Integer.parseInt(acceptData.getVersion()),acceptData.getSystem());
|
}
|
|
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) {
|
continue;
|
}
|
ActivityUser user = goodsEvaluate.getUser();
|
if (user != null) {
|
nickName = user.getNickName();
|
}
|
|
if (StringUtil.isNullOrEmpty(vo.getPicture()) && goodsEvaluate.getImgList() != null &&
|
goodsEvaluate.getImgList().size() > 0) {
|
for (ImgInfo tmgInfo: goodsEvaluate.getImgList()) {
|
if (tmgInfo.getType() == ImgEnum.img || tmgInfo.getType() == ImgEnum.activity) {
|
vo.setPicture(tmgInfo.getUrl());
|
}
|
}
|
}
|
|
String url = configService.getValue(ConfigKeyEnum.pushActivityLink.getKey(),acceptData.getSystem());
|
if (url == null) {
|
url = "";
|
}
|
url = url + "?id=" + id;
|
params = JumpDetailParamsFactory.createWEBParams(url);
|
jumpDetail = jumpDetailV2Service.getByTypeCache("web",
|
Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()),acceptData.getSystem());
|
} 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(""));
|
}
|
|
/**
|
* 获取推送活动详情
|
* @param callback
|
* @param acceptData
|
* @param uid
|
* @param id
|
* @param out
|
*/
|
@RequestMapping("getPushDetail")
|
public void getPushDetail(String callback, AcceptData acceptData, Long uid, Long id, PrintWriter out) {
|
if (uid == null || id == null) {
|
JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("参数不完整"));
|
return;
|
}
|
|
PushGoods pushGoods = pushGoodsService.selectByPrimaryKey(id);
|
if (pushGoods == null || StringUtil.isNullOrEmpty(pushGoods.getOtherId())) {
|
JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("该活动已下架"));
|
return;
|
}
|
|
GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(pushGoods.getOtherId());
|
if (goodsEvaluate == null) {
|
JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("该活动已下架"));
|
return;
|
}
|
|
String scanResult = null;
|
Integer scanNum = pushGoods.getScanNum();
|
if (scanNum == null) {
|
} else if (scanNum >= 10000) {
|
double num = scanNum;
|
String numMidea = String.format("%.1f", num / 10000);
|
scanResult = numMidea + "万";
|
} else {
|
scanResult = scanNum +"";
|
}
|
|
String jumpLink = configService.getValue(ConfigKeyEnum.activityDetailLink.getKey(),acceptData.getSystem()) + "?type=%s&id=%s";
|
jumpLink = String.format(jumpLink, "circle", goodsEvaluate.getId());
|
if (!StringUtil.isNullOrEmpty(goodsEvaluate.getJumpLink())) {
|
goodsEvaluate.setJumpLink(jumpLink);
|
}
|
|
List<ImgInfo> imgListNew = new ArrayList<>();
|
List<ImgInfo> imgList = goodsEvaluate.getImgList();
|
if (imgList != null && imgList.size() > 0) {
|
for (ImgInfo imgInfo: imgList) {
|
if (imgInfo.getType() != ImgEnum.img || imgInfo.getType() == ImgEnum.activity) {
|
ImgInfo imgInfoNew = new ImgInfo();
|
try {
|
PropertyUtils.copyProperties(imgInfoNew, imgInfo);
|
} catch (Exception e) {
|
e.printStackTrace();
|
continue;
|
}
|
|
if (!StringUtil.isNullOrEmpty(imgInfoNew.getActivityUrl())) {
|
imgInfoNew.setActivityUrl(jumpLink);
|
}
|
|
imgListNew.add(imgInfoNew);
|
continue;
|
}
|
imgListNew.add(imgInfo);
|
}
|
}
|
goodsEvaluate.setImgList(imgListNew);
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
|
JSONObject json = new JSONObject();
|
json.put("title", pushGoods.getTitle());
|
json.put("content", pushGoods.getContent());
|
json.put("pushTime", TimeUtil.formatDate(pushGoods.getPushTime()));
|
json.put("scanNum", scanResult);
|
json.put("detailInfo", gsonBuilder.create().toJson(goodsEvaluate));
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(json));
|
}
|
}
|