Beispiel #1
0
 /**
  * 解析从外围系统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;
 }