171127之上传文件

来源:互联网 发布:谷歌看图软件 编辑:程序博客网 时间:2024/06/02 06:23

1:上传文件:
第一步:jsp前端代码

    <powersi:button id="search" value="上传" key="button_import" onclick="item_upFile()"/>

第二步:然后调用onclick方法item_upFile():

    //上传文件    function item_upFile(){        if(!checkFormValidtion()) {//校验必填项            return;        }        if(document.getElementById("filePath").value == ''){            alert("导入文件不能为空!");            return;        }        $("#itemForm").ajaxSubmit( {               url : "${rootPath}/medicare/MzSelectHospAction!uploadMzSelectFile.action",               datatype : "json",            success : function(json){                         var jsonData = jQuery.parseJSON(json);                         var data = jsonData.data;                        alert(jsonData.message);                        dg_importFile_info.loadData(data);                        dg_MzSelect_info.reset();                        $("#bkc133").val('');//重置bkc133                    },            error:function(json){                     alert("error");                    var jsonData = jQuery.parseJSON(json);                    alert(jsonData.message);                }        });     }

第三步:JavaScript方法体中再调用Action中的方法uploadMzSelectFile
(${rootPath}/medicare/MzSelectHospAction!uploadMzSelectFile.action)

    public String uploadMzSelectFile() {   //上传导入的门诊选定医院文件与插入数据库        List list = null;        try {  // 解析上传的文件信息返回List               list = ser.getExcelContext(filePath);            String bkc033 = this.getFilePathFileName();            List listImport = ser.saveExcelAsItem(list, bkc033);            this.setJSONReturn("保存成功!", listImport);        } catch (Exception e) {            saveJSONError(e.getMessage());        }        return NONE;    }

/**
* 导入的详细信息
*/

    @Override    public List getExcelContext(File file) throws Exception {        List rsList=new ArrayList();  //创建个集合        Workbook workbook = Workbook.getWorkbook(file); //获取EXCEL文件        Sheet sheet = workbook.getSheet(0);             //获取第一页         //验证文件+        if (sheet.getRows() < 3) { //除去固定的开头2行,至少要有一行数据。            throw new HygeiaException("上传文件错误,请下载模版并按格式填写相关数据!");        } else {            List<String> cloumName = Arrays.asList("医院编码","业务序列号","个人电脑号","公民身份证号码","疾病名称","icd码","手术码",                    "手术码对应名称","诊治代码","有效标志");            List<String> cloumNameList = new ArrayList<String>(cloumName);            //验证上传的excel列名是否和设定的模板一致            for (int i =0; i <=cloumNameList.size(); i++) {            System.out.println("---列名在第二行---"+sheet.getCell(i, 1).getContents());                System.out.println("我是最好的");                if (!cloumNameList.get(i).equals(sheet.getCell(i, 1).getContents())) {   //判断是否符合条件,报错                    throw new HygeiaException("文件对应列不符合模版标识内容,请重新下载模版并按格式填写相关数据!位置:" + cloumNameList.get(i));                }            }        }        //前两行是标题和列名,从第3行开始导入                for (int i = 2; i < sheet.getRows(); i++) {                    if (StringUtils.isNotEmpty(sheet.getCell(0, i).getContents())) {                        Map map = new HashMap();                        //序号不保存。                        String akb020 = getCellValue(sheet, 1, i).replaceAll((char)65533+"","").trim();                        String aaz218 = getCellValue(sheet, 2, i).replaceAll((char)65533+"","").trim();                        String aac001 = getCellValue(sheet,3, i).replaceAll((char)65533+"","").trim();                        String aac002 = getCellValue(sheet, 4, i).replaceAll((char)65533+"","").trim();                        String akc185 = getCellValue(sheet, 5, i).replaceAll((char)65533+"","").trim();                        String akc196 = getCellValue(sheet,6, i).replaceAll((char)65533+"","").trim();                        String yzy207 = getCellValue(sheet, 7, i).replaceAll((char)65533+"","").trim();                        String yzy208 = getCellValue(sheet, 8, i).replaceAll((char)65533+"","").trim();                        String bkb135 = getCellValue(sheet,9, i).replaceAll((char)65533+"","").trim();                        String aae100 = getCellValue(sheet, 10, i).replaceAll((char)65533+"","").trim();                        map.put("akb020",akb020);                        map.put("aaz218", aaz218);                        map.put("aac001",aac001);                        map.put("aac002",aac002);                        map.put("akc185",akc185);                        map.put("akc196",akc196);                        map.put("yzy207",yzy207);                        map.put("yzy208",yzy208);                        map.put("bkb135",bkb135);                        map.put("aae100",aae100);                        rsList.add(map);                    }                }                return rsList;        }

第四步:ser对应的是Service层的MzSelectHospService,从而调用saveExcelAsItem(list,bkc033)方法。private MzSelectHospService ser = getBean(MzSelectHospService.class);

/**     * 保存excel里的三大目录信息到导入明细表中并返回导入事件信息     */    public List saveExcelAsItem(List list, String bkc033) {        String aaa027 = UserBizInfo.getAAA027();        String bkc031 = UserBizInfo.getLoginUser();// 取操作员ID        String bkc030 = UserBizInfo.getUserName();// 操作员姓名        Date bkc032 = DateFunc.getDate(); // 取操作时间        SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMdd");        String nowTodayS = dformat.format(bkc032);        Long bkc133 = SysFunc.getMaxNo("BKC133"); // 基准库导入文件ID        // 保存导入事件到KAD6        MenuCatalogDTO menuDto = new MenuCatalogDTO();        menuDto.setBkc133(bkc133.toString());        menuDto.setBkc033(bkc033); //文件名        menuDto.setBkc030(bkc030); // 导入人姓名        menuDto.setBkc031(bkc031); // 导入人工号        menuDto.setBkc032(nowTodayS);// 导入时间        menuDto.setBkc034("1"); // 文件类型,表示Excel        menuDto.setBkc252("0"); // 验证标记0未验证1已验证通过,-1验证未通过,2部分验证通过        menuDto.setBkc040("0"); // 导入状态标志 0表示未导入到疾病目录的临时表里        menuDto.setBkc050("4"); // 导入类型,0疾病,1三大目录,2异名库,3二级目录,4门诊选定医院        menuDto.setAaa027(aaa027); // 统筹区编码        menuCataDao.saveKAD6(menuDto); // 保存导入事件        //用于检查是否有重复的社会保障号        List<String> checkList = new ArrayList<String>();        List<KCP6> kcp6s = new ArrayList<KCP6>();        for (int i = 0; i < list.size(); i++) {            HashMap hm = (HashMap) list.get(i);            if (hm.size() == 0) {                break;            }            if (!UtilFunc.isNotEmpty(hm.get("aac002"))) { // 考虑是直接跳过还是抛异常                continue;            }            if (!UtilFunc.isNotEmpty(hm.get("akb020"))) {                continue;            }            String akb020 = String.valueOf(hm.get("akb020"));            String aac002 = String.valueOf(hm.get("aac002"));            String aae030 = String.valueOf(hm.get("aae030"));            if (checkList.contains(aac002)) { // 考虑是直接跳过还是抛异常                throw new HygeiaException("导入数据中存在重复的社会保障号: " + aac002);            } else {                checkList.add(aac002);            }            KCP6 kcp6 = new KCP6();            com.powersi.biz.util.BeanHelper.copyProperties(menuDto, kcp6);            kcp6.setAae030(aae030);//年度时间            kcp6.setAac002(aac002);            kcp6.setAkb020(akb020);            kcp6.setAae036(nowTodayS);// 经办时间            kcp6.setAae127(nowTodayS);// 经办时间            kcp6.setAae011(bkc031);// 经办人            kcp6.setBae100(bkc030);// 经办人姓名            kcp6.setKcp6id(UUID.randomUUID().toString());            kcp6s.add(kcp6);            // 保存明细        }        dao.saveKcp6Batch(kcp6s);        return dao.queryMZSelectImportFile(bkc133);    }

第五步:重点是dao,通过private MzSelectHospDao dao = BeanHelper.getBean(MzSelectHospDao.class);把Dao层注入Service层,方便方法调用。

第六步:调用dao层的queryMZSelectImportFile(bkc133)方法。 跳转到dao层

/**     * 查询门诊选定医院导入事件     */    public List queryMZSelectImportFile(Long bkc133) {        StringBuffer lSQL = new StringBuffer();        lSQL.append(" select kad6.bkc133, ");        lSQL.append("        kad6.bkc033, ");        lSQL.append("        to_char(kad6.bkc032,'yyyy-mm-dd') as bkc032, ");        lSQL.append("        kad6.bkc030, ");        lSQL.append("        kad6.bkc040, ");        lSQL.append("        kad6.bkc252, ");        lSQL.append("        decode(kad6.bkc040, '1', '已导入', '0', '未导入', kad6.bkc040) as bkc040n, ");        lSQL.append("        decode(kad6.bkc252, ");        lSQL.append("               '1', ");        lSQL.append("               '验证通过', ");        lSQL.append("               '0', ");        lSQL.append("               '未验证', ");        lSQL.append("               '-1', ");        lSQL.append("               '验证不通过', ");        lSQL.append("               '2', ");        lSQL.append("               '部分验证通过', ");        lSQL.append("               kad6.bkc252) as bkc252n, ");        lSQL.append("        count(kcp6.bkc133) as num ");        lSQL.append("   from kad6, kcp6 ");        lSQL.append("  where kad6.bkc133 = kcp6.bkc133 ");        lSQL.append("    and kad6.bkc050 = '4' ");//导入类型 4门诊选定医院        lSQL.append("    and kad6.bkc133 = '"+bkc133+"' ");        lSQL.append("  group by kad6.bkc133, ");        lSQL.append("           kad6.bkc033, ");        lSQL.append("           kad6.bkc032, ");        lSQL.append("           kad6.bkc030, ");        lSQL.append("           kad6.bkc040, ");        lSQL.append("           kad6.bkc252 ");        lSQL.append("  order by kad6.bkc133 desc ");        return DBHelper.executeList(lSQL.toString());    }

最后一步,通过DBHelper自定义类的executeList方法实现插入数据库中。

return DBHelper.executeList(lSQL.toString());