/** * 解析从外围系统FTP上下载下来的国内外汇贷款签约的文件 * * @param file 需要解析的文件名称 * @param orgNo 采集机构 * @param dataType 数据文件 * @param fileType 文件类型 * @param tranDate 解析日期 * @return * @ejb.interface-method */ public String parse(File file, String orgNo, String dataType, String fileType, String tranDate) throws Exception { String tip = ""; Gnwhdkqy gnwhdkqy = null; ParseBsptFile parsefile = null; String str = ""; int line = 0; String fileName = file.getName(); ReceiveBsptFile receiveBsptFile = new ReceiveBsptFile(); receiveBsptFile.setFileName(fileName); try { InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GB2312"); br = new BufferedReader(isr); while ((str = br.readLine()) != null && str != "") { try { line++; if (null != str && !"".equals(str.trim())) { String[] array = str.split(","); gnwhdkqy = parseLine(array, orgNo, tranDate); tip += recvDataChecker.check_GnwhdkQyxx(gnwhdkqy); Map gnwhdkqyMap = GeneralCalc.getValueMap(gnwhdkqy); String rptNo = GeneralCalc.objToString(gnwhdkqy.getDofoexlocode()); gnwhdkqyMap.put("txnNo", gnwhdkqy.getNguid()); gnwhdkqyMap.put("sbkeyNo", rptNo); Map<String, Object> dldclbsc = new HashMap<String, Object>(); dldclbsc.put("txnNo", gnwhdkqy.getNguid()); dldclbsc.put("orgNo", gnwhdkqy.getBank_Id()); dldclbsc.put("rptNo", rptNo); String dclKind = dao.getDldclMDName(dataType); dldclbsc.put("dclKind", dclKind); dldclbsc.put("dclDate", gnwhdkqy.getRecdate()); dldclbsc.put("initDate", gnwhdkqy.getRecdate()); dldclbsc.put("bscState", "0"); dldclbsc.put("bscInput", "Y"); dldclbsc.put("bscSend", "N"); dldclbsc.put("mgeState", "0"); dldclbsc.put("mgeInput", "Y"); dldclbsc.put("mgeSend", "N"); dldclbsc.put("dclState", "0"); dldclbsc.put("dclInput", "Y"); dldclbsc.put("dclSend", "N"); dldclbsc.put("dataResource", "HX"); dldclbsc.put("hxxnwzbh", gnwhdkqy.getHxxnwzbh()); // 根据申报主键和数据来源获取对应记录 List<Map<String, Object>> lst = dao.getDecalreByRptNo(rptNo, dclKind, EbpConstants.TABLE_INFO); if (null != lst && lst.size() > 0) { Map<String, Object> gnwhdkqyinfo = (Map<String, Object>) lst.get(0); if (null != gnwhdkqyinfo && "0".equals(GeneralCalc.objToString(gnwhdkqyinfo.get("bscState")))) { Map<String, Object> fkeyMap = new HashMap<String, Object>(); Map<String, Object> zkeyMap = new HashMap<String, Object>(); fkeyMap.put("txnNo", GeneralCalc.objToString(gnwhdkqyinfo.get("txnNo"))); fkeyMap.put("sbkeyNo", GeneralCalc.objToString(gnwhdkqyinfo.get("rptNo"))); gnwhdkqyMap.put("txnNo", GeneralCalc.objToString(gnwhdkqyinfo.get("txnNo"))); gnwhdkqyMap.put("sbkeyNo", GeneralCalc.objToString(gnwhdkqyinfo.get("rptNo"))); zkeyMap.put("txnNo", GeneralCalc.objToString(gnwhdkqyinfo.get("txnNo"))); zkeyMap.put("rptNo", GeneralCalc.objToString(gnwhdkqyinfo.get("rptNo"))); zkeyMap.put("dclKind", GeneralCalc.objToString(gnwhdkqyinfo.get("dclKind"))); dldclbsc.put("txnNo", GeneralCalc.objToString(gnwhdkqyinfo.get("txnNo"))); dldclbsc.put("rptNo", GeneralCalc.objToString(gnwhdkqyinfo.get("rptNo"))); dldclbsc.put("dclKind", GeneralCalc.objToString(gnwhdkqyinfo.get("dclKind"))); dao.updateDecalreBuss( CIConstants.TAB_SB_GNWHDKQY, gnwhdkqyMap, fkeyMap, EbpConstants.TABLE_INFO); dao.updateDecalre(dldclbsc, zkeyMap, EbpConstants.TABLE_INFO); log.error("记录存在,状态不为已发送申报,执行更新操作完毕!" + gnwhdkqy); // 金额、币种、来源 类型、序号、文件名称 文件类型、是否解析通过、执行机构 // 解析时间、解析备注1 dao.create( gnwhdkqy.getContractamount(), gnwhdkqy.getCurrence(), gnwhdkqy.getDatasources(), dataType, String.valueOf(line), fileName, fileType, "Y", orgNo, DataUtil.getDate(tranDate), "第" + (line) + "行解析成功,记录存在,状态不为已发送申报,执行更新操作完毕!", "", "", "", gnwhdkqy.getYwbh()); } else { dao.create( gnwhdkqy.getContractamount(), gnwhdkqy.getCurrence(), gnwhdkqy.getDatasources(), dataType, String.valueOf(line), fileName, fileType, "Y", orgNo, DataUtil.getDate(tranDate), "第" + (line) + "行解析成功,记录存在,状态为已发送申报,不执行操作!", "", "", "", gnwhdkqy.getYwbh()); log.error("记录存在,状态为已发送申报,不执行操作!"); } } else { // 在此处理采集的C或D类型的数据 boolean isParsefile = false; if ("C".equals(array[0]) || "D".equals(array[0])) { // 是否存在A类型数据,若不存在便不接受此数据 /*gnwhdkqy.setActiontype("A"); List listA = gnwhdkqyManager .getDataByYWBHDATASources(gnwhdkqy); gnwhdkqy.setActiontype("C"); List listC = gnwhdkqyManager .getDataByYWBHDATASources(gnwhdkqy); gnwhdkqy.setActiontype("D"); List listD = gnwhdkqyManager .getDataByYWBHDATASources(gnwhdkqy); Gnwhdkqy temp = null; if (null != listA || null != listC || null != listD) { // 将类型更新掉 if (null != listA) { temp = (Gnwhdkqy) listA.get(0); } else if (null != listC) { temp = (Gnwhdkqy) listC.get(0); } else if (null != listD) { temp = (Gnwhdkqy) listD.get(0); } if ("Y".equals(temp.getSfysb())) { temp.setSfzx("N"); gnwhdkqyManager.updateInfo(temp); gnwhdkqy.setActiontype(array[0]); gnwhdkqyManager.create(gnwhdkqy); isParsefile = true; } else { dao.create( gnwhdkqy.getContractamount(), gnwhdkqy.getCurrence(), gnwhdkqy.getDatasources(), dataType, String.valueOf(line), fileName, fileType, "Y", orgNo, new java.sql.Date(System .currentTimeMillis()), "第" + (line) + "接收到" + array[0] + "的数据,在库中存在" + temp.getActiontype() + "类型数据未申报,不执行操作!", "", "", "", gnwhdkqy.getYwbh()); log.error("接收到" + array[0] + "的数据,在库中存在" + temp.getActiontype() + "类型数据未申报,不执行操作!"); isParsefile = false; } } else { dao .create(gnwhdkqy .getContractamount(), gnwhdkqy.getCurrence(), gnwhdkqy.getDatasources(), dataType, String.valueOf(line), fileName, fileType, "Y", orgNo, new java.sql.Date( System.currentTimeMillis()), "第" + (line) + "接收到" + array[0] + "的数据,在库中不存在A,C或D类型数据,此数据不执行操作!", "", "", "", gnwhdkqy .getYwbh()); log.error("接收到" + array[0] + "的数据,在库中不存在A,C或D类型数据,此数据不执行操作!"); isParsefile = false; }*/ } else { dao.create(gnwhdkqyMap, CIConstants.TAB_SB_GNWHDKQY); dao.create(dldclbsc, EbpConstants.DLDCLBSCID); isParsefile = true; } if (isParsefile) { parsefile = new ParseBsptFile(); parsefile.setFileName(fileName); parsefile.setDataType(dataType); // "CFACA" parsefile.setFileType(fileType); parsefile.setYwbh(gnwhdkqy.getYwbh()); parsefile.setParseDate(DataUtil.getDate(tranDate)); parsefile.setCursign(gnwhdkqy.getCurrence()); if (!"".equals(String.valueOf(gnwhdkqy.getContractamount()))) parsefile.setAmount(gnwhdkqy.getContractamount()); parsefile.setOrgNo(orgNo); parsefile.setDataSources(gnwhdkqy.getDatasources()); parsefile.setIsParse("Y"); parsefile.setRemark1("第" + (line) + "行解析成功"); parsefile.setFileInfoNo(String.valueOf(line)); dao.create(parsefile); } } log.info("共成功读取了:: " + line + " 行"); } } catch (Exception e) { log.error("WHILE------->>>>>>" + "读取文件" + fileName + "失败,在第" + (line) + "行解析不成功" + e); log.error(str); parsefile = new ParseBsptFile(); parsefile.setFileName(fileName); parsefile.setDataType(dataType); parsefile.setFileType(fileType); parsefile.setYwbh("ERROR"); parsefile.setParseDate(DataUtil.getDate(tranDate)); parsefile.setOrgNo(orgNo); parsefile.setDataSources("ERROR"); parsefile.setIsParse("N"); parsefile.setFileInfoNo(String.valueOf(line)); parsefile.setRemark1("第" + (line) + "行解析不成功"); List list = dao.getErrorData(parsefile); if (null == list || list.size() <= 0) { dao.create(parsefile); } } } } catch (Exception e) { log.error("读取文件" + fileName + "失败,在第" + line + "行解析不成功:" + e); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } return tip; }