Crunchy
2024-08-03 d6520e90ce34127c0a994e22e3fb54767aebecc0
cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
@@ -1,5 +1,8 @@
package com.yuanchu.mom.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -7,13 +10,17 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.ADto;
import com.yuanchu.mom.dto.BDto;
import com.yuanchu.mom.dto.DeviceDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.DeviceMapper;
import com.yuanchu.mom.mapper.StructureItemParameterMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.DataConfig;
import com.yuanchu.mom.pojo.Device;
import com.yuanchu.mom.pojo.StructureItemParameter;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.DataConfigService;
import com.yuanchu.mom.service.DeviceService;
import com.yuanchu.mom.utils.DataAcquisition;
@@ -24,11 +31,14 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
 * 设备(Device)表服务实现类
@@ -40,6 +50,8 @@
    private GetLook getLook;
    private DeviceMapper deviceMapper;
    private UserMapper userMapper;
    private StructureItemParameterMapper structureItemParameterMapper;
@@ -139,8 +151,13 @@
        String ip = DataAcquisition.getIp(request);
        List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
                .eq(Device::getIp, ip));
        // 1、检验
        if(device.size() > 1) {
            throw new ErrorException("IP:" + ip + "配置了设备多个设备,无法进行数采!");
            String str = "";
            for (Device device1 : device) {
                str += device1.getDeviceName() + ",";
            }
            throw new ErrorException("IP:" + ip + "配置了设备多个设备:" + str + ",无法进行数采!");
        }
        if (ObjectUtils.isEmpty(device)) {
            throw new ErrorException("未给该IP:" + ip + "配置设备,无法进行数采!");
@@ -149,6 +166,7 @@
        if (ObjectUtils.isEmpty(device.get(0).getFileType()) || ObjectUtils.isEmpty(device.get(0).getCollectUrl())) {
            throw new ErrorException("未给该:" + device.get(0).getDeviceName() + "设备配置采集路径或文件后缀!");
        }
        // 2、取设备关联的检验项,检验子项
        List<DataConfig> list1 = new ArrayList<>();
        inspectionItemSubclass.forEach(i -> {
             List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
@@ -158,11 +176,990 @@
                .orderBy(false, false, DataConfig::getId));
            list1.addAll(list);
        });
        Map<String, String> map = DataAcquisition.dataAcquisitionEntrance(list1, device.get(0), entrustCode, sampleCode, ip);
        // 3、采集,取数据,参与公式计算
        Map<String, Object> map = DataAcquisition.dataAcquisitionEntrance(list1, device.get(0), entrustCode, sampleCode, ip);
        // 4、造循环次数
        if (ObjectUtils.isNotEmpty(map)) {
            String frequency = DataAcquisition.createFrequency(entrustCode, sampleCode);
            map.put("frequency", frequency);
            Object result;
            Map<String, Object> frequency = DataAcquisition.createFrequency(entrustCode, sampleCode, map);
            if (ObjectUtils.isEmpty(device.get(0).getEntrustCode()) && ObjectUtils.isEmpty(device.get(0).getSampleCode())) {
                result = formulaCalculation(frequency, true);
            } else {
                result = formulaCalculation(frequency, false);
            }
            return Result.success(result);
        } else {
            return Result.success(null);
        }
        return Result.success(map);
    }
    @Override
    public List<ADto> menu() {
        //查询所有设备信息
        List<Device> devices = baseMapper.selectList(null);
        List<String> name = devices.stream().map(Device::getDeviceName).collect(Collectors.toList());
        //查询所有用户信息
        List<User> users = userMapper.selectList(null);
        List<String> collect = users.stream().map(User::getName).collect(Collectors.toList());
        String menu="[\n" +
                "\t{\n" +
                "\t\tk: 0,\n" +
                "\t\tv: \"个人首页\",\n" +
                "\t\ti: \"font icon-shouyefill\",\n" +
                "\t\tself: true,\n" +
                "\t\tc: [{\n" +
                "\t\t\tk: 0,\n" +
                "\t\t\tv: \"个人首页\",\n" +
                "\t\t\ti: \"font icon-shouyefill\",\n" +
                "\t\t\tu: \"index-index\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"业务管理\",\n" +
                "\t\ti: \"font icon-kexueyanjiuheshiyankaifa\",\n" +
                "\t\tp: \"selectInsOrderParameter selectInsOrderPlanList pageInsReport costStatistics selectWarehouse\",\n" +
                "\t\tc: [\n" +
                "      {\n" +
                "        v: \"原材料检验下单\",\n" +
                "        i: \"font icon-erjidaohang\",\n" +
                "        u: \"b1-material-inspection-order\",\n" +
                "        p: \"selectInsOrderParameter\"\n" +
                "      },\n" +
                "      {\n" +
                "\t\t\tv: \"检验下单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-inspection-order\",\n" +
                "\t\t\tp: \"selectInsOrderParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"检验任务\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-inspect-order-plan\",\n" +
                "\t\t\tp: \"selectInsOrderPlanList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"报告编制\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-report-preparation\",\n" +
                "\t\t\tp: \"pageInsReport\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"费用统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-expenses\",\n" +
                "\t\t\tp: \"costStatistics\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"样品管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-sample\",\n" +
                "\t\t\tp: \"selectWarehouse\"\n" +
                "\t\t},{\n" +
                "\t\t\tv: \"不合格管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-unpass\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}\n" +
                "\t]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"标准集\",\n" +
                "\t\ti: \"font icon-biaozhunji\",\n" +
                "\t\tp: \"selectStandardTreeList selectStandardTemplatePageList\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"标准库\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b2-standard\",\n" +
                "\t\t\tp: \"selectStandardTreeList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"原始记录模板\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b2-standard-template\",\n" +
                "\t\t\tp: \"selectStandardTemplatePageList\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"绩效管理\",\n" +
                "\t\ti: \"font icon-jixiaoguanli\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"工时管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b3-work-time-management\",\n" +
                "\t\t\tp: \"selectAuxiliaryWorkingHours\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员考勤\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员考评\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b3-personnel-evaluation\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员考核\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"技能等级\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"工资结算\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"班次\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b3-classes\",\n" +
                "\t\t\tp: \"performanceShiftPage performanceShiftPageYear\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"统计图表\",\n" +
                "\t\ti: \"font icon-tongjitubiao\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"实验室要素\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"每日业务统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b4-daily-business-statistics\",\n" +
                "\t\t\tp: \"businessStatisticsByDay\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"检测项目统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b4-inspection-item-statistics\",\n" +
                "\t\t\tp: \"testProductByDay\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"样品缺陷指数\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b4-sample-defects\",\n" +
                "\t\t\tp: \"selectSampleDefects\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"耗材统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员工作报表\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"电子看板\",\n" +
                "\t\ti: \"font icon-dianzikanban-fan\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"客户接待\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"任务展示\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备状态及饱和度\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"系统功能\",\n" +
                "\t\ti: \"el-icon-s-tools\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"数据字典\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"enums\",\n" +
                "\t\t\tp: \"selectEnumList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"角色管理\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"role-manage\",\n" +
                "\t\t\tp: \"selectRoleLists\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"用户管理\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"person-manage\",\n" +
                "\t\t\tp: \"selectUserList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"客户管理\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"custom_manage\",\n" +
                "\t\t\tp: \"selectCustomPageList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"系统日志\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"system-log\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"消息详情\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"notice-detail\",\n" +
                "\t\t\tp: \"abcd\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"4 通用要求\",\n" +
                "\t\ti: \"font icon-tongyongyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\t\tv: \"通用要求\",\n" +
                "\t\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\t\tu: \"\",\n" +
                "\t\t\t\tg: \"4 通用要求\",\n" +
                "\t\t\t\tp: \"\"\n" +
                "\t\t\t},\n" +
                "\t\t\t{\n" +
                "\t\t\t\tv: \"公正性\",\n" +
                "\t\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\t\tu: \"\",\n" +
                "\t\t\t\tg: \"4.1 公正性\",\n" +
                "\t\t\t\tp: \"\"\n" +
                "\t\t\t},\n" +
                "\t\t\t{\n" +
                "\t\t\t\tv: \"保密性\",\n" +
                "\t\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\t\tu: \"\",\n" +
                "\t\t\t\tg: \"4.2 保密性\",\n" +
                "\t\t\t\tp: \"\"\n" +
                "\t\t\t}\n" +
                "\t\t]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"5 结构要求\",\n" +
                "\t\ti: \"font icon-jiegouyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"实验室的法律地位\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"A实验室的法律地位\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"全权负责的管理层\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"B全权负责的管理层\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"实验室资质\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a5-laboratory-qualifications\",\n" +
                "\t\t\tg: \"C能力范围和资质\",\n" +
                "\t\t\tp: \"getCertificationDetail\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"能力范围\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a5-capacity-scope\",\n" +
                "\t\t\tg: \"C能力范围和资质\",\n" +
                "\t\t\tp: \"selectItemParameterList selectTestObjectList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"场所或设施\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a5-laboratory-management\",\n" +
                "\t\t\tg: \"D场所或设施\",\n" +
                "\t\t\tp: \"selectItemParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"组织相关文件\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"E组织相关文件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员岗位任职\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"F人员岗位任职\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"沟通和宣贯\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"G沟通和宣贯\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t}, {\n" +
                "\t\tv: \"6 资源要求\",\n" +
                "\t\ti: \"font icon-ziyuanyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"总则\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.1 总则\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员总览\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-personnel-overview\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"selectPersonnelOverview\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员明细\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-personnel-detail\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"selectDepartmentLim\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员培训\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员监督\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"岗位职责\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员基本信息\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"工作履历\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"奖惩记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"培训记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"监督记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"任职授权记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员能力监控记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"沟通记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 人员\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"外来人员管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-external-personnel-management\",\n" +
                "\t\t\tg: \"6.3 设施和环境条件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"实验室设施场所信息\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 设施和环境条件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设施和环境条件要求\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 设施和环境条件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"环境条件引用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 设施和环境条件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"安全区代表检查\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 设施和环境条件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"安全内务\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 设施和环境条件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"废物处理交接记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-waste-handover\",\n" +
                "\t\t\tg: \"6.3 设施和环境条件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备总览\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-device-overview\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"selectDeviceParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备工具明细\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-device-management\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"selectDeviceParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"资源预定\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"作业指导书\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备运行总览\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备档案\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备验收\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备校准\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备核查\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备维护\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备借用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备故障\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"使用记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备停用/启用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 设备\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"量值溯源计划\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.5 计量溯源性\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准物质清单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-standard-material-list\",\n" +
                "\t\t\tg: \"6.5 计量溯源性\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准物质验收\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.5 计量溯源性\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准物质领用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-standard-material-requisition\",\n" +
                "\t\t\tg: \"6.5 计量溯源性\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"过期标样处置\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.5 计量溯源性\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"服务和供应品采购\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.6 外部提供的产品和服务\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t},{\n" +
                "\t\t\tv: \"供应商管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.6 外部提供的产品和服务\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"7 过程要求\",\n" +
                "\t\ti: \"font icon-guochengyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"检验委托单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.1 要求、标书和合同评审\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"合同评审\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.1 要求、标书和合同评审\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"实验室的检测能力档案\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a7-standard-method\",\n" +
                "\t\t\tg: \"7.2 方法的选择、验证和确认\",\n" +
                "\t\t\tp: \"selectStandardMethodList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准查新\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.2 方法的选择、验证和确认\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准方法的变更\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.2 方法的选择、验证和确认\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"方法验证\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.2 方法的选择、验证和确认\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"抽样\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.3 抽样\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"检测或校准物品的处置\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.4 检测或校准物品的处置\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"技术记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.5 技术记录\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"测量不确定度的评定\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.6 测量不确定度的评定\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"确保结果有效性\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.7 确保结果有效性\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"报告结果\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.8 报告结果\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"投诉详情\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.9 投诉\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"投诉情况汇总表\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.9 投诉\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"不符合项\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.10 不符合工作\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"不符合项的分布\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.10 不符合工作\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"数据控制和信息管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.11 数据控制和信息管理\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"8 体系管理要求\",\n" +
                "\t\ti: \"font icon-guanlitixiyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"方式\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.1 方式\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"管理体系文件\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.2 管理体系文件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件清单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 管理体系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件受控\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 管理体系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件发放回收\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 管理体系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件变更\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 管理体系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件作废\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 管理体系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"记录的控制\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.4 记录的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"应对风险和机遇的措施\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.5 应对风险和机遇的措施\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"客户基本信息管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.6 改进\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"客户满意度\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.6 改进\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"纠正措施\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.7 纠正措施\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"内审管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.8 内审管理\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"管理评审\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.9 管理评审\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t}\n" +
                "]";
        List<ADto> aDtos = JSONArray.parseArray(menu, ADto.class);
        List<BDto> bDtos = aDtos.get(9).getC();
        for (String s : name) {
            BDto bDto = new BDto();
            bDto.setV(s);
            bDto.setI("font icon-erjidaohang");
            bDto.setU("a6-device-overview");
            bDto.setG("6.4 设备");
            bDto.setP("selectDeviceParameter");
            bDtos.add(bDto);
        }
        for (String s : collect) {
            BDto bDto = new BDto();
            bDto.setV(s);
            bDto.setI("font icon-erjidaohang");
            bDto.setU("a6-personnel-overview");
            bDto.setG("6.2 人员");
            bDto.setP("selectPersonnelOverview");
            bDtos.add(bDto);
        }
        return aDtos;
    }
    @Override
    public List<Map<String, Object>> treeDevice(String deviceName) {
        List<Map<String, Object>>  listMap = deviceMapper.treeDevice(deviceName);
       /* Map<String, List<Device>> listMap = devices.stream()
                .collect(Collectors.groupingBy(device ->
                        device.getLargeCategory() != null ? device.getLargeCategory() : "其他"
                ));*/
        return listMap;
    }
    @Override
    public Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request) {
        String ip = DataAcquisition.getIp(request);
        Device device = baseMapper.selectOne(Wrappers.<Device>lambdaQuery()
                .eq(Device::getManagementNumber, managementNumber)
                .eq(Device::getIp, ip));
        if (ObjectUtils.isEmpty(device)) {
            return Result.success(false);
        }
        if (ObjectUtils.isEmpty(device.getFileType()) || ObjectUtils.isEmpty(device.getCollectUrl())) {
            return Result.success(false);
        } else {
            return Result.success(true);
        }
    }
    @Override
    public Object formulaCalculation(Map<String, Object> map, Boolean isAdopt) {
        map.forEach((key, value) -> {
            Map<String, Object> jsonObject = JSONObject.parseObject(JSON.toJSONString(map.get(key)), Map.class);
            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
                String sonKey = entry.getKey();
                Object sonValue = entry.getValue();
                if (!sonKey.equals("frequency")) {
                    Map<String, Object> formulaData = JSONObject.parseObject(JSON.toJSONString(sonValue), Map.class);
                    if (formulaData.containsKey("result") && formulaData.containsKey("isCalculation") &&
                    formulaData.containsKey("formula")) {
                        String formula = formulaData.get("formula").toString();
                            List<Object> resultList = new ArrayList<>();
                            try {
                                resultList = JSONObject.parseArray(JSON.toJSONString(formulaData.get("result")), Object.class);
                            } catch (Exception e) {
                                Object result = formulaData.get("result").toString();
                                resultList.add(result);
                            }
                            ArrayList<Object> list = new ArrayList<>();
                            if (isAdopt) {
                                String result = calculationFormula(resultList, formula);
                                list.add(result);
                            } else {
                                resultList.forEach(i -> {
                                    List<Object> strings = Arrays.asList(i.toString().split(","));
                                    String result = calculationFormula(strings, formula);
                                    list.add(result);
                                });
                            }
                            formulaData.put("isCalculation", false);
                            formulaData.put("result", list);
                    }
                    jsonObject.put(sonKey, formulaData);
                }
            }
            map.put(key, jsonObject);
        });
        return map;
    }
    public String calculationFormula(List<Object> list, String formula) {
            //首先将list转换为bigdecmic
            List<BigDecimal> bigDecimalList = list.stream()
                    .map(obj -> {
                        return new BigDecimal((obj).toString());
                    }).collect(Collectors.toList());
            System.out.println(bigDecimalList);
            //将中文的(转换英文的())
            formula = formula.replace("(", "(")
                    .replace(")", ")")
                    .replace(",", ",");
            //然后提取公式
            String strs = formula.substring(0, formula.indexOf("("));
            String upperStr = strs.toUpperCase();
            if (upperStr.matches(".*\\d.*")) {
                upperStr = "";
            }
            System.out.println(upperStr);
            //然后获取最外面括号里面的值,再根据","分割
            int start = formula.indexOf("(");
            int end = -1;
            int a = 0;
            for (int i = start; i < formula.length(); i++) {
                char c = formula.charAt(i);
                if (c == '(') {
                    a++;
                } else if (c == ')') {
                    a--;
                    if (a == 0) {
                        end = i;
                    }
                }
            }
            if (start == -1 || end == -1) {
                throw new ErrorException("公式括号不匹配: " + formula);
            }
            String argumentsStr = formula.substring(start + 1, end);
            List<String> arguments = new ArrayList<>();
            int bracketCount = 0;
            StringBuilder currentArgument = new StringBuilder();
            for (char c : argumentsStr.toCharArray()) {
                if (c == ',' && bracketCount == 0) {
                    arguments.add(currentArgument.toString());
                    currentArgument.setLength(0);
                } else {
                    if (c == '(') bracketCount++;
                    if (c == ')') bracketCount--;
                    currentArgument.append(c);
                }
            }
            arguments.add(currentArgument.toString());
            String[] bracketStrs = arguments.toArray(new String[0]);
            List<BigDecimal> results = new ArrayList<>();
            for (String expr : bracketStrs) {
                System.out.println("替换前" + expr);
                Pattern pattern = Pattern.compile("([A-Z])(\\d+)");
                Matcher matcher = pattern.matcher(expr);
                StringBuffer sb = new StringBuffer();
                while (matcher.find()) {
                    String letter = matcher.group(1);
                    int index = Integer.parseInt(matcher.group(2)) - 1; // 将1-based转为0-based
                    if (index < bigDecimalList.size()) {
                        matcher.appendReplacement(sb, bigDecimalList.get(index).toString());
                    } else {
                        throw new RuntimeException("公式中的下标 " + index + " 超出范围");
                    }
                }
                matcher.appendTail(sb);
                System.out.println("替换后" + sb.toString());
                // 计算表达式
                ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
                try {
                    Object result = engine.eval(sb.toString());
                    results.add(new BigDecimal(result.toString()));
                } catch (Exception e) {
                    throw new IllegalArgumentException("无法计算公式: " + sb, e);
                }
            }
            // 根据函数名称进行相应计算
            BigDecimal finalResult;
            if (upperStr.equals("") || upperStr == null) {
                finalResult = results.get(0);
            } else {
                switch (upperStr) {
                    case "MAX":
                        finalResult = results.stream().max(BigDecimal::compareTo)
                                .orElseThrow(() -> new IllegalArgumentException("无法计算MAX值"));
                        break;
                    case "MIN":
                        finalResult = results.stream().min(BigDecimal::compareTo)
                                .orElseThrow(() -> new IllegalArgumentException("无法计算MIN值"));
                        break;
                    case "SUM":
                        finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
                        break;
                    case "ABS":
                        finalResult = results.stream().map(BigDecimal::abs).reduce(BigDecimal.ZERO, BigDecimal::add);
                        break;
                    case "AVERAGE":
                        finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::divide)
                                .divide(BigDecimal.valueOf(results.size()), 2, BigDecimal.ROUND_HALF_UP);
                        break;
                    case "MEDIAN":
                        int size = results.size();
                        if (size % 2 == 1) {
                            finalResult = results.get(size / 2);
                        } else {
                            BigDecimal sum = results.get(size / 2 - 1).add(results.get(size / 2));
                            finalResult = sum.divide(BigDecimal.valueOf(2), 2, BigDecimal.ROUND_HALF_UP);
                        }
                        break;
                    default:
                        throw new UnsupportedOperationException("暂不支持函数: " + upperStr);
                }
            }
            System.out.println(results);
            System.out.println("计算结果: " + finalResult);
            return finalResult.toString();
            // 否则:没有公式代表不需要计算,直接提取List里面的数据
    }
}