yj
2020-03-09 d8fc4263dad4bf8112a9146dd8afbaceb6d4ea10
自动发圈
4个文件已修改
313 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
@@ -178,6 +178,9 @@
    shareCommentTextTB("share_comment_text_tb", "淘宝单图多图分享商品文本"),
    shareCommentTextJD("share_comment_text_jd", "京东单图多图分享商品文本"),
    shareCommentTextPDD("share_comment_text_pdd", "拼多多单图多图分享商品文本"),
    evaluateEmojis("evaluate_emojis", "发圈评论Emojis"),
    evaluateText("evaluate_text", "发圈评论文本"),
    ;
    private final String key;
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java
@@ -25,6 +25,7 @@
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.config.HongBaoManageService;
@@ -61,6 +62,9 @@
    @Resource
    private JumpDetailV2Service jumpDetailV2Service;
    @Resource
    private GoodsEvaluateService goodsEvaluateService;
    /**
     * 每10分钟  晚上00:00~06:00不下发任何一个商品
     */
@@ -352,5 +356,27 @@
            wxmpDynamicInfoService.addWXMPDynamicInfo(info);
        }
    }
    /**
     * 自动生成发圈
     * 早上6,7,15,16,21,22,23点更新1次
     */
    @Scheduled(cron = "0 0 6,7,15,16,21,22,23 * * ? ")
    public void insetEvaluate() {
        if (!Constant.IS_TASK) {
            return;
        }
        try {
            goodsEvaluateService.addGoodsEvaluateByDaTaoKe();
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -61,6 +61,7 @@
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
@@ -108,11 +109,9 @@
    @Resource
    private ConvertLinkManager convertLinkManager;
    @Resource
    private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
    @Override
    public String saveHead(MultipartFile file, GoodsEvaluate record) throws GoodsEvaluateException {
@@ -470,9 +469,8 @@
        }
        /*
         * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 =
         * goodsDetailVO.getCouponInfo(); if (couponInfo1 == null) { addComment
         * = false; }
         * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 = goodsDetailVO.getCouponInfo(); if
         * (couponInfo1 == null) { addComment = false; }
         */
        String commentText = "";
@@ -498,12 +496,12 @@
                commentText = template.replace("[链接]", jumpLink);
            }
            commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
            commentText = commentText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getZkPrice())+"");
            if (!goodsDetailVO.isHasCoupon()) {
                commentText = commentText.replace("领券抢购", "抢购");
                commentText = commentText.replace("【券后价】[券后价]元", "");
            } else {
                commentText = commentText.replace("[券后价]", goodsDetailVO.getCouponPrice().toString());
                commentText = commentText.replace("[券后价]",  MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getCouponPrice())+"");
            }
            commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n",
@@ -526,7 +524,7 @@
                }
            }
        }
        return commentText;
    }
@@ -1047,8 +1045,8 @@
                if (info == null)
                    throw new GoodsEvaluateException(2, "视频图片上传失败");
                videoPic = info.getUrl();
                width=info.getW();
                height=info.getH();
                width = info.getW();
                height = info.getH();
            }
            MultipartFile activityfile = fileRequest.getFile("activityfile");
@@ -1112,9 +1110,9 @@
                imgactivity.setH(imgactivity.getH());
            }
            listImg.add(imgactivity);
            totalImg ++;
            totalImg++;
        }
        int lineNum = 0;
        if (totalImg > 0) {
            if (totalImg == 1) {
@@ -1267,7 +1265,7 @@
                            imgInfo0.setW(1);
                            imgInfo0.setH(1);
                            listImg.add(imgInfo0);
                            totalImg ++;
                            totalImg++;
                            continue;
                        }
                    }
@@ -1278,7 +1276,7 @@
                                String url = imgInfo.getUrl();
                                if (picLink.equals(url)) {
                                    listImg.add(imgInfo);
                                    totalImg ++;
                                    totalImg++;
                                    break;
                                }
                            }
@@ -1302,7 +1300,7 @@
                    listDel.add(listOld.get(j));
            }
        }
        int lineNum = 0;
        if (totalImg > 0) {
            if (totalImg == 1) {
@@ -1519,11 +1517,11 @@
                List<CommentInfo> commentNew = new ArrayList<>();
                for (CommentInfo commentInfo : comments) {
                    if (StringUtil.isNullOrEmpty(commentInfo.getContent()) &&
                            StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
                    if (StringUtil.isNullOrEmpty(commentInfo.getContent())
                            && StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
                        continue;
                    }
                    CommentInfo commentInfoNew = new CommentInfo();
                    try {
                        PropertyUtils.copyProperties(commentInfoNew, commentInfo);
@@ -1531,7 +1529,7 @@
                        e.printStackTrace();
                        continue;
                    }
                    comment++;
                    CommentInfoEnum typeComment = commentInfoNew.getTypeEnum();
                    if (typeComment != null && typeComment == CommentInfoEnum.goodsCoupon) {
@@ -1554,7 +1552,7 @@
                                if (tagList != null) {
                                    tagListNew.addAll(tagList);
                                }
                                ClientTextStyleVO styleVO = new ClientTextStyleVO();
                                styleVO.setColor("#E5005C");
                                styleVO.setContent(daysBetween + "后过期");
@@ -1814,7 +1812,7 @@
                    imgInfo.setGoods(simpleGoods);
                    TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsVO.getGoodsId(), "0");
//                    TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID, goodsVO.getGoodsId(), null);
                    String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
                    String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
@@ -1851,41 +1849,49 @@
        }
    }
    @Override
    public void addGoodsEvaluateByDaTaoKe() {
        try {
            boolean addSuccess = false;
            List<Long> listId = null;
            List<GoodsEvaluate> listExist = goodsEvaluateDao.querySingleExist();
            if (listExist != null && listExist.size() > 0) {
                listId = new ArrayList<Long>();
                for (GoodsEvaluate goodsEvaluate : listExist) {
                    GoodsDetailVO goods = goodsEvaluate.getGoods();
                    if (goods != null && goods.getGoodsType() == 1) {
                        listId.add(goods.getGoodsId());
                    }
        List<Long> listId = null;
        List<GoodsEvaluate> listExist = goodsEvaluateDao.querySingleExist();
        if (listExist != null && listExist.size() > 0) {
            listId = new ArrayList<Long>();
            for (GoodsEvaluate goodsEvaluate : listExist) {
                GoodsDetailVO goods = goodsEvaluate.getGoods();
                if (goods != null && goods.getGoodsType() == 1) {
                    listId.add(goods.getGoodsId());
                }
            }
            // 热销单品的分类
            List<GoodsClass> listClass = DaTaoKeUtil.goodsClasses;
            int ci = (int) (Math.random() * listClass.size());
            Long subId = listClass.get(ci).getId();
            List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Service.getGoodsNotInList(subId, listId, 1);
            if (list == null || list.size() == 0) {
                return;
        }
        // 热销单品的分类
        List<GoodsClass> listClass = DaTaoKeUtil.goodsClasses;
        int ci = (int) (Math.random() * listClass.size());
        Long subId = listClass.get(ci).getId();
        List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Service.getGoodsNotInList(subId, listId, 1);
        if (list == null || list.size() == 0) {
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            boolean cerateGoods = cerateGoods(list.get(i));
            if (cerateGoods) {
                break;
            }
            DaTaoKeDetailV2 daTaoKe = list.get(0);
        }
    }
    private boolean cerateGoods(DaTaoKeDetailV2 daTaoKe) {
        try {
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(daTaoKe.getGoodsId());
            if (goodsBrief == null) {
                return;
                return false;
            }
            BigDecimal couponAmount = goodsBrief.getCouponAmount();
            if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
                return false;
            }
            BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            BigDecimal vipFanLiRate = hongBaoManageService.getVIPFanLiRate();
@@ -1893,24 +1899,28 @@
            GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
            // 发布用户
            ActivityUser user = activityUserService.getRandomByDaTaoKeCid(daTaoKe.getCid());
//            String desc = getDesc(daTaoKe.getDesc());
            String desc = daTaoKe.getDesc().replace(",", ",");
            System.out.println(desc);
            String[] split = desc.split(",");
            System.out.println(split.length);
            int max = 1;
            if (Math.random() > 0.5) {
                max = 2;
            }
            int e = 0;
            String emojis = "";
            String descNew = "";
            if (split.length > 0) {
                for (int i = 0; i < split.length; i ++ ) {
                for (int i = 0; i < split.length; i++) {
                    if (Math.random() > 0.5 && e < max) {
                        for (int j = 0; j < 10; j++) {
                            String emojisTemp = DaTaoKeUtil.getEvaluateEmojis();
                            if (!emojis.equals(emojisTemp)) {
                                emojis = emojisTemp;
                                break;
                            }
                        }
                        e++;
                        descNew += split[i] +  DaTaoKeUtil.getRandomCommonEmoji();
                        descNew += split[i] + emojis;
                    } else {
                        descNew += split[i] + ",";
                    }
@@ -1918,12 +1928,11 @@
            } else {
                descNew = desc;
            }
            if(descNew.endsWith(",")) {
                descNew = descNew.substring(0, descNew.length()-1);
            if (descNew.endsWith(",")) {
                descNew = descNew.substring(0, descNew.length() - 1);
            }
            GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
            goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
            goodsEvaluate.setUser(user);
@@ -1931,7 +1940,7 @@
            goodsEvaluate.setState(1);
            goodsEvaluate.setDynamicType(1);
            goodsEvaluate.setType(EvaluateEnum.single);
            goodsEvaluate.setShareNum((int) (Math.random() * 5000) + 1000);
            goodsEvaluate.setShareNumReal(0);
            goodsEvaluate.setWeight(0.0);
@@ -1940,9 +1949,16 @@
            goodsEvaluate.setPublishTime(new Date());
            goodsEvaluate.setCreateTime(new Date());
            goodsEvaluate.setUpdateTime(new Date());
            List<String> goodsimgs = goodsBrief.getImgList();
            List<String> imgs = new ArrayList<>();
            if (!StringUtil.isNullOrEmpty(goodsBrief.getPictUrlWhite())) {
                imgs.add(goodsBrief.getPictUrlWhite());
            }
            imgs.addAll(goodsimgs);
            int lineNum = 0;
            List<String> imgs = goodsBrief.getImgList();
            if (imgs.size() > 0) {
                if (imgs.size() == 1) {
                    lineNum = 1;
@@ -1955,7 +1971,7 @@
                }
            }
            goodsEvaluate.setLineNum(lineNum);
            int i = 0;
            List<ImgInfo> imgList = new ArrayList<>();
            for (String img : imgs) {
@@ -1981,20 +1997,23 @@
                        simpleGoods.setAmount(couponInfo.getAmount());
                    }
                    imgInfo.setGoods(simpleGoods);
                    imgInfo.setGoodsVO(goodsVO);
                    //TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID, goodsVO.getGoodsId(), null);
                    // TaoBaoLink taoBaoLink =
                    // shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID,
                    // goodsVO.getGoodsId(), null);
                    String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
                    String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
                    String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
                    commentText = commentText.replace("[原价]", goodsVO.getZkPrice().toString());
                    commentText = commentText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goodsVO.getZkPrice())+"");
                    if (!goodsVO.isHasCoupon()) {
                        commentText = commentText.replace("领券抢购", "抢购");
                        commentText = commentText.replace("【券后价】[券后价]元", "");
                    } else {
                        commentText = commentText.replace("[券后价]", goodsVO.getCouponPrice().toString());
                        commentText = commentText.replace("[券后价]", MoneyBigDecimalUtil.getWithNoZera(goodsVO.getCouponPrice())+"");
                    }
                    commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n")
                            .replace("\r\n\r\n", "\r\n");
@@ -2005,25 +2024,52 @@
                    commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
                    commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
                    String text2 = "";
                    String evaluateEmojis = configService.get(ConfigKeyEnum.evaluateEmojis.getKey());
                    if (!StringUtil.isNullOrEmpty(evaluateEmojis)) {
                        text2 = evaluateEmojis + "\n";
                    }
                    String evaluateText = configService.get(ConfigKeyEnum.evaluateText.getKey());
                    if (!StringUtil.isNullOrEmpty(evaluateText)) {
                        text2 += evaluateText;
                    }
                    String dtitle = daTaoKe.getDtitle();
                    if (!StringUtil.isNullOrEmpty(dtitle)) {
                        text2 = text2 + dtitle +"\n";
                    } else if (!StringUtil.isNullOrEmpty(evaluateText)) {
                        text2 += "\n";
                    }
                    text2 += "先领【"+ couponAmount +"元优惠券】下单";
                    CommentInfo commentInfo2 = new CommentInfo();
                    commentInfo2.setId(UUID.randomUUID().toString().replace("-", ""));
                    commentInfo2.setContent(text2);
                    commentInfo2.setTypeEnum(CommentInfoEnum.goodsCoupon);
                    commentInfo2.setType("");
                    List<CommentInfo> commentsNew = new ArrayList<>();
                    commentsNew.add(commentInfo);
                    commentsNew.add(commentInfo2);
                    goodsEvaluate.setComments(commentsNew);
                    goodsEvaluate.setGoods(goodsVO);
                }
                imgList.add(imgInfo);
                i ++;
                i++;
            }
            goodsEvaluate.setImgList(imgList);
            goodsEvaluateDao.save(goodsEvaluate);
        } catch (Exception e) {
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
            return false;
        }
        return true;
    }
    private String getDesc(String desc) {
        System.out.println(desc);
        String newDesc = "";
@@ -2039,47 +2085,47 @@
                    break;
                }
            }
            if (end) {
                length = content.length();
            }
            String introduce = content.substring(0, length);
            System.out.println(introduce);
            if (verify(introduce)) {
                if (emoji >= 4) {
                    introduce = introduce.replace(",", "\n"); // 需要换行
                } else {
                    emoji ++;
                    emoji++;
                    introduce = introduce.replace(",", DaTaoKeUtil.getRandomCommonEmoji() + "\n"); // 需要换行
                }
            }
            // 随机替换emoji
            if(emoji <= 4 && Math.random() > 0.5) {
            if (emoji <= 4 && Math.random() > 0.5) {
                introduce = introduce.replace(",", DaTaoKeUtil.getRandomCommonEmoji());
                emoji ++;
                emoji++;
            }
            newDesc += introduce;
            content = content.substring(length);
        }
        return newDesc;
    }
    private boolean verify (String content) {
    private boolean verify(String content) {
        // 18个字符内(包含标点也算一个字符)有多个逗号,则不换行
        char d = ',';
        int count = 0;
        char chs[]= content.toCharArray();//转换成char数组
        for(int i=0;i<chs.length;i++) {
            if(d == chs[i]) {
                count ++;
        char chs[] = content.toCharArray();// 转换成char数组
        for (int i = 0; i < chs.length; i++) {
            if (d == chs[i]) {
                count++;
            }
        }
        if (count > 1) {
            return false;
        }
        // 书名号,大括号,小括号里面的内容不换行
        if (content.contains("[") && content.contains("]")) {
            return false;
@@ -2090,32 +2136,32 @@
        } else if (content.contains("(") && content.contains(")")) {
            return false;
        }
        int index = content.lastIndexOf(",");
        // (除开逗号以外的符号)感叹号/句号/问号前面有逗号,不换行
        if (content.contains("!") && index < content.lastIndexOf("!")) {
            return false;
        }
        }
        if (content.contains("!") && index < content.lastIndexOf("!")) {
            return false;
        }
        }
        if (content.contains("。") && index < content.lastIndexOf("。")) {
            return false;
        }
        }
        if (content.contains("?") && index < content.lastIndexOf("?")) {
            return false;
        }
        }
        if (content.contains("?") && index < content.lastIndexOf("?")) {
            return false;
        }
        }
        if (content.contains(":")) {
            return false;
        }
        }
        return true;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java
@@ -130,6 +130,41 @@
            "🕦",// 十一点半
    };
    static final String[] evaluateEmojis = new String[] {
        "💟",
        "🌸",
        "🍸",
        "🍺",
        "📢",
        "❤",
        "💝",
        "💋",
        "👛",
        "🐾",
        "🌹",
        "🔥",
        "🎉",
        "🎁",
        "🍥",
        "🍭",
        "🌺",
        "👑",
        "✨",
        "💫",
        "🍻",
        "🎈",
        "💥",
        "💕",
        "💞",
        "💰",
        "💌",
        "💭",
        "🌼",
        "🍀",
    };
    public static List<GoodsClass> goodsClasses;
    static {
        goodsClasses = new ArrayList<>();
@@ -519,6 +554,11 @@
        return commonEmojis[(int) (Math.random() * commonEmojis.length)];
    }
    public static String getEvaluateEmojis() {
        return evaluateEmojis[(int) (Math.random() * evaluateEmojis.length)];
    }
    public static String getDesc(DaTaoKeDetailV2 detail) {
        // 标题+券后价+包邮+描述