From ec60e757d358636dcac1589c44a66f3e276fe58c Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期一, 29 六月 2020 14:41:42 +0800 Subject: [PATCH] 拉新 --- fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java | 380 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 333 insertions(+), 47 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java b/fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java index 2084344..c17a307 100644 --- a/fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java +++ b/fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java @@ -1,41 +1,99 @@ package com.yeshi.fanli.job; +import java.math.BigDecimal; +import java.net.URLDecoder; +import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.Resource; +import org.apache.commons.lang.StringEscapeUtils; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.yeshi.utils.DateUtil; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.yeshi.fanli.dto.ConfigParamsDTO; +import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult; +import com.yeshi.fanli.dto.taobao.haodanku.HDKGoodsListResultDTO; +import com.yeshi.fanli.dto.taobao.haodanku.HDKWXCircleContentDTO; +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.user.vip.UserLevelEnum; +import com.yeshi.fanli.entity.dynamic.GoodsPicture; +import com.yeshi.fanli.entity.dynamic.WXMPDynamicInfo; +import com.yeshi.fanli.entity.goods.jd.NYouHuiGoods; +import com.yeshi.fanli.entity.jd.JDGoods; +import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; +import com.yeshi.fanli.entity.taobao.haodanku.HDKGoodsDetail; +import com.yeshi.fanli.exception.dynamic.GoodsEvaluateException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.activity.ActivityService; +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.WXMPDynamicInfoService; +import com.yeshi.fanli.service.inter.goods.jd.NYouHuiService; +import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService; +import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; +import com.yeshi.fanli.service.manger.goods.ConvertLinkManager; import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil; +import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory; +import com.yeshi.fanli.util.factory.goods.TaoBaoGoodsFactory; +import com.yeshi.fanli.util.jd.JDApiUtil; +import com.yeshi.fanli.util.jd.JDUtil; +import com.yeshi.fanli.util.taobao.HaoDanKuApiUtil; +import com.yeshi.fanli.util.taobao.TaoBaoUtil; @Component public class DynamicInfoJob { - + @Resource private DynamicInfoService dynamicInfoService; - + @Resource private ActivityService activityService; + + @Resource + private NYouHuiService nyouHuiService; + + @Resource + private ActivityUserService activityUserService; + + @Resource + private WXMPDynamicInfoService wxmpDynamicInfoService; + + @Resource + private ConvertLinkManager convertLinkManager; + + @Resource + private HongBaoManageService hongBaoManageService; + + @Resource + private JumpDetailV2Service jumpDetailV2Service; + + @Resource + private GoodsEvaluateService goodsEvaluateService; - + @Resource + private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService; + /** - * 姣�10鍒嗛挓 鏅氫笂00:00~06:00涓嶄笅鍙戜换浣曚竴涓晢鍝� + * 姣�10鍒嗛挓 鏅氫笂00:00~06:00涓嶄笅鍙戜换浣曚竴涓晢鍝� */ @Scheduled(cron = "0 0/10 6-23 * * ?") public void insetDynamicInfo() { - + if (!Constant.IS_TASK) { return; } - + try { dynamicInfoService.insertTimeHotSale(); } catch (Exception e) { @@ -45,8 +103,7 @@ e1.printStackTrace(); } } - - + try { dynamicInfoService.insertTimeRecommend(); } catch (Exception e) { @@ -57,18 +114,17 @@ } } } - - + /** * 鏃╀笂6,7,15,16,21,22,23鐐规洿鏂�1娆� */ @Scheduled(cron = "0 0 6,7,15,16,21,22,23 * * ? ") public void insetShopInfo1() { - + if (!Constant.IS_TASK) { return; } - + try { dynamicInfoService.insertShopInfo(); } catch (Exception e) { @@ -79,17 +135,17 @@ } } } - + /** * 鏃╀笂8:00~10:00姣忓崐涓皬鏃舵洿鏂� */ @Scheduled(cron = "0 0/30 8,9,10 * * ?") public void insetShopInfo2() { - + if (!Constant.IS_TASK) { return; } - + try { dynamicInfoService.insertShopInfo(); } catch (Exception e) { @@ -100,18 +156,17 @@ } } } - - + /** * 鏃╀笂11:00~14:00姣忓崐涓皬鏃舵洿鏂� */ @Scheduled(cron = "0 0/30 11,12,13,14 * * ?") public void insetShopInfo3() { - + if (!Constant.IS_TASK) { return; } - + try { dynamicInfoService.insertShopInfo(); } catch (Exception e) { @@ -122,18 +177,17 @@ } } } - - + /** * 涓嬪崍17:00~20:00姣忓崐涓皬鏃舵洿鏂� */ @Scheduled(cron = "0 0/30 17,18,19,20 * * ? ") public void insetShopInfo4() { - + if (!Constant.IS_TASK) { return; } - + try { dynamicInfoService.insertShopInfo(); } catch (Exception e) { @@ -143,21 +197,21 @@ e1.printStackTrace(); } } - } - - + } + /** * 姣忓ぉ闆剁偣鍒犻櫎3澶╀箣鍓嶆暟鎹� */ - @Scheduled(cron = "0 0 0 * * ?") + @Scheduled(cron = "0 0 1,10 * * ?") public void remove() { - + if (!Constant.IS_TASK) { return; } - + try { - dynamicInfoService.removeByDate(DateUtil.reduceDay(3, new Date())); + LogHelper.test("DynamicInfoJob-remove-寮�濮嬫墽琛屾��"); + dynamicInfoService.removeByDate(DateUtil.reduceDay(2, new Date())); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); @@ -166,46 +220,44 @@ } } } - - + /** - * 鍚庡彴缂栬緫鍔ㄦ�侊細 姣�3鍒嗛挓妫�绱� + * 鍚庡彴缂栬緫鍔ㄦ�侊細 姣�3鍒嗛挓妫�绱� */ @Scheduled(cron = "0 0/3 * * * ?") public void activityNeedPublish() { - if (!Constant.IS_TASK) { return; } - + try { List<RecommendActivity> list = activityService.getNeedPublish(); if (list == null || list.size() == 0) { return; } - - + for (RecommendActivity activity : list) { Integer type = activity.getType(); if (RecommendActivity.TYPE_SHARE_GOODS == type) { // 鍟嗗搧鍔ㄦ�� dynamicInfoService.insertActivityRecommend(activity); - + activity.setState(1); activityService.updateByPrimaryKeySelective(activity); - + } else if (RecommendActivity.TYPE_INVITE == type) { // 閭�璇风礌鏉� - RecommendActivityInviteInfo inviteInfo = activityService.getRecommendActivityInviteInfoByActivityId(activity.getId()); + RecommendActivityInviteInfo inviteInfo = activityService + .getRecommendActivityInviteInfoByActivityId(activity.getId()); activity.setInviteInfo(inviteInfo); - + dynamicInfoService.insertInviteActivity(activity); - + activity.setState(1); activityService.updateByPrimaryKeySelective(activity); } } - + } catch (Exception e) { try { LogHelper.errorDetailInfo(e); @@ -214,18 +266,16 @@ } } } - - + /** * 姣忓ぉ6鐐瑰ぉ鏇存柊閭�璇风礌鏉� */ @Scheduled(cron = "0 0 6 * * ?") public void insertTimeInvite() { - if (!Constant.IS_TASK) { return; } - + try { dynamicInfoService.insertTimeInvite(); } catch (Exception e) { @@ -236,6 +286,242 @@ } } } + + /** + * + * @Title: demoJobHandler @Description: 鏇存柊灏忕▼搴忓姩鎬佸晢鍝� @param + * param @return @throws Exception ReturnT<String> 杩斿洖绫诲瀷 @throws + */ + @XxlJob("dynamic-updateWXMPDynamicInfo") + public ReturnT<String> updateWXMPDynamicInfoHandler(String param) throws Exception { + addJDNYHInfo(); + return ReturnT.SUCCESS; + } + + /** + * 娣诲姞鍐呬紭鎯犵浉鍏冲晢鍝� @Title: addJDNYHInfo @Description: void 杩斿洖绫诲瀷 @throws + */ + private void addJDNYHInfo() throws Exception { + + List<NYouHuiGoods> list = nyouHuiService.list(1, 1); + if (list != null && list.size() > 0) { + NYouHuiGoods goods = list.get(0); + String id = goods.toId(); + WXMPDynamicInfo info = new WXMPDynamicInfo(); + info.setId(WXMPDynamicInfo.SOURCE_NYH + "#" + id); + String desc = goods.getDesc(); + + info.setSource(WXMPDynamicInfo.SOURCE_NYH); + info.setUser(activityUserService.getRandomHaoHuo()); + // 鍋氶摼鎺ヨ浆鎹� + for (String link : goods.getLinkList()) { + desc = desc.replaceFirst("\\[閾炬帴\\]", link); + } + + desc = convertLinkManager.convertJDLinkFromText(desc, 0L, true); + info.setContent(desc); + + List<JDGoods> goodsList = JDApiUtil.queryGoodsDetail(goods.getSkuList()); + List<GoodsPicture> imgs = new ArrayList<>(); + + BigDecimal totalMoney = new BigDecimal(0); + List<String> lastPicture = new ArrayList<>(); + for (JDGoods jdGoods : goodsList) { + GoodsPicture picture = new GoodsPicture(); + BigDecimal money = JDUtil.getGoodsFanLiMoney(jdGoods, hongBaoManageService.getShareRate()); + totalMoney = totalMoney.add(money); + picture.setGoodsVO( + GoodsDetailVOFactory.convertJDGoods(jdGoods, + new ConfigParamsDTO(hongBaoManageService.getFanLiRate(), + hongBaoManageService.getShareRate(), null, + hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP)))); + picture.setGoodState(0); + picture.setJumpDetail(jumpDetailV2Service.getByTypeCache("goodsdetail")); + picture.setParams(null); + picture.setUrl(jdGoods.getPicUrl()); + imgs.add(picture); + if (jdGoods.getImageList() != null) + if (jdGoods.getImageList().size() > 4) + lastPicture.addAll(jdGoods.getImageList().subList(1, 4)); + else if (jdGoods.getImageList().size() > 1) + lastPicture.addAll(jdGoods.getImageList().subList(1, jdGoods.getImageList().size())); + } + info.setShareMoney(totalMoney); + int count = 0; + while (imgs.size() < 4 && count < 4) { + count++; + String picurl = lastPicture.get((int) (lastPicture.size() * Math.random())); + if (picurl != null) { + lastPicture.remove(picurl); + GoodsPicture picture = new GoodsPicture(); + picture.setUrl(picurl); + imgs.add(picture); + } + } + + info.setImgs(imgs); + + wxmpDynamicInfoService.addWXMPDynamicInfo(info); + } + } + + /** + * 姣忎竴涓皬鏃堕殢鏈哄湪鍒嗕韩鏁扮殑鍩虹涓婂姞10~100銆傚鍔犵殑鏃堕棿娈垫槸姣忓ぉ8~22鐐广�� + * 鏃╀笂6,7,15,16,21,22,23鐐规洿鏂�1娆� + */ + @Scheduled(cron = "0 0 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 * * ? ") + public void addRanDomShareCount() { + if (!Constant.IS_TASK) { + return; + } + + try { + goodsEvaluateService.addRanDomShareCount(); + } catch (Exception e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + + /** + * 鍟嗗搧鍔犲叆鍙戝湀 + */ + @XxlJob("dynamic-insertEvaluate") + public ReturnT<String> insertEvaluate(String param) throws Exception { + // 濂藉崟搴� + boolean addResult = addHDKListSelected(); + // 澶ф窐瀹㈠鐢� + if (!addResult) { + addDTKFriendsFircleList(); + } + return ReturnT.SUCCESS; + } + + + /** + * 濂藉崟搴撳晢鍝佸姞鍏ュ彂鍦� + * @return + */ + private boolean addHDKListSelected () { + boolean addResult = false; + Integer minId = 1; + while (minId != null) { + HDKGoodsListResultDTO dto = HaoDanKuApiUtil.getInstance().listSelected(minId); + if (dto == null) { + minId = null; + } else { + minId = dto.getMinId(); + List<HDKWXCircleContentDTO> list = dto.getList(); + if (list== null || list.size() == 0) { + continue; + } + + for (HDKWXCircleContentDTO circleContentDTO: list) { + try { + String itemid = circleContentDTO.getItemid(); + HDKGoodsDetail hdkGoods = HaoDanKuApiUtil.getInstance().getItemDetail(itemid); + if (hdkGoods == null) { + continue; + } + + List<String> pics = circleContentDTO.getItempic(); + String copy_content = circleContentDTO.getCopy_content(); + String showtitle = StringEscapeUtils.unescapeHtml(copy_content); + showtitle = showtitle.replace("<br>", "\r\n"); + + List<ActivityRuleUser> ruleList = activityUserService.listByRuleCode(ActivityRuleUser.RULE_HAOHUO, 1, 20); + ActivityUser user = ruleList.get((int) (ruleList.size() * Math.random())).getActivityUser(); + + int addProcess = goodsEvaluateService.addGoodsEvaluate(TaoBaoGoodsFactory.create(hdkGoods), pics, user, showtitle); + if (addProcess == 0) { + addResult = true; + break; + } + } catch (GoodsEvaluateException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + if(addResult) + break; + } + return addResult; + } + + + /** + * 澶ф窐瀹㈠晢鍝佸姞鍏ュ彂鍦� + * @return + */ + private boolean addDTKFriendsFircleList() { + boolean addResult = false; + try { + DaTaoKeGoodsResult result = DaTaoKeApiUtil.getFriendsFircleList("1", 100); + while (result.getGoodsList() != null && result.getGoodsList().size() > 0) { + for (DaTaoKeDetailV2 detailV2 : result.getGoodsList()) { + try { + Long goodsId = detailV2.getGoodsId(); + + String circleText = detailV2.getCircleText(); + if (circleText == null) { + continue; + } + String showtitle = URLDecoder.decode(circleText, "UTF-8"); + showtitle = showtitle.replace(" ", " "); + + DaTaoKeDetailV2 tkGoods = DaTaoKeApiUtil.getGoodsDetailByGoodsId(goodsId); + if(tkGoods == null) { + continue; + } + + ActivityUser user = null; + if (detailV2.getCid() != null) { + user = activityUserService.getRandomByDaTaoKeCid(detailV2.getCid()); + } + if (user == null) { + List<ActivityRuleUser> ruleList = activityUserService + .listByRuleCode(ActivityRuleUser.RULE_HAOHUO, 1, 20); + user = ruleList.get((int) (ruleList.size() * Math.random())).getActivityUser(); + } + + int addProcess = goodsEvaluateService.addGoodsEvaluate(TaoBaoUtil.convert(tkGoods), null, user, showtitle); + if (addProcess == 0) { + addResult = true; + break; + } + } catch (GoodsEvaluateException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + if (addResult) { + break; + } + + try { + result = DaTaoKeApiUtil.getFriendsFircleList(result.getPageId(), 100); + } catch (Exception e) { + result = DaTaoKeApiUtil.getFriendsFircleList(result.getPageId(), 100); + } + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + return addResult; + } } -- Gitblit v1.8.0