package com.yeshi.fanli.service.impl.dynamic; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.annotation.Resource; import org.apache.commons.beanutils.PropertyUtils; import org.springframework.cache.annotation.Cacheable; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Service; import org.yeshi.utils.DateLunarUtil; import org.yeshi.utils.DateUtil; import org.yeshi.utils.HttpUtil; import org.yeshi.utils.taobao.TbImgUtil; import com.yeshi.fanli.dao.dynamic.DynamicInfoDao; import com.yeshi.fanli.dto.ConfigParamsDTO; import com.yeshi.fanli.dto.taobao.TaoBaoShopDTO; import com.yeshi.fanli.entity.bus.activity.ActivityRuleUser; import com.yeshi.fanli.entity.bus.activity.ActivityUser; import com.yeshi.fanli.entity.bus.activity.RecommendActivity; import com.yeshi.fanli.entity.bus.activity.RecommendActivityInviteInfo; import com.yeshi.fanli.entity.bus.activity.RecommendActivityTaoBaoGoods; import com.yeshi.fanli.entity.bus.clazz.GoodsClass; import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; import com.yeshi.fanli.entity.common.JumpDetailV2; import com.yeshi.fanli.entity.dynamic.DynamicInfo; import com.yeshi.fanli.entity.dynamic.GoodsPicture; import com.yeshi.fanli.entity.dynamic.InviteMaterial; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.entity.taobao.TaoBaoShop; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.activity.ActivityUserService; import com.yeshi.fanli.service.inter.common.JumpDetailV2Service; import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService; import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService; import com.yeshi.fanli.service.inter.dynamic.InviteMaterialService; import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService; import com.yeshi.fanli.service.inter.taobao.TaoBaoShopService; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service; import com.yeshi.fanli.service.inter.user.QrCodeService; 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.dataoke.DaTaoKeApiUtil; import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory; import com.yeshi.fanli.util.taobao.DaTaoKeUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.vo.goods.GoodsDetailVO; import com.yeshi.fanli.vo.msg.ClientTextStyleVO; import net.sf.json.JSONObject; @Service public class DynamicInfoServiceImpl implements DynamicInfoService { @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private DynamicInfoDao dynamicInfoDao; @Resource private RedisManager redisManager; @Resource private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service; @Resource private JumpDetailV2Service jumpDetailV2Service; @Resource private ActivityUserService activityUserService; @Resource private TaoBaoGoodsBriefService taoBaoGoodsBriefService; @Resource private HongBaoManageService hongBaoManageService; @Resource private TaoBaoShopService taoBaoShopService; @Resource private InviteMaterialService inviteMaterialService; @Resource private QrCodeService qrCodeService; @Resource private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService; @Resource private GoodsEvaluateService goodsEvaluateService; @Override public void insert(DynamicInfo record) { dynamicInfoDao.insert(record); } @Override public DynamicInfo getById(String id) { return dynamicInfoDao.getById(id); } @Override public void insertTimeInvite() { InviteMaterial inviteMaterial = inviteMaterialService.getInviteMaterial(); if (inviteMaterial == null) { return; } Date date = new Date(); String materialId = inviteMaterial.getId(); String content = inviteMaterial.getText(); ActivityUser user = activityUserService.selectByPrimaryKey(2L); if (!StringUtil.isNullOrEmpty(content)) { DynamicInfo dynamicTxt = new DynamicInfo(); dynamicTxt.setId(UUID.randomUUID().toString().replace("-", "")); dynamicTxt.setInviteMaterialId(materialId); dynamicTxt.setClassId(4L); dynamicTxt.setSubclassId(0L); dynamicTxt.setShowType(DynamicInfo.SHOW_TYPE_ZERO); dynamicTxt.setShareType(DynamicInfo.SHARE_TYPE_INVITE); dynamicTxt.setUser(user); dynamicTxt.setShareCount(1000 + (int) (Math.random() * 8000)); dynamicTxt.setCreateTime(date); dynamicTxt.setUpdateTime(date); SimpleDateFormat format = new SimpleDateFormat("MM月dd日"); StringBuffer buffer = new StringBuffer(); buffer.append("-------------------\n"); buffer.append("今天 : " + format.format(date)); buffer.append(" "); buffer.append(DateLunarUtil.getWeekd(date) + "\n"); buffer.append("各位亲爱的你"); buffer.append(" "); buffer.append("早安~\n"); buffer.append("我的邀请码:【邀请码】\n"); buffer.append("购物省钱板栗快省App:【邀请链接】"); content = content.replaceAll("\\,", "\\,").replaceAll("\\.", "\\。").replaceAll("\\;", "\\;") .replaceAll("\\!", "\\!").replaceAll("\\?", "\\?").replaceAll("\\:", "\\:"); ClientTextStyleVO row1 = new ClientTextStyleVO(); row1.setColor("#333333"); row1.setContent(content + "\n" + buffer.toString()); List listtitle = new ArrayList(); listtitle.add(row1); dynamicTxt.setTitle(listtitle); // 空数据 List listImg = new ArrayList(); dynamicTxt.setImgs(listImg); dynamicInfoDao.insert(dynamicTxt); } String picture = inviteMaterial.getPicture(); if (!StringUtil.isNullOrEmpty(picture)) { DynamicInfo dynamicPic = new DynamicInfo(); dynamicPic.setId(UUID.randomUUID().toString().replace("-", "")); dynamicPic.setInviteMaterialId(materialId); dynamicPic.setClassId(4L); dynamicPic.setSubclassId(0L); dynamicPic.setShowType(DynamicInfo.SHOW_TYPE_ONE); dynamicPic.setShareType(DynamicInfo.SHARE_TYPE_INVITE); dynamicPic.setUser(user); dynamicPic.setShareCount(1000 + (int) (Math.random() * 8000)); dynamicPic.setCreateTime(date); dynamicPic.setUpdateTime(date); try { // 画图 String url = qrCodeService.drawInviteToGreet(picture, null, null, null, content, new Date()); List listtitle = new ArrayList(); dynamicPic.setTitle(listtitle); GoodsPicture p2 = new GoodsPicture(); p2.setW(100); p2.setH(100); p2.setUrl(url); p2.setUrlOriginal(picture); p2.setTitleOriginal(content); List listImg = new ArrayList(); listImg.add(p2); dynamicPic.setImgs(listImg); dynamicInfoDao.insert(dynamicPic); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } // 更新素材状态 inviteMaterialService.updateState(1, materialId); } @Override public void insertShopInfo() { List brandIdList = DaTaoKeApiUtil.getBrandIdList(); if (brandIdList == null || brandIdList.size() == 0) { LogHelper.test("大淘客品牌id获取失败(DynamicInfoService-insertShopInfo)"); return; } Long classId = 3L; Long subclassId = 0L; List listInfo = dynamicInfoDao.query(classId, subclassId); // 清理已存在品牌 if (listInfo != null && listInfo.size() > 0) { for (int i = 0; i < brandIdList.size(); i++) { String brandId = brandIdList.get(i); for (int j = 0; j < listInfo.size(); j++) { String id = listInfo.get(j).getId(); if (brandId.equals(id)) { brandIdList.remove(brandId); i--; listInfo.remove(listInfo.get(j)); j--; } } } } if (brandIdList == null || brandIdList.size() == 0) { LogHelper.test("大淘客品牌已全部爬取(DynamicInfoService-insertShopInfo)"); return; } int index = (int) (Math.random() * brandIdList.size()); String brandId = brandIdList.get(index); TaoBaoShopDTO dynamicShopInfo = DaTaoKeApiUtil.getDynamicShopInfo(brandId); if (dynamicShopInfo == null) { LogHelper.test("大淘客品牌信息爬取失败(DynamicInfoService-insertShopInfo)"); return; } List listGoods = dynamicShopInfo.getListGoods(); if (listGoods == null || listGoods.size() == 0) { LogHelper.test("大淘客品牌商品信息爬取失败(DynamicInfoService-insertShopInfo)"); return; } Long sellerId = dynamicShopInfo.getSellerId(); TaoBaoGoodsBrief taoBaoGoodsBrief = listGoods.get(0); TaoBaoShop taoBaoShop = taoBaoShopService.getTaoBaoShop(taoBaoGoodsBrief.getAuctionId(), sellerId); if (taoBaoShop == null) { LogHelper.test("店铺详情信息获取失败(DynamicInfoService-insertShopInfo)"); return; } String shopLink = taoBaoShop.getShopLink(); if (StringUtil.isNullOrEmpty(shopLink)) { taoBaoShop.setShopLink(TaoBaoUtil.getShopLink(taoBaoShop.getId())); } if(StringUtil.isNullOrEmpty(taoBaoShop.getShopIcon())) taoBaoShop.setShopIcon(dynamicShopInfo.getShopIcon()); DynamicInfo dynamicVO = new DynamicInfo(); dynamicVO.setId(brandId); dynamicVO.setClassId(classId); dynamicVO.setSubclassId(subclassId); dynamicVO.setShowType(DynamicInfo.SHOW_TYPE_TWO); dynamicVO.setShop(taoBaoShop); List userList = activityUserService.listByRuleCode(ActivityRuleUser.RULE_HAODIAN, 1, 50); dynamicVO.setUser(userList.get((int) (userList.size() * Math.random())).getActivityUser()); dynamicVO.setCreateTime(DateUtil.reduceRandomMinute(new Date(), 8)); dynamicVO.setUpdateTime(new Date()); // 介绍内容 ClientTextStyleVO row1 = new ClientTextStyleVO(); row1.setColor("#333333"); row1.setContent(dynamicShopInfo.getBrandDes()); List listTitle = new ArrayList(); listTitle.add(row1); dynamicVO.setTitle(listTitle); // 商品信息 List listPicture = new ArrayList(); for (TaoBaoGoodsBrief goodsBrief : listGoods) { BigDecimal proportion = hongBaoManageService.getFanLiRate(); TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion.toString(), null); taoBaoGoodsBriefExtra.setCouponInfo(null); taoBaoGoodsBriefExtra.setUpdatetime(new Date()); if (!taoBaoGoodsBriefExtra.isCoupon()) { taoBaoGoodsBriefExtra.setState(1); } String goodsId = goodsBrief.getAuctionId().toString(); JSONObject item = new JSONObject(); item.put("id", goodsId); item.put("from", "dynamics"); GoodsPicture goodsPicture = new GoodsPicture(); goodsPicture.setH(100); goodsPicture.setW(100); goodsPicture.setUrl(TbImgUtil.getTBSize320Img(goodsBrief.getPictUrl())); goodsPicture.setJumpDetail(jumpDetailV2Service.getByTypeCache("goodsdetail")); goodsPicture.setParams(item.toString()); goodsPicture.setGoods(taoBaoGoodsBriefExtra); listPicture.add(goodsPicture); } dynamicVO.setImgs(listPicture); dynamicInfoDao.insert(dynamicVO); } @Override public void insertTimeRecommend() { try { Long classId = 2L; List list = DaTaoKeUtil.goodsClasses; int index = (int) (Math.random() * list.size()); Long subclassId = list.get(index).getId(); int cid = Integer.parseInt(subclassId + ""); int count = 0; double random = Math.random(); if (random > 0.4) { count = 9; } else { count = 4; } List listDaTaoKe = daTaoKeGoodsDetailV2Service.getGoodsNotInList(subclassId, null, count); DaTaoKeDetailV2 daTaoKeDetail = null; // 商品列表 List listPicture = new ArrayList(); // 商品列表 List listGoods = new ArrayList(); // 分享奖金 BigDecimal shareMoney = new BigDecimal(0); BigDecimal proportion = hongBaoManageService.getFanLiRate(); for (DaTaoKeDetailV2 daTaoKe : listDaTaoKe) { if (daTaoKeDetail == null) { daTaoKeDetail = daTaoKe; } // 分享奖金 TaoBaoGoodsBrief taoBaoGoodsBrief = TaoBaoUtil.convert(daTaoKe); listGoods.add(taoBaoGoodsBrief); TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); if (!taoBaoGoodsBriefExtra.isCoupon()) { taoBaoGoodsBriefExtra.setState(1); } BigDecimal money = taoBaoGoodsBriefService.getShareGoodsUserHongBao(taoBaoGoodsBrief); shareMoney = MoneyBigDecimalUtil.add(shareMoney, money); // 商品图片 taoBaoGoodsBriefExtra.setUpdatetime(new Date()); taoBaoGoodsBriefExtra.setCouponInfo(null); GoodsPicture goodsPicture = getGoodsPicture(daTaoKe); goodsPicture.setGoods(taoBaoGoodsBriefExtra); listPicture.add(goodsPicture); } // 组织动态信息 DynamicInfo dynamicInfo = getDynamicInfo(daTaoKeDetail, classId, subclassId); // 无内容 dynamicInfo.setTitle(new ArrayList()); // 发布用户 dynamicInfo.setUser(activityUserService.getRandomByDaTaoKeCid(cid)); dynamicInfo.setImgs(listPicture); dynamicInfo.setListGoodsBrief(listGoods); ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); shareMoneyDesc.setColor("#FFFFFF"); shareMoneyDesc.setBottomColor("#E8AE48"); shareMoneyDesc.setContent("预估分享奖金:¥" + shareMoney); dynamicInfo.setDesc(shareMoneyDesc); dynamicInfo.setShowType(2); if (count == 4) { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_TWO); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_FOUR); // 分享类型4图 } else { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_THREE); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_NINE); // 分享类型9图 } // 保存信息 dynamicInfoDao.insert(dynamicInfo); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } // 定时插入 @Override public void insertTimeHotSale() { Long classId = 1L; try { for (int i = 0; i < 3; i++) { boolean addSuccess = saveHotSale(classId, 0L); if (addSuccess) { break; } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } // 热销单品的分类 List list = DaTaoKeUtil.goodsClasses; for (GoodsClass goodsClass : list) { try { for (int i = 0; i < 3; i++) { boolean addSuccess = saveHotSale(classId, goodsClass.getId()); if (addSuccess) { break; } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } /** * 保存热销单品 * * @param classId * @param subclassId * @throws TaobaoGoodsDownException */ public boolean saveHotSale(Long classId, Long subclassId) throws TaobaoGoodsDownException { boolean addSuccess = false; List listId = null; List listInfo = dynamicInfoDao.query(classId, subclassId); if (listInfo != null && listInfo.size() > 0) { listId = new ArrayList(); for (DynamicInfo dynamicInfo : listInfo) { Long daTaoKeId = dynamicInfo.getDaTaoKeId(); if (daTaoKeId != null) { listId.add(dynamicInfo.getDaTaoKeId()); } } } // 大淘客数据 DaTaoKeDetailV2 daTaoKe = daTaoKeGoodsDetailV2Service.getGoodsNotInList(subclassId, listId, 1).get(0); if (daTaoKe == null) { return addSuccess; } try { daTaoKe = DaTaoKeUtil.filterDaTaoKe(TaoKeApiUtil.searchGoodsDetail(daTaoKe.getGoodsId()), daTaoKe); } catch (Exception e) { } TaoBaoGoodsBrief taoBaoGoodsBrief = TaoBaoUtil.convert(daTaoKe); BigDecimal proportion = hongBaoManageService.getFanLiRate(); TaoBaoGoodsBriefExtra goodsExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); if (!goodsExtra.isCoupon() || (goodsExtra.getState() != null && goodsExtra.getState() == 1)) { return addSuccess; // 已下架 、无券 不加入 } List listGoods = new ArrayList(); listGoods.add(taoBaoGoodsBrief); goodsExtra.setTkRate(taoBaoGoodsBrief.getTkRate()); goodsExtra.setUpdatetime(new Date()); goodsExtra.setCouponInfo(null); GoodsPicture goodsPicture = getGoodsPicture(daTaoKe); goodsPicture.setGoods(goodsExtra); // 商品列表 List listPicture = new ArrayList(); listPicture.add(goodsPicture); // 获取商品列表图片 TaoBaoGoodsBrief taoBaoGoodsBrief2 = TaoKeApiUtil.getSimpleGoodsInfo(daTaoKe.getGoodsId()); List imgList = taoBaoGoodsBrief2.getImgList(); List listimgs = new ArrayList(); String pic = daTaoKe.getMainPic(); listimgs.add(TbImgUtil.getTBSize320Img(pic)); if (imgList != null && imgList.size() > 0) { for (String img : imgList) { if (listPicture.size() >= 4) { break; } if (pic.equals(img)) { continue; } listimgs.add(img); GoodsPicture picture = new GoodsPicture(); picture.setH(100); picture.setW(100); picture.setUrl(TbImgUtil.getTBSize320Img(img)); listPicture.add(picture); } } goodsExtra.setImgList(imgList); // 分享奖金 BigDecimal shareMoney = taoBaoGoodsBriefService.getShareGoodsUserHongBao(taoBaoGoodsBrief); ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); shareMoneyDesc.setColor("#FFFFFF"); shareMoneyDesc.setBottomColor("#E8AE48"); shareMoneyDesc.setContent("预估分享奖金:¥" + shareMoney); // 组织动态信息 DynamicInfo dynamicInfo = getDynamicInfo(daTaoKe, classId, subclassId); dynamicInfo.setUser(activityUserService.getRandomByDaTaoKeCid(daTaoKe.getCid())); dynamicInfo.setImgs(listPicture); dynamicInfo.setDesc(shareMoneyDesc); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_ONE); dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_TWO); dynamicInfo.setListGoodsBrief(listGoods); String desc = DaTaoKeUtil.getDesc(daTaoKe); if (!StringUtil.isNullOrEmpty(desc)) { int index = desc.lastIndexOf("\n"); String newDesc = desc.substring(index + 1); if (StringUtil.isNullOrEmpty(newDesc)) { desc = desc.substring(0, index); } } dynamicInfo.setTitle(convertIntroduce(desc)); // 保存信息 dynamicInfoDao.insert(dynamicInfo); addSuccess = true; return addSuccess; } /** * 数据组织存入MongoDB中 * * @param daTaoKe * @param classId * @param subclassId * @throws TaobaoGoodsDownException */ public DynamicInfo getDynamicInfo(DaTaoKeDetailV2 daTaoKe, Long classId, Long subclassId) { DynamicInfo dynamicInfo = new DynamicInfo(); dynamicInfo.setId(UUID.randomUUID().toString().replace("-", "")); dynamicInfo.setClassId(classId); dynamicInfo.setSubclassId(subclassId); dynamicInfo.setDaTaoKeId(daTaoKe.getId()); dynamicInfo.setCreateTime(DateUtil.reduceRandomMinute(new Date(), 8)); dynamicInfo.setUpdateTime(new Date()); // 随机分享次数 dynamicInfo.setShareCount(1000 + (int) (Math.random() * 8000)); return dynamicInfo; } /** * 文字内容 * * @param introduce * @return */ public List convertIntroduce(String introduce) { List title = new ArrayList(); ClientTextStyleVO desc = new ClientTextStyleVO(); desc.setColor("#333333"); desc.setContent(introduce); title.add(desc); return title; } /** * 图片列表 * * @param daTaoKe * @return */ public GoodsPicture getGoodsPicture(DaTaoKeDetailV2 daTaoKe) { GoodsPicture goodsPicture = new GoodsPicture(); goodsPicture.setH(100); goodsPicture.setW(100); goodsPicture.setUrl(TbImgUtil.getTBSize320Img(daTaoKe.getMainPic())); goodsPicture.setJumpDetail(jumpDetailV2Service.getByTypeCache("goodsdetail")); String goodsId = daTaoKe.getGoodsId().toString(); JSONObject item = new JSONObject(); item.put("id", goodsId); item.put("from", "dynamics"); goodsPicture.setParams(item.toString()); return goodsPicture; } @Override public void insertInviteActivity(RecommendActivity activity) throws Exception { String title = activity.getTitle(); String picUrl = null; List imageList = activity.getImageList(); if (imageList != null && imageList.size() > 0) { picUrl = imageList.get(0); } if (StringUtil.isNullOrEmpty(title) || StringUtil.isNullOrEmpty(picUrl)) { return; } // 判断是否已存在 String dynamicInfoId = null; Long activityId = activity.getId(); DynamicInfo dynamicVO = dynamicInfoDao.getByActivityId(activityId); if (dynamicVO == null) { dynamicVO = new DynamicInfo(); dynamicVO.setId(UUID.randomUUID().toString().replace("-", "")); dynamicVO.setCreateTime(DateUtil.reduceRandomMinute(new Date(), 8)); } else { dynamicInfoId = dynamicVO.getId(); } if (!StringUtil.isNullOrEmpty(title)) { title = title.replaceAll("

", "").replaceAll("

", "").replaceAll("
", "\n"); int index = title.lastIndexOf("\n"); String newDesc = title.substring(index + 1); if (StringUtil.isNullOrEmpty(newDesc)) { title = title.substring(0, index); } title = title.replaceAll("\\,", "\\,").replaceAll("\\.", "\\。").replaceAll("\\;", "\\;") .replaceAll("\\!", "\\!").replaceAll("\\?", "\\?").replaceAll("\\:", "\\:"); } dynamicVO.setId(UUID.randomUUID().toString().replace("-", "")); dynamicVO.setActivityId(activityId); dynamicVO.setClassId(4L); dynamicVO.setSubclassId(0L); dynamicVO.setShareType(DynamicInfo.SHARE_TYPE_INVITE); dynamicVO.setUpdateTime(new Date()); Integer shareCount = activity.getShareCount(); if (shareCount == null || shareCount <= 0) { dynamicVO.setShareCount(1000 + (int) (Math.random() * 8000)); } else { dynamicVO.setShareCount(shareCount); } // 发布用户 ActivityUser activityUser = activity.getActivityUser(); if (activityUser == null) { dynamicVO.setUser(activityUserService.selectByPrimaryKey(2L)); } else { dynamicVO.setUser(activityUser); } // 介绍内容 List listtitle = new ArrayList(); if (!StringUtil.isNullOrEmpty(title)) { ClientTextStyleVO row1 = new ClientTextStyleVO(); row1.setColor("#333333"); row1.setContent(title); listtitle.add(row1); } // 图片 List listImg = new ArrayList(); if (StringUtil.isNullOrEmpty(picUrl)) { dynamicVO.setShowType(DynamicInfo.SHOW_TYPE_ZERO); } else { dynamicVO.setShowType(DynamicInfo.SHOW_TYPE_ONE); RecommendActivityInviteInfo inviteInfo = activity.getInviteInfo(); Integer pX = null; Integer pY = null; Integer size = null; if (inviteInfo != null) { pX = inviteInfo.getPx(); pY = inviteInfo.getPy(); size = inviteInfo.getSize(); } InputStream asInputStream = HttpUtil.getAsInputStream(picUrl); int index = picUrl.lastIndexOf("/"); String newUrl = picUrl.substring(index + 1); String urlMd5 = newUrl.substring(0, newUrl.lastIndexOf(".")); // 图片 String imgLink = qrCodeService.drawInviteQrCodeNew(asInputStream, urlMd5, null, null, pX, pY, size, null); GoodsPicture p2 = new GoodsPicture(); p2.setW(100); p2.setH(100); p2.setUrl(imgLink); p2.setUrlOriginal(picUrl); p2.setPx(pX); p2.setPy(pY); p2.setSize(size); listImg.add(p2); } dynamicVO.setImgs(listImg); dynamicVO.setTitle(listtitle); if (!StringUtil.isNullOrEmpty(dynamicInfoId)) { dynamicInfoDao.deleteById(dynamicInfoId); } dynamicInfoDao.insert(dynamicVO); } @Override public void insertActivityRecommend(RecommendActivity activity) { if (activity == null || activity.getGoodsList() == null) { return; } try { String dynamicInfoId = null; DynamicInfo dynamicInfo = dynamicInfoDao.getByActivityId(activity.getId()); if (dynamicInfo == null) { dynamicInfo = new DynamicInfo(); dynamicInfo.setId(UUID.randomUUID().toString().replace("-", "")); dynamicInfo.setCreateTime(new Date()); } else { dynamicInfoId = dynamicInfo.getId(); } dynamicInfo.setClassId(2L); dynamicInfo.setSubclassId(0L); dynamicInfo.setUser(activity.getActivityUser()); dynamicInfo.setActivityId(activity.getId()); dynamicInfo.setUpdateTime(new Date()); List listtitle = new ArrayList(); String title = activity.getTitle(); if (!StringUtil.isNullOrEmpty(title)) { title = title.replaceAll("

", ""); title = title.replaceAll("

", ""); title = title.replaceAll("
", "\n"); int index = title.lastIndexOf("\n"); String newDesc = title.substring(index + 1); if (StringUtil.isNullOrEmpty(newDesc)) { title = title.substring(0, index); } ClientTextStyleVO row1 = new ClientTextStyleVO(); row1.setColor("#333333"); row1.setContent(title); listtitle.add(row1); } dynamicInfo.setTitle(listtitle); Integer shareCount = activity.getShareCount(); if (shareCount == null || shareCount <= 0) { dynamicInfo.setShareCount(1000 + (int) (Math.random() * 8000)); } else { dynamicInfo.setShareCount(shareCount); } // 发布用户 ActivityUser activityUser = activity.getActivityUser(); if (activityUser == null) { dynamicInfo.setUser(activityUserService.selectByPrimaryKey(2L)); } else { dynamicInfo.setUser(activityUser); } List listGoods = new ArrayList(); // 商品列表 List listPicture = new ArrayList(); BigDecimal proportion = hongBaoManageService.getFanLiRate(); // 分享奖金 BigDecimal shareMoney = new BigDecimal(0); if (activity.getGoodsList() != null) { for (RecommendActivityTaoBaoGoods activityGoods : activity.getGoodsList()) { TaoBaoGoodsBrief taoBaoGoodsBrief = null; TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = null; String auctionId = activityGoods.getAuctionId(); try { taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(auctionId)); taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); if (!taoBaoGoodsBriefExtra.isCoupon()) { taoBaoGoodsBriefExtra.setState(1); } BigDecimal money = taoBaoGoodsBriefService.getShareGoodsUserHongBao(taoBaoGoodsBrief); shareMoney = MoneyBigDecimalUtil.add(shareMoney, money); } catch (TaobaoGoodsDownException e) { taoBaoGoodsBrief = activityGoods.getTaoBaoGoodsBrief(); taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); taoBaoGoodsBriefExtra.setState(1); taoBaoGoodsBriefExtra.setCoupon(false); } listGoods.add(taoBaoGoodsBrief); // 商品图片 taoBaoGoodsBriefExtra.setCouponInfo(null); taoBaoGoodsBriefExtra.setUpdatetime(new Date()); JSONObject item = new JSONObject(); item.put("id", auctionId); item.put("from", "dynamics"); GoodsPicture goodsPicture = new GoodsPicture(); goodsPicture.setH(100); goodsPicture.setW(100); goodsPicture.setUrl(TbImgUtil.getTBSize320Img(taoBaoGoodsBrief.getPictUrl())); goodsPicture.setJumpDetail(jumpDetailV2Service.getByTypeCache("goodsdetail")); goodsPicture.setParams(item.toString()); goodsPicture.setGoods(taoBaoGoodsBriefExtra); listPicture.add(goodsPicture); } } dynamicInfo.setImgs(listPicture); dynamicInfo.setListGoodsBrief(listGoods); ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); shareMoneyDesc.setColor("#FFFFFF"); shareMoneyDesc.setBottomColor("#E8AE48"); shareMoneyDesc.setContent("预估分享奖金:¥" + shareMoney); dynamicInfo.setDesc(shareMoneyDesc); dynamicInfo.setShowType(2); if (listPicture.size() < 7) { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_TWO); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_FOUR); // 分享类型4图 } else { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_THREE); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_NINE); // 分享类型9图 } if (!StringUtil.isNullOrEmpty(dynamicInfoId)) { dynamicInfoDao.deleteById(dynamicInfoId); } // 保存信息 dynamicInfoDao.insert(dynamicInfo); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } @Override public void deleteActivity(Long activityId) { DynamicInfo dynamicInfo = dynamicInfoDao.getByActivityId(activityId); if (dynamicInfo != null) { // 删除之前的 dynamicInfoDao.deleteById(dynamicInfo.getId()); } } @Override public void removeByDate(Date createTime) { dynamicInfoDao.removeByDate(createTime); } @Override public void updateShareCount(DynamicInfo record) { dynamicInfoDao.updateShareCount(record); } @Override @Cacheable(value = "dynamicCache", key = "'count-'+#cid+'-'+#subId") public long count(Long cid, Long subId) { return dynamicInfoDao.count(cid, subId); } @Override @Cacheable(value = "dynamicCache", key = "'query-'+#start+'-'+#count+'-'+#cid+'-'+#subId") public List query(int start, int count, Long cid, Long subId) { List list = dynamicInfoDao.query(start, count, cid, subId); // 更新商品信息 executor.execute(new Runnable() { @Override public void run() { updateGoodInfo(list); } }); return list; } private Map getFilterGoodsMap(List list) { // 提取过滤商品 List goodsList = new ArrayList<>(); for (DynamicInfo dynamicInfo : list) { List gpList = dynamicInfo.getImgs(); if (gpList != null) for (GoodsPicture gp : gpList) { if (gp != null && gp.getGoods() != null) { TaoBaoGoodsBriefExtra newGoods = new TaoBaoGoodsBriefExtra(); try { PropertyUtils.copyProperties(newGoods, gp.getGoods()); goodsList.add(newGoods); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } } } goodsList = taoBaoGoodsUpdateService.filterImportantTaoBaoGoods(goodsList); Map map = new HashMap<>(); if (goodsList != null) for (TaoBaoGoodsBrief goods : goodsList) map.put(goods.getAuctionId(), goods); return map; } @Override @Cacheable(value = "dynamicCache", key = "'queryV2-'+#platform+'-'+#version+'-'+#start+'-'+#count+'-'+#cid+'-'+#subId") public List queryV2(int platform, int version, int start, int count, Long cid, Long subId) { List listNew = new ArrayList(); List list = dynamicInfoDao.query(start, count, cid, subId); // 需要更新的商品 List taoBaoGoodsUpdateList = new ArrayList<>(); if (list != null && list.size() > 0) { // 提取商品 Map goodsMap = getFilterGoodsMap(list); BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE,hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP)); for (DynamicInfo dynamicInfo : list) { DynamicInfo dynamicNew = new DynamicInfo(); try { PropertyUtils.copyProperties(dynamicNew, dynamicInfo); } catch (Exception e) { e.printStackTrace(); continue; } // 店铺信息 TaoBaoShop shop = dynamicNew.getShop(); if (shop != null) { TaoBaoShop shopNew = new TaoBaoShop(); try { PropertyUtils.copyProperties(shopNew, shop); } catch (Exception e) { e.printStackTrace(); continue; } Integer userType = shopNew.getUserType(); if (userType == null || userType == 0) { shopNew.setUserType(10); } else { shopNew.setUserType(11); } dynamicNew.setShop(shopNew); } List imgsNew = new ArrayList(); List imgs = dynamicNew.getImgs(); if (imgs != null && imgs.size() > 0) { for (GoodsPicture goodsPicture : imgs) { TaoBaoGoodsBriefExtra goods = goodsPicture.getGoods(); if (goods == null) { imgsNew.add(goodsPicture); continue; } taoBaoGoodsUpdateList.add(goods); GoodsPicture goodsNew = new GoodsPicture(); try { PropertyUtils.copyProperties(goodsNew, goodsPicture); } catch (Exception e) { e.printStackTrace(); continue; } // 过滤券信息与资金信息 goods.setCouponAmount(goodsMap.get(goods.getAuctionId()).getCouponAmount()); goods.setZkPrice(goodsMap.get(goods.getAuctionId()).getZkPrice()); goods.setCouponStartFee(goodsMap.get(goods.getAuctionId()).getCouponStartFee()); goods.setTkRate(goodsMap.get(goods.getAuctionId()).getTkRate()); GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBaoGoodsBriefExtra(goods, paramsDTO); goodsNew.setGoodsVO(detailVO); goodsNew.setGoods(null); JumpDetailV2 jumpDetail = goodsNew.getJumpDetail(); if (jumpDetail != null) { JumpDetailV2 jumpDetailV2 = jumpDetailV2Service.getByTypeCache(jumpDetail.getType(), platform, version); if (jumpDetailV2 != null) { goodsNew.setJumpDetail(jumpDetailV2); } } imgsNew.add(goodsNew); } dynamicNew.setImgs(imgsNew); } listNew.add(dynamicNew); } } // 更新商品信息 executor.execute(new Runnable() { @Override public void run() { updateGoodInfo(list); } }); taoBaoGoodsUpdateService.addUpdateQueueAsync(taoBaoGoodsUpdateList); return listNew; } /** * 更新商品信息 */ public void updateGoodInfo(List list) { if (!Constant.IS_OUTNET) { return; // 外网进行更新 } if (list == null || list.size() == 0) { return; } try { BigDecimal proportion = hongBaoManageService.getFanLiRate(); for (DynamicInfo dynamicInfo : list) { // 邀请数据不做更新 long classId = dynamicInfo.getClassId(); if (classId == 4) { break; } // 更新商品信息 List listPicture = dynamicInfo.getImgs(); if (listPicture == null || listPicture.size() == 0) { continue; } // 是否一个小时之内已更新 Date updateTime = dynamicInfo.getUpdateTime(); if (updateTime != null) { long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数 long nh = 1000 * 60 * 60;// 一小时的毫秒数 long diff = System.currentTimeMillis() - updateTime.getTime(); long day = diff / nd;// 计算差多少天 long hour = diff % nd / nh + day * 24;// 计算差多少小时 if (hour < 1) { continue; } } boolean needUpdate = false; // 已下架ID List listDown = new ArrayList(); // 商品列表 List listGoods = new ArrayList(); for (GoodsPicture goodsPicture : listPicture) { TaoBaoGoodsBriefExtra oldExtra = goodsPicture.getGoods(); if (oldExtra == null) { continue; } /* * Integer state = oldExtra.getState(); if (state != null && state == 1) { * continue; } */ TaoBaoGoodsBrief goodsBrief = null; try { goodsBrief = redisManager.getTaoBaoGoodsBrief(oldExtra.getAuctionId()); } catch (TaobaoGoodsDownException e) { } // 是否下架 : 1、商品本身下架 2、无券信息则认为下架 boolean isDown = true; if (goodsBrief == null) { listDown.add(oldExtra.getAuctionId()); // 下架商品 } else if (goodsBrief.getCouponAmount() != null && goodsBrief.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) { isDown = false; } if (isDown) { oldExtra.setState(1); oldExtra.setCoupon(false); oldExtra.setUpdatetime(new Date()); goodsPicture.setGoods(oldExtra); // 商品已抢光 goodsPicture.setGoodState(1); // 更新热销单品的分享奖金 if (classId == 1) { ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); shareMoneyDesc.setColor("#FFFFFF"); shareMoneyDesc.setBottomColor("#E8AE48"); shareMoneyDesc.setContent("预估分享奖金:¥" + new BigDecimal(0)); dynamicInfo.setDesc(shareMoneyDesc); } } else { listGoods.add(goodsBrief); TaoBaoGoodsBriefExtra newExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion.toString(), null); newExtra.setUpdatetime(new Date()); goodsPicture.setGoods(newExtra); // 更新热销单品的分享奖金 if (classId == 1) { BigDecimal shareMoney = taoBaoGoodsBriefService.getShareGoodsUserHongBao(goodsBrief); ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); shareMoneyDesc.setColor("#FFFFFF"); shareMoneyDesc.setBottomColor("#E8AE48"); shareMoneyDesc.setContent("预估分享奖金:¥" + shareMoney); dynamicInfo.setDesc(shareMoneyDesc); } } // 需要更新信息; needUpdate = true; } // 无效更新信息 if (!needUpdate) { continue; } // 更新商品信息 dynamicInfo.setImgs(listPicture); // 商品已下架 List listGoodsBrief = dynamicInfo.getListGoodsBrief(); if (listGoodsBrief != null && listGoodsBrief.size() > 0) { // 淘宝已下架商品 if (listDown.size() > 0) { for (TaoBaoGoodsBrief taoBaoGoodsBrief : listGoodsBrief) { if (listDown.contains(taoBaoGoodsBrief.getAuctionId())) { taoBaoGoodsBrief.setState(1); } } } if (listGoods.size() == 0) { dynamicInfo.setListGoodsBrief(listGoodsBrief); } else { List listNew = new ArrayList(); for (int i = 0; i < listGoodsBrief.size(); i++) { TaoBaoGoodsBrief taoBaoGoodsBrief = listGoodsBrief.get(i); if (taoBaoGoodsBrief.getState() != null && taoBaoGoodsBrief.getState() == 1) { listNew.add(taoBaoGoodsBrief); } else { boolean isUpdate = false; Long auctionId = taoBaoGoodsBrief.getAuctionId(); for (TaoBaoGoodsBrief goods : listGoods) { if (goods.getAuctionId().equals(auctionId) || goods.getAuctionId() == auctionId) { listNew.add(goods); isUpdate = true; break; } } if (!isUpdate) { listNew.add(taoBaoGoodsBrief); } } } dynamicInfo.setListGoodsBrief(listNew); } } dynamicInfo.setUpdateTime(new Date()); dynamicInfoDao.updateGoodInfo(dynamicInfo); } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } }