package com.cjavapy.utils.util; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 自定义 断言 */ public class Assert extends org.springframework.util.Assert { public static void hasValue(Object value,String msg){ Assert.notNull(value, msg); Assert.hasLength(value.toString(), msg); } /** * 判断 jsonObject 是否为空 * * @param jsonObject * @param key * @param message */ public static void isNotNull(Map jsonObject, String key, String message) { Assert.notEmpty(jsonObject, message); if (!jsonObject.containsKey(key)) { throw new IllegalArgumentException(message); } } /** * 判断 jsonObject 是否为空 * * @param jsonObject * @param key * @param message */ public static void jsonObjectHaveKey(JSONObject jsonObject, String key, String message) { isNotNull(jsonObject, key, message); } /** * 判断 jsonObject 是否为空 * * @param jsonStr * @param key * @param message */ public static void jsonObjectHaveKey(String jsonStr, String key, String message) { Assert.hasLength(jsonStr, "不是有效的json为空," + message); if (isJsonObject(jsonStr)) { JSONObject jsonObject = JSONObject.parseObject(jsonStr); isNotNull(jsonObject, key, message); } else { throw new IllegalArgumentException(message); } } /** * 判断 jsonObject 是否为空 * * @param info * @param key * @param message */ public static void hasKey(Map info, String key, String message) { isNotNull(info, key, message); } /** * 判断 jsonObject 是否为空 * * @param info * @param key * @param message */ public static void hasKeyAndValue(Map info, String key, String message) { isNotNull(info, key, message); hasLength(info.get(key) == null ? "" : info.get(key).toString(), message); } /** * 判断 jsonObject 是否为空 * * @param info * @param key * @param message */ public static void hasKeyAndValue(Object info, String key, String message) { hasKeyAndValue(BeanConvertUtil.beanCovertMap(info), key, message); } /** * 判断json是否为空 * * @param jsonArray * @param message */ public static void listIsNull(List jsonArray, String message) { if (jsonArray != null && jsonArray.size() > 0) { throw new IllegalArgumentException(message); } } /** * 判断json是否为空 * * @param jsonArray * @param message */ public static void listNotNull(List jsonArray, String message) { Assert.notNull(jsonArray, message); if (jsonArray.size() < 1) { throw new IllegalArgumentException(message); } } /** * 数组只有一条数据 * * @param jsonArray * @param message */ public static void listOnlyOne(List jsonArray, String message) { Assert.notNull(jsonArray, message); if (jsonArray.size() != 1) { throw new IllegalArgumentException(message); } } /** * 判断list 是否为空 * * @param targetList * @param message */ public static void isNotNull(List targetList, String message) { Assert.notNull(targetList, message); if (targetList.size() < 1) { throw new IllegalArgumentException(message); } } /** * 判断是否只有一条记录数据 * * @param targetList * @param message */ public static void isOne(List targetList, String message) { Assert.notNull(targetList, message); if (targetList.size() != 1) { throw new IllegalArgumentException(message); } } /** * 校验map 中是否有值 * * @param targetMap * @param message */ public static void hasSize(Map targetMap, String message) { Assert.isNull(targetMap, message); if (targetMap.size() < 1) { throw new IllegalArgumentException(message); } } /** * 判断 jsonObject 是否为空 * * @param strValue * @param message */ public static void isJsonObject(String strValue, String message) { if (!isJsonObject(strValue)) { throw new IllegalArgumentException(message); } } /** * 校验是否为JSON * * @param msg * @return */ public static Boolean isJsonObject(String msg) { try { JSONObject.parseObject(msg); } catch (Exception e) { return false; } return true; } public static Boolean isPageJsonObject(String msg) { try { JSONObject jsonObject = JSONObject.parseObject(msg); if (!jsonObject.containsKey("meta") || !jsonObject.containsKey("param")) { return false; } } catch (Exception e) { return false; } return true; } /** * 校验是否为整数 * * @param text * @param msg */ public static void isInteger(String text, String msg) { if (!StringUtils.isNumeric(text)) { throw new IllegalArgumentException(msg); } } public static void isDate(String text, String msg) { try { DateUtil.getDefaultDateFromString(text); } catch (Exception e) { throw new IllegalArgumentException(msg); } } public static void isDate(String text, String format, String msg) { try { DateUtil.getDateFromString(text, format); } catch (Exception e) { throw new IllegalArgumentException(msg); } } /** * 判断字符串是否是金额 * * @param str 金额字符串 * @param msg 异常时信息 */ public static void isMoney(String str, String msg) { Pattern pattern = java.util.regex.Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); // 判断小数点后2位的数字的正则表达式 Matcher match = pattern.matcher(str); if (!match.matches()) { throw new IllegalArgumentException(msg); } } /** * 检验是否在 infos 中存在 flowComponent 对应组件的key * * @param infos * @param flowComponent * @param key * @param message */ public static void hasKeyByFlowData(JSONArray infos, String flowComponent, String key, String message) { for (int infoIndex = 0; infoIndex < infos.size(); infoIndex++) { JSONObject _info = infos.getJSONObject(infoIndex); if (_info.containsKey(flowComponent) && _info.getString("flowComponent").equals(flowComponent)) { hasKeyAndValue(_info, key, message); break; } } } @SuppressWarnings("rawtypes") public static boolean objIsEmpty(Object o) { if (o == null) { return true; } if (o instanceof String) { if (o.toString().trim().equals("")) { return true; } if (o.equals("null") || o.equals("NULL")) { return true; } } else if (o instanceof List) { if (((List) o).size() == 0) { return true; } } else if (o instanceof Map) { if (((Map) o).size() == 0) { return true; } } else if (o instanceof Set) { if (((Set) o).size() == 0) { return true; } } else if (o instanceof Object[]) { if (((Object[]) o).length == 0) { return true; } } else if (o instanceof int[]) { if (((int[]) o).length == 0) { return true; } } else if (o instanceof long[]) { if (((long[]) o).length == 0) { return true; } } return false; } /** * 检验是否在 infos 中存在 flowComponent 对应组件的key * * @param key * @param message */ public static void isEmail(JSONObject info, String key, String message) { hasKeyAndValue(info, key, message); if (!ValidatorUtil.isEmail(info.getString(key))) { throw new IllegalArgumentException(message); } } public static void judgeAttrValue(JSONObject paramObj){ if (!paramObj.containsKey("attrs")) { return; } JSONArray attrs = paramObj.getJSONArray("attrs"); if (attrs.size() < 1) { return; } JSONObject attr = null; for (int attrIndex = 0; attrIndex < attrs.size(); attrIndex++) { attr = attrs.getJSONObject(attrIndex); if (!"Y".equals(attr.getString("required"))) { continue; } Assert.hasKeyAndValue(attr, "value", attr.getString("specName") + "不能为空"); //整数 if ("2002".equals(attr.getString("specValueType"))) { Assert.isInteger(attr.getString("value"), attr.getString("specName") + "不是整数"); } //整数 if ("3003".equals(attr.getString("specValueType"))) { Assert.isMoney(attr.getString("value"), attr.getString("specName") + "不是金额类型 如 3.00"); } // 日期4004 if ("4004".equals(attr.getString("specValueType"))) { Assert.isDate(attr.getString("value"), DateUtil.DATE_FORMATE_STRING_B, attr.getString("specName") + "不是日期格式 YYYY-MM-DD"); } // 日期5005 if ("5005".equals(attr.getString("specValueType"))) { Assert.isDate(attr.getString("value"), DateUtil.DATE_FORMATE_STRING_A, attr.getString("specName") + "不是日期格式 YYYY-MM-DD hh:mm:ss"); } } } }