• 多线程查询的方法


    @Override
    @Scheduled(cron = "0 0 0 * * ?")// 一天请求一次
    public boolean queryAllParkInfo() {
    log.info("宜停车停车场信息查询开始:" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));

    int pageSize = 500;
    int pages = 15000 / pageSize;
    ExecutorService pool = Executors.newCachedThreadPool();

    //重置数据
    newAccessInfo.setTotalCount(0);
    newAccessInfo.setErrorCount(0);
    newAccessInfo.setRightCount(0);
    newAccessInfo.setRepeatCount(0);
    hmap = new HashMap<>();
    long start = System.currentTimeMillis();
    for (int i = 1; i <= pages; i++) {
    pool.execute(new ParkInfoTask(i, pageSize));
    }
    pool.shutdown();
    while (true) {
    if (pool.isTerminated()) {

    //新增连接次数
    iNewAccessCountService.updateAccessConnectTimes(newAccessInfo.getTotalCount(), 2);
    //增加连接异常信息
    iNewAccessInfoService.insertAccessInfo(newAccessInfo, 2, 2);
    long time = System.currentTimeMillis() - start;
    log.info("[" + new Date() + "]:" + "程序结束了,总耗时:" + time + " ms(毫秒)!");
    break;
    }
    }
    return true;
    }



     class ParkInfoTask implements Runnable {
    private int pageIndex;
    private int pageSize;
    String method = "getparkinfo";

    int count, error, repeat, right;

    public ParkInfoTask(int pageIndex, int pageSize) {
    getSynMessage(pageIndex, pageSize);
    }

    private synchronized void getSynMessage(int pageIndex, int pageSize) {
    this.pageIndex = pageIndex;
    this.pageSize = pageSize;

    this.count = newAccessInfo.getTotalCount();
    this.right = newAccessInfo.getRightCount();
    this.error = newAccessInfo.getErrorCount();
    this.repeat = newAccessInfo.getRepeatCount();
    }

    @Override
    public synchronized void run() {
    try {
    Thread.sleep(1000);

    // 请求参数
    MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
    map.add("appkey", appKey);
    map.add("method", method);
    map.add("security", MD5.MD5Encode(appSecret + method, CharsetUtils.utf));
    map.add("pageIndex", pageIndex);
    map.add("pageSize", pageSize);
    Map<String,Object> tMap = new HashMap<>();
    tMap.put("appkey", appKey);
    tMap.put("method", method);
    tMap.put("security", MD5.MD5Encode(appSecret + method, CharsetUtils.utf));
    tMap.put("pageIndex", pageIndex);
    tMap.put("pageSize", pageSize);
    String sign = SignUtils.signSZ(map, appSecret);
    map.add("sign", sign);
    log.info("请求参数:"+map.toString());
    String response = HttpUtils.findUserData(url, map, String.class);
    log.info("【" + map.get("method") + "】--响应:" + response);
    JSONObject jsonObject = JSONObject.parseObject(response);
    JSONObject data = jsonObject.getJSONObject("data");
    if (data != null && data.size() != 0) {
    JSONObject data1 = data.getJSONObject("data");
    if (data1 != null && data1.size() != 0) {
    JSONArray items = data1.getJSONArray("ParkInfos");
    newAccessInfo.setTotalCount(newAccessInfo.getTotalCount() + items.size());

    try {
    for (int i = 0; i < items.size(); i++) {

    NewSysParkInfo parkinfo = JSONObject.parseObject(JSONObject.toJSONString(items.get(i)), NewSysParkInfo.class);
    // 数据过滤
    if (parkinfo.getParkCode() == null || parkinfo.getCanton() == null || parkinfo.getAddress() == null) {
    newAccessInfo.setErrorCount(newAccessInfo.getErrorCount() + 1);
    continue;
    }
    if (hmap.containsKey(parkinfo.getParkCode())) {
    newAccessInfo.setRepeatCount(newAccessInfo.getRepeatCount() + 1);
    continue;
    } else {
    hmap.put(parkinfo.getParkCode(), 1);
    }

    NewSysParkInfo p1 = getOne(new QueryWrapper<NewSysParkInfo>().eq("park_code",parkinfo.getParkCode()));
    boolean isOk=true;
    if(p1 != null){
    //更新
    parkinfo.setUpdateTime(new Date());
    isOk = update(parkinfo,new QueryWrapper<NewSysParkInfo>().eq("park_code",parkinfo.getParkCode()));
    }else{
    parkinfo.setCreateTime(new Date());
    isOk = save(parkinfo);
    }
    if(!isOk){
    newAccessInfo.setErrorCount(newAccessInfo.getErrorCount() + 1);
    }else{
    newAccessInfo.setRightCount(newAccessInfo.getRightCount() + 1);
    }

    }

    } catch (Exception e) {
    e.printStackTrace();
    newAccessInfo.setErrorCount(newAccessInfo.getErrorCount() + 1);
    }
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    }
  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/pxzbky/p/14214436.html
Copyright © 2020-2023  润新知