yuxc
2023-12-04 d334ce7945bf6a1243927c3b778d14dd493e9918
1、增加批量修改excel导入功能。
2、增加批量修改excel下载功能。
已修改3个文件
444 ■■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -90,6 +90,72 @@
     * @param response 响应对象
     * @throws IOException 抛出异常
     */
    @GetMapping("/downloadExcelBatchEdit")
    @VciBusinessLog(operateName = "下载批量申请编码的导入模板")
    public void downloadImportExcelBatchEdit(String codeClassifyOid, HttpServletResponse response) throws IOException{
        String excelName = mdmIOService.downloadImportExcelBatchEdit(codeClassifyOid);
        try {
            ControllerUtil.writeFileToResponse(response,excelName);
        } catch (Throwable e) {
            //如果出错,把错误信息写到text
            String msg = LangBaseUtil.getErrorMsg(e);
            if(StringUtils.isBlank(msg)){
                msg = "未知错误";
            }
            ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
        }
    }
    /**
     * 导入批量编辑数据
     * @param codeClassifyOid 分类的主键
     * @param classifyAttr 分类路径使用的属性
     * @param file 文件的内容
     */
    @VciBusinessLog(operateName = "导入批量编辑数据")
    @PostMapping("/batchImportEdit")
    public R batchImportEdit(String codeClassifyOid, String classifyAttr,MultipartFile file,HttpServletResponse response) throws Throwable {
        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + file.getOriginalFilename();
        File file1 = new File(excelFileName);
        try {
            file.transferTo(new File(excelFileName));
            CodeImProtRusultVO codeImProtRusultVO =mdmIOService.batchImportEdit(codeClassifyOid, classifyAttr,file1);
            if(StringUtils.isNotBlank(codeImProtRusultVO.getFilePath())||StringUtils.isNotBlank(codeImProtRusultVO.getRedisUuid())){
                //放到map里
                R result = R.fail("导入失败");
                if(StringUtils.isNotBlank(codeImProtRusultVO.getFilePath())) {
                    String filedUUid = ControllerUtil.putErrorFile(codeImProtRusultVO.getFilePath());
                    codeImProtRusultVO.setFileOid(filedUUid);
                }
                result.setData(codeImProtRusultVO);
                return result;
            }else {
                return R.success("操作成功!");
            }
        }catch (Throwable e) {
            logger.error("导入错误",e);
            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "错误.txt";
            LocalFileUtil.writeContentToFile(LangBaseUtil.getErrorMsg(e),errorFile);
            String uuid=ControllerUtil.putErrorFile(errorFile);
            CodeImProtRusultVO codeImProtRusultVO =new CodeImProtRusultVO();
            codeImProtRusultVO.setRedisUuid("");
            codeImProtRusultVO.setFileOid(uuid);
            codeImProtRusultVO.setFilePath(errorFile);
            R r = R.fail("导入失败");
            r.setData(codeImProtRusultVO);
            return r;
        }finally {
            file1.delete();
        }
    }
    /**
     * 下载批量申请的导入模板
     * @param codeClassifyOid 分类的主键
     * @param response 响应对象
     * @throws IOException 抛出异常
     */
    @GetMapping("/downloadTopImportExcel")
    @VciBusinessLog(operateName = "下载批量申请编码的导入模板")
    public void downloadTopImportExcel(String codeClassifyOid,HttpServletResponse response) throws IOException{
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java
@@ -29,6 +29,13 @@
    String createImportExcel(String codeClassifyOid,boolean isHistory);
    /**
     * 生成批量修改导入的文件
     * @param codeClassifyOid 分类的主键
     * @return excel的文件地址
     */
    String downloadImportExcelBatchEdit(String codeClassifyOid);
    /**
     * 生成导入的文件
     * @param codeClassifyOid 分类的主键
     * @return excel的文件地址
@@ -61,6 +68,15 @@
     */
    CodeImProtRusultVO batchImportHistoryData(String codeClassifyOid,String classifyAttr, File file) throws Throwable;
    /**
     * 导入批量编辑数据
     * @param codeClassifyOid 分类的主键
     * @param classifyAttr 分类路径使用的属性
     * @param file excel文件的信息
     * @return 有错误信息的excel
     */
    CodeImProtRusultVO batchImportEdit(String codeClassifyOid,String classifyAttr, File file) throws Throwable;
    /***
     * 从redis缓存里获取到导入的数据
     * @param codeClassifyOid
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.protobuf.ServiceException;
import com.vci.ubcs.code.applyjtcodeservice.entity.DockingPreAttrMapping;
@@ -50,6 +51,7 @@
import com.vci.ubcs.starter.web.util.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import oracle.sql.TIMESTAMP;
import org.apache.commons.collections4.map.HashedMap;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -58,6 +60,7 @@
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Workbook;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
@@ -68,10 +71,18 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -485,6 +496,122 @@
        return excelName;
    }
    /**
     * 生成批量修改导入的文件
     *
     * @param codeClassifyOid 分类的主键
     * @return excel的文件地址
     */
    @Override
    public String downloadImportExcelBatchEdit(String codeClassifyOid) {
        List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>();
        VciBaseUtil.alertNotNull("导出模板","导出的配置",codeClassifyOid,"主题库分类的主键");
        CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
        templateVOList= templateService.childTemplates(codeClassifyOid);
        WriteExcelOption eo = new WriteExcelOption();
        eo.setAppend(true);
        //增加模板的信息导入
        LinkedList<WriteExcelData> tempEDList = new LinkedList<>();
        tempEDList.add(new WriteExcelData(0,0,"编号"));
        for(int j=0;j<templateVOList.size();j++){
            CodeClassifyTemplateVO  templateVO=templateVOList.get(j);
            CodeClassifyTemplateVO codeClassifyTemplateVO = new CodeClassifyTemplateVO();
            BeanUtils.copyProperties(templateVO,codeClassifyTemplateVO);
            //组合格式的不导入,
            // 枚举的提供序列的选择
            //时间全部统一为yyyy-MM-dd HH:mm:ss
            //参照的自行输入名称
            //分类注入的不用,都是导入后自动处理的
            //编码,状态等字段不导入
            List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList=codeClassifyTemplateVO.getAttributes();
            if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) {
                if (CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) {
                    throw new VciBaseException("模板没有配置属性");
                }
            }
            List<CodeClassifyTemplateAttrVO> templateAttrVOS = codeClassifyTemplateAttrVOList.stream().filter(s ->
                !DEFAULT_ATTR_LIST.contains(s.getId())
                    && StringUtils.isBlank(s.getComponentRule())
                    && StringUtils.isBlank(s.getClassifyInvokeAttr())
                    && (VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
            ).collect(Collectors.toList());
            if (CollectionUtils.isEmpty(templateAttrVOS)) {
                throw new VciBaseException("模板没有配置任何【表单显示】为【是】的属性");
            }
//            List<CodeClassifyTemplateAttrVO> idAttrVOList = codeClassifyTemplateVO.getAttributes().stream().filter(s -> s.getId().equalsIgnoreCase(CODE_FIELD)).collect(Collectors.toList());
            LinkedList<WriteExcelData> excelDataList = new LinkedList<>();
            Workbook workbook = new HSSFWorkbook();
//            if(isHistory){
            excelDataList.add(new WriteExcelData(0,0,"编码(id)",""));
//                excelDataList.add(new WriteExcelData(0,1,"码段宽度",""));
//            excelDataList.add(new WriteExcelData(0,1,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"企业编码",idAttrVOList.get(0).getId()));
//            }
            for (int i = 0; i < templateAttrVOS.size(); i++) {
                CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i);
                Object text = attrVO.getName();
                text = exportKeyAndRequired(workbook,attrVO,text);
                int colIndex = 1 + i;
                WriteExcelData excelData = new WriteExcelData(0, colIndex, text,attrVO.getId());
                if(StringUtils.isNotBlank(attrVO.getCodeDateFormat())
                    || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())
                    || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributeDataType())
                    ||VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())){
                    excelData.setDateFormat(VciDateUtil.DateTimeFormat);
                }
                if(text instanceof RichTextString){
                    excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
                }
                excelDataList.add(excelData);
                if(StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumId())){
                    //添加数据有效性
                    List<String> enumValueList = new ArrayList<>();
                    enumValueList.add("");
                    List<KeyValue> valueList = engineService.listComboboxItems(attrVO);
                    if(!CollectionUtils.isEmpty(valueList)){
                        valueList.stream().forEach(kv->{
                            enumValueList.add(kv.getValue());
                        });
                    }
                    //默认加1万条
                    WriteExcelData ed = new WriteExcelData(1,colIndex,"");
                    ed.setRowTo(100);
                    ed.setColTo(colIndex);
                    ed.setValidation(true);
                    ed.setValidationDataList(enumValueList);
                    ed.setValidationErrorMsg("请在序列中选择正确的值");
                    excelDataList.add(ed);
                }
                if(VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributeDataType())){
                    List<String> booleanList = new ArrayList<>();
                    booleanList.add("是");
                    booleanList.add("否");
                    //默认加1万条
                    WriteExcelData ed = new WriteExcelData(1,colIndex,"");
                    ed.setRowTo(100);
                    ed.setColTo(colIndex);
                    ed.setValidation(true);
                    ed.setValidationDataList(booleanList);
                    ed.setValidationErrorMsg("请在序列中选择正确的值");
                    excelDataList.add(ed);
                }
            }
            eo.addSheetDataList(j+templateVO.getName(),excelDataList);
            tempEDList.add(new WriteExcelData(j+1,0,templateVO.getOid()));
            tempEDList.add(new WriteExcelData(j+1,1,templateVO.getId()));
            tempEDList.add(new WriteExcelData(j+1,2,templateVO.getName()));
        }
        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + ("_属性批量修改模板.xls");
        eo.addSheetDataList(templateVOList.size()+"模板信息【请勿删除或移动】",tempEDList);
        ExcelUtil.writeDataToFile(excelName,eo);
        return excelName;
    }
    /**
     * 获取码段宽度
     * @param codeClassifyOid
@@ -1147,7 +1274,142 @@
            throw e;
        }
    }
    /**
     * 导入批量编辑数据
     *
     * @param codeClassifyOid 分类的主键
     * @param classifyAttr 分类路径使用的属性
     * @param file            excel文件的信息
     * @return 有错误信息的excel
     */
    @Override
    public CodeImProtRusultVO batchImportEdit(String codeClassifyOid, String classifyAttr,File file) throws  Throwable{
        VciBaseUtil.alertNotNull(codeClassifyOid,"分类的主键");
        ReadExcelOption reo = new ReadExcelOption();
        reo.setReadAllSheet(true);
        List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
        if (sheetDataSetList.size() > LIMIT + 1) {
            throw new VciBaseException("为了保证系统的稳定性,请一次不要导入超过1万条的数据");
        }
        boolean isExport=false;
        Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>();
        //相似项目查重
        for(int i=0;i<sheetDataSetList.size()-1;i++) {
            if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(i).getRowData())
                || sheetDataSetList.get(i).getRowData().size() < 1) {
                continue;
            }
            // 单次导入数量限制
            if(sheetDataSetList.get(i).getRowData().size() > IMPORT_DATA_LIMIT){
                throw new ServiceException("为了保证系统的稳定性,请一次不要导入超过"+IMPORT_DATA_LIMIT+"条的数据");
            }
            //查询分类和模板
            CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
            //先找到每一行的标题,然后根据标题来获取对应的属性
            SheetDataSet dataSet = sheetDataSetList.get(i);
            List<SheetRowData> rowDataList = dataSet.getRowData();
            //找第一行,为了找标题
            CodeClassifyTemplateVO templateVO ;
            //都转换完了。需要批量检查
            //找所有的分类路径,需要校验路径是否正确,是否都在当前的分类的下级
            List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true);
            Map<String/**路径**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t));
            List<String> titleRowData = dataSet.getColName();
            Map<String, String> errorMap = new ConcurrentHashMap<>();
            pathMap.put("#current#",classifyFullInfo.getCurrentClassifyVO());
            try {
                titleRowData.add("分类路径");
                List<CodeClassifyTemplateVO> templateVOList= checkSamesTemplate(titleRowData,sheetDataSetList,i,pathMap,errorMap);
                titleRowData.remove(titleRowData.size()-1);
                templateVO= templateVOList.get(0);
            }catch (Throwable e){
                throw  new VciBaseException(e.getMessage());
            }
            CodeClassifyTemplateVO finalTemplateVO = templateVO;
            List<SheetRowData> needowDataList = rowDataList.stream().filter(cbo -> {
                String rowIndex = cbo.getRowIndex();
                return !errorMap.containsKey(rowIndex);
            }).collect(Collectors.toList());
            //这里不除去默认的属性
            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes();
            Map<Integer/**列号**/, String/**字段的名称**/> fieldIndexMap = new HashMap<>();
            Map<String/**中文名称**/, String/**英文名称**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId()));
            fieldIndexMap.put(0,"id");
            getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
            //先不用管属性是否都存在,先转换一下数据
            CodeOrderDTO orderDTO = new CodeOrderDTO();
            for (SheetRowData sheetRowData : needowDataList) {
                //查询数据
                Map<String, String> conditionMap = new HashMap<>();
                conditionMap.put("t.id", sheetRowData.getData().get(0));
                conditionMap.put("t.lastv", "1");
                CodeTemplateAttrSqlBO sqlBO = mdmEngineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, new PageHelper(-1));
                //我们使用和业务类型的来查询
                List<Map> cbosB = commonsMapper.selectBySql(sqlBO.getSqlUnPage());
                if(cbosB.size() == 0){
                    throw  new ServiceException("编码:"+ sheetRowData.getData().get(0) + ",未能查询到相关数据。");
                }
                excelToCboEdit(fieldIndexMap, sheetRowData, orderDTO, cbosB.get(0));
                orderDTO.setCopyFromVersion(orderDTO.getOid());
                orderDTO.setOid(null);
                try {
                    mdmEngineService.upSaveCode(orderDTO);
                    List<Map> newCbos = commonsMapper.selectBySql(sqlBO.getSqlUnPage());
                    //对码值表进行处理替换创建数据的oid
                    QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
                    wrapper.eq("CREATECODEOID",orderDTO.getCopyFromVersion());
                    List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper);
                    codeAllCodes.get(0).setCreateCodeOid(newCbos.get(0).get("OID").toString());
                    codeAllCodes.get(0).setLastModifyTime(new Date());
                    codeAllCodes.get(0).setTs(new Date());
                    codeAllCodes.get(0).setLastModifier(AuthUtil.getUser().getUserName());
                    codeAllCodeService.updateBatchById(codeAllCodes);
                } catch (Throwable e) {
                    log.error("批量产生编码的时候出错了", e);
//                thisCbos.stream().forEach(cbo -> {
//                    String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                    errorMap.put(sheetRowData.getRowIndex(), ";系统错误,存储数据的时候出错了:"+e.getMessage());
//                });
                }
            }
            if (errorMap.size() > 0) {
                isExport = true;
            }
            createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO);
        }
        String excelFileName="";
        if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) {
            excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "错误信息.xls";
            WriteExcelOption eo = new WriteExcelOption();
            shetNameMap.forEach((shetName, errorDataList) -> {
                eo.addSheetDataList(shetName, errorDataList);
            });
            try {
                new File(excelFileName).createNewFile();
            } catch (IOException e) {
                throw new VciBaseException(LangBaseUtil.getErrorMsg(e));
            }
            ExcelUtil.writeDataToFile(excelFileName, eo);
        }
        CodeImProtRusultVO codeImProtRusultVO=new CodeImProtRusultVO();
        if(StringUtils.isNotBlank(excelFileName)) {
            codeImProtRusultVO.setFilePath(excelFileName);
            codeImProtRusultVO.setFileOid("");
            saveLogUtil.operateLog("数据批量更改",true, StringUtil.format("错误信息:{}",JSON.toJSONString(shetNameMap)) );
        }else{
            saveLogUtil.operateLog("数据批量更改",false, StringUtil.format("导入成功总数为:{}",
                sheetDataSetList.size()-1));
        }
        return codeImProtRusultVO;
    }
    /*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){
        clientBusinessObjects.stream().forEach(clientBusinessObject -> {
            BaseModel baseModel=new BaseModel();
@@ -3290,6 +3552,106 @@
    }
    /**
     * excel转换为cbo的对象
     * @param fieldIndexMap 字段的位置
     * @param rowDataList excel里的行数据
     * @param orderDTO 整理的数据
     * @param map 数据的列表
     */
    private void excelToCboEdit(Map<Integer,String> fieldIndexMap,SheetRowData rowDataList,
                            CodeOrderDTO orderDTO,
                            Map map){
        rowDataList.getData().forEach((index,value)->{
                String field = fieldIndexMap.get(index);
                if (StringUtils.isBlank(field)) {
                    throw new VciBaseException("第" + (index + 1) + "列的标题在系统中不存在");
                }
                map.put(field,value);
            });
        try {
//            for (Map map : cbos) {
//            Object obj = CodeOrderDTO.class.newInstance();
            BeanInfo beanInfo = Introspector.getBeanInfo(orderDTO.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                Method setter = property.getWriteMethod();
                if (setter != null) {
                    //oracle的时间为TIMESTAMP的,需要进行转换成data,否则将报错
                    if (map.get(property.getName().toUpperCase()) instanceof TIMESTAMP) {
                        LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime();
                        ZoneId zoneId = ZoneId.systemDefault();
                        ZonedDateTime zdt = localDateTime.atZone(zoneId);
                        Date date = Date.from(zdt.toInstant());
                        setter.invoke(orderDTO, date);
                        map.remove(property.getName().toUpperCase());
                    } //oracle的数字为BigDecimal的,需要进行转换成Integer,否则将报错
                    else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
                        && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) {
                        setter.invoke(orderDTO, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue());
                        map.remove(property.getName().toUpperCase());
                    } else if (map.containsKey(property.getName().toUpperCase())) {
                        if(setter.getParameterTypes()[0].getSimpleName().equals("String")){
                            setter.invoke(orderDTO, map.get(property.getName().toUpperCase()) == null ? null:String.valueOf(map.get(property.getName().toUpperCase())));
                        }else{
                            setter.invoke(orderDTO, map.get(property.getName().toUpperCase()));
                        }
                        map.remove(property.getName().toUpperCase());
                    }
                }
            }
            for (Object key : map.keySet()) {
                map.put(key, map.get(key) == null ? null : String.valueOf(map.get(key)));
            }
        } catch (Exception e) {
            throw new VciBaseException("查询失败:" + e.getMessage());
        }
//        Iterator<Map.Entry<String, String>> iterator = cbos.entrySet().iterator();
//
//        Map.Entry<String, String> entry;
//        while (iterator.hasNext()) {
//            entry = iterator.next();
////            if (WebUtil.isDefaultField(entry.getKey())) {
//                Object obj = BaseModel.class.newInstance();
//                BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
//                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
//                for (PropertyDescriptor property : propertyDescriptors) {
//                    Method setter = property.getWriteMethod();
//                    if (setter != null) {
//                        //oracle的时间为TIMESTAMP的,需要进行转换成data,否则将报错
//                        if (map.get(property.getName().toUpperCase()) instanceof TIMESTAMP) {
//                            LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime();
//                            ZoneId zoneId = ZoneId.systemDefault();
//                            ZonedDateTime zdt = localDateTime.atZone(zoneId);
//                            Date date = Date.from(zdt.toInstant());
//                            setter.invoke(obj, date);
//                            map.remove(property.getName().toUpperCase());
//                        } //oracle的数字为BigDecimal的,需要进行转换成Integer,否则将报错
//                        else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
//                            && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) {
//                            setter.invoke(obj, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue());
//                            map.remove(property.getName().toUpperCase());
//                        } else if (map.containsKey(property.getName().toUpperCase())) {
//                            if(setter.getParameterTypes()[0].getSimpleName().equals("String")){
//                                setter.invoke(obj, map.get(property.getName().toUpperCase()) == null ? null:String.valueOf(map.get(property.getName().toUpperCase())));
//                            }else{
//                                setter.invoke(obj, map.get(property.getName().toUpperCase()));
//                            }
//                            map.remove(property.getName().toUpperCase());
//                        }
//                    }
//                }
//                WebUtil.setValueToField(entry.getKey(), orderDTO, entry.getValue());
//                iterator.remove();
////            }
//        }
        orderDTO.setData(map);
    }
    /**
     * 检查校验规则没有通过的内容
     * @param attrVOS 需要校验的属性
     * @param dataList 数据的列表