YiDunUrlResultJob.java 6.14 KB
package com.cnlive.shenhe.job;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cnlive.shenhe.entity.ShyContent;
import com.cnlive.shenhe.entity.ShyYidun;
import com.cnlive.shenhe.serviceImpl.ContentServiceImpl;
import com.cnlive.shenhe.serviceImpl.YiDunServiceImpl;
import com.cnlive.shenhe.utils.CommonConst;
import com.cnlive.shenhe.utils.HttpClientUtils;
import com.cnlive.shenhe.utils.YiDunAntiFraudUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * 易盾网站检测
 *
 * @Author: xujincheng
 * @Date: 2020/3/23 15:16
 */
@Component
public class YiDunUrlResultJob {

    private static Logger logger = LoggerFactory.getLogger(YiDunUrlResultJob.class);

    /**
     * 网站地址URL产品密钥ID,产品标识
     */
    private final static String SECRETID = "c7f33c191020bcc9cbacb7d70417fd2f";
    /**
     * 网站地址URL产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
     */
    private final static String SECRETKEY = "833222b4951a67a9bc63b5ed0c24d07d";
    /**
     * 网站地址URL检测结果获取接口地址
     */
    private final static String URL_RESULT = "https://as.dun.163yun.com/v1/crawler/callback/results";


    @Autowired
    YiDunServiceImpl yiDunServiceImpl;
    @Autowired
    ContentServiceImpl contentServiceImpl;


    /**
     * 定时查询易盾网站检测结果接口
     */
    @Scheduled(cron = "0 0/1 * * * ? ")//每分钟一次
    public void YiDunUrl() {
        Map<String, String> params = new HashMap<String, String>(5);
        // 1.设置公共参数
        params.put("secretId", SECRETID);
        params.put("version", "v1.0");
        params.put("timestamp", String.valueOf(System.currentTimeMillis()));
        params.put("nonce", String.valueOf(new Random().nextInt()));

        // 2.生成签名信息
        String signature1 = YiDunAntiFraudUtil.genSignature(SECRETKEY, params);
        params.put("signature", signature1);

        // 3.发送HTTP请求
        String s1 = HttpClientUtils.post_str(URL_RESULT, params);
        logger.info("查询易盾网站检测结果:{}", s1);

        // 4.解析接口返回值
        JSONObject resultObject = JSONObject.parseObject(s1);
        int code = resultObject.getIntValue("code");
        String msg = resultObject.getString("msg");
        //易盾返回结果的类型
        String type;
        //易盾失败结果的详情
        String desc = "";
        if (code == 200 && "ok".equals(msg)) {
            JSONArray resultJSONArray = resultObject.getJSONArray("result");
            for (int i = 0; i < resultJSONArray.size(); i++) {
                ShyContent shyContent = new ShyContent();
                JSONObject jsonObject = resultJSONArray.getJSONObject(i);
                String dataId = jsonObject.getString("dataId");
                ShyYidun yiDunMsg = yiDunServiceImpl.getYiDunMsg(dataId);
                ShyYidun newYiDunMsg = new ShyYidun();
                newYiDunMsg.setId(yiDunMsg.getId());
                newYiDunMsg.setDuration(-1);
                newYiDunMsg.setUpdate_time(new Date());
                //检测结果, 1:正常(建议通过) 2:异常(建议拦截) 3:疑似(建议人工确认)0:无结果(检测失败)
                int result = jsonObject.getIntValue("result");
                newYiDunMsg.setResult_type(String.valueOf(result));
                if (result == 1) {
                    desc = "数美审核通过了";
                    shyContent.setShenhe_msg(desc);
                    newYiDunMsg.setDesc_msg(desc);
                    //修改图文状态
                    contentServiceImpl.callback(newYiDunMsg.getContent_id(), desc, CommonConst.AUDIT_SUCCESS, "", "机审通过");
                } else {
                    JSONObject evidences = jsonObject.getJSONObject("evidences");
                    JSONArray texts = evidences.getJSONArray("texts");
                    if (texts != null && texts.size() > 0) {
                        for (int j = 0; j < texts.size(); j++) {
                            JSONObject jsonObject1 = texts.getJSONObject(j);
                            //检测结果,0:通过,1:嫌疑,2:不通过
                            int action = jsonObject1.getIntValue("action");
                            if (action == 1) {
                                desc = desc + "文字嫌疑";
                                break;
                            }
                            if (action == 2) {
                                desc = desc + "文字不通过";
                                break;
                            }
                        }
                    }
                    JSONArray images = evidences.getJSONArray("images");
                    if (images != null && images.size() > 0) {
                        for (int k = 0; k < images.size(); k++){
                            JSONObject jsonObject1 = images.getJSONObject(k);
                            //0:正常,1:不确定,2:确定
                            int level = jsonObject1.getIntValue("level");
                            if (level == 1) {
                                desc = desc + "图片嫌疑";
                                break;
                            }
                            if (level == 2) {
                                desc = desc + "图片不通过";
                                break;
                            }
                        }
                    }

                    //审核类型改为人工审核
                    shyContent.setShenhe_type(CommonConst.AUDIT_TYPE_USER);
                    //拒绝原因
                    shyContent.setShenhe_msg(desc);
                    newYiDunMsg.setDesc_msg(desc);
                    contentServiceImpl.updateshyContent(shyContent);
                }
                yiDunServiceImpl.updateYiDunMsg(newYiDunMsg);
            }
        }

    }
}