yujian
2020-05-09 7e7db2fa55a9a3af46d4fd8ede0dee147f101d64
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java
@@ -10,6 +10,7 @@
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.entity.FileUploadResult;
@@ -19,8 +20,10 @@
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO;
import com.yeshi.fanli.entity.bus.user.UserGoodsStorage;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.goods.CommonGoodsException;
import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
@@ -29,9 +32,10 @@
import com.yeshi.fanli.exception.user.UserGoodsStorageException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
import com.yeshi.fanli.util.CommonGoodsUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
@@ -46,25 +50,25 @@
@Service
public class UserGoodsStorageServiceImpl implements UserGoodsStorageService {
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   @Resource
   private RedisManager redisManager;
   @Resource
   private ConfigService configService;
   @Resource
   private CommonGoodsService commonGoodsService;
   @Resource
   private HongBaoManageService manageService;
   @Resource
   private UserGoodsStorageMapper userGoodsStorageMapper;
   @Resource
   private UserShareGoodsRecordService userShareGoodsRecordService;
   @Resource
@@ -110,9 +114,10 @@
   public int deleteBatchByPrimaryKey(List<Long> list) {
      return userGoodsStorageMapper.deleteBatchByPrimaryKey(list);
   }
   /**
    * 根据主键 、uid 批量删除
    *
    * @param list
    * @return
    */
@@ -125,7 +130,7 @@
   public List<UserGoodsStorage> listQueryByUid(long start, int count, Long uid, Integer source) {
      return userGoodsStorageMapper.listQueryByUid(start, count, uid, source);
   }
   @Override
   public UserGoodsStorage getByUidAndAuctionId(Long uid, Long auctionId, Integer goodsType) {
      return userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId, goodsType);
@@ -135,7 +140,7 @@
   public long countQueryByUid(Long uid, Integer source) {
      return userGoodsStorageMapper.countQueryByUid(uid, source);
   }
   @Override
   public void save(Long uid, Set<Long> auctionIds, Integer goodsType) throws UserGoodsStorageException {
@@ -150,25 +155,25 @@
      for (Long auctionId : auctionIds) {
         CommonGoods commonGoods = null;
         if (goodsType == null) {
             goodsType = Constant.SOURCE_TYPE_TAOBAO;
         }
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
         }
         if (goodsType == Constant.SOURCE_TYPE_JD) {
            // 京东
            // 京东
            JDGoods jdGoods = JDApiUtil.queryGoodsDetail(auctionId);
            if (jdGoods == null) {
               jdGoods = JDApiUtil.getGoodsDetail(auctionId);
            }
            if (jdGoods == null) {
               throw new UserGoodsStorageException(1, "auctionId商品已下架");
               throw new UserGoodsStorageException(1, auctionId + "商品已下架");
            }
            commonGoods = CommonGoodsFactory.create(jdGoods);
         } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            // 拼多多
         } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            // 拼多多
            PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(auctionId);
            if (pddGoods == null) {
               throw new UserGoodsStorageException(1, "auctionId商品已下架");
               throw new UserGoodsStorageException(1, auctionId + "商品已下架");
            }
            commonGoods = CommonGoodsFactory.create(pddGoods);
         } else {
@@ -178,11 +183,10 @@
               TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
               commonGoods = CommonGoodsFactory.create(goodsBrief);
            } catch (TaobaoGoodsDownException e) {
               throw new UserGoodsStorageException(1, "auctionId商品已下架");
               throw new UserGoodsStorageException(1, auctionId + "商品已下架");
            }
         }
         if (commonGoods != null) {
            try {
               commonGoodsService.addOrUpdateCommonGoods(commonGoods);
@@ -202,7 +206,8 @@
               userGoodsStorageMapper.updateByPrimaryKeySelective(goodsStorage);
            } else {
               goodsStorage = new UserGoodsStorage();
               goodsStorage.setUid(uid);;
               goodsStorage.setUid(uid);
               ;
               goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
               goodsStorage.setCommonGoods(commonGoods);
               goodsStorage.setCreateTime(new Date());
@@ -213,8 +218,8 @@
      }
   }
   @Override
   @Transactional(rollbackFor=Exception.class)
   public void addCommonGoods(Long uid, Set<Long> ids) throws UserGoodsStorageException {
      if (uid == null) {
@@ -237,7 +242,8 @@
               userGoodsStorageMapper.updateByPrimaryKeySelective(goodsStorage);
            } else {
               goodsStorage = new UserGoodsStorage();
               goodsStorage.setUid(uid);;
               goodsStorage.setUid(uid);
               ;
               goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
               goodsStorage.setCommonGoods(commonGoods);
               goodsStorage.setCreateTime(new Date());
@@ -248,21 +254,20 @@
      }
   }
   @Override
   public JSONArray getMyStorage(int page, int pageSize, Long uid, Integer source) throws UserGoodsStorageException {
      JSONArray array = new JSONArray();
      List<UserGoodsStorage> listStorage = listQueryByUid(page , pageSize, uid, source);
      List<UserGoodsStorage> listStorage = listQueryByUid(page, pageSize, uid, source);
      if (listStorage == null || listStorage.size() == 0) {
         return array;
      }
      if (source == null) {
         source = Constant.SOURCE_TYPE_TAOBAO;
      }
      List<TaoBaoGoodsBrief> listTaoKeGoods = null;
      if (source == Constant.SOURCE_TYPE_TAOBAO) {
         List<Long> listGid = new ArrayList<Long>();
@@ -273,7 +278,7 @@
            }
            listGid.add(commonGoods.getGoodsId());
         }
         // API网络接口验证是否在售
         try {
            listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
@@ -285,27 +290,25 @@
            e.printStackTrace();
         }
      }
      BigDecimal  rate = manageService.getFanLiRate();
      BigDecimal rate = manageService.getFanLiRate(UserLevelEnum.daRen);
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
            .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
      for (UserGoodsStorage userGoodsStorage : listStorage) {
         CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
         if (commonGoods == null) {
            continue;
         }
         int state = 0;
         Integer goodsType = commonGoods.getGoodsType();
         if (listTaoKeGoods != null && listTaoKeGoods.size() > 0
               && goodsType != null && goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            state = 1;  // 默认停售
         if (listTaoKeGoods != null && listTaoKeGoods.size() > 0 && goodsType != null
               && goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            state = 1; // 默认停售
            Long goodsId = commonGoods.getGoodsId();
            for (TaoBaoGoodsBrief taoKeGoods: listTaoKeGoods) {
            for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
               Long auctionId = taoKeGoods.getAuctionId();
               if (goodsId == auctionId || goodsId.equals(auctionId)) {
                  state = 0; // 在售
@@ -315,7 +318,7 @@
         }
         commonGoods.setState(state);
         TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods);
         // 判断是否已分享
         Integer storageState = userGoodsStorage.getState();
         if (storageState != null && storageState == UserGoodsStorage.STATE_SHARED) {
@@ -324,19 +327,18 @@
               goodsBrief.setState(2); // 已分享状态 优先显示已下架
            }
         }
         String json = gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, rate.toString(), null));
         JSONObject dataObject = new JSONObject();
         dataObject.put("storageId", userGoodsStorage.getId());
         dataObject.put("goods", json);
         array.add(dataObject);
      }
      return array;
   }
   @Override
   public boolean isExistStorage(Long uid, Long auctionId, Integer goodType) {
      boolean state = false;
@@ -348,19 +350,19 @@
      }
      return state;
   }
   @Override
   public JSONObject shareGoods(Long uid, List<Long> listStorageID)
   public JSONObject shareGoods(Long uid, List<Long> listStorageID)
         throws UserGoodsStorageException, UserShareGoodsRecordException {
      List<UserGoodsStorage> listStorage = userGoodsStorageMapper.listQueryByIds(listStorageID);
      if (listStorage == null || listStorage.size() == 0) {
         throw new UserGoodsStorageException(1, "选品库商品不存在");
      }
      List<UserGoodsStorage> listResult = new ArrayList<UserGoodsStorage>();
      // 还原顺序 用于制图
      for (Long sid: listStorageID) {
         for (UserGoodsStorage torage: listStorage) {
      for (Long sid : listStorageID) {
         for (UserGoodsStorage torage : listStorage) {
            Long id = torage.getId();
            if (sid == id || sid.equals(id)) {
               listResult.add(torage);
@@ -368,46 +370,45 @@
            }
         }
      }
      BigDecimal totalMoney = new BigDecimal(0.00);
      List<TaoBaoGoodsBrief> listGoodsBrief = new ArrayList<TaoBaoGoodsBrief>();
      BigDecimal rate = hongBaoManageService.getShareRate();
      for (UserGoodsStorage userGoodsStorage: listResult) {
      BigDecimal rate = hongBaoManageService.getShareRate(UserLevelEnum.daRen);
      for (UserGoodsStorage userGoodsStorage : listResult) {
         CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
         TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods);
         listGoodsBrief.add(goodsBrief);
         BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(goodsBrief, rate);
         totalMoney = MoneyBigDecimalUtil.add(totalMoney, money);
      }
      ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorage(uid, listGoodsBrief, listStorageID);
      ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorage(uid, listGoodsBrief,
            listStorageID);
      FileUploadResult uploadResult = new FileUploadResult();
      uploadResult.setUrl(shareRecord.getSharePictureUrl());
      JSONObject data = new JSONObject();
      data.put("revenue", listGoodsBrief.size() + "个商品预估分享奖金:¥"+totalMoney);
      data.put("revenue", listGoodsBrief.size() + "个商品预估分享奖金:¥" + totalMoney);
      data.put("shareId", shareRecord.getRedisKey());
      data.put("shareImg", uploadResult);
      data.put("notifyDesc", configService.get("goods_share_multiple_notify"));
      data.put("notifyDesc", configService.get(ConfigKeyEnum.goodsShareMultipleNotify.getKey()));
      return data;
   }
   @Override
   public JSONObject createShareV2(Long uid, List<Long> listStorageID) throws UserGoodsStorageException, UserShareGoodsRecordException {
   public JSONObject createShareV2(Long uid, List<Long> listStorageID, boolean needDrawPicture)
         throws UserGoodsStorageException, UserShareGoodsRecordException {
      List<UserGoodsStorage> listStorage = userGoodsStorageMapper.listQueryByIds(listStorageID);
      if (listStorage == null || listStorage.size() == 0) {
         throw new UserGoodsStorageException(1, "选品库商品不存在");
      }
      List<UserGoodsStorage> listResult = new ArrayList<UserGoodsStorage>();
      // 还原顺序 用于制图
      for (Long sid: listStorageID) {
         for (UserGoodsStorage torage: listStorage) {
      for (Long sid : listStorageID) {
         for (UserGoodsStorage torage : listStorage) {
            Long id = torage.getId();
            if (sid == id || sid.equals(id)) {
               listResult.add(torage);
@@ -415,44 +416,42 @@
            }
         }
      }
      BigDecimal totalMoney = new BigDecimal(0.00);
      List<TaoBaoGoodsBrief> listGoodsBrief = new ArrayList<TaoBaoGoodsBrief>();
      List<CommonGoods> listCommonGoods = new ArrayList<CommonGoods>();
      Integer goodsType = null;
      BigDecimal rate = hongBaoManageService.getShareRate();
      for (UserGoodsStorage userGoodsStorage: listResult) {
      BigDecimal rate = hongBaoManageService.getShareRate(UserLevelEnum.daRen);
      for (UserGoodsStorage userGoodsStorage : listResult) {
         CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
         BigDecimal money = CommonGoodsUtil.getCommission(commonGoods, rate);
         totalMoney = MoneyBigDecimalUtil.add(totalMoney, money);
         listCommonGoods.add(commonGoods);
         if (goodsType == null) {
            goodsType = commonGoods.getGoodsType();
         }
         TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods);
         listGoodsBrief.add(goodsBrief);
         BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(goodsBrief, rate);
         totalMoney = MoneyBigDecimalUtil.add(totalMoney, money);
      }
      ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorageV2(uid, listGoodsBrief, listStorageID);
      ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorageV2(uid, listCommonGoods,
            listStorageID, needDrawPicture);
      FileUploadResult uploadResult = new FileUploadResult();
      uploadResult.setUrl(shareRecord.getSharePictureUrl());
      JSONObject data = new JSONObject();
      data.put("revenue", listGoodsBrief.size() + "个商品预估分享奖金:¥"+totalMoney);
      data.put("revenue", listCommonGoods.size() + "个商品预估分享奖金:¥" + totalMoney);
      data.put("shareId", shareRecord.getRedisKey());
      data.put("shareImg", uploadResult);
      // 提示语不同
      if (goodsType == Constant.SOURCE_TYPE_JD) {
         // 京东
         data.put("notifyDesc", configService.get("goods_share_notify_jd"));
         data.put("notifyDesc", configService.get(ConfigKeyEnum.goodsShareNotifyJD.getKey()));
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         // 拼多多
         data.put("notifyDesc", configService.get("goods_share_notify_pdd"));
         data.put("notifyDesc", configService.get(ConfigKeyEnum.goodsShareNotifyPDD.getKey()));
      } else {
         data.put("notifyDesc", configService.get("goods_share_multiple_notify"));
         data.put("notifyDesc", configService.get(ConfigKeyEnum.goodsShareMultipleNotify.getKey()));
      }
      return data;
   }