Skip to content

Commit 91aec6c

Browse files
author
hongwei.quhw
committed
修复模板配置不同部位key相同问题
1 parent 945cf3b commit 91aec6c

File tree

8 files changed

+144
-27
lines changed

8 files changed

+144
-27
lines changed

rdf-file-core/src/main/java/com/alipay/rdf/file/codec/RowsCodec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,6 @@ public static FileColumnMeta getColumnMeta(FileColumnMeta colMeta, FileMeta file
141141

142142
return new FileColumnMeta(colMeta.getColIndex(), colMeta.getName(), colMeta.getDesc(),
143143
colMeta.getType(), colMeta.isRequired(), colMeta.getRange(), colMeta.getDefaultValue(),
144-
fileMeta);
144+
fileMeta, colMeta.getDataType());
145145
}
146146
}

rdf-file-core/src/main/java/com/alipay/rdf/file/function/ColumnFunctionWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ private String serialize(Object field, FileColumnMeta columnMeta, FileConfig fil
127127
}
128128

129129
private ColumnRegEx getColumnRegEx(FileColumnMeta columnMeta) {
130-
String key = columnMeta.getFileMeta().getTemplatePath() + "-" + columnMeta.getName();
130+
String key = columnMeta.getFileMeta().getTemplatePath() + "-" + columnMeta.getDataType().name() + "-" + columnMeta.getName();
131131
ColumnRegEx columnRegEx = columnRegExs.get(key);
132132
if (null == columnRegEx) {
133133
columnRegEx = new ColumnRegEx();

rdf-file-core/src/main/java/com/alipay/rdf/file/loader/TemplateLoader.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package com.alipay.rdf.file.loader;
22

3-
import java.io.InputStream;
4-
import java.util.Map;
5-
import java.util.concurrent.ConcurrentHashMap;
6-
73
import com.alibaba.fastjson.JSON;
84
import com.alipay.rdf.file.condition.RowConditionType;
95
import com.alipay.rdf.file.exception.RdfErrorEnum;
@@ -23,6 +19,10 @@
2319
import com.alipay.rdf.file.model.RowCondition;
2420
import com.alipay.rdf.file.util.RdfFileUtil;
2521

22+
import java.io.InputStream;
23+
import java.util.Map;
24+
import java.util.concurrent.ConcurrentHashMap;
25+
2626
/**
2727
* Copyright (C) 2013-2018 Ant Financial Services Group
2828
*
@@ -41,7 +41,7 @@ public class TemplateLoader {
4141
/**
4242
* 计算行总长度
4343
*
44-
* @param fileMeta
44+
* @param fileConfig
4545
* @return
4646
*/
4747
public static int getRowLength(FileConfig fileConfig) {
@@ -72,9 +72,9 @@ public static FileMeta load(FileConfig fileConfig) {
7272
/**
7373
* 加载模板
7474
*
75-
* @param template
75+
* @param templatePath
76+
* @param templateEncoding
7677
* @param templateEncoding
77-
* @param fileEncoding
7878
* @return
7979
*/
8080
public static FileMeta load(String templatePath, String templateEncoding) {
@@ -110,7 +110,7 @@ public static FileMeta load(String templatePath, String templateEncoding) {
110110
int colIndex = 0;
111111
//head
112112
for (String head : templateConfig.getHead()) {
113-
fileMeta.addHeadColumn(parseFileColumn(templatePath, head, colIndex++, fileMeta));
113+
fileMeta.addHeadColumn(parseFileColumn(templatePath, head, colIndex++, fileMeta, FileDataTypeEnum.HEAD));
114114
}
115115

116116
// body 配置多模板解析
@@ -127,7 +127,7 @@ public static FileMeta load(String templatePath, String templateEncoding) {
127127
colIndex = 0;
128128
for (String body : bodyConfig.getBodyColumns()) {
129129
bodyMeta.getColumns()
130-
.add(parseFileColumn(templatePath, body, colIndex++, fileMeta));
130+
.add(parseFileColumn(templatePath, body, colIndex++, fileMeta, FileDataTypeEnum.BODY));
131131
}
132132
fileMeta.addBodyColumn(bodyMeta);
133133

@@ -154,15 +154,15 @@ public static FileMeta load(String templatePath, String templateEncoding) {
154154
FileBodyMeta bodyMeta = new FileBodyMeta();
155155
for (String body : templateConfig.getBody()) {
156156
bodyMeta.getColumns()
157-
.add(parseFileColumn(templatePath, body, colIndex++, fileMeta));
157+
.add(parseFileColumn(templatePath, body, colIndex++, fileMeta, FileDataTypeEnum.BODY));
158158
}
159159
fileMeta.addBodyColumn(bodyMeta);
160160
}
161161

162162
colIndex = 0;
163163
//tail
164164
for (String tail : templateConfig.getTail()) {
165-
fileMeta.addTailColumn(parseFileColumn(templatePath, tail, colIndex++, fileMeta));
165+
fileMeta.addTailColumn(parseFileColumn(templatePath, tail, colIndex++, fileMeta, FileDataTypeEnum.TAIL));
166166
}
167167

168168
//解析汇总字段
@@ -232,7 +232,7 @@ private static void parseEndWithSplit(FileMeta fileMeta, String startSplit) {
232232
}
233233

234234
private static FileColumnMeta parseFileColumn(String tempaltePath, String colConfig,
235-
int colIndex, FileMeta fileMeta) {
235+
int colIndex, FileMeta fileMeta, FileDataTypeEnum dataType) {
236236
colConfig = RdfFileUtil.assertTrimNotBlank(colConfig, "字段为空 index=" + colIndex);
237237

238238
String[] fields = colConfig.trim().split("\\|");
@@ -304,7 +304,7 @@ private static FileColumnMeta parseFileColumn(String tempaltePath, String colCon
304304
}
305305

306306
FileColumnMeta column = new FileColumnMeta(colIndex, key, name, type, required, range,
307-
defaultValue, fileMeta);
307+
defaultValue, fileMeta, dataType);
308308

309309
return column;
310310
}

rdf-file-core/src/main/java/com/alipay/rdf/file/meta/FileColumnMeta.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.alipay.rdf.file.meta;
22

3+
import com.alipay.rdf.file.model.FileDataTypeEnum;
4+
35
/**
46
* Copyright (C) 2013-2018 Ant Financial Services Group
57
*
@@ -24,20 +26,12 @@ public class FileColumnMeta {
2426
/**默认值配置*/
2527
private final String defaultValue;
2628
private final FileMeta fileMeta;
29+
/**数据字段在文件中部位*/
30+
private final FileDataTypeEnum dataType;
2731

28-
/**
29-
* @param colIndex
30-
* @param name
31-
* @param desc
32-
* @param type
33-
* @param required
34-
* @param range
35-
* @param defaultValue
36-
* @param fileMeta
37-
*/
3832
public FileColumnMeta(int colIndex, String name, String desc, FileColumnTypeMeta type,
3933
boolean required, FileColumnRangeMeta range, String defaultValue,
40-
FileMeta fileMeta) {
34+
FileMeta fileMeta, FileDataTypeEnum dataType) {
4135
this.colIndex = colIndex;
4236
this.desc = desc;
4337
this.name = name;
@@ -46,6 +40,7 @@ public FileColumnMeta(int colIndex, String name, String desc, FileColumnTypeMeta
4640
this.required = required;
4741
this.defaultValue = defaultValue;
4842
this.fileMeta = fileMeta;
43+
this.dataType = dataType;
4944
}
5045

5146
/**
@@ -120,6 +115,10 @@ public FileMeta getFileMeta() {
120115
return fileMeta;
121116
}
122117

118+
public FileDataTypeEnum getDataType() {
119+
return dataType;
120+
}
121+
123122
@Override
124123
public String toString() {
125124
StringBuffer sb = new StringBuffer("FileColumnMeta[");
@@ -129,6 +128,7 @@ public String toString() {
129128
sb.append(",type=").append(type.getName());
130129
sb.append(",range=").append(range);
131130
sb.append(",required=").append(required);
131+
sb.append(",dataType=").append(dataType.name());
132132
sb.append("]");
133133
return sb.toString();
134134
}

rdf-file-core/src/main/java/com/alipay/rdf/file/protocol/FileDefinitionParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ private void parseRow(String xpath, Element node, List<RowDefinition> rowDefinit
144144
}
145145

146146
FileColumnMeta columnMeta = new FileColumnMeta(-1, output, output, columnTypeMeta,
147-
false, columnRangeMeta, null, null);
147+
false, columnRangeMeta, null, null, rowType);
148148
rd.setColumnMeta(columnMeta);
149149
}
150150
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.alipay.rdf.file.reader;
2+
3+
import com.alipay.rdf.file.interfaces.FileFactory;
4+
import com.alipay.rdf.file.interfaces.FileReader;
5+
import com.alipay.rdf.file.model.FileConfig;
6+
import com.alipay.rdf.file.model.StorageConfig;
7+
import com.alipay.rdf.file.util.DateUtil;
8+
import com.alipay.rdf.file.util.TemporaryFolderUtil;
9+
import junit.framework.Assert;
10+
import org.junit.After;
11+
import org.junit.Before;
12+
import org.junit.Test;
13+
14+
import java.io.File;
15+
import java.io.IOException;
16+
import java.math.BigDecimal;
17+
import java.util.Date;
18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
/**
22+
* @author hongwei.quhw
23+
* @version $Id: FileReaderDeTest.java, v 0.1 2017年4月7日 下午5:38:15 hongwei.quhw Exp $
24+
*/
25+
public class FileReaderDeTest2 {
26+
TemporaryFolderUtil tf = new TemporaryFolderUtil();
27+
28+
@Before
29+
public void setUp() throws IOException {
30+
tf.create();
31+
}
32+
33+
@Test
34+
public void testReadDEFile() throws Exception {
35+
String filePath = File.class.getResource("/reader/de/data/data2_1.txt").getPath();
36+
37+
FileConfig config = new FileConfig(filePath, "/reader/de/template/template2_1.json",
38+
new StorageConfig("nas"));
39+
40+
FileReader fileReader = FileFactory.createReader(config);
41+
42+
Assert.assertNull(fileReader.readTail(HashMap.class));
43+
44+
Map<String, Object> head = fileReader.readHead(HashMap.class);
45+
Assert.assertEquals(new Long(100), head.get("totalCount"));
46+
Assert.assertEquals(new BigDecimal("300.03"), head.get("amount"));
47+
48+
Map<String, Object> row = fileReader.readRow(HashMap.class);
49+
Assert.assertEquals("seq_0", row.get("seq"));
50+
Assert.assertEquals("inst_seq_0", row.get("instSeq"));
51+
Assert.assertEquals("2013-11-09 12:34:56",
52+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
53+
Assert.assertEquals("20131109", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
54+
Assert.assertEquals("20131112 12:23:34",
55+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
56+
Assert.assertEquals(new BigDecimal("23.33"), row.get("applyNumber"));
57+
Assert.assertEquals(new BigDecimal("10.22"), row.get("amount"));
58+
Assert.assertEquals(new Integer(22), row.get("age"));
59+
Assert.assertEquals(new Long(12345), row.get("longN"));
60+
Assert.assertEquals(Boolean.TRUE, row.get("bol"));
61+
Assert.assertEquals("备注1", row.get("memo"));
62+
63+
row = fileReader.readRow(HashMap.class);
64+
Assert.assertEquals("seq_1", row.get("seq"));
65+
Assert.assertEquals("inst_seq_1", row.get("instSeq"));
66+
Assert.assertEquals("2013-11-10 15:56:12",
67+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
68+
Assert.assertEquals("20131110", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
69+
Assert.assertEquals("20131113 12:33:34",
70+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
71+
Assert.assertEquals(new BigDecimal("23.34"), row.get("applyNumber"));
72+
Assert.assertEquals(new BigDecimal("11.88"), row.get("amount"));
73+
Assert.assertEquals(new Integer(33), row.get("age"));
74+
Assert.assertEquals(new Long(56789), row.get("longN"));
75+
Assert.assertEquals(Boolean.FALSE, row.get("bol"));
76+
Assert.assertNull(row.get("memo"));
77+
78+
row = fileReader.readRow(HashMap.class);
79+
Assert.assertNull(row);
80+
81+
Assert.assertNull(fileReader.readTail(HashMap.class));
82+
83+
fileReader.close();
84+
}
85+
86+
87+
88+
@After
89+
public void after() {
90+
tf.delete();
91+
}
92+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
总笔数:100|总金额:300.03
2+
流水号|基金公司订单号|订单申请时间|普通日期|普通日期时间|普通数字|金额|年龄|长整型|布尔值|备注
3+
seq_0|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
4+
seq_1|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"head":[
3+
"totalCount|总笔数|Required|Long",
4+
"amount|总金额|BigDecimal|Required"
5+
],
6+
"body":[
7+
"seq|流水号",
8+
"instSeq|基金公司订单号|Required",
9+
"gmtApply|订单申请时间|Date:yyyy-MM-dd HH:mm:ss",
10+
"date|普通日期|Date:yyyyMMdd",
11+
"dateTime|普通日期时间|Date:yyyyMMdd HH:mm:ss",
12+
"applyNumber|普通数字|BigDecimal",
13+
"amount|金额|BigDecimal",
14+
"age|年龄|Integer",
15+
"longN|长整型|Long",
16+
"bol|布尔值|Boolean",
17+
"memo|备注"
18+
],
19+
"protocol":"DE"
20+
}
21+

0 commit comments

Comments
 (0)