admin
2021-06-07 fdd50bd7ca375743475f5f799564dffdd92fa491
大淘客线报单
4个文件已删除
13个文件已修改
7个文件已添加
2085 ■■■■ 已修改文件
facade-goods/src/main/java/com/yeshi/goods/facade/dto/taobao/dataoke/DaTaoKeListTopOffDTO.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/src/main/java/com/yeshi/goods/facade/dto/taobao/dataoke/DaTaoKeResult.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/DaTaoKeApiUtil.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/error.log.2021-04-08 补丁 | 查看 | 原始文档 | blame | 历史
fanli/error.log.2021-05-10 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/error.log.2021-05-12 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/error.log.2021-05-14 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/AlipayController.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/WXController.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/UserControllerLijin.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/LostOrderControllerV2.java 166 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java 858 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsEvaluate.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/lijin/manager/UserLijinMnager.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/tb/DaTaoKeTipOffManager.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/GoodsTextUtil.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeTipOffUtil.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/src/main/java/com/yeshi/goods/facade/dto/taobao/dataoke/DaTaoKeListTopOffDTO.java
New file
@@ -0,0 +1,153 @@
package com.yeshi.goods.facade.dto.taobao.dataoke;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class DaTaoKeListTopOffDTO implements Serializable {
    /**
     * platformType : tb
     * source : taobao
     * title :
     * remark :
     * type : taobao
     * isLuxury : 0
     * idList : ["593752130189"]
     * urlList : ["¥O3edXTebmVG¥"]
     * imageList : ["https://img.alicdn.com/bao/uploaded/i4/3512189193/O1CN01xnblyU2HmRiB4LUW1_!!0-item_pic.jpg"]
     * tag :
     * stepId :
     * originContent : 19.9元 桃李食品旗舰店 多口味粽子礼盒装600g ¥O3edXTebmVG¥/
     * createTime : 2021-06-07 11:22:37
     * updateTime : 2021-06-07 11:22:37
     */
    private String platformType;
    private String source;
    private String title;
    private String originContent;
    private String remark;
    private String type;
    private int isLuxury;//是否神单0-常规;1-神单(优质商品且价低,建议主推)
    private String tag;
    private String stepId;
    private Date createTime;
    private Date updateTime;
    private List<String> idList;
    private List<String> urlList;
    private List<String> imageList;
    public String getPlatformType() {
        return platformType;
    }
    public void setPlatformType(String platformType) {
        this.platformType = platformType;
    }
    public String getSource() {
        return source;
    }
    public void setSource(String source) {
        this.source = source;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public int getIsLuxury() {
        return isLuxury;
    }
    public void setIsLuxury(int isLuxury) {
        this.isLuxury = isLuxury;
    }
    public String getTag() {
        return tag;
    }
    public void setTag(String tag) {
        this.tag = tag;
    }
    public String getStepId() {
        return stepId;
    }
    public void setStepId(String stepId) {
        this.stepId = stepId;
    }
    public String getOriginContent() {
        return originContent;
    }
    public void setOriginContent(String originContent) {
        this.originContent = originContent;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public List<String> getIdList() {
        return idList;
    }
    public void setIdList(List<String> idList) {
        this.idList = idList;
    }
    public List<String> getUrlList() {
        return urlList;
    }
    public void setUrlList(List<String> urlList) {
        this.urlList = urlList;
    }
    public List<String> getImageList() {
        return imageList;
    }
    public void setImageList(List<String> imageList) {
        this.imageList = imageList;
    }
}
facade-goods/src/main/java/com/yeshi/goods/facade/dto/taobao/dataoke/DaTaoKeResult.java
New file
@@ -0,0 +1,43 @@
package com.yeshi.goods.facade.dto.taobao.dataoke;
import java.io.Serializable;
import java.util.List;
public class DaTaoKeResult {
    private long totalCount;
    private String pageId;
    private List<? extends Serializable> list;
    public DaTaoKeResult() {
    }
    public DaTaoKeResult(long totalCount, String pageId, List<? extends Serializable> list) {
        this.totalCount = totalCount;
        this.pageId = pageId;
        this.list = list;
    }
    public long getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(long totalCount) {
        this.totalCount = totalCount;
    }
    public String getPageId() {
        return pageId;
    }
    public void setPageId(String pageId) {
        this.pageId = pageId;
    }
    public List<? extends Serializable> getList() {
        return list;
    }
    public void setList(List<? extends Serializable> list) {
        this.list = list;
    }
}
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/DaTaoKeApiUtil.java
@@ -4,8 +4,11 @@
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.yeshi.common.entity.taobao.TaoKeAppInfo;
import com.yeshi.goods.facade.dto.taobao.TaoBaoShopDTO;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeListTopOffDTO;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeResult;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.goods.facade.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeGoodsResult;
@@ -19,12 +22,10 @@
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.MoneyBigDecimalUtil;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.TimeUtil;
import org.yeshi.utils.*;
import java.io.*;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
@@ -845,6 +846,47 @@
        return daTaoKeGoodsResult;
    }
    /**
     * 获取线报 (http://www.dataoke.com/kfpt/api-d.html?id=62)
     *
     * @param topic    1-超值买返2-天猫超市3-整点抢购4-最新线报-所有数据(默认)5-最新线报-天猫6-最新线报-京东7-最新线报-拼多多8-最新线报-淘宝
     * @param pageSize
     * @return
     */
    public static DaTaoKeResult listTipOff(int topic, String pageId, int pageSize) {
        TaoKeAppInfo app = getRandomApp();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v3.0.0");
        params.put("appKey", app.getAppKey());
        params.put("pageSize", pageSize + "");
        params.put("topic", topic + "");
        params.put("selectTime", System.currentTimeMillis() / 1000 + "");
        if (pageId != null)
            params.put("pageId", pageId + "");
        else
            params.put("pageId", 1 + "");
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = null;
        try {
            result = baseGet("https://openapi.dataoke.com/api/dels/spider/list-tip-off", params);
        } catch (Exception e) {
            result = baseGet("https://openapi.dataoke.com/api/dels/spider/list-tip-off", params);
        }
        JSONObject root = JSONObject.fromObject(result);
        if (root.optInt("code") != 0) {
            return null;
        }
        JSONObject data = root.optJSONObject("data");
        JSONArray array = data.optJSONArray("list");
        Type type = new TypeToken<List<DaTaoKeListTopOffDTO>>() {
        }.getType();
        List<DaTaoKeListTopOffDTO> resultList = new Gson().fromJson(array.toString(), type);
        return new DaTaoKeResult(data.optLong("totalNum"), data.optString("pageId"), resultList);
    }
    /**
     * 解析淘口令
@@ -870,4 +912,10 @@
        }
        return null;
    }
    public static void main(String[] args) {
        DaTaoKeResult result = listTipOff(4, null, 20);
        System.out.println(result);
    }
}
fanli/error.log.2021-04-08
fanli/error.log.2021-05-10
File was deleted
fanli/error.log.2021-05-12
File was deleted
fanli/error.log.2021-05-14
File was deleted
fanli/pom.xml
@@ -212,7 +212,7 @@
        <dependency>
            <groupId>com.ks</groupId>
            <artifactId>facade-vip</artifactId>
            <version>0.0.6</version>
            <version>0.1.3</version>
        </dependency>
        <dependency>
fanli/src/main/java/com/yeshi/fanli/controller/AlipayController.java
New file
@@ -0,0 +1,92 @@
package com.yeshi.fanli.controller;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.ks.vip.pojo.DO.VipOrder;
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionAuthRecord;
import com.yeshi.fanli.exception.taobao.TaoBaoAuthException;
import com.yeshi.fanli.exception.user.UserExtraTaoBaoInfoException;
import com.yeshi.fanli.lijin.manager.UserLijinMnager;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.log.LogManager;
import com.yeshi.fanli.log.LogType;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService;
import com.yeshi.fanli.service.inter.user.msg.UserAccountMsgNotificationService;
import com.yeshi.fanli.service.inter.user.tb.TaoBaoUnionAuthRecordService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
 * 授权回调
 *
 * @author Administrator
 */
@Controller
@RequestMapping("alipay")
public class AlipayController {
    @Resource
    private UserLijinMnager userLijinMnager;
    @RequestMapping("printPayForm")
    public void printPayForm(String formId, HttpServletResponse response) {
        String form = userLijinMnager.getAlipayPayForm(formId);
        if (StringUtil.isNullOrEmpty(form)) {
            form = "出错了,请稍后再试";
        }
        response.setContentType("text/html;charset=GBK");
        try {
            response.getWriter().write(form);//直接将完整的表单html输出到页面
            response.getWriter().flush();
            response.getWriter().close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @RequestMapping("pay/lijinvip")
    public void pay(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            request.setCharacterEncoding("GBK");
            response.setCharacterEncoding("GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        Map<String, String[]> params = request.getParameterMap();
        Map<String, String> map = new HashMap<>();
        for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) {
            String key = its.next();
            map.put(key, params.get(key)[0]);
        }
        String outOrderNo = userLijinMnager.getAlipayPaySuccessOutOrderNo(map);
        VipOrder vipOrder = userLijinMnager.selectVipOrderByThreeOrderId(outOrderNo);
        if (vipOrder != null)
            userLijinMnager.checkPay(vipOrder.getId());
        response.getWriter().print("success");
        response.getWriter().close();
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/WXController.java
New file
@@ -0,0 +1,85 @@
package com.yeshi.fanli.controller;
import com.ks.vip.pojo.DO.VipOrder;
import com.yeshi.fanli.lijin.manager.UserLijinMnager;
import net.sf.json.JSONObject;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.StringUtil;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RequestMapping("wx")
public class WXController {
    @Resource
    private UserLijinMnager userLijinMnager;
    /**
     * 处理通知结果
     *
     * @param request
     * @throws Exception
     */
    private void process(HttpServletRequest request) throws Exception {
        //验证证书序列号
        String mchSerialNo = request.getHeader("Wechatpay-Serial");
        String timeStamp = request.getHeader("Wechatpay-Timestamp");
        String nonce = request.getHeader("Wechatpay-Nonce");
        String signature = request.getHeader("Wechatpay-Signature");
        String data = null;
        try {
            if (request.getInputStream() != null) {
                String entity = IOUtils.toString(request.getInputStream(), "UTF-8");
                data = entity;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (StringUtil.isNullOrEmpty(data)) {
            throw new Exception("通知的内容为空");
        }
        String outOrderNo = userLijinMnager.getWXPaySuccessOutOrderNo(data);
        VipOrder vipOrder = userLijinMnager.selectVipOrderByThreeOrderId(outOrderNo);
        if (vipOrder != null) {
            userLijinMnager.checkPay(vipOrder.getId());
        }
    }
    /**
     * 微信支付结果通知
     *
     * @param request
     * @param response
     */
    @RequestMapping("pay/lijinvip")
    public void vipPay(HttpServletRequest request, HttpServletResponse response) throws IOException {
        try {
            process(request);
            JSONObject data = new JSONObject();
            data.put("code", "SUCCESS");
            data.put("message", "处理成功");
            response.sendError(200, data.toString());
        } catch (Exception e) {
            e.printStackTrace();
            JSONObject data = new JSONObject();
            data.put("code", "FAIL");
            data.put("message", e.getMessage());
            response.sendError(500, data.toString());
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/UserControllerLijin.java
@@ -4,7 +4,10 @@
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipCenterRecord;
import com.ks.vip.pojo.DO.VipCombo;
import com.ks.vip.pojo.DO.VipOrder;
import com.ks.vip.pojo.DTO.PayWayInfoDTO;
import com.ks.vip.pojo.Enums.OrderTypeEnum;
import com.ks.vip.pojo.Enums.PayWayEnum;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.service.VipComboService;
import com.yeshi.fanli.entity.accept.AcceptData;
@@ -21,13 +24,12 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.MoneyBigDecimalUtil;
import org.yeshi.utils.TimeUtil;
import org.yeshi.utils.*;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -214,8 +216,10 @@
                name += "-年卡";
            } else if (hour > 24 * 31) {
                name += "-季卡";
            } else if (hour > 24) {
            } else if (hour > 24 * 7) {
                name += "-月卡";
            } else if (hour > 24) {
                name += "-周卡";
            } else if (hour == 24) {
                name += "-1天";
            } else {
@@ -231,4 +235,59 @@
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 创建VIP订单
     *
     * @param acceptData
     * @param uid
     * @param id
     * @param payWay     1-支付宝 2-微信
     * @param out
     */
    @RequestMapping("createVIPOrder")
    public void createVIPOrder(AcceptData acceptData, Long uid, Long id, int payWay, HttpServletRequest request, PrintWriter out) {
        try {
            PayWayInfoDTO payWayInfoDTO = userLijinMnager.createVIPOrder(uid, id, payWay == 1 ? PayWayEnum.alipay : PayWayEnum.weChat, IPUtil.getRemotIP(request));
            JSONObject data = new JSONObject();
            if (payWayInfoDTO.getPayWay() == PayWayEnum.alipay) {
                data.put("url", "http://api.tejia.yeshitv.com/fanli/alipay/printPayForm?formId=" + payWayInfoDTO.getAlipayFormId());
            } else {
                data.put("url", payWayInfoDTO.getPayUrl());
            }
            out.print(JsonUtil.loadTrueResult(data));
        } catch (VipOrderException e) {
            e.printStackTrace();
            out.print(JsonUtil.loadFalseResult(e.getCode(), "创建订单出错"));
        }
    }
    @RequestMapping("checkVIPOrderPay")
    public void checkPayResult(AcceptData acceptData, String id, PrintWriter out) {
        if (id == null || !NumberUtil.isNumeric(id)) {
            out.print(JsonUtil.loadFalseResult("id格式有误"));
            return;
        }
        VipOrder vipOrder = userLijinMnager.checkPay(Long.parseLong(id));
        if (vipOrder == null) {
            out.print(JsonUtil.loadFalseResult("订单不存在"));
            return;
        }
        if (vipOrder.getState() == VipOrder.STATE_PAY) {
            //支付成功
            JSONObject data = new JSONObject();
            data.put("money", vipOrder.getPayMoney());
            out.print(JsonUtil.loadTrueResult(data));
        } else {
            //支付失败
            out.print(JsonUtil.loadFalseResult("订单尚未支付成功"));
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -25,6 +25,7 @@
import com.yeshi.fanli.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.goods.GoodsTextUtil;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Controller;
@@ -1102,6 +1103,18 @@
        }
        String newText = text; // 非通用券需要验证
        //特价只需要复制文字,不需要转链
        if (acceptData.getSystem() == SystemEnum.yhqjx) {
            newText = GoodsTextUtil.decodeAppHtmlText(newText);
            //只复制文字
            JSONObject data = new JSONObject();
            data.put("text", newText);
            out.print(JsonUtil.loadTrueResult(data));
            return;
        }
        if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
            try {
                newText = convertLinkManager.convertLinkFromText(acceptData.getSystem(), text, uid, true, true);
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/LostOrderControllerV2.java
@@ -21,101 +21,103 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
 * 动态
 *
 * @author Administrator
 *
 * @author Administrator
 */
@Controller
@RequestMapping("api/v2/lostOrder")
public class LostOrderControllerV2 {
    @Resource
    private LostOrderService lostOrderService;
    @Resource
    private LostOrderService lostOrderService;
    @Resource
    private ConfigService configService;
    @Resource
    private ConfigService configService;
    @RequestMapping("findLostOrder")
    public void findLostOrder(AcceptData acceptData, LostOrder lostOrder, HttpServletRequest request, PrintWriter out) {
        Integer type = lostOrder.getType();
        if (type == null) {
            type = Constant.SOURCE_TYPE_TAOBAO;
        }
    @RequestMapping("findLostOrder")
    public void findLostOrder(AcceptData acceptData, LostOrder lostOrder, HttpServletRequest request, PrintWriter out) {
        Integer type = lostOrder.getType();
        if (type == null) {
            type = Constant.SOURCE_TYPE_TAOBAO;
        }
        boolean orderNum = true;
        String orderId = lostOrder.getOrderId();
        if (type == Constant.SOURCE_TYPE_TAOBAO) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 12 || orderId.length() > 20)) {
                orderNum = false;
            } else {
                orderNum = Utils.isOrderNum(orderId);
            }
        } else if (type == Constant.SOURCE_TYPE_JD) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 6 || orderId.length() > 20)) {
                orderNum = false;
            }
        } else if (type == Constant.SOURCE_TYPE_PDD) {
            if (!orderId.contains("-")) {
                orderNum = false;
            } else {
                String[] split = orderId.split("-");
                if (split == null || split.length != 2) {
                    orderNum = false;
                } else {
                    if (!NumberUtil.isNumeric(split[0]) || !NumberUtil.isNumeric(split[1])) {
                        orderNum = false;
                    }
                }
            }
        } else if (type == Constant.SOURCE_TYPE_VIP) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 10 || orderId.length() > 18)) {
                orderNum = false;
            }
        } else if (type == Constant.SOURCE_TYPE_SUNING) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 10 || orderId.length() > 15)) {
                orderNum = false;
            }
        }
        boolean orderNum = true;
        String orderId = lostOrder.getOrderId();
        if (type == Constant.SOURCE_TYPE_TAOBAO) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 12 || orderId.length() > 20)) {
                orderNum = false;
            } else {
                orderNum = Utils.isOrderNum(orderId);
            }
        } else if (type == Constant.SOURCE_TYPE_JD) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 6 || orderId.length() > 20)) {
                orderNum = false;
            }
        } else if (type == Constant.SOURCE_TYPE_PDD) {
            if (!orderId.contains("-")) {
                orderNum = false;
            } else {
                String[] split = orderId.split("-");
                if (split == null || split.length != 2) {
                    orderNum = false;
                } else {
                    if (!NumberUtil.isNumeric(split[0]) || !NumberUtil.isNumeric(split[1])) {
                        orderNum = false;
                    }
                }
            }
        } else if (type == Constant.SOURCE_TYPE_VIP) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 10 || orderId.length() > 18)) {
                orderNum = false;
            }
        } else if (type == Constant.SOURCE_TYPE_SUNING) {
            if (!NumberUtil.isNumeric(orderId) || (orderId.length() < 10 || orderId.length() > 15)) {
                orderNum = false;
            }
        }
        if (lostOrder.getUserInfo() == null || lostOrder.getUserInfo().getId() == null
                || lostOrder.getUserInfo().getId() <= 0) {
            out.print(JsonUtil.loadFalseResult(1,
                    String.format("请登录%s账号", Constant.getAppName(acceptData.getPlatform(), acceptData.getVersion()))));
            return;
        }
        lostOrder.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort());
        int state;
        String stateInfo = "提交成功,请等待审核结果";
        if (!orderNum) {
            state = -4;
            stateInfo = "请提交准确的订单号";
        } else {
            lostOrder.setResultCode(LostOrder.RESULT_CODE_VERFING);
            state = lostOrderService.addLostOrder(lostOrder);
            if (state == -3) {
                stateInfo = "该订单已被统计,无需申诉";
            } else if (state == -2) {
                stateInfo = "请勿重复提交,该订单正在审核中";
            } else if (state == -1) {
                stateInfo = "该订单申诉已通过,请在订单列表中查看";
            } else if (state == -5) {
                stateInfo = "分享奖金订单无需申诉";
            } else if (state == -6) {
                stateInfo = "该订单申诉已失败,请在订单列表中查看";
            } else if (state == -7) {
                stateInfo = "今日申诉次数已达上限";
            } else if (state == -1001) {
                stateInfo = "订单违规";
            }
        }
        JSONObject data = new JSONObject();
        data.put("state", state);
        data.put("info", stateInfo);
        out.print(JsonUtil.loadTrueResult(data));
    }
        if (lostOrder.getUserInfo() == null || lostOrder.getUserInfo().getId() == null
                || lostOrder.getUserInfo().getId() <= 0) {
            out.print(JsonUtil.loadFalseResult(1,
                    String.format("请登录%s账号", Constant.getAppName(acceptData.getPlatform(), acceptData.getVersion()))));
            return;
        }
        lostOrder.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort());
        int state;
        String stateInfo = "提交成功,请等待审核结果";
        if (!orderNum) {
            state = -4;
            stateInfo = "请提交准确的订单号";
        } else {
            lostOrder.setResultCode(LostOrder.RESULT_CODE_VERFING);
            state = lostOrderService.addLostOrder(lostOrder);
            if (state == -3) {
                stateInfo = "该订单已被统计,无需申诉";
            } else if (state == -2) {
                stateInfo = "请勿重复提交,该订单正在审核中";
            } else if (state == -1) {
                stateInfo = "该订单申诉已通过,请在订单列表中查看";
            } else if (state == -5) {
                stateInfo = "分享奖金订单无需申诉";
            } else if (state == -6) {
                stateInfo = "该订单申诉已失败,请在订单列表中查看";
            } else if (state == -7) {
                stateInfo = "今日申诉次数已达上限";
            } else if (state == -1001) {
                stateInfo = "订单违规";
            }
        }
        JSONObject data = new JSONObject();
        data.put("state", state);
        data.put("info", stateInfo);
        out.print(JsonUtil.loadTrueResult(data));
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
@@ -928,7 +928,7 @@
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goods.getGoodsSign(), pid, uid + "");
        String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goods.getGoodsSign(), pid, pddAuthService.getFanliCustomParams(uid) + "");
        SystemEnum system = SystemInfoUtil.getSystem(acceptData);
fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java
@@ -23,423 +23,455 @@
@Repository
public class GoodsEvaluateDao {
    @Resource
    private MongoTemplate mongoTemplate;
    @Resource
    private MongoTemplate mongoTemplate;
    /**
     * 新增
     *
     * @param record
     */
    public void save(GoodsEvaluate record) {
        if (record == null) {
            return;
        }
        mongoTemplate.save(record);
    }
    /**
     * 状态切换
     * @param id
     * @param state
     */
    public void updateSatate(String id, int state) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        Update update = Update.update("state", state);
        mongoTemplate.updateMulti(query, update, GoodsEvaluate.class);
    }
    /**
     * 删除
     * @param record
     */
    public void remove(GoodsEvaluate record) {
        if (record == null) {
            return;
        }
        mongoTemplate.remove(record);
    }
    /**
     * 根据id查询数据
     *
     * @param id
     * @return
     */
    public GoodsEvaluate getById(String id) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        return mongoTemplate.findOne(query, GoodsEvaluate.class);
    }
    /**
     * 删除
     *
     * @param id
     * @return
     */
    public void deleteById(String id) {
        GoodsEvaluate info = getById(id);
        if (info == null) {
            return;
        }
        mongoTemplate.remove(info);
    }
    /**
     * 查询
     *
     * @return
     */
    public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType, String typeEnum, SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        if (state != null) {
            list.add(Criteria.where("state").is(state));
        }
        if (!StringUtil.isNullOrEmpty(typeEnum))
            list.add(Criteria.where("type").is(typeEnum));
        if(system!=null)
            list.add(Criteria.where("system").is(system));
        if (!StringUtil.isNullOrEmpty(key))
            list.add(new Criteria().orOperator(
                           Criteria.where("title").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE))));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.skip(start).limit(count);
        query.with(new Sort(Sort.Direction.DESC,"weight")).with(new Sort(Sort.Direction.DESC,"createTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    public long count(String key, Integer state, int dynamicType, String typeEnum, SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        if (state != null) {
            list.add(Criteria.where("state").is(state));
        }
        if(system!=null)
            list.add(Criteria.where("system").is(system));
        if (!StringUtil.isNullOrEmpty(typeEnum))
            list.add(Criteria.where("type").is(typeEnum));
        if (!StringUtil.isNullOrEmpty(key))
            list.add(new Criteria().orOperator(
                           Criteria.where("title").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE))));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.count(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     * @param start
     * @param count
     * @return
     */
    public List<GoodsEvaluate> queryValid(int start, int count, int dynamicType,SystemEnum system) {
        Date now = new Date();
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").lte(now));
        list.add(Criteria.where("endTime").gte(now));
        if(system!=null)
            list.add(Criteria.where("system").is(system));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.skip(start).limit(count);
        query.with(new Sort(Sort.Direction.DESC,"weight")).with(new Sort(Sort.Direction.DESC,"startTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 统计有效
     * @return
     */
    public long countValid(int dynamicType,SystemEnum system) {
        Date now = new Date();
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").lte(now));
        list.add(Criteria.where("endTime").gte(now));
        if(system!=null)
            list.add(Criteria.where("system").is(system));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.count(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     * @return
     */
    public List<GoodsEvaluate> querySingleExist(SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("goods.goodsType").is(1));
        if(system!=null)
            list.add(Criteria.where("system").is(system));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     * @param goodsType
     * @param goodsId
     * @param system
     * @return
     */
    public List<GoodsEvaluate> queryExist(int goodsType, String goodsId,SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        if(system!=null)
            list.add(Criteria.where("system").is(system));
        list.add(Criteria.where("imgList.goods.goodsId").is(goodsId));
        list.add(Criteria.where("imgList.goods.goodsType").is(goodsType));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     * @return
     */
    public List<GoodsEvaluate> queryExistSingle(int goodsType, String goodsId,SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("type").is("single"));
        if(system!=null)
            list.add(Criteria.where("system").is(system));
        list.add(Criteria.where("imgList.goods.goodsId").is(goodsId));
        list.add(Criteria.where("imgList.goods.goodsType").is(goodsType));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     * @return
     */
    public List<GoodsEvaluate> queryOverdue() {
        Date now = new Date();
        Query query = new Query();
        query.addCriteria(Criteria.where("endTime").lte(now));
        query.with(new Sort(Sort.Direction.ASC,"createTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * @return
     */
    public List<GoodsEvaluate> removeDownGoods() {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("type").is("single"));
        list.add(Criteria.where("goods.state").is(1));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 根据起始时间查询
     * @param date
     * @return
     */
    public List<GoodsEvaluate> listByStartTime(Date date) {
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").gt(date));
        list.add(Criteria.where("startTime").lte(new Date()));
        list.add(new Criteria().orOperator(Criteria.where("type").is("single"),
                    new Criteria().andOperator(Criteria.where("type").is("activity"))));
        Query query = new Query();
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.with(new Sort(Sort.Direction.DESC,"startTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效-倒序
     * @param start
     * @param count
     * @return
     */
    public List<GoodsEvaluate> queryValidSortASC(int start, int count, EvaluateEnum tyepEnum, boolean sortDesc) {
        Date now = new Date();
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("type").is(tyepEnum.name()));
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").lte(now));
        list.add(Criteria.where("endTime").gte(now));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.skip(start).limit(count);
        if (sortDesc) {
            query.with(new Sort(Sort.Direction.DESC,"startTime"));
        } else {
            query.with(new Sort(Sort.Direction.ASC,"startTime"));
    /**
     * 新增
     *
     * @param record
     */
    public void save(GoodsEvaluate record) {
        if (record == null) {
            return;
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
        mongoTemplate.save(record);
    }
    /**
     * 状态切换
     *
     * @param id
     * @param state
     */
    public void updateSatate(String id, int state) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        Update update = Update.update("state", state);
        mongoTemplate.updateMulti(query, update, GoodsEvaluate.class);
    }
    /**
     *
     * @param goodsType
     * @param goodsId
     * @param limitTime
     * @return
     */
    public List<GoodsEvaluate> queryExistLimitTime(int goodsType, String goodsId, Date limitTime) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("goods.goodsId").is(goodsId));
        list.add(Criteria.where("goods.goodsType").is(goodsType));
        // 限制时间内
        list.add(Criteria.where("startTime").gte(limitTime));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    public List<GoodsEvaluate> queryValidZeroPoint(int start, int count) {
        // 今日22点发圈 :0点下单
        Date now = new Date();
        Date startTime = TimeUtil.parseYYYYMMDD_HHMM(TimeUtil.getGernalTime(now) + " 22:00");
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("zeroPoint").is(1));
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").is(startTime));
        list.add(new Criteria().orOperator(Criteria.where("type").is("single"),
                new Criteria().andOperator(Criteria.where("type").is("activity"))));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
    /**
     * 删除
     *
     * @param record
     */
    public void remove(GoodsEvaluate record) {
        if (record == null) {
            return;
        }
        mongoTemplate.remove(record);
    }
    /**
     * 根据id查询数据
     *
     * @param id
     * @return
     */
    public GoodsEvaluate getById(String id) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        return mongoTemplate.findOne(query, GoodsEvaluate.class);
    }
    /**
     * 删除
     *
     * @param id
     * @return
     */
    public void deleteById(String id) {
        GoodsEvaluate info = getById(id);
        if (info == null) {
            return;
        }
        mongoTemplate.remove(info);
    }
    /**
     * 查询
     *
     * @return
     */
    public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType, String typeEnum, SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        if (state != null) {
            list.add(Criteria.where("state").is(state));
        }
        if (!StringUtil.isNullOrEmpty(typeEnum))
            list.add(Criteria.where("type").is(typeEnum));
        if (system != null)
            list.add(Criteria.where("system").is(system));
        if (!StringUtil.isNullOrEmpty(key))
            list.add(new Criteria().orOperator(
                    Criteria.where("title").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE))));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.skip(start).limit(count);
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
        query.with(new Sort(Sort.Direction.DESC, "weight")).with(new Sort(Sort.Direction.DESC, "createTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    public long count(String key, Integer state, int dynamicType, String typeEnum, SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        if (state != null) {
            list.add(Criteria.where("state").is(state));
        }
        if (system != null)
            list.add(Criteria.where("system").is(system));
        if (!StringUtil.isNullOrEmpty(typeEnum))
            list.add(Criteria.where("type").is(typeEnum));
        if (!StringUtil.isNullOrEmpty(key))
            list.add(new Criteria().orOperator(
                    Criteria.where("title").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE))));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.count(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     *
     * @param start
     * @param count
     * @return
     */
    public List<GoodsEvaluate> queryValid(int start, int count, int dynamicType, SystemEnum system) {
        Date now = new Date();
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").lte(now));
        list.add(Criteria.where("endTime").gte(now));
        if (system != null)
            list.add(Criteria.where("system").is(system));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.skip(start).limit(count);
        query.with(new Sort(Sort.Direction.DESC, "weight")).with(new Sort(Sort.Direction.DESC, "startTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 统计有效
     *
     * @return
     */
    public long countValid(int dynamicType, SystemEnum system) {
        Date now = new Date();
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(dynamicType));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").lte(now));
        list.add(Criteria.where("endTime").gte(now));
        if (system != null)
            list.add(Criteria.where("system").is(system));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.count(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     *
     * @return
     */
    public List<GoodsEvaluate> querySingleExist(SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("goods.goodsType").is(1));
        if (system != null)
            list.add(Criteria.where("system").is(system));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     *
     * @param goodsType
     * @param goodsId
     * @param system
     * @return
     */
    public List<GoodsEvaluate> queryExist(int goodsType, String goodsId, SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        if (system != null)
            list.add(Criteria.where("system").is(system));
        list.add(Criteria.where("imgList.goods.goodsId").is(goodsId));
        list.add(Criteria.where("imgList.goods.goodsType").is(goodsType));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     *
     * @return
     */
    public List<GoodsEvaluate> queryExistSingle(int goodsType, String goodsId, SystemEnum system) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("type").is("single"));
        if (system != null)
            list.add(Criteria.where("system").is(system));
        list.add(Criteria.where("imgList.goods.goodsId").is(goodsId));
        list.add(Criteria.where("imgList.goods.goodsType").is(goodsType));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效
     *
     * @return
     */
    public List<GoodsEvaluate> queryOverdue() {
        Date now = new Date();
        Query query = new Query();
        query.addCriteria(Criteria.where("endTime").lte(now));
        query.with(new Sort(Sort.Direction.ASC, "createTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * @return
     */
    public List<GoodsEvaluate> removeDownGoods() {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("type").is("single"));
        list.add(Criteria.where("goods.state").is(1));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 根据起始时间查询
     *
     * @param date
     * @return
     */
    public List<GoodsEvaluate> listByStartTime(Date date) {
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").gt(date));
        list.add(Criteria.where("startTime").lte(new Date()));
        list.add(new Criteria().orOperator(Criteria.where("type").is("single"),
                new Criteria().andOperator(Criteria.where("type").is("activity"))));
        Query query = new Query();
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.with(new Sort(Sort.Direction.DESC, "startTime"));
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询有效-倒序
     *
     * @param start
     * @param count
     * @return
     */
    public List<GoodsEvaluate> queryValidSortASC(int start, int count, EvaluateEnum tyepEnum, boolean sortDesc) {
        Date now = new Date();
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("type").is(tyepEnum.name()));
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").lte(now));
        list.add(Criteria.where("endTime").gte(now));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.skip(start).limit(count);
        if (sortDesc) {
            query.with(new Sort(Sort.Direction.DESC, "startTime"));
        } else {
            query.with(new Sort(Sort.Direction.ASC, "startTime"));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * @param goodsType
     * @param goodsId
     * @param limitTime
     * @return
     */
    public List<GoodsEvaluate> queryExistLimitTime(int goodsType, String goodsId, Date limitTime) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("goods.goodsId").is(goodsId));
        list.add(Criteria.where("goods.goodsType").is(goodsType));
        // 限制时间内
        list.add(Criteria.where("startTime").gte(limitTime));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
    /**
     * 查询已经存在的数据
     *
     * @param identifyCode
     * @param limitTime
     * @return
     */
    public GoodsEvaluate selectExistLimitTime(String identifyCode, Date limitTime) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("identifyCode").is(identifyCode));
        // 限制时间内
        list.add(Criteria.where("startTime").gte(limitTime));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return mongoTemplate.findOne(query, GoodsEvaluate.class);
    }
    public List<GoodsEvaluate> queryValidZeroPoint(int start, int count) {
        // 今日22点发圈 :0点下单
        Date now = new Date();
        Date startTime = TimeUtil.parseYYYYMMDD_HHMM(TimeUtil.getGernalTime(now) + " 22:00");
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("zeroPoint").is(1));
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").is(startTime));
        list.add(new Criteria().orOperator(Criteria.where("type").is("single"),
                new Criteria().andOperator(Criteria.where("type").is("activity"))));
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.skip(start).limit(count);
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsEvaluate.java
@@ -45,6 +45,10 @@
        }
    }
    //唯一标识
    @Field
    private String identifyCode;
    @Id
    @Expose
    @Field("_id")
@@ -346,4 +350,11 @@
        this.zeroPoint = zeroPoint;
    }
    public String getIdentifyCode() {
        return identifyCode;
    }
    public void setIdentifyCode(String identifyCode) {
        this.identifyCode = identifyCode;
    }
}
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java
@@ -10,7 +10,11 @@
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.service.manger.goods.tb.DaTaoKeTipOffManager;
import com.yeshi.fanli.util.SystemInfoUtil;
import com.yeshi.fanli.util.taobao.DaTaoKeTipOffUtil;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeListTopOffDTO;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeResult;
import org.apache.commons.lang.StringEscapeUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -534,4 +538,34 @@
        return addResult;
    }
    @XxlJob("dynamic-tejia-updateBetterGoods")
    public ReturnT<String> updateTejiaBetterGoods(String param) throws Exception {
        addDTKTipOffList(SystemEnum.yhqjx);
        return ReturnT.SUCCESS;
    }
    /**
     * 大淘客线报
     *
     * @param system
     * @return
     */
    private void addDTKTipOffList(SystemEnum system) {
        DaTaoKeResult result = DaTaoKeApiUtil.listTipOff(4, null, 50);
        if (result != null) {
            List<DaTaoKeListTopOffDTO> list = (List<DaTaoKeListTopOffDTO>) result.getList();
            for (DaTaoKeListTopOffDTO dto : list) {
                try {
                    List<ActivityRuleUser> ruleList = activityUserService
                            .listByRuleCode(ActivityRuleUser.RULE_HAOHUO, 1, 20);
                    ActivityUser user = ruleList.get((int) (ruleList.size() * Math.random())).getActivityUser();
                    goodsEvaluateService.addGoodsEvaluate(dto, user, system);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/lijin/manager/UserLijinMnager.java
@@ -5,6 +5,9 @@
import com.ks.lijin.service.LijinCreateService;
import com.ks.vip.exception.VipOrderException;
import com.ks.vip.pojo.DO.*;
import com.ks.vip.pojo.DTO.PayWayInfoDTO;
import com.ks.vip.pojo.DTO.VipOrderDTO;
import com.ks.vip.pojo.Enums.PayWayEnum;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.service.*;
import com.yeshi.fanli.entity.SystemEnum;
@@ -14,11 +17,13 @@
import com.yeshi.fanli.service.inter.config.ConfigService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
import org.yeshi.utils.TimeUtil;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
public class UserLijinMnager {
@@ -50,6 +55,9 @@
    @Reference(version = "1.0", check = false)
    private VipOrederService vipOrederService;
    @Reference(version = "1.0", check = false)
    private VipOrederPayService vipOrederPayService;
    @Resource
    private ConfigService configService;
@@ -198,5 +206,76 @@
        return potence.getRebatePercent();
    }
    /**
     * 创建订单
     *
     * @param uid
     * @param cid
     * @param payWay
     * @return
     */
    public PayWayInfoDTO createVIPOrder(Long uid, Long cid, PayWayEnum payWay, String ip) throws VipOrderException {
        VipCombo vipCombo = vipComboService.selectByPrimaryKey(cid);
        if (vipCombo == null) {
            throw new VipOrderException(1, "套餐为空");
        }
        String notifuUrl = "http://api.tejia.yeshitv.com/fanli/alipay/pay/lijinvip";
        String resturnUrl = "http://vip.tejia.yeshitv.com/pay_success.html";
        if (payWay == PayWayEnum.weChat) {
            resturnUrl = "http://vip.tejia.yeshitv.com/pay_finish.html";
            notifuUrl = "http://api.tejia.yeshitv.com/fanli/wx/pay/lijinvip";
        }
        VipOrderDTO dto = new VipOrderDTO();
        dto.setUid(getUid(uid));
        dto.setComboId(cid);
        dto.setPayAccount(null);
        dto.setPayMoney(vipCombo.getDiscountPrice());
        dto.setPayWay(payWay);
        dto.setThreeOrderId("tejia-vip-" + uid + "-" + TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHHmmssSSS"));
        return vipOrederPayService.addOrderWithPay(dto, notifuUrl, resturnUrl, ip);
    }
    /**
     * 获取支付宝的支付表单
     *
     * @param formId
     * @return
     */
    public String getAlipayPayForm(String formId) {
        return vipOrederPayService.getAlipayForm(formId);
    }
    /**
     * 检查是否支付
     *
     * @param id
     * @return
     */
    public VipOrder checkPay(Long id) {
        return vipOrederPayService.checkOrderPayState(id);
    }
    /**
     * 根据三方支付订单ID查询
     *
     * @param threeOrderId
     * @return
     */
    public VipOrder selectVipOrderByThreeOrderId(String threeOrderId) {
        return vipOrederService.selectByThreeOrderId(threeOrderId);
    }
    public String getWXPaySuccessOutOrderNo(String notifyContent) throws Exception {
       return vipOrederPayService.getWXPaySuccessOutOrderNo(notifyContent);
    }
    public String getAlipayPaySuccessOutOrderNo(Map<String, String> params) throws Exception {
     return   vipOrederPayService.getAlipayPaySuccessOutOrderNo(params);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -1,47 +1,15 @@
package com.yeshi.fanli.service.impl.dynamic;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.entity.SystemPIDInfo;
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
import com.yeshi.fanli.service.manger.PIDManager;
import com.yeshi.fanli.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.StringUtil;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.yeshi.utils.*;
import org.yeshi.utils.tencentcloud.COSManager;
import com.yeshi.common.vo.ClientTextStyleVO;
import com.yeshi.fanli.dao.dynamic.GoodsEvaluateDao;
import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.entity.SystemPIDInfo;
import com.yeshi.fanli.entity.bus.activity.ActivityRuleUser;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
@@ -54,13 +22,13 @@
import com.yeshi.fanli.entity.dynamic.SimpleGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
import com.yeshi.goods.facade.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.exception.dynamic.ActivityUserException;
import com.yeshi.fanli.exception.dynamic.GoodsEvaluateException;
import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.lijin.manager.GoodsLijinMnager;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.activity.ActivityUserService;
import com.yeshi.fanli.service.inter.config.ConfigService;
@@ -68,20 +36,50 @@
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.goods.facade.service.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.service.manger.PIDManager;
import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
import com.yeshi.fanli.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.service.manger.goods.tb.DaTaoKeTipOffManager;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.taobao.DaTaoKeTipOffUtil;
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.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.common.vo.ClientTextStyleVO;
import sun.plugin2.util.SystemUtil;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeListTopOffDTO;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.goods.facade.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.goods.facade.service.DaTaoKeGoodsDetailV2Service;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.ImageCropUtil;
import org.yeshi.utils.MoneyBigDecimalUtil;
import org.yeshi.utils.TimeUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
public class GoodsEvaluateServiceImpl implements GoodsEvaluateService {
@@ -128,6 +126,9 @@
    @Resource
    private PIDManager pidManager;
    @Resource
    private GoodsLijinMnager goodsLijinMnager;
    @Override
    public void switchState(String id) throws GoodsEvaluateException {
@@ -2280,6 +2281,149 @@
        return result;
    }
    @Resource
    private DaTaoKeTipOffManager daTaoKeTipOffManager;
    @Override
    public int addGoodsEvaluate(DaTaoKeListTopOffDTO dto, ActivityUser user, SystemEnum system) throws GoodsEvaluateException {
        if (dto == null || user == null || system == null) {
            throw new GoodsEvaluateException(1, "相关参数不能为空");
        }
        String title = null;
        try {
            title = daTaoKeTipOffManager.convertLinkForEvaluateWithEncode(dto, system);
        } catch (Exception e) {
            throw new GoodsEvaluateException(1, "转链出错");
        }
        Date limitDate = DateUtil.reduceDay(new Date(), 7);
        String identifyCode = "dataoke-" + StringUtil.Md5(DaTaoKeTipOffUtil.getRecoomendDesc(dto)) + "-" + dto.getUpdateTime().getTime();
        GoodsEvaluate evaluate = goodsEvaluateDao.selectExistLimitTime(identifyCode, limitDate);
        if (evaluate != null)
            throw new GoodsEvaluateException(1, "线报已存在");
        List<String> imgs = new ArrayList<>();
        if (dto.getImageList() != null && dto.getImageList().size() > 0) {
            imgs.addAll(dto.getImageList());
        }
        GoodsDetailVO goods = null;
        //获取图片
        if (dto.getIdList() != null && dto.getIdList().size() > 0) {
            Set<String> imgSet = new HashSet<>();
            imgSet.addAll(imgs);
            String id = dto.getIdList().get(0);
            String source = dto.getSource();
            switch (source) {
                case "tmall":
                case "taobao":
                    try {
                        TaoBaoGoodsBrief goodsBrief = TaoKeApiUtil.getSimpleGoodsInfo(Long.parseLong(id));
                        if (goodsBrief != null && goodsBrief.getImgList() != null) {
                            GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
                            goods = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
                            goods = goodsLijinMnager.loadTBMoneyInfo(system, null, goodsBrief, goods);
                            for (String img : goodsBrief.getImgList()) {
                                if (!imgSet.contains(img) && imgs.size() < 9) {
                                    imgSet.add(img);
                                    imgs.add(img);
                                }
                            }
                        }
                    } catch (TaobaoGoodsDownException e) {
                        e.printStackTrace();
                    }
                    break;
                case "jd": {
                    JDGoods jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(id));
                    if (jdGoods != null && jdGoods.getImageList() != null) {
                        GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
                        goods = GoodsDetailVOFactory.convertJDGoods(jdGoods, params);
                        goods = goodsLijinMnager.loadOtherMoneyInfo(system, null, CommonGoodsFactory.create(jdGoods), goods);
                        for (String img : jdGoods.getImageList()) {
                            if (!imgSet.contains(img) && imgs.size() < 9) {
                                imgSet.add(img);
                                imgs.add(img);
                            }
                        }
                    }
                }
                break;
                case "pdd": {
                    PDDGoodsDetail goodsDetail = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(id));
                    if (goodsDetail != null && goodsDetail.getGoodsGalleryUrls() != null) {
                        GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
                        goods = GoodsDetailVOFactory.convertPDDGoods(goodsDetail, params);
                        goods = goodsLijinMnager.loadOtherMoneyInfo(system, null, CommonGoodsFactory.create(goodsDetail), goods);
                        for (String img : goodsDetail.getGoodsGalleryUrls()) {
                            if (!imgSet.contains(img) && imgs.size() < 9) {
                                imgSet.add(img);
                                imgs.add(img);
                            }
                        }
                    }
                }
                break;
                default:
                    throw new GoodsEvaluateException(1, "不支持的source:" + source);
            }
        }
        // 商品图片信息
        List<ImgInfo> imgList = new ArrayList<>();
        for (String img : imgs) {
            ImgInfo imgInfo = new ImgInfo();
            imgInfo.setH(1);
            imgInfo.setW(1);
            imgInfo.setLarge(false);
            imgInfo.setUrl(img);
            imgInfo.setUrlHD(img);
            imgInfo.setType(ImgEnum.img);
            imgList.add(imgInfo);
        }
        // 一行显示多少个图片
        int lineNum = 3;
        int result = 0;
        int zeroPoint = 0;
        Date startTime = new Date();
        GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
        goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
        goodsEvaluate.setUser(user);
        goodsEvaluate.setTitle(title);
        goodsEvaluate.setState(1);
        goodsEvaluate.setZeroPoint(zeroPoint);
        goodsEvaluate.setDynamicType(1);
        goodsEvaluate.setType(EvaluateEnum.single);
        goodsEvaluate.setShareNum((int) (Math.random() * 5000) + 1000);
        goodsEvaluate.setShareNumReal(0);
        goodsEvaluate.setWeight(0.0);
        goodsEvaluate.setStartTime(startTime);
        goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, startTime));
        goodsEvaluate.setPublishTime(new Date());
        goodsEvaluate.setCreateTime(new Date());
        goodsEvaluate.setUpdateTime(new Date());
        goodsEvaluate.setGoods(goods);
        goodsEvaluate.setLineNum(lineNum);
        goodsEvaluate.setImgList(imgList);
        goodsEvaluate.setComments(null);
        goodsEvaluate.setSystem(system);
        goodsEvaluate.setIdentifyCode(identifyCode);
        goodsEvaluateDao.save(goodsEvaluate);
        return result;
    }
    @Override
    public void addGoodsEvaluateByDaTaoKe(SystemEnum system) {
        List<Long> listId = null;
fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java
@@ -4,6 +4,7 @@
import java.util.List;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeListTopOffDTO;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -227,6 +228,17 @@
    public int addGoodsEvaluate(TaoBaoGoodsBrief goodsBrief, List<String> imgs, ActivityUser user, String title,SystemEnum system)
            throws GoodsEvaluateException;
    /**
     * 添加大淘客的线报
     * @param dto
     * @param user
     * @param system
     * @return
     * @throws GoodsEvaluateException
     */
    public int addGoodsEvaluate(DaTaoKeListTopOffDTO dto, ActivityUser user, SystemEnum system)
            throws GoodsEvaluateException;
    public List<GoodsEvaluate> queryValidZeroPoint(int start, int count);
}
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/tb/DaTaoKeTipOffManager.java
New file
@@ -0,0 +1,40 @@
package com.yeshi.fanli.service.manger.goods.tb;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.goods.GoodsTextUtil;
import com.yeshi.fanli.util.taobao.DaTaoKeTipOffUtil;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeListTopOffDTO;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
 * 大淘客线报
 */
@Component
public class DaTaoKeTipOffManager {
    @Resource
    private ConvertLinkManager convertLinkManager;
    /**
     * 发圈转链
     *
     * @param dto
     * @param system
     * @return
     */
    public String convertLinkForEvaluateWithEncode(DaTaoKeListTopOffDTO dto, SystemEnum system) throws Exception {
        //获取推荐语
        String data = DaTaoKeTipOffUtil.getRecoomendDesc(dto);
        //转链
        return GoodsTextUtil.encodeAppHtmlText(convertLinkManager.convertLinkFromText(system, data, 437032L, false, true),"icon_common_emoji_link","查看详情");
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/GoodsTextUtil.java
New file
@@ -0,0 +1,74 @@
package com.yeshi.fanli.util.goods;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import org.jsoup.Jsoup;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 商品文案
 */
public class GoodsTextUtil {
    /**
     * APP内推荐语编码
     *
     * @param content
     * @param linkIconPath
     * @param linkName
     * @return
     */
    public static String encodeAppHtmlText(String content, String linkIconPath, String linkName) {
        //将链接替换成客户端可展示的内容
        //提取链接
        String result = content;
        String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
        Pattern p = Pattern.compile(URL_REGEX);
        Matcher matcher = p.matcher(content);
        while (matcher.find()) {
            String url = matcher.group();
            if (!StringUtil.isNullOrEmpty(url)) {
                //将链接替换成APP输出的标准模式
                result = result.replace(url, String.format("<img src='%s'><a href=\"%s\">%s</a>", linkIconPath, url, linkName));
            }
        }
        //提取淘口令;
        List<String> taoBaoTokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(result);
        if (taoBaoTokenList != null)
            for (String token : taoBaoTokenList) {
                //替换淘口令
                result = result.replace(token, String.format("<img src='%s'><a href=\"%s\">%s</a>", linkIconPath, token, linkName));
            }
        //替换换行符
        result = result.replace("\n", "<br>");
        return result;
    }
    /**
     * APP内推荐语反编码
     *
     * @param decodeContent
     * @return
     */
    public static String decodeAppHtmlText(String decodeContent) {
        //替换img标签
        String result = decodeContent.replaceAll("<img[^>]*>", "");
        //替换a标签
        Pattern p = Pattern.compile("<a[^>]*>([^<]*)</a>");
        Matcher m = p.matcher(result);
        while (m.find()) {
            String r = m.group(0);
            String href = Jsoup.parse(r).getElementsByTag("a").get(0).attr("href");
            result = result.replace(r, href);
        }
        //替换换行符
        result = result.replace("<br>", "\n");
        return result;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
@@ -13,7 +13,6 @@
import java.util.List;
import java.util.Map;
import com.sun.istack.internal.NotNull;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
@@ -146,7 +145,7 @@
        return resultJson.optJSONObject("data").optString("clickURL");
    }
    public static String convertLinkWithSubUnionId(@NotNull String materialId, String couponUrl, String giftCouponKey, @NotNull String positionId,
    public static String convertLinkWithSubUnionId(String materialId, String couponUrl, String giftCouponKey,  String positionId,
                                                   String subUnionId) {
        String log = "京东转链出错:";
        try {
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeTipOffUtil.java
New file
@@ -0,0 +1,41 @@
package com.yeshi.fanli.util.taobao;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.goods.GoodsTextUtil;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeListTopOffDTO;
/**
 * 大淘客线报帮助类
 */
public class DaTaoKeTipOffUtil {
    /**
     * 获取APP内的推荐语
     *
     * @param dto
     * @return
     */
    public static String getRecoomendDesc(DaTaoKeListTopOffDTO dto) {
        String text = dto.getOriginContent();
        if (StringUtil.isNullOrEmpty(text)) {
            text = dto.getTitle();
            if (dto.getUrlList() != null && dto.getUrlList().size() > 0) {
                text += "\n" + dto.getUrlList().get(0);
            }
        }
        return text;
    }
    public static void main(String[] args) {
        String st = "好价-14点 商品页准点抢20元劵\n" +
                "【39.9元】蒙牛 纯甄 酸牛奶 200g*24盒\n" +
                "https://u.jd.com/8K2aSJ1";
        st = GoodsTextUtil.encodeAppHtmlText(st, "test", "查看详情");
        System.out.println(st);
        st = GoodsTextUtil.decodeAppHtmlText(st);
        System.out.println(st);
    }
}