Commit b11ba2f6 authored by xiongjunyi's avatar xiongjunyi

[modify:1.拼接post请求数据时,采用stringJoiner拼接]

parent aed5fc3d
This diff is collapsed.
package com.miya.manning.framework.util;
import com.miya.manning.aspect.IfConditionAspect;
import com.miya.manning.enums.DataRefTypeEnum;
import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
......@@ -9,12 +11,14 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.StringJoiner;
public class ExcelUtil {
private XSSFSheet sheet;
private XSSFRow header;
private static final Logger log = Logger.getLogger(ExcelUtil.class);
/**
* 构造函数,初始化excel数据
......@@ -127,8 +131,153 @@ public class ExcelUtil {
* @param nums 数据的组号,可能post方法中的数据引用多组数据
* @param type 数据的类型,值域为[Object,Array,Integer,bool]
* @return 返回拼接成json形式的字符串
* 试用StringJoiner完成字符串拼接
*/
public static String postdata(XSSFWorkbook sheets, String sheet_name , int type, String... nums ) {
public static String postdata(XSSFWorkbook sheets , String sheet_name , int type , String... nums){
XSSFSheet sheet = sheets.getSheet(sheet_name);
//定义各种拼接方式
int count = ExcelUtil.getcount(sheet);
XSSFRow header_row = sheet.getRow(0);
if(count !=1){//如果只有一列说明引用数据为空,不需要补数据
//StringJoiner object = new StringJoiner("," , "{" , "}");//一个对象由{开始,以}结束
//只有内部的引用数据会有多行,length会大于1
StringJoiner key_value = new StringJoiner(",","{","}");//用来拼接key_value和key_value的
for(int i = 0 ; i < nums.length ; i++){
XSSFRow data_row = sheet.getRow(Integer.parseInt(nums[i]));
if(ExcelUtil.IsRowEmpty(data_row)){
log.error("引用的数据行为空!请检查!");
throw new RuntimeException("引用的数据行为空!请检查!");
}
else{
for(int j = 1 ; j < count ; j++){//不要序号一列
//StringJoiner special_type_args = new StringJoiner("","","");//用来拼接"a": 和 true / 1 / ["c"] 等
StringJoiner delimiter = new StringJoiner(":","","");//字段分隔符,每个字段都需要new一个新的出来,否则会叠加
StringJoiner args = new StringJoiner("","\"","\"");//变量名,都采用"aaa"拼接
String header = header_row.getCell(j).toString();//每个字段单元格的内容
if(header.contains("(Object)") || header.contains("(Array)") || header.contains("(Integer)") || header.contains("(bool)") ||
header.contains("(ArrayList)")){
args.add(header.substring(0, header.lastIndexOf("(") ));//拼接变量名
//delimiter.add(args.toString());//拼接分隔符,拼接完是"aaa":的形式
}
else{
args.add(header);
//delimiter.add(args.toString());//同上,只是没有截取字段
}
//拼接value
if(data_row.getCell(j) != null){
String cell = data_row.getCell(j).toString();//每个数据单元格的内容
String[] datas = cell.split("\\|");//每个单元格内容拆分后的数组
if(datas.length>1 ){
//引用数据
String refrence_sheet_name = datas[0];//引用的sheet页名称
String refrence_nums = datas[1];//引用的数据组数
//Array类型需要多拼接一个[
if(header.contains("(Array)")){
StringJoiner json_array = new StringJoiner("" ,"[" , "]");//数组类型
String reference_data = postdata(sheets, refrence_sheet_name, DataRefTypeEnum.Type_List.getTypeId(),refrence_nums.split(","));
json_array.add(reference_data);//按数组格式拼接,拼接完成后是["aaa":"xxx"]的形式
delimiter.add(args.toString()).add(json_array.toString());//将key和value 用: 拼接起来
key_value.add(delimiter.toString());
}
if(header.contains("(Object)")){
StringJoiner json_object = new StringJoiner("" , "" , "");//对象类型,不需要前缀和后缀,最开始已经创建好了
String reference_data = postdata(sheets, refrence_sheet_name, DataRefTypeEnum.Type_Object.getTypeId(),refrence_nums.split(","));
json_object.add(reference_data);//按对象格式拼接,拼接完成后是{"aaa":"xxx"}的形式
delimiter.add(args.toString()).add(json_object.toString());
key_value.add(delimiter.toString());
}
}
else if(header.contains("(Integer)") || header.contains("(bool)") || header.contains("(ArrayList)") || header.contains("(Array)")){
//Integer字段不加引用数据组数,所以不能放上面的if分支里,单独拉出来
//考虑到该字段可能采用变量方式填入值,不采取直接转int的方式,而是不拼接""处理
//如果是纯数组类型的传参 例如 "excludeCalculateActivityTypes":["FULL-PACKAGE_PRICE"] 则直接拼接内容
//Double value = Double.valueOf(data_row.getCell(j).toString());
String value = data_row.getCell(j).toString();
if(value.isEmpty()) {
StringJoiner values = new StringJoiner("", "", "");
delimiter.add(args.toString()).add(values.add("null").toString());
key_value.add(delimiter.toString());
}
else {
delimiter.add(args.toString()).add(value);
key_value.add(delimiter.toString());
}
}
else{
//普通value值
//处理成纯文本
StringJoiner values = new StringJoiner("","\"","\"");//变量值,普通字符串变量
data_row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
String value = data_row.getCell(j).toString();
values.add(value);
//special_type_args.add(values.toString());
delimiter.add(args.toString()).add(values.toString());//一个属性拼接完成
//key_value.add(values.toString());
key_value.add(delimiter.toString());
}
}
else {
//value值为空的情况
if(header.contains("(Integer)") || header.contains("(bool)") || header.contains("(ArrayList)") || header.contains("(Array)")){
StringJoiner values = new StringJoiner("", "","");
delimiter.add(args.toString()).add(values.add("null").toString());
key_value.add(delimiter.toString());
}else {
StringJoiner values = new StringJoiner("","\"","\"");//变量值,普通字符串变量
//values.add(null);
delimiter.add(args.toString()).add(values.toString());
key_value.add(delimiter.toString());
}
}
}
//object.add(key_value.toString());//至此一个对象拼接完成
}
}
//内层拼接完了,开始拼接最外层
if(sheet_name.contains("(Array)")){
StringJoiner array = new StringJoiner("," , "[" , "]");//数组类型传参,类似["a":1]
array.add(key_value.toString());
//System.out.println(array);
return array.toString();
}
//System.out.println(key_value);
return key_value.toString();
}else {
throw new RuntimeException("没有引用数据!");
}
}
/**
*
* @param sheets excel数据集
* @param sheet_name sheet页名
* @param nums 数据的组号,可能post方法中的数据引用多组数据
* @param type 数据的类型,值域为[Object,Array,Integer,bool]
* @return 返回拼接成json形式的字符串
*/
/*public static String postdata(XSSFWorkbook sheets, String sheet_name , int type, String... nums ) {
XSSFSheet sheet = sheets.getSheet(sheet_name);
int count = ExcelUtil.getcount(sheet);
StringBuffer buffer = new StringBuffer();
......@@ -259,7 +408,7 @@ public class ExcelUtil {
buffer.append("]");
}
return buffer.toString();
}
}*/
/***
*
......
......@@ -221,8 +221,8 @@ public class ParamsBuilt {
public static void main(String[] args) {
String regex = "门店未开启快递开关";
String origin = "门店未开启快递开关";
String regex = " ";
String origin = null;
boolean flag = origin.matches(regex);
System.out.println(flag);
}
......
......@@ -149,6 +149,7 @@ public class TestCaseUtil {
}
else if("post".equals(testCase.getMethod_type().toLowerCase())){
String data = ExcelUtil.postdata(sheets, sheets.getSheetName(0), DataRefTypeEnum.Type_normal.getTypeId(), nums.split(","));
//System.out.println(data);
testCase.setParams(data);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment