From 8b134da54baa7822cc7a24da28ed1164d1d3659e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465645774@qq.com> Date: Tue, 12 Jan 2021 20:11:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=95=B0=E6=8D=AE=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8=E6=96=B9=E6=B3=95=E7=9A=84=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/auxiliary/datadriven/Functions.java | 197 +++++++++++++++--- .../com/auxiliary/tool/data/PresetString.java | 6 +- .../com/auxiliary/tool/data/TableData.java | 24 ++- 3 files changed, 189 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/auxiliary/datadriven/Functions.java b/src/main/java/com/auxiliary/datadriven/Functions.java index 7fc45bf..be0baeb 100644 --- a/src/main/java/com/auxiliary/datadriven/Functions.java +++ b/src/main/java/com/auxiliary/datadriven/Functions.java @@ -1,5 +1,8 @@ package com.auxiliary.datadriven; +import com.auxiliary.tool.data.CarLicecenType; +import com.auxiliary.tool.data.MobleNumberType; +import com.auxiliary.tool.data.PresetString; import com.auxiliary.tool.data.RandomString; import com.auxiliary.tool.data.StringMode; import com.auxiliary.tool.date.Time; @@ -17,8 +20,9 @@ import com.auxiliary.tool.date.Time; */ public class Functions { /** + * 定义生成随机字符串函数 *

- * 定义生成随机字符串函数,用法:
+ * 用法: * ${rs(字符串种子,生成字符串最短长度,生成字符串最大长度)} *

*

@@ -95,29 +99,31 @@ public class Functions { } /** + * 定义对指定时间处理的函数 *

- * 定义对指定时间处理的函数,用法:
- * ${time(时间, 增减时间方式)} + * 用法:${time(时间, 增减时间方式)} *

*

* 参数解释: - *

- *

- * 时间:指定的时间,可传入年、月、日、时、分、秒,允许只传入“年、月、日”,也允许只传入“时、分、秒”。 + *

+ *

*

- * 示例:
- * ${time(2020-06-08 11:20:12, 1d)}——表示生成“2020-06-08 11:20:12”增加1天的时间
- * ${time(2020年06月08日 11时20分12秒, -1d2.3y)}——表示生成“2020年06月08日 11时20分12秒”减少一天并增加2.3年的时间
- * ${time(2020-06-08,1d)}——表示生成“2020-06-08 00:00:00”增加1天的时间
- * ${time(11:20:12, 1h)}——表示生成“当天11:20:12”增加1天的时间
+ * 示例: + *

*

*

* 注意:计算小数点的日期时,可能存在精度丢失,计算跨度越大,精度丢失越多 @@ -143,24 +149,26 @@ public class Functions { } /** + * 定义对当前时间处理的函数 *

- * 定义对当前时间处理的函数,用法:
- * ${time(增减时间方式)} + * 用法:${time(增减时间方式)} *

*

* 参数解释: - *

- *

- * 增减时间方式:指定对时间进行增减的方式,使用英文单位表示需要操作的内容,包括: + *

*

- * 示例:
- * ${time(1d)}——表示生成当前时间增加1天的时间
- * ${time(-1d2.3y)}——表示生成当前时间减少一天并增加2.3年的时间
- * ${time()}——表示生成当前时间
+ * 示例: + *

*

*

* 注意:计算小数点的日期时,可能存在精度丢失,计算跨度越大,精度丢失越多 @@ -192,9 +200,9 @@ public class Functions { } /** + * 定义标记当前元素为空元素 *

- * 定义标记当前元素为空元素,用法:
- * ${ }(花括号内存在一个空格) + * 用法:${ }(花括号内存在一个空格) *

* @return {@link DataDriverFunction}类对象 */ @@ -205,4 +213,139 @@ public class Functions { return ""; }); } + + /** + * 定义生成随机18位长度的身份证信息函数 + *

+ * 用法:${idcard}或${身份证} + *

+ * @return {@link DataDriverFunction}类对象 + */ + public static DataDriverFunction randomIdCard() { + String regex = "(idcard)|(身份证)"; + return new DataDriverFunction(regex, text -> PresetString.identityCard()); + } + + /** + * 定义生成随机手机号码函数 + *

+ * 用法:${moble.运营商简写或名称}或${手机号码.运营商简写或名称} + *

+ *

+ * 参数解释: + *

+ *

+ * 示例: + *

+ *

+ *

+ * 注意: + *

+ *

+ * @return {@link DataDriverFunction}类对象 + */ + public static DataDriverFunction randomMoble() { + String regex = "((mo(ble)?)|(手机(号码)?))(.(((dx)|(电信))|((yd)|(移动))|((lt)|(联通))))?"; + return new DataDriverFunction(regex, text -> { + int index = text.indexOf("."); + //若切分得到的字符串数组只有一个元素,则表示字符串不包含后缀,按照默认的参数进行返回 + if (index > -1) { + return PresetString.mobleNumber(MobleNumberType.CHINA_MOBILE); + } else { + //若存在后缀,则按照后缀的参数对手机号码进行返回 + String type = text.toLowerCase().substring(index + 1, text.length()); + switch(type) { + case "dx": + case "电信": + return PresetString.mobleNumber(MobleNumberType.CHINA_TELECOM); + case "lt": + case "联通": + return PresetString.mobleNumber(MobleNumberType.CHINA_UNICOM); + case "yd": + case "移动": + default: + return PresetString.mobleNumber(MobleNumberType.CHINA_MOBILE); + + } + } + }); + } + + /** + * 定义生成随机姓名函数 + *

+ * 用法:${name}或${姓名} + *

+ * @return {@link DataDriverFunction}类对象 + */ + public static DataDriverFunction randomName() { + String regex = "(name)|(姓名)"; + return new DataDriverFunction(regex, text -> PresetString.name()); + } + + /** + * 定义生成随机随机车牌号码函数 + *

+ * 用法:${car.车牌简写或名称}或${车牌.车牌简写或名称} + *

+ *

+ * 参数解释: + *

+ *

+ * 示例: + *

+ *

+ *

+ * 注意:省略车牌简写或名称则默认为生成民用车牌 + *

+ * @return {@link DataDriverFunction}类对象 + */ + public static DataDriverFunction randomCarId() { + String regex = "((car)|(车牌))(.(((ci)|(民用))|((po)|(警车))|((el)|(使馆))|((en)|(新能源))))?"; + return new DataDriverFunction(regex, text -> { + int index = text.indexOf("."); + //若切分得到的字符串数组只有一个元素,则表示字符串不包含后缀,按照默认的参数进行返回 + if (index > -1) { + return PresetString.mobleNumber(MobleNumberType.CHINA_MOBILE); + } else { + //若存在后缀,则按照后缀的参数对手机号码进行返回 + String type = text.toLowerCase().substring(index + 1, text.length()); + switch(type) { + case "en": + case "新能源": + return PresetString.carLicence(CarLicecenType.ENERGY); + case "po": + case "警车": + return PresetString.carLicence(CarLicecenType.POLICE); + case "el": + case "使馆": + return PresetString.carLicence(CarLicecenType.ELCHEE); + case "ci": + case "民用": + default: + return PresetString.carLicence(CarLicecenType.CIVIL); + + } + } + }); + } } diff --git a/src/main/java/com/auxiliary/tool/data/PresetString.java b/src/main/java/com/auxiliary/tool/data/PresetString.java index fcd0679..12dcddb 100644 --- a/src/main/java/com/auxiliary/tool/data/PresetString.java +++ b/src/main/java/com/auxiliary/tool/data/PresetString.java @@ -42,15 +42,15 @@ public class PresetString { /** * 该方法用于生成一个指定样式的随机车牌 * - * @param type + * @param carLicecenType * 车牌的样式 * @return 生成的车牌号字符串 */ - public static String carLicence(CarLicecenType type) { + public static String carLicence(CarLicecenType carLicecenType) { String s = ""; // 判断车牌的样式 - switch (type) { + switch (carLicecenType) { case CIVIL: { s += carLicence(); break; diff --git a/src/main/java/com/auxiliary/tool/data/TableData.java b/src/main/java/com/auxiliary/tool/data/TableData.java index 566778c..316274b 100644 --- a/src/main/java/com/auxiliary/tool/data/TableData.java +++ b/src/main/java/com/auxiliary/tool/data/TableData.java @@ -85,6 +85,10 @@ public class TableData { public boolean isExamine() { return isExamine; } + + public boolean isEmpty() { + return longColumnSize < 1; + } /** * 用于根据列表名称,存储一列元素数据,多次调用该方法时,将在相应列后继续添加数据 @@ -446,15 +450,19 @@ public class TableData { Optional.ofNullable(columnNameList).orElseThrow(() -> new IllegalDataException("未传入数据列")).stream() .filter(tableMap::containsKey).forEach(columnName -> { ArrayList> columnDataList = new ArrayList<>(); - // 遍历列表,存储数据,若当前列无此行元素(即抛出数组越界异常),则存储空值 - IntStream.range(startRowIndexA.get(), endRowIndexA.get() + 1).forEach(index -> { - try { - columnDataList.add(tableMap.get(columnName).get(index - 1)); - } catch (IndexOutOfBoundsException e) { - columnDataList.add(Optional.empty()); - } + //若当前表数据不为空,则进行数据处理 + if (!isEmpty()) { + // 遍历列表,存储数据,若当前列无此行元素(即抛出数组越界异常),则存储空值 + IntStream.range(startRowIndexA.get(), endRowIndexA.get() + 1).forEach(index -> { + try { + columnDataList.add(tableMap.get(columnName).get(index - 1)); + } catch (IndexOutOfBoundsException e) { + //为保证数据完整,若数组越界则存储空值 + columnDataList.add(Optional.empty()); + } - }); + }); + } columnDataMap.put(columnName, columnDataList); });