UserChoseIntentParser.java 1.91 KB
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;
    }
}