excel導(dǎo)入

導(dǎo)入
?導(dǎo)入模板格式的保單規(guī)則清單,每個文件最多可導(dǎo)入1000條數(shù)據(jù),超過1000條數(shù)據(jù)糊余,管控提示“最多可提交1000條數(shù)據(jù)泵殴,請分批導(dǎo)入”涮帘;
?如導(dǎo)入文件中的保單號與系統(tǒng)維護清單中現(xiàn)有的保單號重復(fù),更新保單規(guī)則清單中的信息”
?如導(dǎo)入文件不符合模板規(guī)范笑诅,管控提示“請使用正確模板表格導(dǎo)入”调缨;
?如導(dǎo)入文件中的任一字段空白,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行數(shù)據(jù)YYY為空吆你!”(X為導(dǎo)入文件中的行數(shù)弦叶,YYY為空白字段名稱【彈窗提示語中的*需篩除,如:保單號】妇多;)伤哺;
?如導(dǎo)入文件中的保單號不是22字,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行保單號應(yīng)為22個字砌梆!”(X為導(dǎo)入文件中的行數(shù))默责;
?導(dǎo)入文件中的保單號只能由大寫英文字母+數(shù)字組成,否則管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合咸包!”(X為導(dǎo)入文件中的行數(shù))桃序;
?如導(dǎo)入文件中的起保日期格式不是年月日,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行起保日期格式不是年月日(YYYY-MM-DD)烂瘫!”(X為導(dǎo)入文件中的行數(shù))媒熊;
?如導(dǎo)入文件中的終保日期格式不是年月日奇适,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行終保日期格式不是年月日(YYYY-MM-DD)!”(X為導(dǎo)入文件中的行數(shù))芦鳍;
?如導(dǎo)入文件中的起保日期>終保日期嚷往,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行終保日期早于起保日期!”(X為導(dǎo)入文件中的行數(shù))柠衅;
?如導(dǎo)入文件中的單次賠付最大天數(shù)不是非負整數(shù)皮仁,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行單次賠付最大天數(shù)不是非負整數(shù)!”(X為導(dǎo)入文件中的行數(shù))菲宴;
?如導(dǎo)入文件中的賠付最大天數(shù)不是非負整數(shù)贷祈,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行賠付最大天數(shù)不是非負整數(shù)!”(X為導(dǎo)入文件中的行數(shù))喝峦;
?如導(dǎo)入文件中的單次賠付最大天數(shù)>最大賠付天數(shù)势誊,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行單次最大賠付天數(shù)超過最大賠付天數(shù)!”(X為導(dǎo)入文件中的行數(shù))
?如導(dǎo)入文件中的賠付標(biāo)準1(1860周歲)不是非負整數(shù)谣蠢,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行賠付標(biāo)準1(1860周歲)不是非負整數(shù)粟耻!”(X為導(dǎo)入文件中的行數(shù));
?如導(dǎo)入文件中的賠付標(biāo)準2(小于18 或 大于60 周歲)不是非負整數(shù)眉踱,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行賠付標(biāo)準2(小于18 或 大于60 周歲)不是非負整數(shù)挤忙!”(X為導(dǎo)入文件中的行數(shù));
注:
?如導(dǎo)入文件中有多行數(shù)據(jù)不符合管控要求勋锤,則彈出一個管控窗口饭玲,管控提示語分別展示;
?如同一行數(shù)據(jù)多個字段不符合管控要求叁执,則彈出一個管控窗口,管控提示語分別展示矮冬;
?如導(dǎo)入文件中的保單號已在系統(tǒng)維護谈宛,且原保單規(guī)則為有效狀態(tài),則覆蓋原保單規(guī)則胎署;
?如導(dǎo)入文件中的保單號已在系統(tǒng)維護吆录,但原保單規(guī)則為無效狀態(tài),則原保單規(guī)則不變琼牧,新保單規(guī)則和新保單規(guī)則均保存恢筝;

    /**
     * 嘉興保單規(guī)則維護導(dǎo)入
     * @param file
     * @return
     */

    @RequestMapping(value = "/importExcel", method = POST)
    public BaseResponse<Object> importExcel(MultipartFile file,HttpServletRequest request) {
        User user = (User) request.getSession().getAttribute(Constants.SESSION_USER);
        return newNotEawRuleService.importExcel(file,user);
    }
 /**
     * 導(dǎo)入嘉興保單規(guī)則excel
     *
     * @param file
     * @return
     */

    @Override
    public BaseResponse<Object> importExcel(MultipartFile file, User user) {
        String id = null;
        try {

            String originalFilename = file.getOriginalFilename();

            //校驗excel文件格式
            String suffix = originalFilename.substring(file.getOriginalFilename().lastIndexOf(".") + 1);
            if (!StringUtils.equals("xls", suffix)) {
                return new BaseResponse<>(400, "請使用正確模板表格導(dǎo)入");
            }
            //獲取模板標(biāo)題
            List<String> title = generateTitle();
            //獲取表
            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(file.getInputStream());
            HSSFSheet sheet = hssfWorkbook.getSheetAt(0);
            //獲取總行數(shù)
            int totalRowNum = sheet.getLastRowNum() + 1;
            //獲取第一行數(shù)據(jù)
            HSSFRow row = sheet.getRow(0);
            //校驗?zāi)0迨欠褚恢?            for (int i = 0; i < title.size(); i++) {
                HSSFCell cell = row.getCell(i);
                String titleName = title.get(i);
                try {
                    String cellValue = cell.getStringCellValue();
                    if (!StringUtils.equals(titleName, cellValue)) {
                        return new BaseResponse<>(400, "請使用正確模板表格導(dǎo)入");
                    }
                } catch (Exception e) {
                    return new BaseResponse<>(400, "請使用正確模板表格導(dǎo)入");
                }
            }

            if (totalRowNum == 1) {
                return new BaseResponse<>(400, "導(dǎo)入內(nèi)容不應(yīng)為空");
            }

            //校驗條數(shù)
            if (totalRowNum > 1001) {
                return new BaseResponse<>(400, "導(dǎo)入數(shù)量不能超過1000條,請修改后重新導(dǎo)入");
            }
            List<NcEawPolicyRule> ncEawPolicyRuleList = new ArrayList<>();
            return readExcel(ncEawPolicyRuleList, sheet, totalRowNum, user);

        } catch (Exception e) {

            e.printStackTrace();
            CiapLog.info("嘉興保單規(guī)則導(dǎo)入異常:" + e.getMessage());
            return new BaseResponse<>(500, "嘉興保單規(guī)則導(dǎo)入接口異常巨坊!");
        }
    }
/**
     * 讀取excel數(shù)據(jù)
     *
     * @param sheet       表
     * @param totalRowNum 總行數(shù)
     */
    private BaseResponse<Object> readExcel(List<NcEawPolicyRule> ncEawPolicyRuleList, HSSFSheet sheet, int totalRowNum, User user) throws Exception {
        //獲取第一行數(shù)據(jù)
        HSSFRow row = sheet.getRow(0);
        List<String> msgList = new ArrayList<>();
        for (int i = 1; i < totalRowNum; i++) {
            int rowNum = i+1;
            HSSFRow hssfRow = sheet.getRow(i);
            NcEawPolicyRule ncEawPolicyRulelVo = new NcEawPolicyRule();
            for (int j = 0; j < row.getLastCellNum(); j++) {
                //獲取當(dāng)前列的標(biāo)題
                HSSFCell cellTitle = row.getCell(j);
                String title = cellTitle.getStringCellValue();
                //獲取當(dāng)前行當(dāng)前列的元素
                HSSFCell cell = hssfRow.getCell(j);
                if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                    switch (j) {
                        case 0:
                            //獲取保單號
                            String policyNo = getValue(cell);
                            //校驗保單號字符數(shù)
                            if (policyNo.length() != 22) {
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行保單號應(yīng)為22個字撬槽!");
                                // msgMap.put("message", "導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + i + "行保單號應(yīng)為22個字!<br>");
                                msgList.add("第" + rowNum + "行保單號應(yīng)為22個字趾撵!");
                            } else if (!policyNo.matches(BAO_DAN_HAO2)) {
                                ////保單號校驗 匹配數(shù)字和字母
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + i + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合侄柔!");
                                msgList.add("第" + rowNum + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合!");
                            } else if (policyNo.matches(VIN1)) {
                                //正則匹配純英文
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + i + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合!");
                                msgList.add("第" + rowNum + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合暂题!");
                            } else {
                                ncEawPolicyRulelVo.setPolicyNo(policyNo);
                            }
                            break;
                        case 1:
                            //獲取起保日期
                            String policyStartDate = getValue(cell);
                            //校驗起保日期是否合法
                            if (!policyStartDate.matches(regex)) {
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),起保日期格式不是年月日(YYYY-MM-DD)移剪!");
                                msgList.add("第" + rowNum + "行數(shù)據(jù),起保日期格式不是年月日(YYYY-MM-DD)!");
                            } else {
                                ncEawPolicyRulelVo.setPolicyStartDate(policyStartDate);
                            }
                            break;
                        case 2:
                            //獲取終保日期
                            String policyEndDate = getValue(cell);
                            //校驗終保日期是否合法
                            if (!policyEndDate.matches(regex)) {
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),終保日期格式不是年月日(YYYY-MM-DD)薪者!");
                                msgList.add("第" + rowNum + "行數(shù)據(jù),終保日期格式不是年月日(YYYY-MM-DD)纵苛!");
                            } else {
                                ncEawPolicyRulelVo.setPolicyEndDate(policyEndDate);
                            }
                            break;
                        case 3:
                            //獲取最大賠付天數(shù)
                            String maxPayDate = getValue(cell);
                            if (!maxPayDate.matches(MNS)) {
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),最大賠付天數(shù)格式不是數(shù)字!");
                                msgList.add("第" + rowNum + "行數(shù)據(jù),最大賠付天數(shù)格式不是非負整數(shù)言津!");
                            } else {
                                ncEawPolicyRulelVo.setMaxPayDate(maxPayDate);
                            }
                            break;
                        case 4:
                            //獲取單次賠付最大天數(shù)
                            String maxPayDateOnce = getValue(cell);
                            if (!maxPayDateOnce.matches(MNS)) {
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)格式不是數(shù)字赶站!");
                                msgList.add("第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)格式不是非負整數(shù)!");
                            } else {
                                ncEawPolicyRulelVo.setMaxPayDateOnce(maxPayDateOnce);
                            }
                            break;
                        case 5:
                            //獲取賠付標(biāo)準1(18-60周歲)
                            String payStandard1 = getValue(cell);
                            if (!payStandard1.matches(MNS)) {
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準1格式不是數(shù)字纺念!");
                                msgList.add("第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準1格式不是非負整數(shù)贝椿!");
                            } else {
                                ncEawPolicyRulelVo.setPayStandard1(payStandard1);
                            }
                            break;
                        case 6:
                            //賠付標(biāo)準2(小于18或大于60周歲)
                            String payStandard2 = getValue(cell);
                            if (!payStandard2.matches(MNS)) {
                                CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準2格式不是數(shù)字!");
                                msgList.add("第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準2格式不是非負整數(shù)陷谱!");
                            } else {
                                ncEawPolicyRulelVo.setPayStandard2(payStandard2);
                            }
                            break;
                    }
                } else {
                    CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù)," + title + "為空烙博!");
                    msgList.add("第" + rowNum + "行數(shù)據(jù)," + title + "為空!");
                }
            }
            //起保日期
            String policyStartDate = ncEawPolicyRulelVo.getPolicyStartDate();
            //終保日期
            String policyEndDate = ncEawPolicyRulelVo.getPolicyEndDate();
            //校驗終保日期是否小于起保日期
            if (StringUtils.isNotBlank(policyStartDate) && StringUtils.isNotBlank(policyEndDate)) {
                SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
                Date beginDate = sd.parse(policyStartDate);
                Date endDate = sd.parse(policyEndDate);
                if (endDate.before(beginDate)) {
                    CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),終保日期早于起保日期烟逊!");
                    msgList.add("第" + rowNum + "行數(shù)據(jù),終保日期早于起保日期渣窜!");
                }
            }
            //校驗單次賠付天數(shù)是否大于最大賠付天數(shù)
            //最大賠付天數(shù)
            String maxPayDate = ncEawPolicyRulelVo.getMaxPayDate();
            //單次賠付最大天數(shù)
            String maxPayDateOnce = ncEawPolicyRulelVo.getMaxPayDateOnce();
            if (StringUtils.isNotBlank(maxPayDate) && StringUtils.isNotBlank(maxPayDateOnce)) {
                if (Integer.parseInt(maxPayDateOnce) > Integer.parseInt(maxPayDate)) {
                    CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)大于最大賠付天數(shù)!");
                    msgList.add("第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)不能超過最大賠付天數(shù)宪躯!");
                }
            }
            if (msgList.isEmpty()) {
                //如果保單號重復(fù)更新數(shù)據(jù)
                String policyNo = ncEawPolicyRulelVo.getPolicyNo();
                if (StringUtils.isNotBlank(policyNo)) {
                    String userCode = null;
                    String userName = null;
                    if(user!=null){
                        userCode = user.getUserCode();
                        userName = user.getUserName();
                    }
                    //如果保單號已存在
                    NcEawPolicyRule getRule = ncEawPolicyRuleMapper.selectBypolicyNo(policyNo);
                    if (getRule != null) {
                        getRule.setUpdateUserCode(userCode);
                        getRule.setUpdateUserName(userName);
                        int flag = ncEawPolicyRuleMapper.updateBypolicyNo(getRule);
                        if (flag == 1) {
                            CiapLog.info("保單號:" + policyNo + "更新成功");
                        }
                    } else {
                        ncEawPolicyRulelVo.setInsertUserCode(userCode);
                        ncEawPolicyRulelVo.setInsertUserName(userName);
                        ncEawPolicyRuleList.add(ncEawPolicyRulelVo);
                    }
                }
            }
        }
        if (msgList.isEmpty() ) {
            if(ncEawPolicyRuleList.size()>0){
                ncEawPolicyRuleMapper.batchInsert(ncEawPolicyRuleList);
            }
            CiapLog.info("導(dǎo)入成功");
            return new BaseResponse(200, "導(dǎo)入成功");
        }
        Map result = new HashMap();
        result.put("message", msgList);
        return new BaseResponse(200, "導(dǎo)入數(shù)據(jù)格式有誤", result);
    }
 /**
     * 獲取表格數(shù)據(jù)
     *
     * @param cell 單元格
     * @return 返回數(shù)據(jù)
     */
    public static String getValue(Cell cell) {
        String result = null;
        switch (cell.getCellType()) {
            case 0:
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    result = dateFormat.format(cell.getDateCellValue());
                } else {
                    NumberFormat nf = NumberFormat.getInstance();
                    nf.setGroupingUsed(false);
                    nf.setMaximumFractionDigits(100);
                    result = nf.format(cell.getNumericCellValue());
                }
                break;
            case 1:
                result = cell.getStringCellValue();
                break;
            case 2:
                result = cell.getNumericCellValue() + "";
                break;
            case 3:
                result = "";
                break;
            case 4:
                result = String.valueOf(cell.getBooleanCellValue());
                break;
            case 5:
                result = String.valueOf(cell.getErrorCellValue());
                break;
        }
        return result;
    }
 /**
     * 生成模板標(biāo)題
     *
     * @return
     */
    private List<String> generateTitle() {
        List<String> list = new ArrayList<>();
        list.add("保單號*");
        list.add("起保日期*");
        list.add("終保日期*");
        list.add("最大賠付天數(shù)*");
        list.add("單次賠付最大天數(shù)*");
        list.add("賠付標(biāo)準1(18-60周歲)*");
        list.add("賠付標(biāo)準2(小于18或大于60周歲)*");
        return list;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乔宿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子访雪,更是在濱河造成了極大的恐慌详瑞,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臣缀,死亡現(xiàn)場離奇詭異坝橡,居然都是意外死亡,警方通過查閱死者的電腦和手機精置,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門计寇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脂倦,你說我怎么就攤上這事番宁。” “怎么了赖阻?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵蝶押,是天一觀的道長。 經(jīng)常有香客問我政供,道長播聪,這世上最難降的妖魔是什么朽基? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮离陶,結(jié)果婚禮上稼虎,老公的妹妹穿的比我還像新娘。我一直安慰自己招刨,他們只是感情好霎俩,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沉眶,像睡著了一般打却。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谎倔,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天柳击,我揣著相機與錄音,去河邊找鬼片习。 笑死捌肴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的藕咏。 我是一名探鬼主播状知,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孽查!你這毒婦竟也來了饥悴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤盲再,失蹤者是張志新(化名)和其女友劉穎西设,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洲胖,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡济榨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绿映。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡腐晾,死狀恐怖叉弦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情藻糖,我是刑警寧澤淹冰,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站巨柒,受9級特大地震影響樱拴,放射性物質(zhì)發(fā)生泄漏柠衍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一晶乔、第九天 我趴在偏房一處隱蔽的房頂上張望珍坊。 院中可真熱鬧,春花似錦正罢、人聲如沸阵漏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽履怯。三九已至,卻和暖如春裆泳,著一層夾襖步出監(jiān)牢的瞬間叹洲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工工禾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留运提,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓帜篇,卻偏偏與公主長得像糙捺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笙隙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容