package com.yeshi.fanli.service.impl.push;
|
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.dao.mybatis.push.PushGoodsMapper;
|
import com.yeshi.fanli.entity.goods.CommonGoods;
|
import com.yeshi.fanli.entity.push.PushGoods;
|
import com.yeshi.fanli.entity.push.PushGoodsGroup;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.exception.PushException;
|
import com.yeshi.fanli.exception.push.PushGoodsException;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
|
import com.yeshi.fanli.service.inter.push.PushGoodsGroupService;
|
import com.yeshi.fanli.service.inter.push.PushGoodsService;
|
import com.yeshi.fanli.service.inter.push.PushService;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
|
import net.sf.json.JSONObject;
|
|
@Service
|
public class PushGoodsServiceImpl implements PushGoodsService {
|
|
@Resource
|
private PushService pushService;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private PushGoodsMapper pushGoodsMapper;
|
|
@Resource
|
private CommonGoodsService commonGoodsService;
|
|
@Resource
|
private PushGoodsGroupService pushGoodsGroupService;
|
|
@Override
|
public int deleteByPrimaryKey(Long id) throws PushGoodsException {
|
return pushGoodsMapper.deleteByPrimaryKey(id);
|
}
|
|
@Override
|
public int insert(PushGoods record) throws PushGoodsException {
|
return pushGoodsMapper.insert(record);
|
}
|
|
@Override
|
public int insertSelective(PushGoods record) throws PushGoodsException {
|
return pushGoodsMapper.insertSelective(record);
|
}
|
|
@Override
|
public PushGoods selectByPrimaryKey(Long id) throws PushGoodsException {
|
return pushGoodsMapper.selectByPrimaryKey(id);
|
}
|
|
@Override
|
public int updateByPrimaryKeySelective(PushGoods record) throws PushGoodsException {
|
return pushGoodsMapper.updateByPrimaryKeySelective(record);
|
}
|
|
@Override
|
public int updateByPrimaryKey(PushGoods record) throws PushGoodsException {
|
return pushGoodsMapper.updateByPrimaryKey(record);
|
}
|
|
@Override
|
@Transactional
|
public void save(PushGoods record, List<Long> goodsIds) throws PushGoodsException, Exception {
|
|
// 定时时间
|
Boolean timeTask = record.isTimeTask();
|
if (timeTask != null && timeTask) {
|
String controlTime_str = record.getControlTime_str();
|
if (controlTime_str == null || controlTime_str.trim().length() == 0) {
|
throw new PushGoodsException(1, "预设时间不能为空");
|
}
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
controlTime_str = controlTime_str.replaceAll("T", " ");
|
record.setControlTime(format.parse(controlTime_str));
|
} else {
|
record.setControlTime(null);
|
}
|
|
record.setIsPush(PushGoods.STATE_INIT);
|
|
boolean isAdd = false;
|
// 推送id
|
Long pushId = record.getId();
|
if (pushId == null) {
|
// 新增
|
isAdd = true;
|
|
record.setCreateTime(new Date());
|
record.setUpdateTime(new Date());
|
pushGoodsMapper.insert(record);
|
|
pushId = record.getId();
|
|
} else {
|
// 修改
|
PushGoods current = pushGoodsMapper.selectByPrimaryKey(pushId);
|
if (current == null) {
|
throw new PushGoodsException(1, "该记录已不存在");
|
}
|
|
record.setCreateTime(current.getCreateTime());
|
record.setUpdateTime(new Date());
|
pushGoodsMapper.updateByPrimaryKey(record);
|
}
|
|
// 处理商品信息
|
saveGoodsInfo(isAdd, pushId, goodsIds);
|
}
|
|
@Transactional
|
public void saveGoodsInfo(boolean isAdd, Long pushId, List<Long> goodsIds) throws Exception {
|
|
if (goodsIds == null || goodsIds.size() == 0) {
|
if (!isAdd) {
|
pushGoodsGroupService.deleteByPushId(pushId);
|
}
|
return;
|
}
|
|
// 商品信息获取与保存
|
List<Long> listCommonId = new ArrayList<Long>();
|
for (Long auctionId : goodsIds) {
|
// 获取商品详情
|
TaoBaoGoodsBrief goodsBrief = TaoKeApiUtil.searchGoodsDetail(auctionId);
|
|
// 转换简版商品信息
|
CommonGoods commonGoods = CommonGoodsFactory.create(goodsBrief);
|
if (commonGoods != null) {
|
commonGoodsService.addOrUpdateCommonGoods(commonGoods);
|
Long cid = commonGoods.getId();
|
if (cid != null) {
|
listCommonId.add(cid);
|
}
|
}
|
}
|
|
/* 修改时删除 部分 */
|
if (!isAdd) {
|
|
List<Long> listdelete = new ArrayList<Long>();
|
|
List<PushGoodsGroup> listGroup = pushGoodsGroupService.selectByPushId(pushId);
|
|
if (listGroup != null && listGroup.size() > 0) {
|
for (PushGoodsGroup group : listGroup) {
|
Long groupId = group.getId();
|
|
CommonGoods commonGoods = group.getCommonGoods();
|
if (commonGoods != null) {
|
Long commonId = commonGoods.getId();
|
if (commonId != null && listCommonId.contains(groupId)) {
|
// 已经存在
|
listCommonId.remove(commonId);
|
} else {
|
// 已经被删除
|
listdelete.add(groupId);
|
}
|
}
|
}
|
}
|
|
// 删除已被前端清除商品
|
if (listdelete.size() > 0) {
|
pushGoodsGroupService.deleteBatchByPrimaryKey(listdelete);
|
}
|
}
|
|
// 插入商品列表
|
if (listCommonId.size() > 0 && !listCommonId.isEmpty()) {
|
List<PushGoodsGroup> listAdd = new ArrayList<PushGoodsGroup>();
|
for (Long cid : listCommonId) {
|
PushGoodsGroup pushGoodsGroup = new PushGoodsGroup();
|
pushGoodsGroup.setPushId(pushId);
|
pushGoodsGroup.setCommonGoods(new CommonGoods(cid));
|
listAdd.add(pushGoodsGroup);
|
}
|
|
pushGoodsGroupService.insertBatch(listAdd);
|
}
|
|
}
|
|
@Override
|
@Transactional
|
public int deleteBatchByPrimaryKey(List<Long> list) throws Exception {
|
|
/*List<PushGoods> lisState = pushGoodsMapper.listByPushState(list);
|
if (lisState != null && lisState.size() > 0) {
|
for (PushGoods pushGoods : lisState) {
|
// 已推送的消息不能删除
|
list.remove(pushGoods.getId());
|
}
|
}*/
|
|
// 删除对应商品
|
pushGoodsGroupService.deleteBatchByPushId(list);
|
|
return pushGoodsMapper.deleteBatchByPrimaryKey(list);
|
}
|
|
@Override
|
public List<PushGoods> listQuery(long start, int count, String key, Integer state) {
|
return pushGoodsMapper.listQuery(start, count, key, state);
|
}
|
|
@Override
|
public long countQuery(String key, Integer state) {
|
return pushGoodsMapper.countQuery(key, state);
|
}
|
|
@Override
|
public List<PushGoods> listHistoryByPushTime(long start, int count, Long uid, Date pushTime) {
|
return pushGoodsMapper.listHistoryByPushTime(start, count, uid, pushTime);
|
}
|
|
@Override
|
public long countHistoryByPushTime(Long uid, Date pushTime) {
|
return pushGoodsMapper.countHistoryByPushTime(uid, pushTime);
|
}
|
|
|
@Override
|
public List<PushGoods> listTask() {
|
return pushGoodsMapper.listTask();
|
}
|
|
|
@Override
|
public void taskPush(PushGoods record) {
|
String msg = null;
|
int state = PushGoods.STATE_FAIL;
|
try {
|
// 执行推送
|
executePush(record);
|
state = PushGoods.STATE_SUCCESS;
|
} catch (PushGoodsException e) {
|
msg = e.getMsg();
|
} catch (PushException e) {
|
msg = e.getMsg();
|
} catch (Exception e) {
|
msg = "系统推送失败";
|
}
|
record.setIsPush(state);
|
record.setPushTime(new Date());
|
record.setRemark(msg);
|
record.setUpdateTime(new Date());
|
pushGoodsMapper.updateByPrimaryKey(record);
|
}
|
|
|
@Override
|
public void handPush(Long id) throws Exception, PushGoodsException, PushException {
|
PushGoods record = selectByPrimaryKey(id);
|
if (record == null) {
|
throw new PushGoodsException(1, "推送信息已不存在");
|
}
|
// 执行推送
|
executePush(record);
|
|
record.setIsPush(PushGoods.STATE_SUCCESS);
|
record.setPushTime(new Date());
|
record.setUpdateTime(new Date());
|
pushGoodsMapper.updateByPrimaryKey(record);
|
}
|
|
|
|
@Override
|
public void executePush(PushGoods pushGoods) throws Exception, PushGoodsException, PushException {
|
|
Long id = pushGoods.getId();
|
|
String alertTitle = pushGoods.getAlertTitle();
|
String alertContent = pushGoods.getAlertContent();
|
if (StringUtil.isNullOrEmpty(alertTitle) || StringUtil.isNullOrEmpty(alertContent)) {
|
throw new PushGoodsException(1, "推送标题及内容不能为空");
|
}
|
|
List<PushGoodsGroup> goodsList = pushGoodsGroupService.getAllInfoByPushId(id);
|
if (goodsList == null || goodsList.size() == 0) {
|
throw new PushGoodsException(1, "推送无商品,请完善数据");
|
}
|
|
String versions = pushGoods.getVersions();
|
if (versions == null || versions.trim().length() == 0) {
|
throw new PushGoodsException(1, "推送版本不能为空");
|
}
|
|
List<String> listIOS = new ArrayList<String>();
|
JSONObject json = JSONObject.fromObject(versions);
|
String versionsIOS = json.getString("IOS");
|
if (versionsIOS != null && versionsIOS.trim().length() > 0) {
|
if (versionsIOS.contains("全推")) {
|
listIOS = null;
|
} else {
|
listIOS = Arrays.asList(versionsIOS.split(","));
|
}
|
}
|
|
List<String> listAndroid = new ArrayList<String>();
|
String versionsAndroid = json.getString("Android");
|
if (versionsAndroid != null && versionsAndroid.trim().length() > 0) {
|
if (versionsAndroid.contains("全推")) {
|
listAndroid = null;
|
} else {
|
listAndroid = Arrays.asList(versionsAndroid.split(","));
|
}
|
}
|
|
if (goodsList.size() == 1) {
|
/* 单个商品推送: 直接处理为商品信息 */
|
PushGoodsGroup pushGoodsGroup = goodsList.get(0);
|
CommonGoods commonGoods = pushGoodsGroup.getCommonGoods();
|
if (commonGoods == null) {
|
throw new PushGoodsException(1, "商品详细信息已不存在");
|
}
|
|
Long goodsId = commonGoods.getGoodsId();
|
String url = "https://item.taobao.com/item.htm?id=" + goodsId;
|
|
pushService.pushGoods(pushGoods.getUid(), alertTitle, alertContent, url,listIOS, listAndroid);
|
|
} else {
|
/* 多个商品推送 */
|
String url = configService.get("push_goods_details");
|
if (StringUtil.isNullOrEmpty(url)) {
|
throw new PushGoodsException(1, "推送页面链接不存在");
|
}
|
// 生成链接
|
url = url + "?id=" + id;
|
|
pushService.pushUrl(pushGoods.getUid(), alertTitle, alertContent, url, listIOS, listAndroid);
|
}
|
}
|
|
}
|