admin
2020-07-14 eec7e789a87863c25d92c10ad5dfc22ad80c448d
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java
@@ -8,17 +8,27 @@
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.*;
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;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dao.mybatis.user.UserGoodsStorageMapper;
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;
@@ -27,12 +37,12 @@
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.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -41,293 +51,420 @@
@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
   private HongBaoManageService hongBaoManageService;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
   @Override
   public int deleteByPrimaryKey(Long id) {
      return userGoodsStorageMapper.deleteByPrimaryKey(id);
   }
    @Resource
    private RedisManager redisManager;
   @Override
   public int insert(UserGoodsStorage record) {
      return userGoodsStorageMapper.insert(record);
   }
    @Resource
    private ConfigService configService;
   @Override
   public int insertSelective(UserGoodsStorage record) {
      return userGoodsStorageMapper.insertSelective(record);
   }
    @Resource
    private CommonGoodsService commonGoodsService;
   @Override
   public UserGoodsStorage selectByPrimaryKey(Long id) {
      return userGoodsStorageMapper.selectByPrimaryKey(id);
   }
    @Resource
    private HongBaoManageService manageService;
   @Override
   public int updateByPrimaryKeySelective(UserGoodsStorage record) {
      return userGoodsStorageMapper.updateByPrimaryKeySelective(record);
   }
    @Resource
    private UserGoodsStorageMapper userGoodsStorageMapper;
   @Override
   public int updateByPrimaryKey(UserGoodsStorage record) {
      return userGoodsStorageMapper.updateByPrimaryKey(record);
   }
    @Resource
    private UserShareGoodsRecordService userShareGoodsRecordService;
    @Resource
    private HongBaoManageService hongBaoManageService;
   /**
    * 根据主键批量删除
    *
    * @param list
    * @return
    */
   @Override
   public int deleteBatchByPrimaryKey(List<Long> list) {
      return userGoodsStorageMapper.deleteBatchByPrimaryKey(list);
   }
   /**
    * 根据主键 、uid 批量删除
    * @param list
    * @return
    */
   @Override
   public int deleteBatchByUidAndPrimaryKey(Long uid, List<Long> list) {
      return userGoodsStorageMapper.deleteBatchByUidAndPrimaryKey(uid, list);
   }
    @Resource
    private UserInfoService userInfoService;
   @Override
   public List<UserGoodsStorage> listQueryByUid(long start, int count, Long uid) {
      return userGoodsStorageMapper.listQueryByUid(start, count, uid);
   }
   @Override
   public UserGoodsStorage getByUidAndAuctionId(Long uid, Long auctionId) {
      return userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId);
   }
    @Override
    public int deleteByPrimaryKey(Long id) {
        return userGoodsStorageMapper.deleteByPrimaryKey(id);
    }
   @Override
   public long countQueryByUid(Long uid) {
      return userGoodsStorageMapper.countQueryByUid(uid);
   }
   @Override
   public void save(Long uid, Set<Long> auctionIds) throws UserGoodsStorageException {
    @Override
    public int insert(UserGoodsStorage record) {
        return userGoodsStorageMapper.insert(record);
    }
      if (uid == null) {
         throw new UserGoodsStorageException(1, "用户尚未登录");
      }
    @Override
    public int insertSelective(UserGoodsStorage record) {
        return userGoodsStorageMapper.insertSelective(record);
    }
      if (auctionIds == null || auctionIds.size() == 0) {
         throw new UserGoodsStorageException(1, "商品ID为空");
      }
    @Override
    public UserGoodsStorage selectByPrimaryKey(Long id) {
        return userGoodsStorageMapper.selectByPrimaryKey(id);
    }
      for (Long auctionId : auctionIds) {
    @Override
    public int updateByPrimaryKeySelective(UserGoodsStorage record) {
        return userGoodsStorageMapper.updateByPrimaryKeySelective(record);
    }
         TaoBaoGoodsBrief goodsBrief = null;
    @Override
    public int updateByPrimaryKey(UserGoodsStorage record) {
        return userGoodsStorageMapper.updateByPrimaryKey(record);
    }
         try {
            // 获取商品详情
            goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
         } catch (TaobaoGoodsDownException e) {
    /**
     * 根据主键批量删除
     *
     * @param list
     * @return
     */
    @Override
    public int deleteBatchByPrimaryKey(List<Long> list) {
        return userGoodsStorageMapper.deleteBatchByPrimaryKey(list);
    }
            // 更新简版 下架状态
            CommonGoods commonGoods = new CommonGoods();
            commonGoods.setGoodsId(auctionId);
            commonGoods.setGoodsType(CommonGoods.GOODS_TYPE_TB);
            commonGoods.setState(CommonGoods.STATE_OFFLINE);
    /**
     * 根据主键 、uid 批量删除
     *
     * @param list
     * @return
     */
    @Override
    public int deleteBatchByUidAndPrimaryKey(Long uid, List<Long> list) {
        return userGoodsStorageMapper.deleteBatchByUidAndPrimaryKey(uid, list);
    }
            throw new UserGoodsStorageException(1, "该商品已下架");
         }
    @Override
    public List<UserGoodsStorage> listQueryByUid(long start, int count, Long uid, Integer source) {
        return userGoodsStorageMapper.listQueryByUid(start, count, uid, source);
    }
         // 转换简版商品信息
         CommonGoods commonGoods = CommonGoodsFactory.create(goodsBrief);
         try {
            commonGoodsService.addOrUpdateCommonGoods(commonGoods);
         } catch (CommonGoodsException e) {
            e.printStackTrace();
            throw new UserGoodsStorageException(1, "商品信息更新失败");
         }
    @Override
    public UserGoodsStorage getByUidAndAuctionId(Long uid, Long auctionId, Integer goodsType) {
        return userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId, goodsType);
    }
         Long cid = commonGoods.getId();
    @Override
    public long countQueryByUid(Long uid, Integer source) {
        return userGoodsStorageMapper.countQueryByUid(uid, source);
    }
         UserGoodsStorage goodsStorage = userGoodsStorageMapper.getByUidAndCid(uid, cid);
    @Override
    public void save(Long uid, Set<Long> auctionIds, Integer goodsType) throws UserGoodsStorageException {
         if (goodsStorage != null) {
            // 初始话状态
            goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
            goodsStorage.setUpdateTime(new Date());
            userGoodsStorageMapper.updateByPrimaryKeySelective(goodsStorage);
         } else {
            goodsStorage = new UserGoodsStorage();
            goodsStorage.setUid(uid);;
            goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
            goodsStorage.setCommonGoods(commonGoods);
            goodsStorage.setCreateTime(new Date());
            goodsStorage.setUpdateTime(new Date());
            userGoodsStorageMapper.insertSelective(goodsStorage);
         }
        if (uid == null) {
            throw new UserGoodsStorageException(1, "用户尚未登录");
        }
      }
   }
        if (auctionIds == null || auctionIds.size() == 0) {
            throw new UserGoodsStorageException(1, "商品ID为空");
        }
   @Override
   public JSONArray getMyStorage(int page, int pageSize, Long uid) throws UserGoodsStorageException {
      JSONArray  array = new JSONArray();
        for (Long auctionId : auctionIds) {
            CommonGoods commonGoods = null;
            if (goodsType == null) {
                goodsType = Constant.SOURCE_TYPE_TAOBAO;
            }
      List<UserGoodsStorage> listStorage = listQueryByUid(page , pageSize, uid);
      if (listStorage == null || listStorage.size() == 0) {
         return array;
      }
      List<Long> listGid = new ArrayList<Long>();
      for (UserGoodsStorage userGoodsStorage : listStorage) {
         CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
         if (commonGoods == null) {
            continue;
         }
         listGid.add(commonGoods.getGoodsId());
      }
      // API网络接口验证是否在售
      List<TaoBaoGoodsBrief> listTaoKeGoods = null;
      try {
         listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
      } catch (TaoKeApiException e) {
         e.printStackTrace();
      } catch (TaobaoGoodsDownException e) {
         e.printStackTrace();
      } catch (Exception e) {
         e.printStackTrace();
      }
      BigDecimal  rate = manageService.getFanLiRate();
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
            .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
      for (UserGoodsStorage userGoodsStorage : listStorage) {
         CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
         if (commonGoods == null) {
            continue;
         }
         if (listTaoKeGoods != null && listTaoKeGoods.size() > 0 ) {
            int state = 1;  // 默认停售
            Long goodsId = commonGoods.getGoodsId();
            for (TaoBaoGoodsBrief taoKeGoods: listTaoKeGoods) {
               Long auctionId = taoKeGoods.getAuctionId();
               if (goodsId == auctionId || goodsId.equals(auctionId)) {
                  state = 0; // 在售
                  break;
               }
            }
            commonGoods.setState(state);
         }
         TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods);
         // 判断是否已分享
         Integer storageState = userGoodsStorage.getState();
         if (storageState != null && storageState == UserGoodsStorage.STATE_SHARED) {
            Integer goodsState = goodsBrief.getState();
            if (goodsState != null && goodsState != 1) {
               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) {
      boolean state = false;
      if (uid != null && auctionId != null) {
         UserGoodsStorage userGoodsStorage = userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId);
         if (userGoodsStorage != null) {
            state = true;
         }
      }
      return state;
   }
   @Override
   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) {
            Long id = torage.getId();
            if (sid == id || sid.equals(id)) {
               listResult.add(torage);
               break;
            }
         }
      }
      BigDecimal totalMoney = new BigDecimal(0.00);
      List<TaoBaoGoodsBrief> listGoodsBrief = new ArrayList<TaoBaoGoodsBrief>();
      BigDecimal rate = hongBaoManageService.getShareRate();
      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);
      FileUploadResult uploadResult = new FileUploadResult();
      uploadResult.setUrl(shareRecord.getSharePictureUrl());
      JSONObject data = new JSONObject();
      data.put("revenue", listGoodsBrief.size() + "个商品预估分享奖金:¥"+totalMoney);
      data.put("shareId", shareRecord.getRedisKey());
      data.put("shareImg", uploadResult);
      data.put("notifyDesc", configService.get("goods_share_multiple_notify"));
            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 + "商品已下架");
                }
                commonGoods = CommonGoodsFactory.create(jdGoods);
      return data;
   }
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
                // 拼多多
                PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(auctionId);
                if (pddGoods == null) {
                    throw new UserGoodsStorageException(1, auctionId + "商品已下架");
                }
                commonGoods = CommonGoodsFactory.create(pddGoods);
            } else {
                // 淘宝
                try {
                    // 获取商品详情
                    TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
                    commonGoods = CommonGoodsFactory.create(goodsBrief);
                } catch (TaobaoGoodsDownException e) {
                    throw new UserGoodsStorageException(1, auctionId + "商品已下架");
                }
            }
            if (commonGoods != null) {
                try {
                    commonGoodsService.addOrUpdateCommonGoods(commonGoods);
                } catch (CommonGoodsException e) {
                    e.printStackTrace();
                    throw new UserGoodsStorageException(1, "商品信息更新失败");
                }
                Long cid = commonGoods.getId();
                UserGoodsStorage goodsStorage = userGoodsStorageMapper.getByUidAndCid(uid, cid);
                if (goodsStorage != null) {
                    // 初始话状态
                    goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
                    goodsStorage.setUpdateTime(new Date());
                    userGoodsStorageMapper.updateByPrimaryKeySelective(goodsStorage);
                } else {
                    goodsStorage = new UserGoodsStorage();
                    goodsStorage.setUid(uid);
                    ;
                    goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
                    goodsStorage.setCommonGoods(commonGoods);
                    goodsStorage.setCreateTime(new Date());
                    goodsStorage.setUpdateTime(new Date());
                    userGoodsStorageMapper.insertSelective(goodsStorage);
                }
            }
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addCommonGoods(Long uid, Set<Long> ids) throws UserGoodsStorageException {
        if (uid == null) {
            throw new UserGoodsStorageException(1, "用户尚未登录");
        }
        if (ids == null || ids.size() == 0) {
            throw new UserGoodsStorageException(1, "商品ID为空");
        }
        for (Long id : ids) {
            CommonGoods commonGoods = commonGoodsService.selectByPrimaryKey(id);
            if (commonGoods != null) {
                UserGoodsStorage goodsStorage = userGoodsStorageMapper.getByUidAndCid(uid, id);
                if (goodsStorage != null) {
                    // 初始话状态
                    goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
                    goodsStorage.setUpdateTime(new Date());
                    userGoodsStorageMapper.updateByPrimaryKeySelective(goodsStorage);
                } else {
                    goodsStorage = new UserGoodsStorage();
                    goodsStorage.setUid(uid);
                    ;
                    goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
                    goodsStorage.setCommonGoods(commonGoods);
                    goodsStorage.setCreateTime(new Date());
                    goodsStorage.setUpdateTime(new Date());
                    userGoodsStorageMapper.insertSelective(goodsStorage);
                }
            }
        }
    }
    @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);
        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>();
            for (UserGoodsStorage userGoodsStorage : listStorage) {
                CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
                if (commonGoods == null) {
                    continue;
                }
                listGid.add(commonGoods.getGoodsId());
            }
            // API网络接口验证是否在售
            try {
                listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
            } catch (TaoKeApiException e) {
                e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        SystemEnum system = userInfoService.getUserSystem(uid);
        BigDecimal rate = manageService.getFanLiRate(UserLevelEnum.daRen, system);
        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; // 默认停售
                Long goodsId = commonGoods.getGoodsId();
                for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
                    Long auctionId = taoKeGoods.getAuctionId();
                    if (goodsId == auctionId || goodsId.equals(auctionId)) {
                        state = 0; // 在售
                        break;
                    }
                }
            }
            commonGoods.setState(state);
            TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods);
            // 判断是否已分享
            Integer storageState = userGoodsStorage.getState();
            if (storageState != null && storageState == UserGoodsStorage.STATE_SHARED) {
                Integer goodsState = goodsBrief.getState();
                if (goodsState != null && goodsState != 1) {
                    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;
        if (uid != null && auctionId != null) {
            UserGoodsStorage userGoodsStorage = userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId, goodType);
            if (userGoodsStorage != null) {
                state = true;
            }
        }
        return state;
    }
    @Override
    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) {
                Long id = torage.getId();
                if (sid == id || sid.equals(id)) {
                    listResult.add(torage);
                    break;
                }
            }
        }
        BigDecimal totalMoney = new BigDecimal(0.00);
        List<TaoBaoGoodsBrief> listGoodsBrief = new ArrayList<TaoBaoGoodsBrief>();
        SystemEnum system = userInfoService.getUserSystem(uid);
        BigDecimal rate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,system);
        for (UserGoodsStorage userGoodsStorage : listResult) {
            CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
            TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods);
            listGoodsBrief.add(goodsBrief);
            BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(goodsBrief, rate, true);
            totalMoney = MoneyBigDecimalUtil.add(totalMoney, money);
        }
        ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorage(uid, listGoodsBrief,
                listStorageID);
        FileUploadResult uploadResult = new FileUploadResult();
        uploadResult.setUrl(shareRecord.getSharePictureUrl());
        UserInfo user = userInfoService.selectByPKey(uid);
        JSONObject data = new JSONObject();
        data.put("revenue", listGoodsBrief.size() + "个商品预估分享奖金:¥" + totalMoney);
        data.put("shareId", shareRecord.getRedisKey());
        data.put("shareImg", uploadResult);
        data.put("notifyDesc", configService.getValue(ConfigKeyEnum.goodsShareMultipleNotify.getKey(), user.getSystem()));
        return data;
    }
    @Override
    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) {
                Long id = torage.getId();
                if (sid == id || sid.equals(id)) {
                    listResult.add(torage);
                    break;
                }
            }
        }
        SystemEnum system = userInfoService.getUserSystem(uid);
        BigDecimal totalMoney = new BigDecimal(0.00);
        List<CommonGoods> listCommonGoods = new ArrayList<CommonGoods>();
        Integer goodsType = null;
        BigDecimal rate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,system);
        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();
            }
        }
        ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorageV2(uid, listCommonGoods,
                listStorageID, needDrawPicture);
        FileUploadResult uploadResult = new FileUploadResult();
        uploadResult.setUrl(shareRecord.getSharePictureUrl());
        JSONObject data = new JSONObject();
        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.getValue(ConfigKeyEnum.goodsShareNotifyJD.getKey(), system));
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            // 拼多多
            data.put("notifyDesc", configService.getValue(ConfigKeyEnum.goodsShareNotifyPDD.getKey(), system));
        } else {
            data.put("notifyDesc", configService.getValue(ConfigKeyEnum.goodsShareMultipleNotify.getKey(), system));
        }
        return data;
    }
}