From 7e7db2fa55a9a3af46d4fd8ede0dee147f101d64 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期六, 09 五月 2020 21:41:27 +0800 Subject: [PATCH] 2.1需求 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java | 445 ++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 275 insertions(+), 170 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java index e6d0e47..8ad030b 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java @@ -4,63 +4,71 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Map; import java.util.Set; import javax.annotation.Resource; -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; - 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 org.yeshi.utils.taobao.TbImgUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.yeshi.fanli.dao.mybatis.user.UserGoodsStorageMapper; -import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord.ShareSourceTypeEnum; +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; +import com.yeshi.fanli.exception.taobao.TaoKeApiException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; 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; -import com.yeshi.fanli.util.StringUtil; 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; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; @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 @@ -106,9 +114,10 @@ public int deleteBatchByPrimaryKey(List<Long> list) { return userGoodsStorageMapper.deleteBatchByPrimaryKey(list); } - + /** * 鏍规嵁涓婚敭 銆乽id 鎵归噺鍒犻櫎 + * * @param list * @return */ @@ -118,22 +127,22 @@ } @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); + public List<UserGoodsStorage> listQueryByUid(long start, int count, Long uid, Integer source) { + return userGoodsStorageMapper.listQueryByUid(start, count, uid, source); } @Override - public long countQueryByUid(Long uid) { - return userGoodsStorageMapper.countQueryByUid(uid); + public UserGoodsStorage getByUidAndAuctionId(Long uid, Long auctionId, Integer goodsType) { + return userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId, goodsType); } @Override - public void save(Long uid, Set<Long> auctionIds) throws UserGoodsStorageException { + 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 { if (uid == null) { throw new UserGoodsStorageException(1, "鐢ㄦ埛灏氭湭鐧诲綍"); @@ -144,211 +153,307 @@ } for (Long auctionId : auctionIds) { - - TaoBaoGoodsBrief goodsBrief = null; - - try { - // 鑾峰彇鍟嗗搧璇︽儏 - goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId); - } catch (TaobaoGoodsDownException e) { - - // 鏇存柊绠�鐗� 涓嬫灦鐘舵�� - CommonGoods commonGoods = new CommonGoods(); - commonGoods.setGoodsId(auctionId); - commonGoods.setGoodsType(CommonGoods.GOODS_TYPE_TB); - commonGoods.setState(CommonGoods.STATE_OFFLINE); - - throw new UserGoodsStorageException(1, "璇ュ晢鍝佸凡涓嬫灦"); + CommonGoods commonGoods = null; + if (goodsType == null) { + goodsType = Constant.SOURCE_TYPE_TAOBAO; } - // 杞崲绠�鐗堝晢鍝佷俊鎭� - CommonGoods commonGoods = CommonGoodsFactory.create(goodsBrief); - try { - commonGoodsService.addOrUpdateCommonGoods(commonGoods); - } catch (CommonGoodsException e) { - e.printStackTrace(); - throw new UserGoodsStorageException(1, "鍟嗗搧淇℃伅鏇存柊澶辫触"); - } + 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); - 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 if (goodsType == Constant.SOURCE_TYPE_PDD) { + // 鎷煎澶� + PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(auctionId); + if (pddGoods == null) { + throw new UserGoodsStorageException(1, auctionId + "鍟嗗搧宸蹭笅鏋�"); + } + commonGoods = CommonGoodsFactory.create(pddGoods); } 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); + // 娣樺疂 + 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 - public JSONArray getMyStorage(int page, int pageSize, Long uid) throws UserGoodsStorageException { - - JSONArray array = new JSONArray(); + @Transactional(rollbackFor=Exception.class) + public void addCommonGoods(Long uid, Set<Long> ids) throws UserGoodsStorageException { - List<UserGoodsStorage> listStorage = listQueryByUid(page , pageSize, uid); + 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; } - - Date nowDate = new Date(); - long nh = 1000 * 60 * 60; - long nd = 1000 * 24 * 60 * 60; - List<CommonGoods> listUpadteCommonGoods = new ArrayList<CommonGoods>(); - + + 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(); + } + } + + BigDecimal rate = manageService.getFanLiRate(UserLevelEnum.daRen); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); - Map<String, String> map = manageService.convertMap(); - BigDecimal rate = manageService.getFanLiRate(); - - for (UserGoodsStorage userGoodsStorage : listStorage) { CommonGoods commonGoods = userGoodsStorage.getCommonGoods(); if (commonGoods == null) { continue; } - - TaoBaoGoodsBrief goodsBrief = null; - JSONObject dataObject = new JSONObject(); - - - // 鏇存柊涓�涓皬鏃朵箣鍐呯殑鍟嗗搧涓嶅啀鏇存柊 - Integer goodsState = commonGoods.getState(); - // 鐘舵�佹湭涓嬫灦鏃惰繘琛屾洿鏂� - if (goodsState != null && (goodsState != 1 || !goodsState.equals(1))) { - Date updateTime = commonGoods.getUpdateTime(); - if (updateTime != null) { - long diff = nowDate.getTime() - updateTime.getTime(); - // 璁$畻宸灏戝皬鏃� - long hour = diff % nd / nh; - if (hour > 1 ) { - try { - if (commonGoods.getGoodsType() == CommonGoods.GOODS_TYPE_TB) { - goodsBrief = redisManager.getTaoBaoGoodsBrief(commonGoods.getGoodsId()); - goodsBrief.setState(0); - goodsState = 0; - } - } catch (TaobaoGoodsDownException e) { - // 宸蹭笅鏋� - goodsState = 1; - commonGoods.setState(1); - e.printStackTrace(); - } - } + + 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; + } } } - - if (goodsBrief == null) { - goodsBrief = TaoBaoUtil.convert(commonGoods); - } else { - CommonGoods upadeteCommonGoods = CommonGoodsFactory.create(goodsBrief); - upadeteCommonGoods.setState(goodsState); - listUpadteCommonGoods.add(upadeteCommonGoods); - } - + commonGoods.setState(state); + TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods); + // 鍒ゆ柇鏄惁宸插垎浜� - Integer state = userGoodsStorage.getState(); - int shared = UserGoodsStorage.STATE_SHARED; - if (state != null && (state == shared || state.equals(shared))) { - if (goodsState != 1 || goodsState.equals(1)) { - goodsBrief.setState(2); // 宸插垎浜姸鎬� + Integer storageState = userGoodsStorage.getState(); + if (storageState != null && storageState == UserGoodsStorage.STATE_SHARED) { + Integer goodsState = goodsBrief.getState(); + if (goodsState != null && goodsState != 1) { + goodsBrief.setState(2); // 宸插垎浜姸鎬� 浼樺厛鏄剧ず宸蹭笅鏋� } } - // 鏀瑰彉鍥剧墖灏哄 - String pictUrl = commonGoods.getPicture(); - if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) { - commonGoods.setPicture(TbImgUtil.getTBSize320Img(pictUrl)); - } 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); } - - - if (listUpadteCommonGoods.size() > 0) { - executor.execute(new Runnable() { - @Override - public void run() { - try { - // 鏇存柊绠�鐗堜俊鎭� - commonGoodsService.updateBatchCommonGoods(listUpadteCommonGoods); - } catch (Exception e) { - e.printStackTrace(); - } - - } - }); - } - + return array; } - - + @Override - public boolean isExistStorage(Long uid, Long auctionId) { + public boolean isExistStorage(Long uid, Long auctionId, Integer goodType) { boolean state = false; if (uid != null && auctionId != null) { - UserGoodsStorage userGoodsStorage = userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId); + UserGoodsStorage userGoodsStorage = userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId, goodType); if (userGoodsStorage != null) { state = true; } } 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) { + 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>(); - - for (UserGoodsStorage userGoodsStorage: listStorage) { + + BigDecimal rate = hongBaoManageService.getShareRate(UserLevelEnum.daRen); + for (UserGoodsStorage userGoodsStorage : listResult) { CommonGoods commonGoods = userGoodsStorage.getCommonGoods(); TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods); listGoodsBrief.add(goodsBrief); - // 宸插垎浜� - userGoodsStorage.setState(1); - userGoodsStorage.setUpdateTime(new Date()); - - String rateStr = hongBaoManageService.get("hongbao_goods_proportion"); - BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(goodsBrief, new BigDecimal(rateStr)); + + BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(goodsBrief, rate); totalMoney = MoneyBigDecimalUtil.add(totalMoney, money); } - - String revenue = listGoodsBrief.size() + "涓晢鍝侀浼板垎浜閲戯細楼"+totalMoney; - FileUploadResult loadResult = userShareGoodsRecordService.save(uid, ShareSourceTypeEnum.storage, listGoodsBrief); - // 鏇存柊涓哄凡鍒嗕韩 - userGoodsStorageMapper.updateBatchSelective(listStorage); - + ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorage(uid, listGoodsBrief, + listStorageID); + FileUploadResult uploadResult = new FileUploadResult(); + uploadResult.setUrl(shareRecord.getSharePictureUrl()); + JSONObject data = new JSONObject(); - data.put("shareImg", loadResult); - data.put("revenue", revenue); - data.put("notifyDesc", configService.get("goods_share_notify")); - + data.put("revenue", listGoodsBrief.size() + "涓晢鍝侀浼板垎浜閲戯細楼" + totalMoney); + data.put("shareId", shareRecord.getRedisKey()); + data.put("shareImg", uploadResult); + data.put("notifyDesc", configService.get(ConfigKeyEnum.goodsShareMultipleNotify.getKey())); 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; + } + } + } + + BigDecimal totalMoney = new BigDecimal(0.00); + List<CommonGoods> listCommonGoods = new ArrayList<CommonGoods>(); + + Integer goodsType = null; + 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(); + } + } + + 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.get(ConfigKeyEnum.goodsShareNotifyJD.getKey())); + } else if (goodsType == Constant.SOURCE_TYPE_PDD) { + // 鎷煎澶� + data.put("notifyDesc", configService.get(ConfigKeyEnum.goodsShareNotifyPDD.getKey())); + } else { + data.put("notifyDesc", configService.get(ConfigKeyEnum.goodsShareMultipleNotify.getKey())); + } + return data; + } + } -- Gitblit v1.8.0