UserChoseIntentParser.java
1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.xly.util;
import java.util.*;
import java.util.stream.Collectors;
public class UserChoseIntentParser {
/**
* @param input 用户输入:全部确认 / 合并确认 / 1,3行确认
* @param rowMap 上面parse出来的全量数据
* @return 最终要生成订单的明细列表
*/
public static Map<String,Object> getSelectedRows(String input, Map<Integer, Map<String,Object>> rowMap) {
List<Map<String,Object>> sRowData = new ArrayList<>();
Map<String,Object> rMap = new HashMap<>();
String sHandleType = "merge";//单个的 就是全部确认 否则就是合并确认
if (input.contains("全部确认") || input.contains("合并确认")) {
if(input.contains("全部确认")){
sHandleType = "single";
}
sRowData = new ArrayList<>(rowMap.values());
rMap.put("sRowData",sRowData);
rMap.put("sHandleType",sHandleType);
return rMap;
}
// 解析 1,3,5-7 这类行号
Set<Integer> selected = new HashSet<>();
String[] parts = input.replaceAll("[^0-9,-]", "").split("[,,]");
for (String part : parts) {
try {
if (part.contains("-")) {
String[] range = part.split("-");
int start = Integer.parseInt(range[0]);
int end = Integer.parseInt(range[1]);
for (int i = start; i <= end; i++) {
selected.add(i);
}
} else {
selected.add(Integer.parseInt(part));
}
} catch (Exception ignored) {}
}
rMap.put("sRowData",selected.stream()
.filter(rowMap::containsKey)
.map(rowMap::get)
.collect(Collectors.toList()));
rMap.put("sHandleType",sHandleType);
return rMap;
}
}