校验工具

   1 /**
   2  * @ProjectName: BSP 海康威视大数据服务平台
   3  * @Copyright: 2015 HangZhou Hikvision System Technology Co., Ltd. All Right Reserved.
   4  * @address: http://www.hikvision.com
   5  * @date: 2016/5/19 9:43
   6  * @Description: 本内容仅限于杭州海康威视数字技术股份有限公司内部使用,禁止转发.
   7  */
   8 package com.hikvision.bsp.facecloud.utils;
   9 
  10 import com.alibaba.fastjson.JSON;
  11 import com.alibaba.fastjson.JSONObject;
  12 import com.alibaba.fastjson.util.TypeUtils;
  13 import com.hikvision.bsp.common.exception.BaseException;
  14 import com.hikvision.bsp.common.util.DateFormatUtils;
  15 import com.hikvision.bsp.common.util.StringUtil;
  16 import com.hikvision.bsp.facecloud.comparator.FaceComparator;
  17 import com.hikvision.bsp.facecloud.config.FaceCloudConfig;
  18 import com.hikvision.bsp.facecloud.queue.HumanInfoRecordQueue;
  19 import com.hikvision.facecloud.constant.FaceCloudConstant;
  20 import com.hikvision.bsp.facecloud.domain.*;
  21 import com.hikvision.bsp.facecloud.message.TimeSpaceResultLibCache;
  22 import com.hikvision.bsp.facecloud.ws.webservice.domain.*;
  23 import com.hikvision.facecloud.constant.ErrorCodeEnum;
  24 import com.hikvision.filter.SimilarityConditionFilter;
  25 import org.apache.commons.beanutils.PropertyUtils;
  26 import org.apache.commons.lang3.StringUtils;
  27 import org.apache.hadoop.hbase.util.Base64;
  28 import org.apache.spark.unsafe.types.UTF8String;
  29 
  30 import java.text.SimpleDateFormat;
  31 import java.util.*;
  32 import java.util.regex.Matcher;
  33 import java.util.regex.Pattern;
  34 
  35 /**
  36  * <p>
  37  * 参数校验工具类
  38  * </p>
  39  *
  40  * @author zhuchao 2016/5/19 9:43
  41  * @version V1.0
  42  * @modificationHistory=========================逻辑或功能性重大变更记录
  43  * @modify by user: $author$ $date$
  44  * @modify by reason: {方法名}:{原因}
  45  */
  46 public class ParamCheckUtil {
  47     /**
  48      * 校验是否为空
  49      *
  50      * @param param
  51      * @param paramName
  52      */
  53     public static void checkNotNull(Object param, String paramName) {
  54         if (param == null) {
  55             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + paramName + "]should not be null");
  56         }
  57     }
  58 
  59     /**
  60      * 校验字符串不能为空
  61      *
  62      * @param param
  63      * @param paramName
  64      */
  65     public static void checkNotBlank(String param, String paramName) {
  66         if (StringUtils.isBlank(param)) {
  67             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + paramName + "]should not be null");
  68         }
  69     }
  70 
  71     public static void checkNotBlank(String param1, String paramName1, String param2, String paramName2) {
  72         if (StringUtils.isBlank(param1) && StringUtils.isBlank(param2)) {
  73             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + paramName1 + "],Param[" + paramName2 + "] least one has value.");
  74         }
  75     }
  76 
  77     public static void checkCloudAnalysisStatus() {
  78         throw new BaseException(ErrorCodeEnum.CODE_CLOUD_ANALYSIS_NOT_UNUSABLE, "Cloud Analysis Server unusable, Or Cloud Analysis url is not configuration.");
  79     }
  80 
  81     public static void checkParmIsZero(String param, String paramName) {
  82         if (Integer.valueOf(param.trim()) == 0) {
  83             throw new BaseException(ErrorCodeEnum.CODE_CLOUD_STATUS_IN_NOT_ZERO, "Param[" + paramName + "]should not be submit. Because of can't submit right task.");
  84         }
  85     }
  86 
  87     public static void checkIsInteger(String str) {
  88         if (StringUtil.isNoneEmpty(str)) {
  89             Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
  90             if (!pattern.matcher(str).matches()) {
  91                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + str + "]must be Integer type");
  92             }
  93         }
  94     }
  95 
  96     /**
  97      * 校验字符串为空使用默认值
  98      *
  99      * @param param
 100      */
 101     public static String checkBlankWithDefaultValue(String param, String defaultValue) {
 102         if (StringUtils.isBlank(param)) {
 103             param = defaultValue;
 104         }
 105         return param;
 106     }
 107 
 108     /**
 109      * 校验字符串不能为特定值
 110      *
 111      * @param param
 112      * @param value
 113      */
 114     public static <T> void checkBanValue(T param, T value, String paramName) {
 115         if (param != null) {
 116             if (param instanceof String && param.equals(value)) {
 117                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "param[" + paramName + "]can not be" + value);
 118             } else if (param instanceof Integer && param.equals(value)) {
 119                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "param[" + paramName + "]can not be" + value);
 120             } else if (param instanceof Double && param.equals(value)) {
 121                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "param[" + paramName + "]can not be" + value);
 122             } else if (param instanceof Boolean && param.equals(value)) {
 123                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "param[" + paramName + "]can not be" + value);
 124             } else {
 125                 if (param.equals(value)) {
 126                     throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "param[" + paramName + "]can not be" + value);
 127                 }
 128             }
 129         }
 130     }
 131 
 132     /**
 133      * 校验字符串长度
 134      *
 135      * @param param
 136      * @param paramName
 137      * @param length
 138      */
 139     public static void checkLength(String param, String paramName, int length) {
 140         checkNotBlank(param, paramName);
 141         if (param.length() > length) {
 142             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID,
 143                     "param[" + paramName + "]length cannot be greater than" + length + "bytes");
 144         }
 145     }
 146 
 147     /**
 148      * 校验数据在可选值中
 149      *
 150      * @param param
 151      * @param paramName
 152      * @param rang
 153      */
 154     public static void checkRandValue(int param, String paramName, int... rang) {
 155         for (int i = 0; i < rang.length; i++) {
 156             if (param == rang[i]) {
 157                 return;
 158             }
 159         }
 160         throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL,
 161                 "Param[" + paramName + "],value should be " + Arrays.toString(rang));
 162     }
 163 
 164     /**
 165      * 校验日期格式,如正确转化为Date类型返回
 166      *
 167      * @param dateStr
 168      * @param paramName
 169      * @param pattern
 170      * @return
 171      */
 172     public static Date checkDate(String dateStr, String paramName, String pattern) {
 173         try {
 174             if (dateStr.length() != pattern.length()) {
 175                 throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL,
 176                         "Param[" + paramName + "]incorrect format, correct format is:" + pattern);
 177             }
 178 
 179             Date date = DateFormatUtils.toDate(dateStr, pattern);
 180             if (date == null) {
 181                 throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL,
 182                         "Param[" + paramName + "]incorrect format,correct format is:" + pattern);
 183             }
 184             //输入日期不能过小
 185             Date limitDate = DateFormatUtils.toDate("1700-01-01 00:00:00", pattern);
 186 
 187             if (!DateUtil.checkDateTime(dateStr, pattern)) {
 188                 throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL,
 189                         "Param[" + paramName + "]invalid, please enter a valid date");
 190             }
 191 
 192             if (limitDate.after(date)) {
 193                 throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL,
 194                         "please enter 1700-01-01 later date");
 195             }
 196             return date;
 197         } catch (BaseException e) {
 198             throw new BaseException(e.getErrorCode(), e.getMessage());
 199         } catch (Throwable e) {
 200             throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL, "Param[" + paramName + "]incorrect format, correct format is: " + pattern);
 201         }
 202     }
 203 
 204     /**
 205      * 校验时间(HH:MM:SS)是否合法
 206      *
 207      * @param timeStr
 208      * @return
 209      */
 210     public static void checkTimeFormat(String timeStr) {
 211         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:MM:SS");
 212         if (!checkTimeValue(timeStr)) {
 213             throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL, "please enter right time");
 214         }
 215         try {
 216             simpleDateFormat.parse(timeStr);
 217         } catch (Exception e) {
 218             throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL, "Param[" + timeStr + "]incorrect format, correct format is: HH:MM:SS");
 219         }
 220     }
 221 
 222     private static boolean checkTimeValue(String timeStr) {
 223         String timeValue[] = timeStr.split(":");
 224         if (timeValue.length != 3) {
 225             return false;
 226         }
 227         if (Integer.parseInt(timeValue[0]) < 0 || Integer.parseInt(timeValue[0]) > 23) {
 228             return false;
 229         }
 230         if (Integer.parseInt(timeValue[1]) < 0 || Integer.parseInt(timeValue[1]) > 59) {
 231             return false;
 232         }
 233         if (Integer.parseInt(timeValue[2]) < 0 || Integer.parseInt(timeValue[2]) > 59) {
 234             return false;
 235         }
 236         return true;
 237     }
 238 
 239     /**
 240      * 人脸查重、碰撞参数检查
 241      *
 242      * @param beginBirthDate
 243      * @param endBirthDate
 244      * @param threshold
 245      * @param pageNum
 246      * @param pageSize
 247      */
 248     public static void checkFaceSimilarCheckParam(String beginBirthDate, String endBirthDate, float threshold,
 249                                                   int pageNum, int pageSize) {
 250         // 日期格式检查
 251         if (StringUtils.isNoneEmpty())
 252 
 253             if (StringUtils.isNotEmpty(beginBirthDate)) {
 254                 ParamCheckUtil.checkDate(beginBirthDate, "beginBirthDate", DateFormatUtils.DATE_TIME_FORMATTER_YMD);
 255             }
 256         if (StringUtils.isNotEmpty(endBirthDate)) {
 257             ParamCheckUtil.checkDate(endBirthDate, "endBirthDate", DateFormatUtils.DATE_TIME_FORMATTER_YMD);
 258         }
 259         if (StringUtils.isNotEmpty(beginBirthDate) && StringUtils.isNotEmpty(endBirthDate)
 260                 && beginBirthDate.compareTo(endBirthDate) > 0) {
 261             throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL, "endBirthDate must be earlier than beginBirthDate");
 262         }
 263 
 264         ParamCheckUtil.checkRange(threshold, "threshold", 0.0, false, 1.0, true);
 265         ParamCheckUtil.checkPage(pageNum, pageSize, null, null);
 266     }
 267 
 268     /**
 269      * 验证开始结束时间是否正确(结束时间晚于开始时间)
 270      *
 271      * @param beginTime
 272      * @param beginTimeParamName
 273      * @param endTime
 274      * @param endTimeParamName
 275      */
 276     public static void checkTimeRight(Date beginTime, String beginTimeParamName, Date endTime,
 277                                       String endTimeParamName) {
 278         if (!beginTime.before(endTime)) {
 279             throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL,
 280                     "Parameter " + beginTimeParamName + "='" + beginTime + "must earlier than " + endTimeParamName + "='" + endTime
 281                             + "', please input true time range");
 282         }
 283     }
 284 
 285     /**
 286      * 验证开始结束时间格式是否正确
 287      * (结束时间晚于开始时间)
 288      *
 289      * @param beginParam
 290      * @param beginName
 291      * @param beginPattern
 292      * @param endParam
 293      * @param endName
 294      * @param endPattern
 295      */
 296     public static void checkDateRight(String beginParam, String beginName, String beginPattern, String endParam,
 297                                       String endName, String endPattern) {
 298         Date beginDate = null;
 299         if (StringUtil.isNotBlank(beginParam)) {
 300             beginDate = checkDate(beginParam, beginName, beginPattern);
 301         }
 302 
 303         if (StringUtil.isNotBlank(endParam)) {
 304             Date endDate = checkDate(endParam, endName, endPattern);
 305             if (null != beginDate && !beginDate.before(endDate)) {
 306                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
 307                         "param" + beginName + "='" + beginParam + "must be earlier than" + endName + "='" + endParam + "',please enter the correct time range");
 308             }
 309         }
 310     }
 311 
 312     /**
 313      * 验证开始结束时间格式是否正确
 314      * (结束时间晚于开始时间包括相等)
 315      *
 316      * @param beginParam
 317      * @param beginName
 318      * @param beginPattern
 319      * @param endParam
 320      * @param endName
 321      * @param endPattern
 322      */
 323     public static void checkDateRightWithEquals(String beginParam, String beginName, String beginPattern, String endParam,
 324             String endName, String endPattern) {
 325         Date beginDate = null;
 326         if (StringUtil.isNotBlank(beginParam)) {
 327             beginDate = checkDate(beginParam, beginName, beginPattern);
 328         }
 329 
 330         if (StringUtil.isNotBlank(endParam)) {
 331             Date endDate = checkDate(endParam, endName, endPattern);
 332             if (null != beginDate && beginDate.after(endDate)) {
 333                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
 334                         "param" + beginName + "='" + beginParam + "must be earlier than" + endName + "='" + endParam + "',please enter the correct time range");
 335             }
 336         }
 337     }
 338 
 339     public static void checkTimeRight(long beginTime, String beginTimeParamName, long endTime,
 340                                       String endTimeParamName) {
 341         if (beginTime > endTime) {
 342             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
 343                     "param" + beginTimeParamName + "='" + beginTime + " must earlier than " + endTimeParamName + "='" + endTime
 344                             + "',please enter right timezone");
 345         }
 346     }
 347 
 348     public static void checkEndTimeRight(long time, String timeParamName) {
 349         Date endDate = DateFormatUtils.toDate(time, DateFormatUtils.DATE_TIME_FORMATTER_YMD);
 350         //一天时间差
 351         Date now = DateFormatUtils.toDate(System.currentTimeMillis() + 24 * 60 * 60 * 1000, DateFormatUtils.DATE_TIME_FORMATTER_YMD);
 352         if (endDate.after(now)) {
 353             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
 354                     "param[" + timeParamName + "]could not after than now 1 day");
 355         }
 356     }
 357 
 358     public static void checkJSONFormat(String param, String paramName) {
 359         try {
 360             JSON.parseObject(param, Map.class);
 361         } catch (Exception e) {
 362             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID,
 363                     "Param:" + paramName
 364                             + " should be json format");
 365         }
 366     }
 367 
 368     /**
 369      * 校验相似度
 370      *
 371      * @param minSimilarity
 372      * @param maxSimilarity
 373      */
 374     public static void checkSimilarity(double minSimilarity, double maxSimilarity) {
 375         if (minSimilarity < 0.0 || minSimilarity > 1.0) {
 376             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter [minSimilarity] must in [0,1]");
 377         }
 378         if (maxSimilarity < 0.0 || maxSimilarity > 1.0) {
 379             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter [maxSimilarity] must in [0,1]");
 380         }
 381         if (maxSimilarity < minSimilarity) {
 382             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter [maxSimilarity] must >= [minSimilarity] ");
 383         }
 384         //TODO 暂用这种方法判断 以后用具有扩展性的条件
 385         if ((minSimilarity < 0.001 && minSimilarity > 0) || (maxSimilarity < 0.001 && maxSimilarity > 0)) {
 386             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter[maxSimilarity] and [minSimilarity] can not less than 0.001");
 387         }
 388     }
 389 
 390     /**
 391      * 校验Int型参数范围
 392      *
 393      * @param param
 394      * @param paramName
 395      * @param minValue
 396      * @param minEqualInd
 397      * @param maxValue
 398      * @param maxEqualInd
 399      */
 400     public static void checkRange(int param, String paramName, Integer minValue, boolean minEqualInd, Integer maxValue,
 401                                   boolean maxEqualInd) {
 402         if (minValue != null) {
 403             if (minEqualInd && param < minValue) {
 404                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + paramName + "]should equal or greater than " + minValue);
 405             } else if (!minEqualInd && param <= minValue) {
 406                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + paramName + "]should greater " + minValue);
 407             }
 408         }
 409         if (maxValue != null) {
 410             if (maxEqualInd && param > maxValue) {
 411                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + paramName + "]should less than or equal " + maxValue);
 412             } else if (!maxEqualInd && param >= maxValue) {
 413                 throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param[" + paramName + "]should less " + maxValue);
 414             }
 415         }
 416     }
 417 
 418     /**
 419      * 校验Double型参数范围
 420      *
 421      * @param param
 422      * @param paramName
 423      * @param minValue
 424      * @param minEqualInd
 425      * @param maxValue
 426      * @param maxEqualInd
 427      */
 428     public static void checkRange(double param, String paramName, Double minValue, boolean minEqualInd, Double maxValue,
 429                                   boolean maxEqualInd) {
 430 
 431         if (minValue != null) {
 432             if (minEqualInd && param < minValue) {
 433                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter [" + paramName + "] must >=" + minValue);
 434             } else if (!minEqualInd && param <= minValue) {
 435                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter [" + paramName + "] must >" + minValue);
 436             }
 437         }
 438         if (maxValue != null) {
 439             if (maxEqualInd && param > maxValue) {
 440                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter [" + paramName + "] must <=" + maxValue);
 441             } else if (!maxEqualInd && param >= maxValue) {
 442                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Parameter [" + paramName + "] must <" + maxValue);
 443             }
 444         }
 445     }
 446 
 447     /**
 448      * 校验模型
 449      *
 450      * @param modelStr
 451      * @return
 452      */
 453     public static byte[] checkModel(String modelStr) {
 454         checkNotBlank(modelStr, "face model");
 455 
 456         byte[] modelData = Base64.decode(modelStr);
 457         checkNotNull(modelData, "face model decoding");
 458 
 459         if (!FaceComparator.apply().checkModel(modelData)) {
 460             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "face model is not legal");
 461         }
 462         return modelData;
 463     }
 464 
 465     /**
 466      * 校验模型
 467      *
 468      * @param modelData
 469      * @return
 470      */
 471     public static byte[] checkModel(byte[] modelData) {
 472         checkNotNull(modelData, "face model");
 473         if (!FaceComparator.apply().checkModel(modelData)) {
 474             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "face model is not legal");
 475         }
 476         return modelData;
 477     }
 478 
 479     /**
 480      * 校验分页参数
 481      *
 482      * @param pageNum
 483      * @param pageSize
 484      * @param maxPageNum
 485      * @param maxPageSize
 486      */
 487     public static void checkPage(int pageNum, int pageSize, Integer maxPageNum, Integer maxPageSize) {
 488         checkRange(pageNum, "pageNum", 1, true, maxPageNum, true);
 489         checkRange(pageSize, "pageSize", 1, true, maxPageSize, true);
 490     }
 491 
 492     /**
 493      * 校验报警信息参数
 494      *
 495      * @param param
 496      */
 497     public static AlarmInfoParam checkAlarmInfoParam(AlarmInfoParam param) {
 498         checkNotNull(param, "AlarmInfoParam");
 499 
 500         checkRandValue(param.getSortByType(), "sort type", 0, 1);
 501 
 502         checkSimilarity(param.getSimilarityMin(), param.getSimilarityMax());
 503 
 504         if (param.getResultSize() == 0 ){
 505             int resultSize = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.HUMAN_FACE_MODEL_TOPN,
 506                     FaceCloudConstant.FEATUREMATCH.DEFAULT_MODEL_TOPN);
 507             param.setResultSize(resultSize);
 508         }
 509 
 510         checkResultSize(param.getResultSize(), "resultSize");
 511         checkNotBlank(param.getBeginDate(), "begin time");
 512         checkNotBlank(param.getEndDate(), "end time");
 513         checkDateRight(param.getBeginDate(), "begin time", FaceCloudConstant.DATE_FORMATTER_YMDHMS, param.getEndDate(),
 514                 "end time", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
 515 
 516         checkPage(param.getPageNum(), param.getPageSize(), null, null);
 517 
 518         return param;
 519     }
 520 
 521     /**
 522      * 校验抓拍查询信息参数
 523      *
 524      * @param param
 525      * @return
 526      */
 527     public static QuerySnapRecordParm checkQuerySnapRecordParm(QuerySnapRecordParm param) {
 528         checkNotNull(param, "QuerySnapRecordParm");
 529 
 530         checkRandValue(param.getSex(), "sex", -1, 0, 1, 2);
 531         checkRandValue(param.getGlass(), "glasses", -1, 0, 1, 2);
 532         checkRandValue(param.getResultStatus(), "resultStatus", -1, 0, 1);
 533         checkRandValue(param.getSmile(), "smile", -1, 0, 1, 2);
 534 
 535         checkRandValue(param.getCertificate(), "certificate", -1, 100, 1, 2, 3);
 536         checkRandValue(param.getEthnic(), "ethnic", -1, 0, 1, 2);
 537 
 538         checkPage(param.getPageNum(), param.getPageSize(), null, null);
 539         return param;
 540     }
 541 
 542     /**
 543      * 校验抓拍查询信息参数
 544      *
 545      * @param param
 546      * @return
 547      */
 548     public static QuerySnapRecordWithIQAParam checkQuerySnapRecordwithIQAParm(QuerySnapRecordWithIQAParam param) {
 549         checkNotNull(param, "QuerySnapRecordParm");
 550 
 551         checkRandValue(param.getSex(), "sex", -1, 0, 1, 2);
 552         checkRandValue(param.getGlass(), "glasses", -1, 0, 1, 2);
 553         checkRandValue(param.getResultStatus(), "resultStatus", -1, 0, 1);
 554         checkRandValue(param.getSmile(), "smile", -1, 0, 1, 2);
 555 
 556         checkRandValue(param.getCertificate(), "certificate", -1, 100, 1, 2, 3);
 557         checkRandValue(param.getEthnic(), "ethnic", -1, 0, 1, 2);
 558 
 559         checkPage(param.getPageNum(), param.getPageSize(), null, null);
 560         return param;
 561     }
 562 
 563     /**
 564      * 校验人证库查询信息参数
 565      *
 566      * @param param
 567      * @return
 568      */
 569     public static PersonClusterRecordParm checkPersonClusterRecordParm(PersonClusterRecordParm param) {
 570         checkNotNull(param, "PersonClusterRecordParm");
 571         checkRandValue(param.getHumanMale(), "humanMale", -1, 0, 1, 2);
 572         checkPage(param.getPageNum(), param.getPageSize(), null, null);
 573 
 574 
 575         if (StringUtil.isNotBlank(param.getBeginBirthDate())) {
 576             checkDate(param.getBeginBirthDate(), "begin birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
 577         }
 578 
 579         if (StringUtil.isNotBlank(param.getEndBirthDate())) {
 580             checkDate(param.getEndBirthDate(), "end birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
 581         }
 582 
 583         checkDateRight(param.getBeginBirthDate(), "begin birth date", FaceCloudConstant.DATE_FORMATTER_YMD,
 584                 param.getEndBirthDate(), "end birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
 585         return param;
 586     }
 587 
 588     /**
 589      * 校验人证库任务参数
 590      *
 591      * @param param
 592      * @return
 593      */
 594     public static PersonClusterJobParam checkPersonClusterFaceJobParam(PersonClusterFaceParam param) {
 595         checkNotNull(param, "person cluster task param");
 596 
 597         PersonClusterJobParam personClusterJobParam = new PersonClusterJobParam();
 598         try {
 599             PropertyUtils.copyProperties(personClusterJobParam, param);
 600         } catch (Exception e) {
 601             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "error converting parameters", e);
 602         }
 603 
 604         Date beginDate = null;
 605         if (StringUtil.isNotBlank(personClusterJobParam.getBeginBirthDate())) {
 606             beginDate = checkDate(personClusterJobParam.getBeginBirthDate(), "begin birth date",
 607                     FaceCloudConstant.DATE_FORMATTER_YMD);
 608         }
 609         if (StringUtil.isNotBlank(personClusterJobParam.getEndBirthDate())) {
 610             Date endDate = checkDate(personClusterJobParam.getEndBirthDate(), "end birth date",
 611                     FaceCloudConstant.DATE_FORMATTER_YMD);
 612             if (null != beginDate && beginDate.after(endDate)) {
 613                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
 614                         "param" + "begin birth date" + "='" + personClusterJobParam.getBeginBirthDate() + "is later than" + "end birth date" + "='"
 615                                 + personClusterJobParam.getEndBirthDate() + "',please enter right date range");
 616             }
 617         }
 618 
 619         Date now = new Date();
 620         if (StringUtil.isNotBlank(personClusterJobParam.getBeginBirthDate())) {
 621             beginDate = checkDate(personClusterJobParam.getBeginBirthDate(), "birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
 622             if (beginDate.after(now)) {
 623                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "the birth date is not greater than the current date");
 624             }
 625         }
 626 
 627 
 628         if (personClusterJobParam.getResultSize() == 0 ){
 629             int resultSize = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.HUMAN_FACE_MODEL_TOPN,
 630                     FaceCloudConstant.FEATUREMATCH.DEFAULT_MODEL_TOPN);
 631             personClusterJobParam.setResultSize(resultSize);
 632         }
 633 
 634         byte[] model = checkModel(param.getFaceModel());
 635         checkBanValue(model.length, 1, "face model amount");
 636         personClusterJobParam.setModelData(model);
 637 
 638         checkSimilarity(personClusterJobParam.getSimilarityMin(), personClusterJobParam.getSimilarityMax());
 639         checkRandValue(personClusterJobParam.getHumanMale(), "human male", -1, 0, 1, 2);
 640         checkResultSize(personClusterJobParam.getResultSize(), "resultSize");
 641 
 642         return personClusterJobParam;
 643     }
 644 
 645     /**
 646      * 校验人脸质量评分阈值
 647      * @param faceIQA
 648      */
 649     public static void checkFaceQualityParam(String faceIQA){
 650         JSONObject faceIQAJSON = JSON.parseObject(faceIQA);
 651         checkQualityIntegerParam("detectQuality",Integer.MIN_VALUE,Integer.MAX_VALUE,faceIQAJSON.get("detectQuality"));
 652         checkQualityIntegerParam("grayScale",Integer.MIN_VALUE,Integer.MAX_VALUE,faceIQAJSON.get("grayScale"));
 653         checkQualityFloatParam("clearity",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("clearity"));
 654         checkQualityFloatParam("uncovered",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("uncovered"));
 655         checkQualityFloatParam("colorful",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("colorful"));
 656         checkQualityFloatParam("posePitch",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("posePitch"));
 657         checkQualityFloatParam("pointsQuality",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("pointsQuality"));
 658         checkQualityFloatParam("poseYaw",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("poseYaw"));
 659         checkQualityFloatParam("totalQuality",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("totalQuality"));
 660         checkQualityFloatParam("frontal",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("frontal"));
 661         checkQualityFloatParam("eyeDistance",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("eyeDistance"));
 662         checkQualityFloatParam("poseConf",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("poseConf"));
 663         checkQualityFloatParam("grayMeanMin",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("grayMeanMin"));
 664         checkQualityFloatParam("grayMeanMax",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("grayMeanMax"));
 665         checkQualityFloatParam("grayVarMin",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("grayVarMin"));
 666         checkQualityFloatParam("grayVarMax",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("grayVarMax"));
 667         checkQualityFloatParam("poseRoll",-Float.MAX_VALUE,Float.MAX_VALUE,faceIQAJSON.get("poseRoll"));
 668     }
 669 
 670     public static void checkQualityIntegerParam(String paramName,int min,int max,Object value){
 671         int paramValue;
 672         try{
 673             paramValue = Integer.parseInt(value.toString());
 674         }catch (NullPointerException e){
 675             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param["+ paramName +"] is null");
 676         }catch (Exception e){
 677             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param["+ paramName +"] is illegal");
 678         }
 679         if (paramValue<min&&paramValue>max){
 680             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param["+ paramName +"] is illegal");
 681         }
 682     }
 683 
 684     public static void checkQualityFloatParam(String paramName,float min,float max,Object value){
 685         float paramValue;
 686         try{
 687             paramValue = Float.parseFloat(value.toString());
 688         }catch (NullPointerException e){
 689             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param["+ paramName +"] is null");
 690         }catch (Exception e){
 691             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param["+ paramName +"] is illegal");
 692         }
 693         if (paramValue<min&&paramValue>max){
 694             throw new BaseException(ErrorCodeEnum.CODE_ARGS_INVALID, "Param["+ paramName +"] is illegal");
 695         }
 696     }
 697 
 698 
 699     /**
 700      * 校验静态库任务参数
 701      *
 702      * @param param
 703      * @return
 704      */
 705     public static HumanFaceJobParam checkHumanFaceJobParam(HumanFaceParam param) {
 706         checkNotNull(param, "HumanFaceJobParam");
 707 
 708         HumanFaceJobParam humanFaceJobParam = new HumanFaceJobParam();
 709         try {
 710             PropertyUtils.copyProperties(humanFaceJobParam, param);
 711         } catch (Exception e) {
 712             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "error converting parameters", e);
 713         }
 714 
 715         checkNotBlank(param.getFacelibIds(), "face library");
 716         try {
 717             if (!"-1".equals(param.getFacelibIds())) {
 718                 String[] facelibs = param.getFacelibIds().split(FaceCloudConstant.TASK.LIST_PARAM_SEPARATOR);
 719                 List<String> facelibList = new ArrayList<String>();
 720                 for (String facelib : facelibs) {
 721                     facelibList.add(facelib);
 722                 }
 723                 humanFaceJobParam.setFacelibList(facelibList);
 724             }
 725         } catch (Exception e) {
 726             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "face library parameters is not a correct format");
 727         }
 728 
 729         Date beginDate = null;
 730 
 731         if (StringUtil.isNotBlank(humanFaceJobParam.getBeginBirthDate())) {
 732             beginDate = checkDate(humanFaceJobParam.getBeginBirthDate(), "beginBirthDate",
 733                     FaceCloudConstant.DATE_FORMATTER_YMD);
 734         }
 735         if (StringUtil.isNotBlank(humanFaceJobParam.getEndBirthDate())) {
 736             Date endDate = checkDate(humanFaceJobParam.getEndBirthDate(), "endBirthDate",
 737                     FaceCloudConstant.DATE_FORMATTER_YMD);
 738             if (null != beginDate && beginDate.after(endDate)) {
 739                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
 740                         " parameter" + "beginBirthDate" + "='" + humanFaceJobParam.getBeginBirthDate() + "after" + "endBirthDate" + "='"
 741                                 + humanFaceJobParam.getEndBirthDate() + "',please input the right time scope");
 742             }
 743         }
 744 
 745         Date now = new Date();
 746         if (StringUtil.isNotBlank(humanFaceJobParam.getBeginBirthDate())) {
 747             beginDate = checkDate(humanFaceJobParam.getBeginBirthDate(), "beginBirthDate", FaceCloudConstant.DATE_FORMATTER_YMD);
 748             if (beginDate.after(now)) {
 749                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "beginBirthDate cannot be bigger than the current date");
 750             }
 751         }
 752 
 753         if (humanFaceJobParam.getResultSize() == 0 ){
 754             int resultSize = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.HUMAN_FACE_MODEL_TOPN,
 755                     FaceCloudConstant.FEATUREMATCH.DEFAULT_MODEL_TOPN);
 756             humanFaceJobParam.setResultSize(resultSize);
 757         }
 758 
 759 
 760         byte[] model = checkModel(param.getFaceModel());
 761         humanFaceJobParam.setModelData(model);
 762 
 763         checkSimilarity(humanFaceJobParam.getSimilarityMin(), humanFaceJobParam.getSimilarityMax());
 764 
 765         checkRandValue(humanFaceJobParam.getHumanMale(), "humanMale", -1, 0, 1, 2);
 766         checkRandValue(humanFaceJobParam.getHumanCredtype(), "credType", -1, 0, 1, 2);
 767         checkRandValue(humanFaceJobParam.getGradeValue(), "gradeValue", -1, 0, 1);
 768         checkResultSize(humanFaceJobParam.getResultSize(), "resultSize");
 769         checkRandValue(humanFaceJobParam.getCertificate(), "certificate", -1, 0, 1, 2, 3);
 770 
 771 
 772         boolean staticIncreaOpen = FaceCloudConfig.isAvailable(FaceCloudConstant.FEATUREMATCH.FEATURE_TYPE_INCREMENT_STATIC);
 773         //如果开启静态库增量服务,则将删除队列加入前置过滤条件
 774         if(staticIncreaOpen){
 775             humanFaceJobParam.setDeleteQueue(HumanInfoRecordQueue.getInstance().getQueue());
 776         }else{
 777             humanFaceJobParam.setDeleteQueue(null);
 778         }
 779 
 780         return humanFaceJobParam;
 781     }
 782 
 783     public static BlackInfoFaceJobParam checkBlackInfoFaceJobParam(BlackInfoFaceJobParam param) {
 784         checkNotNull(param, "blacklist task id parameter");
 785 
 786         checkNotBlank(param.getBlacklistIds(), "blacklistIds");
 787         try {
 788             if (!"-1".equals(param.getBlacklistIds())) {
 789                 String[] blacklistIds = param.getBlacklistIds().split(FaceCloudConstant.TASK.LIST_PARAM_SEPARATOR);
 790                 List<String> blacklistIdList = Arrays.asList(blacklistIds);
 791                 param.setBlacklistIdList(blacklistIdList);
 792             }
 793         } catch (Exception e) {
 794             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Human info parameter syntax error");
 795         }
 796 
 797         Date beginDate = null;
 798         if (StringUtil.isNotBlank(param.getBeginBirthDate())) {
 799             beginDate = checkDate(param.getBeginBirthDate(), "begin birthdate", FaceCloudConstant.DATE_FORMATTER_YMD);
 800             Date now = new Date();
 801             if (beginDate.after(now)) {
 802                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "beginBirthDate cannot be bigger than the current date");
 803             }
 804         }
 805 
 806         if (StringUtil.isNotBlank(param.getEndBirthDate())) {
 807             Date endDate = checkDate(param.getEndBirthDate(), "end birthdate", FaceCloudConstant.DATE_FORMATTER_YMD);
 808             if (null != beginDate && beginDate.after(endDate)) {
 809                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
 810                         "parameter" + "begin birthdate" + "='" + param.getBeginBirthDate() + "later than parameter " + "end birthdate " + "='" + param
 811                                 .getEndBirthDate() + "',please input true time scope");
 812             }
 813         }
 814 
 815 
 816         if (param.getResultSize() == 0 ){
 817             int resultSize = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.HUMAN_FACE_MODEL_TOPN,
 818                     FaceCloudConstant.FEATUREMATCH.DEFAULT_MODEL_TOPN);
 819             param.setResultSize(resultSize);
 820         }
 821 
 822         byte[] model = checkModel(param.getModelDataStr());
 823         param.setModelData(model);
 824 
 825         checkSimilarity(param.getSimilarityMin(), param.getSimilarityMax());
 826 
 827         checkRandValue(param.getHumanMale(), "sex", -1, 0, 1, 2);
 828         checkRandValue(param.getHumanCredtype(), "cred type", -1, 0, 1, 2);
 829 
 830         checkRange(param.getResultSize(), "resultSize", 1, true, null, true);
 831 
 832         return param;
 833     }
 834 
 835     /**
 836      * 校验抓拍库任务参数
 837      *
 838      * @param param
 839      * @return
 840      */
 841     public static SnapHumanFaceJobParam checkSnapHumanFaceParam(SnapHumanFaceParam param) {
 842         checkNotNull(param, "snap task parameter");
 843 
 844         SnapHumanFaceJobParam snapHumanFaceJobParam = new SnapHumanFaceJobParam();
 845         try {
 846             PropertyUtils.copyProperties(snapHumanFaceJobParam, param);
 847         } catch (Exception e) {
 848             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "parameter convert error", e);
 849         }
 850 
 851         checkNotBlank(snapHumanFaceJobParam.getDeviceId(), "device id");
 852 
 853         try {
 854             String[] deviceIds = snapHumanFaceJobParam.getDeviceId().split(FaceCloudConstant.TASK.LIST_PARAM_SEPARATOR);
 855             List<String> deviceList = Arrays.asList(deviceIds);
 856             snapHumanFaceJobParam.setDeviceList(deviceList);
 857         } catch (Exception e) {
 858             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "device id syntax error");
 859         }
 860 
 861         if (snapHumanFaceJobParam.getResultSize() == 0 ){
 862             int resultSize = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.HUMAN_FACE_MODEL_TOPN,
 863                     FaceCloudConstant.FEATUREMATCH.DEFAULT_MODEL_TOPN);
 864             snapHumanFaceJobParam.setResultSize(resultSize);
 865         }
 866 
 867         byte[] model = checkModel(snapHumanFaceJobParam.getFaceModel());
 868         snapHumanFaceJobParam.setModelData(model);
 869 
 870         checkDate(snapHumanFaceJobParam.getBeginDate(), "begin time", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
 871         checkDate(snapHumanFaceJobParam.getEndDate(), "end time", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
 872 
 873         checkSimilarity(snapHumanFaceJobParam.getSimilarityMin(), snapHumanFaceJobParam.getSimilarityMax());
 874 
 875         checkRange(snapHumanFaceJobParam.getResultSize(), "resultSize", 1, true, null, true);
 876         return snapHumanFaceJobParam;
 877     }
 878 
 879     /**
 880      * 校验静态库人脸入库参数
 881      *
 882      * @param addFaceRecordParam
 883      * @return
 884      */
 885     public static AddFaceRecordParam checkAddFaceRecordParam(AddFaceRecordParam addFaceRecordParam) {
 886         checkNotNull(addFaceRecordParam, "face record");
 887 
 888         checkNotNull(addFaceRecordParam.getFacelib_id(), "facelib id");
 889 
 890         //静态库id不能为-1
 891         checkBanValue(addFaceRecordParam.getFacelib_id(), -1, "facelib id");
 892 
 893         String birthDateStr = addFaceRecordParam.getBirth_date();
 894         Date now = new Date();
 895         Date birth = null;
 896         if (StringUtil.isNotBlank(birthDateStr)) {
 897             birth = checkDate(birthDateStr, "birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
 898             if (birth.after(now)) {
 899                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Birth date can not later than now");
 900             }
 901         }
 902 
 903         String createDateStr = addFaceRecordParam.getCreate_date();
 904         Date createDate = now;
 905         if (StringUtils.isNotEmpty(createDateStr)) {
 906             createDate = checkDate(createDateStr, "create date", FaceCloudConstant.DATE_FORMATTER_YMD);
 907             if (null != birth && birth.after(createDate)) {
 908                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Birth date can not later than create date");
 909             }
 910         } else {
 911             addFaceRecordParam.setCreate_date(DateFormatUtils.format(now, FaceCloudConstant.DATE_FORMATTER_YMD));
 912         }
 913 
 914         if (null != birth) {
 915             addFaceRecordParam.setHuman_age(calAge(birth, createDate));
 916         }
 917 
 918         checkNotBlank(addFaceRecordParam.getFace_picurl(), "face picture URL");
 919 
 920         checkRandValue(addFaceRecordParam.getHuman_male(), "sex", 0, 1, 2);
 921         checkRandValue(addFaceRecordParam.getHuman_credtype(), "cred type", 0, 1, 2);
 922 
 923         checkRandValue(addFaceRecordParam.getCertificate(), "certificate", -1, 0, 1, 2, 3);
 924 
 925         //        checkNotBlank(addFaceRecordParam.getBkg_picurl(), "大图URL");
 926 
 927         return addFaceRecordParam;
 928     }
 929 
 930     /**
 931      * 校验静态库人脸更新参数
 932      *
 933      * @param updateFaceRecordParam
 934      * @return
 935      */
 936     public static UpdateFaceRecordParam checkUpdateFaceRecordParam(UpdateFaceRecordParam updateFaceRecordParam) {
 937         checkNotNull(updateFaceRecordParam, "face record");
 938         checkNotNull(updateFaceRecordParam.getFacelib_id(), "facelib id");
 939         //        checkNotNull(updateFaceRecordParam.getRowKey(), "记录唯一标识");
 940         checkNotBlank(updateFaceRecordParam.getRowKey(),"rowKey");
 941         //静态库id不能为-1
 942         checkNotBlank(updateFaceRecordParam.getFacelib_id().toString(), "facelib id");
 943         checkBanValue(updateFaceRecordParam.getFacelib_id(), -1, "facelib id");
 944         if (null != updateFaceRecordParam.getHuman_male()) {
 945             checkRandValue(updateFaceRecordParam.getHuman_male(), "sex", 0, 1, 2);
 946         }
 947         if (null != updateFaceRecordParam.getHuman_credtype()) {
 948             checkRandValue(updateFaceRecordParam.getHuman_credtype(), "cred type", 0, 1, 2);
 949         }
 950         String birthDateStr = updateFaceRecordParam.getBirth_date();
 951         Date now = new Date();
 952         Date birth = null;
 953         if (StringUtil.isNotBlank(birthDateStr)) {
 954             birth = checkDate(birthDateStr, "birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
 955             if (birth.after(now)) {
 956                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Birth date can not later than now");
 957             }
 958         }
 959 
 960 
 961         String createDateStr = updateFaceRecordParam.getCreate_date();
 962         Date createDate = now;
 963         if (StringUtils.isNotEmpty(createDateStr)) {
 964             createDate = checkDate(createDateStr, "create date", FaceCloudConstant.DATE_FORMATTER_YMD);
 965             if (null != birth && birth.after(createDate)) {
 966                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Birth date can not later than create date");
 967             }
 968             if (createDate.after(now)) {
 969                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Create date can not later than now");
 970             }
 971         } else {
 972             updateFaceRecordParam.setCreate_date(DateFormatUtils.format(now, FaceCloudConstant.DATE_FORMATTER_YMD));
 973         }
 974 
 975         if (null != birth) {
 976             updateFaceRecordParam.setHuman_age(calAge(birth, createDate));
 977         }
 978 
 979         if (null != updateFaceRecordParam.getCertificate()) {
 980             checkRandValue(updateFaceRecordParam.getCertificate(), "certificate" , 0, 1, 2, 3);
 981         }
 982 
 983         return updateFaceRecordParam;
 984     }
 985 
 986     /**
 987      * 校验静态库人脸查询参数
 988      *
 989      * @param getFaceRecordsParam
 990      * @return
 991      */
 992     public static void checkGetFaceRecords(GetFaceRecordsParam getFaceRecordsParam) {
 993         checkNotNull(getFaceRecordsParam, "query parameter");
 994 
 995         String facelibIds = getFaceRecordsParam.getFacelibIds();
 996         checkNotBlank(facelibIds, "facelib id");
 997         if (!"-1".equals(facelibIds)) {
 998             List<String> facelibIdList = new ArrayList<String>();
 999             for (String facelibId : ConditionSqlUtil.paramParseList(facelibIds, ",")) {
1000                 facelibIdList.add(facelibId);
1001                 /*try {
1002                     facelibIdList.add(Integer.parseInt(facelibId));
1003                 } catch (Exception e) {
1004                     throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "facelib id convert error");
1005                 }*/
1006             }
1007             getFaceRecordsParam.setFacelibIdList(facelibIdList);
1008         }
1009 
1010         String rowKeys = getFaceRecordsParam.getRowKeys();
1011         if (!ConditionSqlUtil.preConditionFilter(rowKeys, "-1")) {
1012             List<String> rowKeyList = ConditionSqlUtil.paramParseList(rowKeys, ",");
1013             getFaceRecordsParam.setRowKeyList(rowKeyList);
1014         }
1015 
1016         checkPage(getFaceRecordsParam.getPageNum(), getFaceRecordsParam.getPageSize(), null, null);
1017 
1018         // 姓名模糊查询,_ 符号转义
1019         if (StringUtil.isNotBlank(getFaceRecordsParam.getHumanName())) {
1020             getFaceRecordsParam.setHumanName(ConditionSqlUtil.underLineCharTran(getFaceRecordsParam.getHumanName()));
1021         }
1022 
1023         // 证件号码模糊查询,_ 符号转义
1024         if (StringUtil.isNotBlank(getFaceRecordsParam.getHumanCrednum())) {
1025             getFaceRecordsParam.setHumanCrednum(ConditionSqlUtil.underLineCharTran(getFaceRecordsParam.getHumanCrednum()));
1026         }
1027 
1028         if (StringUtil.isNotBlank(getFaceRecordsParam.getBeginBirthDate())) {
1029             checkDate(getFaceRecordsParam.getBeginBirthDate(), "begin birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
1030         }
1031 
1032         if (StringUtil.isNotBlank(getFaceRecordsParam.getEndBirthDate())) {
1033             checkDate(getFaceRecordsParam.getEndBirthDate(), "end birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
1034         }
1035 
1036         checkDateRightWithEquals(getFaceRecordsParam.getBeginBirthDate(), "begin birth date", FaceCloudConstant.DATE_FORMATTER_YMD,
1037                 getFaceRecordsParam.getEndBirthDate(), "end birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
1038 
1039         String externalIds = getFaceRecordsParam.getExternalIds();
1040         if (!ConditionSqlUtil.preConditionFilter(externalIds, "-1")) {
1041             List<String> externalIdList = ConditionSqlUtil.paramParseList(externalIds, ",");
1042             getFaceRecordsParam.setExternalIdList(externalIdList);
1043         }
1044 
1045         checkRandValue(getFaceRecordsParam.getHumanMale(), "humanMale", -1, 0, 1, 2);
1046         checkRandValue(getFaceRecordsParam.getHumanCredtype(), "cred type", -1, 0, 1, 2);
1047         checkRandValue(getFaceRecordsParam.getResultStatus(), "resultStatus", -1, 0, 1);
1048 
1049         checkRandValue(getFaceRecordsParam.getCertificate(), "certificate" , -1, 0, 1, 2, 3);
1050 
1051         if (!ConditionSqlUtil.preConditionFilter(getFaceRecordsParam.getBeginStorageDate(), -1L)
1052                 && !ConditionSqlUtil.preConditionFilter(getFaceRecordsParam.getEndStorageDate(), -1L)) {
1053             checkTimeRight(getFaceRecordsParam.getBeginStorageDate(), "beginStorageDate",
1054                     getFaceRecordsParam.getEndStorageDate(), "endStorageDate");
1055         }
1056 
1057         checkRandValue(getFaceRecordsParam.getOrder(), "order" , 0, 1);
1058     }
1059 
1060     /**
1061      * 校验静态库碰撞任务参数
1062      *
1063      * @param faceOverlapJobParm
1064      */
1065     public static void checkFaceOverlapJobParam(FaceOverlapJobParm faceOverlapJobParm) {
1066         checkTimeFormat(faceOverlapJobParm.getHitBeginTime());
1067         checkTimeFormat(faceOverlapJobParm.getHitEndTime());
1068 
1069         checkNotNull(faceOverlapJobParm, "faceOverlapJobParam");
1070         //限制性别为指定值中的一个
1071 //        checkRandValue((Integer)faceOverlapJobParm.getCondition1().get(HumanInfo.HUMAN_MALE), "性别", -1, 0);
1072 //        checkRandValue((Integer)faceOverlapJobParm.getCondition2().get(HumanInfo.HUMAN_MALE), "性别", -1, 0);
1073         checkRandValue(faceOverlapJobParm.getHitMale(), "sex", -1, 0);
1074         checkRandValue(faceOverlapJobParm.getGradeValue(), "gradeValue", -1, 0);
1075 
1076         checkRange(faceOverlapJobParm.getThreshold(), "threshold", 0.0, true, 1.0, true);
1077         checkRange(faceOverlapJobParm.getHitPriority(), "hitPriority", 0, true, 100, true);
1078         int humanNum = faceOverlapJobParm.getHumanNum();
1079         if (humanNum <= 0) {
1080             throw new BaseException(ErrorCodeEnum.CODE_INTERNAL_ERROR, "HumanNum must larger than 0");
1081         }
1082 
1083         if (faceOverlapJobParm.getHitAgeInterval() < -1) {
1084             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "hitAgeInterval can't be less than -1");
1085         }
1086         //静态库碰撞时间校验
1087         String beginDate = faceOverlapJobParm.getHitBeginTime();
1088         String endDate = faceOverlapJobParm.getHitEndTime();
1089         checkTimeFormat(beginDate);
1090         checkTimeFormat(endDate);
1091         checkTimeRight(DateUtil.getDayTime(beginDate), "hit begin time", DateUtil.getDayTime(endDate), "hitEndTime");
1092 
1093     }
1094 
1095     /**
1096      * 计算年龄
1097      *
1098      * @param birthDate
1099      * @param now
1100      * @return
1101      * @author chenxiaoyou 2015年12月23日 13:40
1102      */
1103     private static int calAge(Date birthDate, Date now) {
1104         Calendar birthCal = Calendar.getInstance();
1105         birthCal.setTime(birthDate);
1106 
1107         Calendar nowCal = Calendar.getInstance();
1108         nowCal.setTime(now);
1109 
1110         int age = nowCal.get(Calendar.YEAR) - birthCal.get(Calendar.YEAR);
1111         if (nowCal.get(Calendar.DAY_OF_YEAR) < birthCal.get(Calendar.DAY_OF_YEAR)) {
1112             age -= 1;
1113         }
1114         return age;
1115     }
1116 
1117     /**
1118      * 人脸记录入库参数校验
1119      *
1120      * @param addMultiFaceParam
1121      * @return
1122      */
1123     public static void checkAddMultiFaceParam(AddMultiFaceParam addMultiFaceParam) {
1124         checkNotNull(addMultiFaceParam, "multiFaceParam");
1125 
1126         if (StringUtil.isBlank(addMultiFaceParam.getHumanId()) || StringUtil.isBlank(addMultiFaceParam.getRowKeys())) {
1127             checkNotBlank(addMultiFaceParam.getFace_picurl(), "facePicurl");
1128             checkNotBlank(addMultiFaceParam.getBkg_picurl(), "bkgPicurl");
1129             checkNotBlank(addMultiFaceParam.getModelData(), "modelData");
1130             checkModel(addMultiFaceParam.getModelData());
1131         }
1132     }
1133 
1134     /**
1135      * 多模型转换校验
1136      * 个数校验
1137      *
1138      * @param modelDatas
1139      * @return
1140      */
1141     public static List<byte[]> checkMultiModels(String modelDatas) {
1142         checkNotBlank(modelDatas, "modelDatas");
1143 
1144         List<byte[]> models = new ArrayList<byte[]>();
1145         String[] modelStrs = modelDatas.split(",");
1146         if (null != modelStrs) {
1147             for (String modelStr : modelStrs) {
1148                 models.add(checkModel(modelStr));
1149             }
1150         }
1151         if (models.size() > FaceCloudConstant.FEATUREMATCH.MAX_MODEL_COUNT) {
1152             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
1153                     "model parameters is not greater than" + FaceCloudConstant.FEATUREMATCH.MAX_MODEL_COUNT);
1154         }
1155         return models;
1156     }
1157 
1158     /**
1159      * 检索结果记录数参数检验
1160      *
1161      * @param resultSize
1162      * @param paramName
1163      */
1164     public static void checkResultSize(int resultSize, String paramName) {
1165         int resultSizeLimit = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.MAX_FACE_MODEL_TOPN, FaceCloudConstant.FEATUREMATCH.MAX_DEFULT_FACE_MODEL_TOPN);
1166 
1167         checkRange(resultSize, paramName, 1, true, resultSizeLimit, true);
1168     }
1169 
1170     /**
1171      * 多图检索参数校验
1172      *
1173      * @param param
1174      * @return
1175      */
1176     public static MultiSnapHumanFaceJobParam checkMultiSnapParam(MultiSnapHumanFaceParam param) {
1177         checkNotNull(param, "抓拍检索参数");
1178 
1179         MultiSnapHumanFaceJobParam multiSnapHumanFaceJobParam = new MultiSnapHumanFaceJobParam();
1180 
1181         checkRandValue(param.getMale(), "human male", -1, 0, 1, 2);
1182         checkRandValue(param.getGlass(), "glass", -1, 0, 1, 2);
1183         checkRandValue(param.getSmile(), "smile", -1, 0, 1, 2);
1184         checkRandValue(param.getGradeValue(), "gradeValue", -1, 0, 1);
1185         try {
1186             PropertyUtils.copyProperties(multiSnapHumanFaceJobParam, param);
1187         } catch (Exception e) {
1188             throw new BaseException(FaceCloudConstant.MESSAGE.RET_FAIL, "Parameter conversion failure", e);
1189         }
1190 
1191         String modelDatas = multiSnapHumanFaceJobParam.getModelDatas();
1192         List<byte[]> models = checkMultiModels(modelDatas);
1193 
1194         multiSnapHumanFaceJobParam.setModelDataList(models);
1195 
1196         String deviceIds = multiSnapHumanFaceJobParam.getDeviceIds();
1197         checkNotBlank(deviceIds, "device ids");
1198         if (!"-1".equals(deviceIds)) {
1199             Set<UTF8String> deviceIdSet = new HashSet<>();
1200             for(String deviceId: deviceIds.split(",")){
1201                 deviceIdSet.add(UTF8String.fromString(deviceId));
1202             }
1203             multiSnapHumanFaceJobParam.setDeviceIdSet(deviceIdSet);
1204 
1205             String regionIndexCodes = multiSnapHumanFaceJobParam.getRegionIndexCodes();
1206             if (StringUtils.isNotBlank(regionIndexCodes)) {
1207                 Set<UTF8String> regionIndexCodeSet = new HashSet<>();
1208                 for (String regionIndexCode : regionIndexCodes.split(",")) {
1209                     regionIndexCodeSet.add(UTF8String.fromString(regionIndexCode));
1210                 }
1211                 multiSnapHumanFaceJobParam.setRegionIndexCodeSet(regionIndexCodeSet);
1212             }
1213         }
1214 
1215         String beginDateStr = multiSnapHumanFaceJobParam.getBeginDate();
1216         checkNotBlank(beginDateStr, "begin date");
1217         Date beginDate = checkDate(beginDateStr, "begin date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1218         multiSnapHumanFaceJobParam.setBeginDateTime(beginDate.getTime());
1219 
1220         String endDateStr = multiSnapHumanFaceJobParam.getEndDate();
1221         checkNotBlank(endDateStr, "end date");
1222         Date endDate = checkDate(endDateStr, "end date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1223         multiSnapHumanFaceJobParam.setEndDateTime(endDate.getTime());
1224         if (null != beginDate && beginDate.after(endDate)) {
1225             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED,
1226                     "parameter" + "begin date" + "='" + beginDateStr + "later than parameter" + "end date" + "='" + endDateStr + "',please input true time scope");
1227         }
1228 
1229         if (multiSnapHumanFaceJobParam.getResultSize() == 0 ){
1230             int resultSize = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.HUMAN_FACE_MODEL_TOPN,
1231                     FaceCloudConstant.FEATUREMATCH.DEFAULT_MODEL_TOPN);
1232             multiSnapHumanFaceJobParam.setResultSize(resultSize);
1233         }
1234 
1235 
1236 
1237         checkSimilarity(multiSnapHumanFaceJobParam.getSimilarityMin(), multiSnapHumanFaceJobParam.getSimilarityMax());
1238 
1239         checkResultSize(multiSnapHumanFaceJobParam.getResultSize(), "result size");
1240 
1241 
1242 
1243         return multiSnapHumanFaceJobParam;
1244     }
1245 
1246     /**
1247      * 时空检索首次参数校验
1248      *
1249      * @param param
1250      * @return
1251      */
1252     public static TimeSpaceSnapHumanFaceJobParam checkFirstTimeSpaceParam(TimeSpaceSnapHumanFaceJobParam param) {
1253         checkNotNull(param, "timeSpaceSnapHumanFaceJobParam");
1254 
1255         byte[] model = checkModel(param.getModelDataStr());
1256         param.setModelData(model);
1257 
1258         //用户输入的地点检测参数
1259         if (!StringUtils.isBlank(param.getDeviceId())) {
1260             try {
1261                 String deviceIds = param.getDeviceId();
1262                 List<String> deviceList = Arrays.asList(deviceIds.split(FaceCloudConstant.TASK.LIST_PARAM_SEPARATOR));
1263                 param.setDeviceList(deviceList);
1264             } catch (Exception e) {
1265                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "parameter deviceIds is wrong", e);
1266             }
1267         }
1268 
1269         //对用户输入的作案地点进行分割处理
1270         if (!StringUtils.isBlank(param.getCrimedeviceId())) {
1271             try {
1272                 String crimeDeviceIds = param.getCrimedeviceId();
1273                 List<String> crimeDeviceList = Arrays
1274                         .asList(crimeDeviceIds.split(FaceCloudConstant.TASK.LIST_PARAM_SEPARATOR));
1275                 param.setCrimeDeviceList(crimeDeviceList);
1276             } catch (Exception e) {
1277                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "parameter crimeDeviceIds is wrong", e);
1278             }
1279         }
1280 
1281         String beginDateStr = param.getBeginDate();
1282         if (StringUtils.isNotBlank(beginDateStr)) {
1283             Date beginDate = checkDate(beginDateStr, "begin date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1284             param.setBeginDateTime(beginDate.getTime());
1285         }
1286         String endDateStr = param.getEndDate();
1287         if (StringUtils.isNotBlank(endDateStr)) {
1288             Date endDate = checkDate(endDateStr, "end date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1289             param.setEndDateTime(endDate.getTime());
1290         }
1291 
1292         String crimeBeginDateStr = param.getCrimeBeginDate();
1293         if (StringUtils.isNotBlank(crimeBeginDateStr)) {
1294             Date beginDate = checkDate(crimeBeginDateStr, "crime begin date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1295             param.setCrimeBeginDateTime(beginDate.getTime());
1296         }
1297         String crimeEndDateStr = param.getCrimeEndDate();
1298         if (StringUtils.isNotBlank(crimeEndDateStr)) {
1299             Date endDate = checkDate(crimeEndDateStr, "crime end date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1300             param.setCrimeEndDateTime(endDate.getTime());
1301         }
1302 
1303         checkSimilarity(param.getSimilarityMin(), param.getSimilarityMax());
1304         if (param.getSimilarityMax() == 0) {
1305             param.setSimilarityMax(1.0);
1306         }
1307 
1308         checkResultSize(param.getResultSize(), "result size");
1309         return param;
1310     }
1311 
1312     /**
1313      * 时空检索再次提交参数校验
1314      *
1315      * @param param
1316      * @return
1317      */
1318     public static TimeSpaceSnapHumanFaceJobParam checkNextTimeSpaceParam(TimeSpaceSnapHumanFaceJobParam param) {
1319         checkNotNull(param, "timeSpaceSnapHumanFaceJobParam");
1320 
1321         checkNotBlank(param.getTaskId(), "task id");
1322 
1323         try {
1324             List<String> rowKeyList = new ArrayList<String>();
1325             for (String j : TimeSpaceResultLibCache.snapRealLibCache.asMap().get(param.getTaskId()).keySet()) {
1326                 rowKeyList.add(j);
1327             }
1328             param.setRowKeyList(rowKeyList);
1329         } catch (Exception e) {
1330             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "parameter rowKeys is wrong", e);
1331         }
1332 
1333         //用户输入的地点检测参数
1334         checkNotBlank(param.getDeviceId(), "device id");
1335         try {
1336             String deviceIds = param.getDeviceId();
1337             List<String> deviceList = Arrays.asList(deviceIds.split(FaceCloudConstant.TASK.LIST_PARAM_SEPARATOR));
1338             param.setDeviceList(deviceList);
1339         } catch (Exception e) {
1340             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "parameter deviceIds is wrong", e);
1341         }
1342 
1343         //对用户输入的作案地点进行分割处理
1344         if (!StringUtils.isBlank(param.getCrimedeviceId())) {
1345             try {
1346                 String crimeDeviceIds = param.getCrimedeviceId();
1347                 List<String> crimeDeviceList = Arrays
1348                         .asList(crimeDeviceIds.split(FaceCloudConstant.TASK.LIST_PARAM_SEPARATOR));
1349                 param.setCrimeDeviceList(crimeDeviceList);
1350             } catch (Exception e) {
1351                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "parameter crimeDeviceIds is wrong", e);
1352             }
1353         }
1354 
1355         String beginDateStr = param.getBeginDate();
1356         if (StringUtils.isNotBlank(beginDateStr)) {
1357             Date beginDate = checkDate(beginDateStr, "begin date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1358             param.setBeginDateTime(beginDate.getTime());
1359         }
1360         String endDateStr = param.getEndDate();
1361         if (StringUtils.isNotBlank(endDateStr)) {
1362             Date endDate = checkDate(endDateStr, "end date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1363             param.setEndDateTime(endDate.getTime());
1364         }
1365 
1366         String crimeBeginDateStr = param.getCrimeBeginDate();
1367         if (StringUtils.isNotBlank(crimeBeginDateStr)) {
1368             Date beginDate = checkDate(crimeBeginDateStr, "crime begin date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1369             param.setCrimeBeginDateTime(beginDate.getTime());
1370         }
1371         String crimeEndDateStr = param.getCrimeEndDate();
1372         if (StringUtils.isNotBlank(crimeEndDateStr)) {
1373             Date endDate = checkDate(crimeEndDateStr, "crime end date", FaceCloudConstant.DATE_FORMATTER_YMDHMS);
1374             param.setCrimeEndDateTime(endDate.getTime());
1375         }
1376 
1377         checkSimilarity(param.getSimilarityMin(), param.getSimilarityMax());
1378         if (param.getSimilarityMax() == 0) {
1379             param.setSimilarityMax(1.0);
1380         }
1381 
1382         checkResultSize(param.getResultSize(), "result size");
1383 
1384         return param;
1385     }
1386 
1387     /**
1388      * 人员库操作参数校验
1389      *
1390      * @param operateHumanRecordParam
1391      * @return
1392      */
1393     public static OperateHumanRecordParam checkOperateHumanRecordParam(
1394             OperateHumanRecordParam operateHumanRecordParam) {
1395 
1396         if (null != operateHumanRecordParam.getHuman_male()) {
1397             checkRandValue(operateHumanRecordParam.getHuman_male(), "human male", 0, 1, 2);
1398         } else {
1399             if (StringUtil.isBlank(operateHumanRecordParam.getHuman_id())) {
1400                 operateHumanRecordParam.setHuman_male(0);
1401             }
1402         }
1403         if (null != operateHumanRecordParam.getHuman_credtype()) {
1404             checkRandValue(operateHumanRecordParam.getHuman_credtype(), "cred type", 0, 1, 2);
1405         } else {
1406             if (StringUtil.isBlank(operateHumanRecordParam.getHuman_id())) {
1407                 operateHumanRecordParam.setHuman_credtype(0);
1408             }
1409         }
1410 
1411         // 参数校验
1412         String birthDateStr = operateHumanRecordParam.getBirth_date();
1413         Date birth = null;
1414         Date now = null;
1415         if (StringUtils.isNotEmpty(birthDateStr)) {
1416             birth = checkDate(birthDateStr, "birth date", FaceCloudConstant.DATE_FORMATTER_YMD);
1417             now = new Date();
1418             if (birth.after(now)) {
1419                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Birth date can not later than current date");
1420             }
1421         }
1422 
1423         String createDateStr = operateHumanRecordParam.getCreate_date();
1424         if (StringUtils.isNotEmpty(createDateStr)) {
1425             Date createDate = checkDate(createDateStr, "createDateStr", FaceCloudConstant.DATE_FORMATTER_YMD);
1426             if (null != birth && birth.after(createDate)) {
1427                 throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Birth date can not later than create date");
1428             }
1429         } else {
1430             now = new Date();
1431             operateHumanRecordParam.setCreate_date(DateFormatUtils.format(now, FaceCloudConstant.DATE_FORMATTER_YMD));
1432         }
1433 
1434         if (null != birth && null != now) {
1435             operateHumanRecordParam.setHuman_age(DateUtil.calAge(birth, now));
1436         }
1437 
1438         return operateHumanRecordParam;
1439     }
1440 
1441     /**
1442      * 人员库查询参数校验
1443      *
1444      * @param queryHumanRecordParam
1445      * @return
1446      */
1447     public static void checkQueryHumanRecord(QueryHumanRecordParam queryHumanRecordParam) {
1448 
1449         checkNotNull(queryHumanRecordParam, "queryHumanRecordParam");
1450         checkPage(queryHumanRecordParam.getPageNum(), queryHumanRecordParam.getPageSize(), null, null);
1451 
1452         checkRandValue(queryHumanRecordParam.getHuman_male(), "humanMale", -1, 0, 1, 2);
1453         checkRandValue(queryHumanRecordParam.getHuman_credtype(), "cred type", -1, 0, 1, 2);
1454 
1455         String beginBirthDate = queryHumanRecordParam.getBeginBirthDate();
1456         String endBirthDate = queryHumanRecordParam.getEndBirthDate();
1457         checkDateRight(beginBirthDate, "beginBirthDate", FaceCloudConstant.DATE_FORMATTER_YMD, endBirthDate, "endBirthDate",
1458                 FaceCloudConstant.DATE_FORMATTER_YMD);
1459     }
1460 
1461     public static List<Map<String, Object>> checkParseJson(String addHumanData, String paramName) {
1462         try {
1463             List<Map<String, Object>> addFaceList = JSON.parseObject(addHumanData, List.class);
1464             return addFaceList;
1465         } catch (Throwable e) {
1466             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Param[" + paramName + "]is not a correct format");
1467         }
1468     }
1469 
1470     public static List<Map<String, Object>> checkBlackListFace(String addHumanData, String paramName) {
1471         try {
1472             List<Map<String, Object>> addFaceList = JSON.parseObject(addHumanData, List.class);
1473             return addFaceList;
1474         } catch (Throwable e) {
1475             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Param[" + paramName + "]is not a correct format");
1476         }
1477     }
1478 
1479     /**
1480      * 黑名单版本号生成
1481      *
1482      * @param version
1483      * @return
1484      */
1485     public static String createVersion(long version) {
1486         String versionStr = "0";
1487         try {
1488             versionStr = TypeUtils.castToString(version);
1489         } catch (Exception e) {
1490             e.printStackTrace();
1491         }
1492         return versionStr;
1493     }
1494 
1495     /**
1496      * 黑名单版本号转换校验
1497      *
1498      * @param versionStr
1499      * @param paramName
1500      * @return
1501      */
1502     public static long parseVersion(String versionStr, String paramName) {
1503         long version = 0;
1504         try {
1505             TypeUtils.castToLong(versionStr);
1506             version = Long.parseLong(versionStr);
1507         } catch (Exception e) {
1508             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Param[" + paramName + "]is not a correct format");
1509         }
1510         return version;
1511     }
1512 
1513     /**
1514      * IP 正则校验
1515      *
1516      * @param addr
1517      * @param paramName
1518      */
1519     public static void checkIPPattern(String addr, String paramName) {
1520         if (addr.length() < 7 || addr.length() > 15 || "".equals(addr)) {
1521             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Param[" + paramName + "]is not a correct format length");
1522         }
1523         /**
1524          * 判断IP格式和范围
1525          */
1526         String rexp = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
1527         Pattern pat = Pattern.compile(rexp);
1528         Matcher mat = pat.matcher(addr);
1529         boolean ipAddress = mat.find();
1530         if (!ipAddress) {
1531             throw new BaseException(ErrorCodeEnum.CODE_AUTHENTICATION_FAILED, "Param[" + paramName + "]is not a correct format");
1532         }
1533     }
1534 
1535     /**
1536      * 判断是否需要加载热点数据
1537      *
1538      * @return true 加载热点数据; false 不加载热点数据
1539      */
1540     public static boolean hasHotDataSnapLoading() {
1541         int range = FaceCloudConfig.getOrElse(FaceCloudConstant.FEATUREMATCH.SNAP_HOTDATA_RANGE, 3);
1542         if (range < 0) {
1543             return false;
1544         }
1545         return true;
1546     }
1547 
1548     /**
1549      * 后置过滤条件
1550      *
1551      * @param similarityMin
1552      * @param minEqualInd
1553      * @param similarityMax
1554      * @param maxEqualInd
1555      * @return
1556      */
1557     public static SimilarityConditionFilter getPostFilters(double similarityMin, boolean minEqualInd,
1558                                                            double similarityMax, boolean maxEqualInd) {
1559         Double minValue = null;
1560         if (similarityMin != 0.0) {
1561             minValue = similarityMin;
1562         }
1563         Double maxValue = null;
1564         if (similarityMax != 1.0) {
1565             maxValue = similarityMax;
1566         }
1567         SimilarityConditionFilter similarityConditionFilter = new SimilarityConditionFilter(minValue, minEqualInd,
1568                 maxValue, maxEqualInd);
1569 
1570         return similarityConditionFilter;
1571     }
1572 
1573 
1574     public static UpdateFaceRecordParam checkAndReturnUpdateFaceRecordParam(JSONObject humanInfoMap) {
1575 
1576         String humanName = humanInfoMap.getString("humanName");
1577         Integer humanMale = humanInfoMap.getInteger("humanMale");
1578         String birthDate = humanInfoMap.getString("birthDate");
1579         String createDate = humanInfoMap.getString("createDate");
1580         String humanProvince = humanInfoMap.getString("humanProvince");
1581         String humanCity = humanInfoMap.getString("humanCity");
1582         Integer humanCredtype = humanInfoMap.getInteger("humanCredtype");
1583         String humanCrednum = humanInfoMap.getString("humanCrednum");
1584         //String humanId = humanInfoMap.getString("humanId");
1585         Integer certificate = humanInfoMap.getInteger("certificate");
1586         String caseCode = humanInfoMap.getString("caseCode");
1587         String managePolice = humanInfoMap.getString("managePolice");
1588         String policePhone = humanInfoMap.getString("policePhone");
1589         String nativeCountyCode = humanInfoMap.getString("nativeCountyCode");
1590         String residenceCountyCode = humanInfoMap.getString("residenceCountyCode");
1591         Integer resNum1 = humanInfoMap.getInteger("resNum1");
1592         Integer resNum2 = humanInfoMap.getInteger("resNum2");
1593         String resStr3 = humanInfoMap.getString("resStr3");
1594         String resStr4 = humanInfoMap.getString("resStr4");
1595         String resStr5 = humanInfoMap.getString("resStr5");
1596         String resStr6 = humanInfoMap.getString("resStr6");
1597         String resStr7 = humanInfoMap.getString("resStr7");
1598         String resStr8 = humanInfoMap.getString("resStr8");
1599         String resStr9 = humanInfoMap.getString("resStr9");
1600         String resStr10 = humanInfoMap.getString("resStr10");
1601         String passthroughField = humanInfoMap.getString("passthroughField");
1602         String humanAddress = humanInfoMap.getString("humanAddress");
1603 
1604         String facePicurl = humanInfoMap.getString("facePicurl");
1605         String bkgPicurl = humanInfoMap.getString("bkgPicurl");
1606         //String externalId = humanInfoMap.getString("externalId");
1607         String humanNation = humanInfoMap.getString("humanNation");
1608 
1609         String rowKey = humanInfoMap.getString("rowKey");
1610         String facelibId = humanInfoMap.getString("facelibId");
1611 
1612         UpdateFaceRecordParam updateFaceRecordParam = new UpdateFaceRecordParam(rowKey, facelibId, humanName, humanMale,
1613                 birthDate, createDate, humanNation, humanProvince, humanCity, humanCredtype, humanCrednum, caseCode, managePolice,
1614                 policePhone, nativeCountyCode, residenceCountyCode, facePicurl, bkgPicurl, humanAddress, resNum1, resNum2, resStr3,
1615                 resStr4, resStr5, resStr6, resStr7, resStr8, resStr9, resStr10, passthroughField, certificate);
1616 
1617         return checkUpdateFaceRecordParam(updateFaceRecordParam);
1618     }
1619 
1620 }


  1 /**
  2  * @ProjectName: BSP 海康威视大数据服务平台
  3  * @Copyright: 2015 HangZhou Hikvision System Technology Co., Ltd. All Right Reserved.
  4  * @address: http://www.hikvision.com
  5  * @date: 2015年6月25日 下午7:42:18
  6  * @Description: 本内容仅限于杭州海康威视数字技术股份有限公司内部使用,禁止转发.
  7  */
  8 package com.hikvision.bsp.common.util;
  9 
 10 import java.math.BigDecimal;
 11 import java.text.ParseException;
 12 import java.text.SimpleDateFormat;
 13 import java.util.Calendar;
 14 import java.util.Date;
 15 import java.util.Random;
 16 
 17 import com.hikvision.bsp.common.exception.BaseException;
 18 import org.apache.commons.lang.time.FastDateFormat;
 19 import org.slf4j.Logger;
 20 import org.slf4j.LoggerFactory;
 21 
 22 /**
 23  * 日期时间工具类
 24  *
 25  * @author zhanhongkui 2014-12-26 上午10:38:23
 26  * @version V1.0
 27  * @modificationHistory=========================逻辑或功能性重大变更记录
 28  * @modify by user: {修改人} 2014-12-26
 29  * @modify by reason:{方法名}:{原因}
 30  */
 31 public class DateFormatUtils {
 32     protected static final Logger LOG = LoggerFactory.getLogger(DateFormatUtils.class);
 33 
 34     public static final String DATE_TIME_FORMATTER_DEFAULT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
 35     public static final String DATE_TIME_FORMATTER_STANDARD = "yyyy-MM-dd HH:mm:ss";
 36     public static final String DATE_TIME_FORMATTER_STANDARD_TZ = "yyyy-MM-dd'T'HH:mm:ss'Z'";
 37     public static final String DATE_TIME_FORMATTER_LONG = "yyyy-MM-dd HH:mm:ss.SSS";
 38     public static final String DATE_TIME_FORMATTER_LONG_TZ = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
 39     public static final String DATE_TIME_FORMATTER_NET = "yyyy-MM-dd HH:mm:ss.SSS";
 40     public static final String DATE_TIME_FORMATTER_YEAR_MONTH = "yyyyMM";
 41     public static final String DATE_TIME_FORMATTER_YMD = "yyyy-MM-dd";
 42 
 43     public static final long TIMEMILLIS_FOR_ONE_DAY = 24L * 60 * 60 * 1000;
 44 
 45     /**
 46      * @param date
 47      * @param format
 48      * @return
 49      * @author zhanglei11 2015年9月1日 下午3:26:06
 50      */
 51     public static String format(long date, String format) {
 52         FastDateFormat df = FastDateFormat.getInstance(format);
 53         return df.format(date);
 54     }
 55 
 56     /**
 57      * @param date
 58      * @return
 59      * @author zhanglei11 2015年9月1日 下午3:26:04
 60      */
 61     public static String format(long date) {
 62         FastDateFormat df = FastDateFormat.getInstance(DATE_TIME_FORMATTER_DEFAULT);
 63         return df.format(date);
 64     }
 65 
 66     /**
 67      * @param date
 68      * @return
 69      * @author zhanglei11 2015年9月1日 下午3:26:10
 70      */
 71     public static String format(Date date) {
 72         FastDateFormat df = FastDateFormat.getInstance(DATE_TIME_FORMATTER_DEFAULT);
 73         return df.format(date);
 74     }
 75 
 76     /**
 77      * @param date
 78      * @param format
 79      * @return
 80      * @author zhanglei11 2015年9月1日 下午3:26:27
 81      */
 82     public static String format(Date date, String format) {
 83         FastDateFormat df = FastDateFormat.getInstance(format);
 84         return df.format(date);
 85     }
 86 
 87     /**
 88      * @param dateStr
 89      * @param srcFormat
 90      * @param dstFormat
 91      * @return
 92      * @author zhanglei11 2015年9月1日 下午3:26:29
 93      */
 94     public static String format(String dateStr, String srcFormat, String dstFormat) {
 95         Date date = toDate(dateStr, srcFormat);
 96         FastDateFormat df = FastDateFormat.getInstance(dstFormat);
 97         return df.format(date);
 98     }
 99 
100     /**
101      * @param dateStr
102      * @param pattern
103      * @return
104      * @author zhanglei11 2015年9月1日 下午3:26:37
105      */
106     public static Date toDate(String dateStr, String pattern) {
107         try {
108             SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
109             Date date = dateFormat.parse(dateStr);
110             return date;
111         } catch (ParseException e) {
112             LOG.error("Date parse error dateStr:{}, pattern:{}.", dateStr, pattern, e);
113             return null;
114         }
115     }
116 
117     /**
118      * @param date
119      * @return
120      * @author zhanglei11 2015年9月1日 下午3:26:41
121      */
122     public static String formatStr(Date date) {
123         FastDateFormat df = FastDateFormat.getInstance("yyyyMMddHH");
124         return df.format(date);
125     }
126 
127     /**
128      * 将Long类型时间转换成指定格式字符串
129      *
130      * @param startTime
131      * @param pattern
132      * @return
133      * @author zhuchao 2015年7月16日 上午9:29:54
134      */
135     public static String long2String(long startTime, String pattern) {
136         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
137         return sdf.format(new Date(startTime));
138     }
139 
140     /**
141      * 将Long类型时间转换成指定格式日期
142      *
143      * @param dateLong
144      * @param format
145      * @return
146      */
147     public static Date toDate(long dateLong, String format) {
148         FastDateFormat df = FastDateFormat.getInstance(format);
149         return toDate(df.format(dateLong), format);
150     }
151 
152     /**
153      * 将时间字符串转换为Long类型时间
154      * @param date 时间字符串
155      * @param pattern 时间格式
156      * @return
157      */
158     public static long parseStr2Timestamp(String date, String pattern) {
159         SimpleDateFormat sdft = new SimpleDateFormat(pattern);
160         try {
161             return sdft.parse(date).getTime();
162         } catch (ParseException e) {
163             LOG.error("parseStr2Timestamp error data:{}, pattern:{}.", date, pattern, e);
164             throw new BaseException(-5,
165                     "faceTime is not  yyyy-MM-dd HH:mm:ss.SSS format");
166         }
167     }
168 
169     /**
170      * hash取时间范围内时间,用于es深度分页
171      * @param hashStr 字符串
172      * @param beginStr 开始时间字符串
173      * @param endStr 结束时间字符串
174      * @param routerDay 时间跨度
175      * @param format 时间格式
176      * @return
177      */
178     public static long hashDate2long(String hashStr, String beginStr, String endStr, int routerDay, String format) {
179         Calendar startDate = Calendar.getInstance();
180         Calendar endDate = Calendar.getInstance();
181         startDate.setTime(toDate(beginStr, format));
182         endDate.setTime(toDate(endStr, format));
183         if (startDate.compareTo(endDate) > 0) {
184 
185         }
186         long startLong = startDate.getTimeInMillis();
187         long endLong = endDate.getTimeInMillis();
188 
189         long dayLong = 24L * routerDay * 60 * 60 * 1000;
190 
191         Long remainder = startLong % dayLong;
192         startLong = startLong - remainder;
193         //        remainder = endLong % dayLong;
194         //        endLong = endLong - remainder + dayLong;
195 
196         long sumCount = (endLong - startLong) / dayLong + 1L;
197         long numCount = 1L;
198         if (StringUtil.isNotBlank(hashStr)) {
199             numCount = Math.abs(hashStr.hashCode()) % sumCount;
200         } else {
201             numCount = (long) (new Random().nextFloat() * sumCount);
202         }
203         // 时分秒 long表示
204         long timeLong = new Date().getTime() % TIMEMILLIS_FOR_ONE_DAY;
205         long resultLong = startLong + numCount * dayLong + timeLong;
206         return resultLong;
207     }
208 
209     /**
210      * 用于es深度分页
211      * @param doubleValue 小数点后位数,位数过大,精度会丢失
212      * @param beginDouble
213      * @param endDouble
214      * @param beginStr
215      * @param endStr
216      * @param routerDay
217      * @param format
218      * @return
219      */
220     public static long double2long(double doubleValue, double beginDouble, double endDouble, String beginStr, String endStr, int routerDay, String format) {
221         Calendar startDate = Calendar.getInstance();
222         Calendar endDate = Calendar.getInstance();
223         startDate.setTime(toDate(beginStr, format));
224         endDate.setTime(toDate(endStr, format));
225         if (startDate.compareTo(endDate) > 0) {
226 
227         }
228 
229         long startLong = startDate.getTimeInMillis();
230         long endLong = endDate.getTimeInMillis();
231 
232         long dayLong = 24L * routerDay * 60 * 60 * 1000;
233 
234         Long remainder = startLong % dayLong;
235         startLong = startLong - remainder;
236 
237         BigDecimal sumTimeLong = new BigDecimal(endLong - startLong);
238         BigDecimal bigDecimalValue = new BigDecimal(Double.toString(doubleValue - beginDouble)).multiply(sumTimeLong).divide(new BigDecimal(endDouble - beginDouble), 3);
239 
240         long timeLong = 0L;
241         long resultLong = bigDecimalValue.longValue() + startLong + timeLong;
242         return resultLong;
243     }
244 
245 }

猜你喜欢

转载自www.cnblogs.com/xjatj/p/9273422.html