| | |
| | | package com.yeshi.fanli.service.impl.user.cloud;
|
| | |
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.scheduling.annotation.Async;
|
| | | import org.springframework.stereotype.Service;
|
| | |
|
| | | import com.aliyun.openservices.ons.api.Message;
|
| | | import com.aliyun.openservices.ons.api.Producer;
|
| | | import com.yeshi.fanli.dao.mybatis.user.cloud.UserCloudGoodsMapper;
|
| | | import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
|
| | | import com.yeshi.fanli.dto.mq.user.body.UserCloudMQMsg;
|
| | | import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
|
| | | import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
|
| | | import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGoods;
|
| | | import com.yeshi.fanli.entity.goods.CommonGoods;
|
| | | import com.yeshi.fanli.entity.jd.JDGoods;
|
| | | import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
| | | import com.yeshi.fanli.exception.goods.CommonGoodsException;
|
| | | import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
| | | import com.yeshi.fanli.exception.user.cloud.UserCloudGoodsException;
|
| | | import com.yeshi.fanli.log.LogHelper;
|
| | | import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
|
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudGoodsService;
|
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudManageService;
|
| | | import com.yeshi.fanli.util.Constant;
|
| | | import com.yeshi.fanli.util.RedisManager;
|
| | | import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
|
| | | import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
|
| | | import com.yeshi.fanli.util.factory.CommonGoodsFactory;
|
| | | import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
|
| | | import com.yeshi.fanli.util.rocketmq.MQTopicName;
|
| | | import com.yeshi.fanli.util.suning.SuningApiUtil;
|
| | | import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
|
| | |
|
| | | @Service
|
| | | public class UserCloudGoodsServiceImpl implements UserCloudGoodsService {
|
| | |
|
| | | @Resource
|
| | | private UserCloudGoodsMapper userCloudGoodsMapper;
|
| | |
|
| | | @Resource
|
| | | private RedisManager redisManager;
|
| | |
|
| | | @Resource
|
| | | private JDGoodsCacheUtil jdGoodsCacheUtil;
|
| | |
|
| | | @Resource
|
| | | private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
|
| | |
|
| | | @Resource
|
| | | private CommonGoodsService commonGoodsService;
|
| | |
|
| | | @Resource
|
| | | private UserCloudManageService userCloudManageService;
|
| | |
|
| | | @Resource(name = "producer")
|
| | | private Producer producer;
|
| | |
|
| | | @Override
|
| | | public void deleteByPrimaryKeyAndUid(Long id, Long uid) {
|
| | | userCloudGoodsMapper.deleteByPrimaryKeyAndUid(id, uid);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public UserCloudGoods selectByPrimaryKey(Long id) {
|
| | | return userCloudGoodsMapper.selectByPrimaryKey(id);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void updateByPrimaryKeySelective(UserCloudGoods record) {
|
| | | userCloudGoodsMapper.updateByPrimaryKeySelective(record);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public List<UserCloudGoods> query(int page, int pageSize, String key) {
|
| | | return userCloudGoodsMapper.query((page - 1) * pageSize, pageSize, key);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public long count(String key) {
|
| | | return userCloudGoodsMapper.count(key);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public List<UserCloudGoods> listByUid(long start, int count, Long uid) {
|
| | | return userCloudGoodsMapper.listByUid(start, count, uid);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public List<UserCloudGoods> listByNotShare(Long uid) {
|
| | | return userCloudGoodsMapper.listByNotShare(uid);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public long countByUid(Long uid) {
|
| | | return userCloudGoodsMapper.countByUid(uid);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public UserCloudGoods getByUidAndGoods(Long uid, Long goodsId, Integer goodsType) {
|
| | | return userCloudGoodsMapper.getByUidAndGoods(uid, goodsId, goodsType);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public UserCloudGoods addGoods(Long uid, Long goodsId, Integer goodsType, Long sellerId) throws UserCloudGoodsException {
|
| | | if (uid == null)
|
| | | throw new UserCloudGoodsException(1, "用户尚未登录");
|
| | | if (goodsId == null || goodsType == null)
|
| | | throw new UserCloudGoodsException(1, "系统参数不正确");
|
| | | |
| | | CommonGoods commonGoods = null;
|
| | | if (goodsType == Constant.SOURCE_TYPE_TAOBAO) { // 淘宝
|
| | | try {
|
| | | TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
|
| | | commonGoods = CommonGoodsFactory.create(goodsBrief);
|
| | | } catch (TaobaoGoodsDownException e) {
|
| | | throw new UserCloudGoodsException(1, goodsId + "商品已下架");
|
| | | }
|
| | | } else if (goodsType == Constant.SOURCE_TYPE_JD) { // 京东
|
| | | JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
|
| | | if (goods == null)
|
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
|
| | | commonGoods = CommonGoodsFactory.create(goods);
|
| | | } else if (goodsType == Constant.SOURCE_TYPE_PDD) { // 拼多多
|
| | | PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
|
| | | if (goods == null)
|
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
|
| | | commonGoods = CommonGoodsFactory.create(goods);
|
| | | } else if (goodsType == Constant.SOURCE_TYPE_VIP) { // 唯品会
|
| | | VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(goodsId +"");
|
| | | if (goods == null)
|
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
|
| | | commonGoods = CommonGoodsFactory.create(goods);
|
| | | } else if (goodsType == Constant.SOURCE_TYPE_SUNING) { // 苏宁
|
| | | SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsId +"", sellerId + "");
|
| | | if (goods == null)
|
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
|
| | | commonGoods = CommonGoodsFactory.create(goods);
|
| | | }
|
| | |
|
| | | if (commonGoods == null) {
|
| | | LogHelper.test("云发单未找到商品详情,id=" + goodsId + "type=" + goodsType);
|
| | | throw new UserCloudGoodsException(1, "商品信息获取失败");
|
| | | }
|
| | |
|
| | | try {
|
| | | commonGoodsService.addOrUpdateCommonGoods(commonGoods);
|
| | | } catch (CommonGoodsException e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | throw new UserCloudGoodsException(1, "商品信息更新失败");
|
| | | }
|
| | | |
| | | UserCloudGoods result = null;
|
| | | UserCloudGoods cloudGoods = userCloudGoodsMapper.getByUidAndCommonGoodsId(uid, commonGoods.getId());
|
| | | if (cloudGoods != null) {
|
| | | result = cloudGoods;
|
| | | |
| | | UserCloudGoods update = new UserCloudGoods();
|
| | | update.setId(cloudGoods.getId());
|
| | | update.setState(UserCloudGoods.STATE_NORMAL);
|
| | | update.setUpdateTime(new Date());
|
| | | userCloudGoodsMapper.updateByPrimaryKeySelective(update);
|
| | | } else {
|
| | | cloudGoods = new UserCloudGoods();
|
| | | cloudGoods.setUid(uid);
|
| | | cloudGoods.setState(UserCloudGoods.STATE_NORMAL);
|
| | | cloudGoods.setCommonGoods(commonGoods);
|
| | | cloudGoods.setCreateTime(new Date());
|
| | | cloudGoods.setUpdateTime(new Date());
|
| | | userCloudGoodsMapper.insertSelective(cloudGoods);
|
| | | |
| | | result = cloudGoods;
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | @Async
|
| | | @Override
|
| | | public void sendGoodsMQMsg(Long uid) {
|
| | | if (Constant.IS_TEST) {
|
| | | return;
|
| | | }
|
| | |
|
| | | List<UserCloudGoods> list = userCloudGoodsMapper.listByNotShare(uid);
|
| | | if (list == null || list.size() == 0) {
|
| | | return;
|
| | | }
|
| | |
|
| | | long deliverTime = java.lang.System.currentTimeMillis();
|
| | | for (UserCloudGoods cloudGoods : list) {
|
| | | UserCloudMQMsg msg = new UserCloudMQMsg(uid, cloudGoods.getId() + "", UserCloudMQMsg.TYPE_STORE);
|
| | | Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userCloud, msg);
|
| | | message.setStartDeliverTime(deliverTime);
|
| | | producer.send(message);
|
| | | // 每5分钟查询一次
|
| | | deliverTime = deliverTime + 1000 * 60 * 5;
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.service.impl.user.cloud; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import com.aliyun.openservices.ons.api.Message; |
| | | import com.yeshi.fanli.dao.mybatis.user.cloud.UserCloudGoodsMapper; |
| | | import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; |
| | | import com.yeshi.fanli.dto.mq.user.body.UserCloudMQMsg; |
| | | import com.yeshi.fanli.dto.pdd.PDDGoodsDetail; |
| | | import com.yeshi.fanli.dto.suning.SuningGoodsInfo; |
| | | import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGoods; |
| | | import com.yeshi.fanli.entity.goods.CommonGoods; |
| | | import com.yeshi.fanli.entity.jd.JDGoods; |
| | | import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief; |
| | | import com.yeshi.fanli.exception.goods.CommonGoodsException; |
| | | import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; |
| | | import com.yeshi.fanli.exception.user.cloud.UserCloudGoodsException; |
| | | import com.yeshi.fanli.log.LogHelper; |
| | | import com.yeshi.fanli.service.inter.goods.CommonGoodsService; |
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudGoodsService; |
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudManageService; |
| | | import com.yeshi.fanli.service.manger.msg.RocketMQManager; |
| | | import com.yeshi.fanli.util.Constant; |
| | | import com.yeshi.fanli.util.RedisManager; |
| | | import com.yeshi.fanli.util.cache.JDGoodsCacheUtil; |
| | | import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil; |
| | | import com.yeshi.fanli.util.factory.CommonGoodsFactory; |
| | | import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; |
| | | import com.yeshi.fanli.util.rocketmq.MQTopicName; |
| | | import com.yeshi.fanli.util.suning.SuningApiUtil; |
| | | import com.yeshi.fanli.util.vipshop.VipShopApiUtil; |
| | | |
| | | @Service |
| | | public class UserCloudGoodsServiceImpl implements UserCloudGoodsService { |
| | | |
| | | @Resource |
| | | private UserCloudGoodsMapper userCloudGoodsMapper; |
| | | |
| | | @Resource |
| | | private RedisManager redisManager; |
| | | |
| | | @Resource |
| | | private JDGoodsCacheUtil jdGoodsCacheUtil; |
| | | |
| | | @Resource |
| | | private PinDuoDuoCacheUtil pinDuoDuoCacheUtil; |
| | | |
| | | @Resource |
| | | private CommonGoodsService commonGoodsService; |
| | | |
| | | @Resource |
| | | private UserCloudManageService userCloudManageService; |
| | | |
| | | @Resource |
| | | private RocketMQManager rocketMQManager; |
| | | |
| | | @Override |
| | | public void deleteByPrimaryKeyAndUid(Long id, Long uid) { |
| | | userCloudGoodsMapper.deleteByPrimaryKeyAndUid(id, uid); |
| | | } |
| | | |
| | | @Override |
| | | public UserCloudGoods selectByPrimaryKey(Long id) { |
| | | return userCloudGoodsMapper.selectByPrimaryKey(id); |
| | | } |
| | | |
| | | @Override |
| | | public void updateByPrimaryKeySelective(UserCloudGoods record) { |
| | | userCloudGoodsMapper.updateByPrimaryKeySelective(record); |
| | | } |
| | | |
| | | @Override |
| | | public List<UserCloudGoods> query(int page, int pageSize, String key) { |
| | | return userCloudGoodsMapper.query((page - 1) * pageSize, pageSize, key); |
| | | } |
| | | |
| | | @Override |
| | | public long count(String key) { |
| | | return userCloudGoodsMapper.count(key); |
| | | } |
| | | |
| | | @Override |
| | | public List<UserCloudGoods> listByUid(long start, int count, Long uid) { |
| | | return userCloudGoodsMapper.listByUid(start, count, uid); |
| | | } |
| | | |
| | | @Override |
| | | public List<UserCloudGoods> listByNotShare(Long uid) { |
| | | return userCloudGoodsMapper.listByNotShare(uid); |
| | | } |
| | | |
| | | @Override |
| | | public long countByUid(Long uid) { |
| | | return userCloudGoodsMapper.countByUid(uid); |
| | | } |
| | | |
| | | @Override |
| | | public UserCloudGoods getByUidAndGoods(Long uid, Long goodsId, Integer goodsType) { |
| | | return userCloudGoodsMapper.getByUidAndGoods(uid, goodsId, goodsType); |
| | | } |
| | | |
| | | @Override |
| | | public UserCloudGoods addGoods(Long uid, String goodsId, Integer goodsType, Long sellerId) throws UserCloudGoodsException { |
| | | if (uid == null) |
| | | throw new UserCloudGoodsException(1, "用户尚未登录"); |
| | | if (goodsId == null || goodsType == null) |
| | | throw new UserCloudGoodsException(1, "系统参数不正确"); |
| | | |
| | | CommonGoods commonGoods = null; |
| | | if (goodsType == Constant.SOURCE_TYPE_TAOBAO) { // 淘宝 |
| | | try { |
| | | TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId); |
| | | commonGoods = CommonGoodsFactory.create(goodsBrief); |
| | | } catch (TaobaoGoodsDownException e) { |
| | | throw new UserCloudGoodsException(1, goodsId + "商品已下架"); |
| | | } |
| | | } else if (goodsType == Constant.SOURCE_TYPE_JD) { // 京东 |
| | | JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId); |
| | | if (goods == null) |
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息"); |
| | | commonGoods = CommonGoodsFactory.create(goods); |
| | | } else if (goodsType == Constant.SOURCE_TYPE_PDD) { // 拼多多 |
| | | PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId); |
| | | if (goods == null) |
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息"); |
| | | commonGoods = CommonGoodsFactory.create(goods); |
| | | } else if (goodsType == Constant.SOURCE_TYPE_VIP) { // 唯品会 |
| | | VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(goodsId +""); |
| | | if (goods == null) |
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息"); |
| | | commonGoods = CommonGoodsFactory.create(goods); |
| | | } else if (goodsType == Constant.SOURCE_TYPE_SUNING) { // 苏宁 |
| | | SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsId +"", sellerId + ""); |
| | | if (goods == null) |
| | | throw new UserCloudGoodsException(1, goodsId + "未找到商品信息"); |
| | | commonGoods = CommonGoodsFactory.create(goods); |
| | | } |
| | | |
| | | if (commonGoods == null) { |
| | | LogHelper.test("云发单未找到商品详情,id=" + goodsId + "type=" + goodsType); |
| | | throw new UserCloudGoodsException(1, "商品信息获取失败"); |
| | | } |
| | | |
| | | try { |
| | | commonGoodsService.addOrUpdateCommonGoods(commonGoods); |
| | | } catch (CommonGoodsException e) { |
| | | LogHelper.errorDetailInfo(e); |
| | | throw new UserCloudGoodsException(1, "商品信息更新失败"); |
| | | } |
| | | |
| | | UserCloudGoods result = null; |
| | | UserCloudGoods cloudGoods = userCloudGoodsMapper.getByUidAndCommonGoodsId(uid, commonGoods.getId()); |
| | | if (cloudGoods != null) { |
| | | result = cloudGoods; |
| | | |
| | | UserCloudGoods update = new UserCloudGoods(); |
| | | update.setId(cloudGoods.getId()); |
| | | update.setState(UserCloudGoods.STATE_NORMAL); |
| | | update.setUpdateTime(new Date()); |
| | | userCloudGoodsMapper.updateByPrimaryKeySelective(update); |
| | | } else { |
| | | cloudGoods = new UserCloudGoods(); |
| | | cloudGoods.setUid(uid); |
| | | cloudGoods.setState(UserCloudGoods.STATE_NORMAL); |
| | | cloudGoods.setCommonGoods(commonGoods); |
| | | cloudGoods.setCreateTime(new Date()); |
| | | cloudGoods.setUpdateTime(new Date()); |
| | | userCloudGoodsMapper.insertSelective(cloudGoods); |
| | | |
| | | result = cloudGoods; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Async |
| | | @Override |
| | | public void sendGoodsMQMsg(Long uid) { |
| | | if (Constant.IS_TEST) { |
| | | return; |
| | | } |
| | | |
| | | List<UserCloudGoods> list = userCloudGoodsMapper.listByNotShare(uid); |
| | | if (list == null || list.size() == 0) { |
| | | return; |
| | | } |
| | | |
| | | long deliverTime = java.lang.System.currentTimeMillis(); |
| | | for (UserCloudGoods cloudGoods : list) { |
| | | UserCloudMQMsg msg = new UserCloudMQMsg(uid, cloudGoods.getId() + "", UserCloudMQMsg.TYPE_STORE); |
| | | Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userCloud, msg); |
| | | message.setStartDeliverTime(deliverTime); |
| | | rocketMQManager.sendNormalMsg(message, null); |
| | | // 每5分钟查询一次 |
| | | deliverTime = deliverTime + 1000 * 60 * 5; |
| | | } |
| | | } |
| | | |
| | | } |