PoliceCarInfoUtil.java 6.43 KB
package com.zteits.pay.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.collections4.CollectionUtils;
import com.alibaba.fastjson.JSONObject;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.digest.HmacAlgorithm;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.clouds.common.cache.sys.SysCodeValueCacheUtil;
import com.clouds.common.constants.CodeValKindEnum;
import com.clouds.common.constants.CodeValueEnum;
import com.google.common.collect.Lists;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.exception.BizException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Copyright: Copyright (c) 2020  zteits
 *
 * @ClassName: com.zteits.pay.util
 * @Description:
 * @version: v1.0.0
 * @author: atao
 * @date: 2020/9/14   5:07 下午 Modification History:
 * @ Date         Author          Version      Description
 * @ ---------------------------------------------------------*
 * @ 2020/9/14      atao          v1.0.0          创建
 */
public class PoliceCarInfoUtil {

    private static final Logger log = LoggerFactory.getLogger(PoliceCarInfoUtil.class);

    /**
     * 获取车辆图片信息
     *
     * @param carNumber
     */
    public static List<String> getPoliceCarPicInfo(String carNumber) {

        //final String url = SysCodeValueCacheUtil.queryCodeNameByCodeValue(CodeValKindEnum.POLICE_CAR_INFO,
        //    CodeValueEnum.POLICE_URL, "http://119.100.56.15/api/police/vechicle/");
        //final String appid = SysCodeValueCacheUtil.queryCodeNameByCodeValue(CodeValKindEnum.POLICE_CAR_INFO,
        //    CodeValueEnum.POLICE_APP_ID, "YFBBW2DXKRV2YAGH8X8B");
        //final String appsecret = SysCodeValueCacheUtil.queryCodeNameByCodeValue(CodeValKindEnum.POLICE_CAR_INFO,
        //    CodeValueEnum.POLICE_APP_SECRET, "41cf5866164ffb181ad3f97961d92a9b");
        //final String timestamp = System.currentTimeMillis() + "";
        //final String nonce = RandomUtil.randomString(15);



        final String url = "http://119.100.56.15/api/police/vechicleOwner/";
        //final String url = "http://119.100.56.15/api/police/vechicle/";
        final String appid = "YFBBW2DXKRV2YAGH8X8B";
        final String appsecret = "41cf5866164ffb181ad3f97961d92a9b";
        final String timestamp = System.currentTimeMillis() + "";
        final String nonce = RandomUtil.randomString(15);


        //目前黄石只能查询 鄂B 及 鄂OB 的车
        if (null != carNumber) {
            carNumber = carNumber.replaceAll(" ","").trim();
            carNumber = carNumber.toUpperCase();
            if (!carNumber.startsWith("鄂OB") && !carNumber.startsWith("鄂B")) {
                return new ArrayList<>();
            }
            carNumber = carNumber.replaceAll("鄂OB", "").replaceAll("鄂B", "");
        }

        StringBuffer sourceStr = new StringBuffer();
        sourceStr.append("appid=").append(appid).append(";");
        sourceStr.append("appsecret=").append(appsecret).append(";");
        sourceStr.append("nonce=").append(nonce).append(";");
        sourceStr.append("timestamp=").append(timestamp).append(";");
        sourceStr.append(carNumber).append(";");
        log.info("待加密字符串为:{}", sourceStr.toString());

        String signature = SecureUtil.hmac(HmacAlgorithm.HmacSHA256, appsecret.getBytes()).digestHex(
            sourceStr.toString());

        log.info("timestamp:{}", timestamp);
        log.info("nonce:{}", nonce);
        log.info("生成 签名为:{}", signature);
        HttpRequest request = new HttpRequest(url + carNumber);
        request.header("api-appid", appid);
        request.header("api-timestamp", timestamp);
        request.header("api-nonce", nonce);
        request.header("api-signature", signature);

        HttpResponse response = request.timeout(3 * 1000).execute();
        if (response.isOk()) {

            String body = response.body();
            JSONObject result = JSONObject.parseObject(body);
            if (!result.getBoolean("success")) {
                String msg = result.getString("msg");
                throw new BizException(ErrorType.BIZ_ERROR, "请求黄石公安车主数据接口失败:", msg);
            } else {

                String imgs = result.getString("result");

                List<String> imgList = JSONObject.parseArray(imgs, String.class);
                return imgList;
            }

        } else {
            log.error("请求黄石公安车主数据接口异常: HttpStatus={}", response.getStatus());
            throw new BizException(ErrorType.BIZ_ERROR, "请求黄石公安车主数据接口异常,HttpStatus=" + response.getStatus());
        }

    }

    public static void main(String[] args) {
        List<String> list = Arrays.asList(
            "BWJ955",
            "BD4928",
            "B6QZ56",
            "B32615",
            "B5CM10",
            "B6AZ81",
            "B1P507",
            "B6CH89",
            "B6VB03",
            "B1V532"
        );

        List<String> dataList = Arrays.asList(

            "鄂B6XW57",
            "鄂BWF015",
            "鄂B8A551",
            "鄂BBN890",
            "鄂B8VW39",
            "鄂B84575",
            "鄂BW9297",
            "鄂BCM977",
            "鄂B8Q563",
            "鄂B8HX91",
            "鄂BAX255",
            "鄂B8JM50",
            "鄂B87153",
            "鄂BDT566",
            "鄂B09858",
            "鄂B1NL17",
            "鄂BWH932",
            "鄂B2N456",
            "鄂BAS719",
            "鄂B1HB75",
            "鄂BZ6611",
            "鄂B8FW84",
            "鄂BAS388",
            "鄂B0UU99",
            "鄂B1R101",
            "鄂B8V809",
            "鄂B8ME58",
            "鄂B5A020",
            "鄂BBX901",
            "鄂B8JH51"


        );
        List<String> noDataList = Lists.newArrayList();
        List<String> hasDataList = Lists.newArrayList();
        for(String carNumber:dataList){
            List<String> picInfo = getPoliceCarPicInfo(carNumber);
            if(CollectionUtils.isEmpty(picInfo)){
                noDataList.add(carNumber);
            }else{
                hasDataList.add(carNumber);
                System.out.println(JSONObject.toJSONString(picInfo));
            }
        }

        System.out.println("no data ======"+noDataList.toString());
        System.out.println("has data ======"+hasDataList.toString());
    }

}