admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudGoodsServiceImpl.java
@@ -1,205 +1,205 @@
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, 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);
         rocketMQManager.sendNormalMsg(message, null);
         // 每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;
      }
   }
}