fanli/src/main/java/com/yeshi/fanli/controller/client/UserInfoController.java
@@ -16,6 +16,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.beanutils.PropertyUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -53,12 +56,14 @@ import com.yeshi.fanli.entity.common.AdminUser; import com.yeshi.fanli.entity.common.Config; import com.yeshi.fanli.entity.goods.CollectionGoodsV2; import com.yeshi.fanli.entity.goods.CommonGoods; import com.yeshi.fanli.entity.system.System; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.exception.BindingAccountException; import com.yeshi.fanli.exception.ObjectStateException; import com.yeshi.fanli.exception.goods.CollectionGoodsException; import com.yeshi.fanli.exception.taobao.TaoKeApiException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.AdminUserService; @@ -96,10 +101,8 @@ import com.yeshi.fanli.util.account.UserUtil; import com.yeshi.fanli.util.email.MailSenderUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.util.wx.WXLoginUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @Controller @RequestMapping("api/v1/customer") @@ -1514,20 +1517,68 @@ List<CollectionGoodsV2> collectionGoodsList = collectionGoodsV2Service.getCollectionGoodsList(uid, page + 1, Constant.PAGE_SIZE); // List<CollectionGoods> coList = // collectionGoodsService.findCollectionGoods(uid, page + 1); List<TaoBaoGoodsBriefExtra> list = new ArrayList<TaoBaoGoodsBriefExtra>(); long count = collectionGoodsV2Service.getCollectionGoodsCount(uid); JSONObject data = new JSONObject(); BigDecimal proportion = hongBaoManageService.getFanLiRate(); List<TaoBaoGoodsBriefExtra> list = new ArrayList<TaoBaoGoodsBriefExtra>(); collectionGoodsList.parallelStream().forEachOrdered(cg -> { TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(cg.getCommonGoods()); goodsBrief.setSalesCount(TaoBaoUtil.getSaleCount(goodsBrief.getBiz30day())); TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion.toString(), ""); taoBaoGoodsBriefExtra.setCreatetime(cg.getCreateTime()); list.add(taoBaoGoodsBriefExtra); }); List<TaoBaoGoodsBrief> listTaoKeGoods = new ArrayList<TaoBaoGoodsBrief>(); if (collectionGoodsList != null && collectionGoodsList.size() > 0) { BigDecimal proportion = hongBaoManageService.getFanLiRate(); List<Long> listGid = new ArrayList<Long>(); for (CollectionGoodsV2 collectionGoodsV2 : collectionGoodsList) { CommonGoods commonGoods = collectionGoodsV2.getCommonGoods(); if (commonGoods == null) { continue; } listGid.add(commonGoods.getGoodsId()); } try { // API网络接口验证是否在售 listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid); } catch (TaoKeApiException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } for (CollectionGoodsV2 collectionGoodsV2 : collectionGoodsList) { CommonGoods commonGoods = collectionGoodsV2.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); goodsBrief.setSalesCount(TaoBaoUtil.getSaleCount(goodsBrief.getBiz30day())); TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion.toString(), ""); taoBaoGoodsBriefExtra.setCreatetime(commonGoods.getCreateTime()); list.add(taoBaoGoodsBriefExtra); } } GsonBuilder builder = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() { @Override public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) { fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java
@@ -15,7 +15,6 @@ import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Service; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.taobao.TbImgUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -26,6 +25,7 @@ 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; @@ -35,9 +35,9 @@ 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.StringUtil; import com.yeshi.fanli.util.factory.CommonGoodsFactory; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; @Service public class UserGoodsStorageServiceImpl implements UserGoodsStorageService { @@ -207,15 +207,31 @@ return array; } Date nowDate = new Date(); long nh = 1000 * 60 * 60; long nd = 1000 * 24 * 60 * 60; List<CommonGoods> listUpadteCommonGoods = new ArrayList<CommonGoods>(); 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(); @@ -223,83 +239,36 @@ 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 day = diff / nd; long hour = diff % nd / nh; if (hour > 1 || day > 0 ) { try { if (commonGoods.getGoodsType() == CommonGoods.GOODS_TYPE_TB) { goodsBrief = redisManager.getTaoBaoGoodsBrief(commonGoods.getGoodsId()); goodsState = 0; goodsBrief.setState(goodsState); CommonGoods upadeteCommonGoods = CommonGoodsFactory.create(goodsBrief); upadeteCommonGoods.setState(goodsState); upadeteCommonGoods.setId(commonGoods.getId()); listUpadteCommonGoods.add(upadeteCommonGoods); } } catch (TaobaoGoodsDownException e) { // 已下架 goodsState = 1; commonGoods.setState(goodsState); listUpadteCommonGoods.add(commonGoods); e.printStackTrace(); } } 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); } if (goodsBrief == null) { goodsBrief = TaoBaoUtil.convert(commonGoods); } 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 = goodsBrief.getPictUrl(); if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) { goodsBrief.setPictUrl(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; fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserShareGoodsRecordServiceImpl.java
@@ -31,12 +31,14 @@ import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup; import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord; import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord.ShareSourceTypeEnum; import com.yeshi.fanli.entity.bus.user.UserGoodsStorage; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.goods.CommonGoods; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; 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.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.goods.CommonGoodsService; @@ -52,6 +54,7 @@ import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.factory.CommonGoodsFactory; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; @Service public class UserShareGoodsRecordServiceImpl implements UserShareGoodsRecordService { @@ -484,88 +487,65 @@ public JSONObject getGoodsGroup(Long recordId) throws UserShareGoodsRecordException { JSONArray array = new JSONArray(); List<CommonGoods> listUpadteCommonGoods = new ArrayList<CommonGoods>(); List<UserShareGoodsGroup> list = userShareGoodsGroupService.listByRecordId(recordId); if (list != null && list.size() > 0) { List<Long> listGid = new ArrayList<Long>(); for (UserShareGoodsGroup goodsGroup : list) { CommonGoods commonGoods = goodsGroup.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(); } Date nowDate = new Date(); long nh = 1000 * 60 * 60; long nd = 1000 * 24 * 60 * 60; Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); Map<String, String> map = hongBaoManageService.convertMap(); String proportion = map.get("hongbao_goods_proportion"); for (UserShareGoodsGroup userShareGoodsGroup : list) { CommonGoods commonGoods = userShareGoodsGroup.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 day = diff / nd; long hour = diff % nd / nh; if (hour > 1 || day > 0 ) { try { if (commonGoods.getGoodsType() == CommonGoods.GOODS_TYPE_TB) { goodsBrief = redisManager.getTaoBaoGoodsBrief(commonGoods.getGoodsId()); goodsState = 0; goodsBrief.setState(goodsState); CommonGoods upadeteCommonGoods = CommonGoodsFactory.create(goodsBrief); upadeteCommonGoods.setState(goodsState); upadeteCommonGoods.setId(commonGoods.getId()); listUpadteCommonGoods.add(upadeteCommonGoods); } } catch (TaobaoGoodsDownException e) { // 已下架 goodsState = 1; commonGoods.setState(goodsState); listUpadteCommonGoods.add(commonGoods); e.printStackTrace(); } } Map<String, String> map = hongBaoManageService.convertMap(); String proportion = map.get("hongbao_goods_proportion"); for (UserShareGoodsGroup goodsGroup : list) { CommonGoods commonGoods = goodsGroup.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; } } if (goodsBrief == null) { goodsBrief = TaoBaoUtil.convert(commonGoods); } // 改变图片尺寸 String pictUrl = goodsBrief.getPictUrl(); if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) { goodsBrief.setPictUrl(TbImgUtil.getTBSize320Img(pictUrl)); } userShareGoodsGroup.setId(null); userShareGoodsGroup.setBrowseTime(null); userShareGoodsGroup.setCreateTime(null); userShareGoodsGroup.setUpdateTime(null); userShareGoodsGroup.setRecordId(null); dataObject.put("todayBrowse",userShareGoodsGroup.getTodayBrowse() ); dataObject.put("totalBrowse",userShareGoodsGroup.getTotalBrowse() ); dataObject.put("totalOrder", userShareGoodsGroup.getTotalOrder()); dataObject.put("totalMoney", "¥"+userShareGoodsGroup.getTotalMoney()); dataObject.put("goods", gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion, null))); array.add(dataObject); commonGoods.setState(state); } TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods); JSONObject dataObject = new JSONObject(); dataObject.put("todayBrowse",goodsGroup.getTodayBrowse() ); dataObject.put("totalBrowse",goodsGroup.getTotalBrowse() ); dataObject.put("totalOrder", goodsGroup.getTotalOrder()); dataObject.put("totalMoney", "¥"+goodsGroup.getTotalMoney()); dataObject.put("goods", gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion, null))); array.add(dataObject); } String title = ""; @@ -578,21 +558,6 @@ data.put("title", title); data.put("count", list.size()); data.put("result_list", array); if (listUpadteCommonGoods.size() > 0) { executor.execute(new Runnable() { @Override public void run() { try { // 更新简版信息 commonGoodsService.updateBatchCommonGoods(listUpadteCommonGoods); } catch (Exception e) { e.printStackTrace(); } } }); } return data; } fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -24,6 +24,7 @@ import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; import org.yeshi.utils.taobao.TbImgUtil; import net.sf.json.JSONArray; @@ -222,6 +223,25 @@ } return null; } public static List<TaoBaoGoodsBrief> getBatchGoodsInfo(List<Long> listId) throws TaoKeApiException,TaobaoGoodsDownException { if (listId == null || listId.size() == 0) { throw new TaobaoGoodsDownException(1,"淘宝商品ID不能为空"); } if ( listId.size() > 40) { throw new TaobaoGoodsDownException(1,"淘宝商品ID不能超过40个"); } StringBuffer ids = new StringBuffer(); for (Long id: listId) { ids.append(id + ","); } return getBatchGoodsInfos(ids.substring(0, ids.length() -1)); } /** * 获取商品详情,简版