package com.dxhy.erp.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author dxhy
 */
public class CheckUtils {

    /**
     *
     * 校验数字
     *
     * @author X Yang
     * @date 2017年6月8日 下午4:31:08
     */
    public static boolean checkNum(int value) {
        String str = String.valueOf(value);
        String regex = "^(-?[1-9]\\d*\\.?\\d*)|(-?0\\.\\d*[1-9])|(-?[0])|(-?[0]\\.\\d*)$";
        return str.matches(regex);
    }

    /**
     *
     * 校验数字
     *
     * @author X Yang
     * @date 2017年6月8日 下午4:31:08
     */
    public static boolean checkStrNum(String value) {
        String str = String.valueOf(value);
        String regex = "^(-?[1-9]\\d*\\.?\\d*)|(-?0\\.\\d*[1-9])|(-?[0])|(-?[0]\\.\\d*)$";
        return str.matches(regex);
    }

    /**
     *
     * <p>
     * 对象数组校验不为空
     * </p>
     *
     * @param objs
     *            需要校验的对象数组
     *
     * @return: boolean true 为非空且长度不为0
     * @author: 赵睿 2016年6月27日下午7:13:16
     */
    public static boolean checkArrayNotNull(Object[] objs) {
        return objs != null && objs.length != 0;
    }

    /**
     *
     * <p>
     * 参数校验
     * </p>
     *
     * @author: 赵睿
     */
    public static boolean paramCheck(String param, boolean notNull, int digit) {
        if (notNull) {
            if (isNullOrEmpty(param)) {
                return false;
            }
        }
        if (digit > 0) {
            return stringLengthMoreLong(param, digit);
        }
        return true;

    }

    /**
     *
     * <p>
     * 参数校验
     * </p>
     * 过时原因：抛出异常，性能损耗比较大
     *
     * @param param
     *            需要校验的参数
     * @param notNull
     *            true为需要进行非空校验
     * @param digit
     *            数据长度校验，0或者负数为不需要进行长度校验
     * @param describe
     *            数据描述
     * @author: 赵睿
     * @throws Exception
     * @date: Created on 2016年6月13日 下午4:32:01
     */
    public static void paramCheck(String param, boolean notNull, int digit, String describe) throws Exception {
        if (notNull) {
            if (isNullOrEmpty(param)) {
                throw new Exception(describe + "非空校验失败");
            }
        }
        if (!isNullOrEmpty(param)) {
            if (digit > 0) {
                if (!stringLengthMoreLong(param, digit)) {
                    throw new Exception(describe + "长度校验失败，标准长度为" + digit + "实际长度为" + param.length());
                }
            }
        }

    }

    /**
     *
     * <p>
     * 字符串非空，非null
     * </p>
     *
     * @param string
     * @return boolean 如果为空或null返回true
     * @author: 赵睿
     * @date: Created on 2016年6月13日 下午4:38:55
     */
    public static boolean isNullOrEmpty(String string) {
        return string == null || string.length() == 0;
    }

    /**
     *
     * <p>
     * 参数长度过长校验
     * </p>
     *
     * @param param
     *            入参
     * @param length
     *            标准长度，需要小于或等于该长度
     * @return boolean
     * @author: 赵睿
     * @date: Created on 2016年6月14日 下午3:12:00
     */
    public static boolean stringLengthMoreLong(String param, int length) {
        return param.length() <= length;
    }

    /**
     *
     * <p>
     * 参数长度校验
     * </p>
     *
     * @param param
     *            入参
     * @param length
     *            标准长度，需要等于该长度
     * @return boolean
     * @author: 赵睿
     * @date: Created on 2016年6月14日 下午3:12:00
     */
    public static boolean stringLength(String param, int length) {
        return param.length() == length;
    }

    /**
     *
     * @param startDate
     *            开始日期
     * @param endDate
     *            结束日期
     * @param time
     *            比对时间（s）
     * @return
     * @throws Exception
     */
    public static Boolean check(String startDate, String endDate, long time) throws Exception {
        Date start = new SimpleDateFormat("yyyyMMddHHmmss").parse(startDate);
        Date end = new SimpleDateFormat("yyyyMMddHHmmss").parse(endDate);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(start);
        long startTime = calendar.getTime().getTime();
        calendar.setTime(end);
        long endTime = calendar.getTime().getTime();
        long tim = endTime - startTime;
        return tim > time;
    }
}
