- /**
- * Title: 生成XML信息文件
- * Description: 1、生成接收文件反饋信息。
- * @date : 2006-3-9
- * @author : zhanglei
- * @version : 1.0
- */
- package server;
- import java.sql.*;
- import java.util.*;
- import java.io.*;
- import oracle.sql.*;
- import sun.misc.BASE64Decoder;
- import org.apache.log4j.*;
- import com.microsoft.jdbc.sqlserver.*;
- public class GetXmlFile {
- private DomXML DomXML = MainServer.DomXML;
- private EditXML editxml = MainServer.editxml;
- private JdbcWork ZzJw = new JdbcWork();
- private String dwdm = "";
- private String dwmc = "";
- private String tableName = "";
- private String SQLWhere = "";
- private String sjblx = "";
- private String bbh = "2.00";
- private int sjbJls = 100;
- private String encodeFlag = "0";
- private String xmlPath = ".";
- private String updateflag = "Y";
- private String sjbbh = "";
- private String getXmlType = "";
- private String zdexchangeflag = "";
- private String zdItem = "";
- private String undofield = "";
- private String dofield = "";
- private String newsjbbh = "";
- public GetXmlFile(String xmlNo) {
- try {
- DomXML.GetBeginItem("System");
- dwdm = DomXML.GetItemVal("dwdm").trim();
- dwmc = DomXML.GetItemVal("dwmc").trim();
- DomXML.GetBeginItem("GetXmlFile");
- getXmlType = DomXML.GetItemAttribute(xmlNo, "xmltype").trim();
- bbh = DomXML.GetItemAttribute(xmlNo, "bbh").trim();
- sjbJls = Integer.parseInt(DomXML.GetItemAttribute(xmlNo, "jls").trim());
- encodeFlag = DomXML.GetItemAttribute(xmlNo, "encode").trim();
- sjblx = DomXML.GetItemAttribute(xmlNo, "sjblx").trim();
- xmlPath = DomXML.GetItemAttribute(xmlNo, "path").trim();
- undofield = DomXML.GetItemAttribute(xmlNo, "undofield").toUpperCase().trim() + ",";
- dofield = DomXML.GetItemAttribute(xmlNo, "dofield").toUpperCase().trim();
- zdexchangeflag = DomXML.GetItemAttribute(xmlNo, "zdexchange").toLowerCase().trim();
- tableName = DomXML.GetItemAttribute(xmlNo, "tableName").trim();
- SQLWhere = DomXML.GetItemAttribute(xmlNo, "SQLWhere").trim();
- updateflag = DomXML.GetItemAttribute(xmlNo, "updateflag").toLowerCase().trim();
- newsjbbh = DomXML.GetItemAttribute(xmlNo, "newsjbbh").toLowerCase().trim();
- if (zdexchangeflag.equals("y")) {
- new ZdExchange(); //獲得字典轉換表
- zdItem = ZdExchange.getZdItem().toUpperCase();
- }
- }
- catch (Exception ex) {
- SaveLog.SetInfo("GetXmlFile中初始化失敗:" + ex, 2);
- }
- }
- /**
- *GetXmlFile 生成交換信息XML文件
- *@param GetXmlfile XML文件類型標誌
- */
- public void Start() {
- if (newsjbbh.equals("y")) {
- CreateSjbbh();
- }
- else {
- HaveSjbbh();
- }
- }
- /**
- * CreateSjbbh產生新數據包包號
- */
- private void CreateSjbbh() {
- StringBuffer log = new StringBuffer();
- StringBuffer Sql = new StringBuffer();
- sun.misc.BASE64Encoder base64Encoder = new sun.misc.BASE64Encoder();
- String fssj = "";
- String fileName = "";
- String xmlFile = "";
- String fieldName = "";
- String fieldType = "";
- String fieldVal = "";
- String pc = "";
- String doFieldList = "";
- Vector fileNameList = new Vector();
- String tempStr = "";
- Statement jlStmt = null;
- ResultSet jlRs = null;
- ResultSetMetaData rsMd = null;
- int recSum = 0;
- int sjbSum = 0;
- int sjbMax = 0;
- try {
- if (tableName.length() < 1) {
- return;
- }
- Sql.setLength(0);
- Sql.append("select count(*) a from ").append(tableName)
- .append(" ").append(SQLWhere).append(" "); //where rownum <= 2333333
- //得到數據記錄數
- recSum = ZzJw.GetCount(Sql.toString());
- if (recSum < 1) {
- return;
- }
- Sql.setLength(0);
- if (updateflag.equals("y")) {
- tempStr = "rowid,";
- }
- //得到打包字段列表
- doFieldList = GetFieldList(dofield, bbh);
- Sql.append("select ").append(tempStr).append(doFieldList).append(" from ").append(tableName)
- .append(" ").append(SQLWhere).append(" "); //where rownum <= 2333333
- //得到包體結果集
- jlStmt = ZzJw.GetStatment();
- jlRs = jlStmt.executeQuery(Sql.toString());
- rsMd = jlRs.getMetaData();
- fssj = MyFunction.DataTimeStr("yyyyMMddHHmmss");
- //得到批次號
- pc = dwdm + fssj.substring(0, 8) + GetSxh(GetMaxBH(1));
- sjbMax = GetMaxBH(0);
- //文件生成路徑
- File bakdir = new File(xmlPath);
- if (!bakdir.exists()) {
- bakdir.mkdirs();
- }
- // xmlPath = xmlPath + "//" + fssj;
- bakdir = new File(xmlPath);
- if (!bakdir.exists()) {
- bakdir.mkdirs();
- }
- jlRs.next();
- sjbSum = (int) Math.ceil( (double) recSum / sjbJls);
- for (int n = 1; n <= sjbSum; n++) { //
- //得到文件名
- if (fssj.substring(0, 8).equals(MyFunction.DataTimeStr("yyyyMMdd"))) {
- sjbMax = sjbMax + 1;
- }
- else {
- sjbMax = 1;
- }
- fssj = MyFunction.DataTimeStr("yyyyMMddHHmmss");
- sjbbh = dwdm + fssj.substring(0, 8) + GetSxh(sjbMax);
- fileName = getXmlType + "_" + sjbbh + ".xml";
- xmlFile = xmlPath + "//" + fileName;
- WriteXml myxml = new WriteXml();
- myxml.WriteFile(xmlFile);
- //寫入包頭
- myxml.AddRoot(0, "Package");
- myxml.AddRoot(1, "PackageHead");
- myxml.AddItem(1, "BBH", bbh);
- myxml.AddItem(1, "SJBBH", sjbbh);
- myxml.AddItem(1, "SJBLX", sjblx);
- myxml.AddItem(1, "DWDM", dwdm);
- myxml.AddItem(1, "DWMC", dwmc);
- if ( (recSum - sjbJls * n) > 0) {
- myxml.AddItem(1, "JLS", String.valueOf(sjbJls));
- }
- else {
- myxml.AddItem(1, "JLS", String.valueOf(recSum - sjbJls * (n - 1)));
- }
- myxml.AddItem(1, "FSSJ", fssj);
- myxml.AddRoot(1, "Data");
- //生成包體
- for (int m = 0; m < sjbJls; m++) {
- myxml.AddRoot(2, "Record");
- for (int j = 1; j <= rsMd.getColumnCount(); j++) {
- fieldName = rsMd.getColumnName(j).toUpperCase();
- fieldType = rsMd.getColumnTypeName(j).toUpperCase();
- if (undofield.indexOf(fieldName + ",") == -1) { //包頭項不做處理
- if (fieldType.equals("BLOB")) {
- try {
- Blob blob = jlRs.getBlob(fieldName);
- fieldVal = base64Encoder.encode(blob.getBytes(1, (int) blob.length()));
- myxml.AddItem(2, MyFunction.fmtStr(fieldName),
- MyFunction.GetNewBase64(fieldVal));
- }
- catch (Exception e) {
- myxml.AddItem(2, MyFunction.fmtStr(fieldName), "");
- }
- }
- else if (fieldType.toUpperCase().equals("DATE")) {
- fieldVal = MyFunction.DataTimeStr(jlRs.getTimestamp(fieldName));
- myxml.AddItem(2, MyFunction.fmtStr(fieldName), fieldVal);
- }
- else {
- if (zdexchangeflag.equals("y") && (zdItem.indexOf(fieldName + ",") > 0)) { //是否轉換字典代碼
- fieldVal = ZdExchange.getGbZd(fieldName, jlRs.getString(fieldName)); // == null?jlRs.getString(fieldName):jlRs.getString(fieldName).trim()
- }
- else {
- //try{
- fieldVal = jlRs.getString(fieldName);
- //}catch(Exception e){fieldVal = "";}
- }
- myxml.AddItem(2, MyFunction.fmtStr(fieldName), fieldVal);
- }
- }
- }
- //更新記錄標記
- if (updateflag.equals("y")) {
- Sql.setLength(0);
- Sql.append("update ").append(tableName).append(" set sjbbh = '" + sjbbh +
- "',").append("pc = '" + pc + "',").append("fssj = '" + fssj + "'")
- .append(" where rowid = '").append(jlRs.getString(1)).append("'");
- ZzJw.PstmtExecSql(Sql.toString());
- }
- if (!jlRs.next()) {
- break;
- }
- }
- //‘0’存儲爲"UTF-8",無standalone="yes"標識XML文件
- myxml.toSave(encodeFlag);
- fileNameList.add(fileName);
- log.setLength(0);
- log.append(xmlFile).append("文件生成完畢!");
- SetSxh(sjbbh, 0); //寫入最後包號
- SaveLog.SetInfo(log.toString(), 0);
- }
- //提交全部、生成批次文件、移動全部文件
- ZzJw.PstmtCommit();
- //GetPcXml(xmlPath, pc, fileNameList);
- //SetSxh(pc, 1); //寫入最後批次號
- }
- catch (Exception e) {
- log.setLength(0);
- log.append(xmlFile).append("文件生成異常:").append(e.toString());
- SaveLog.SetInfo(log.toString(), 1);
- }
- finally {
- try {
- if (jlRs != null) {
- jlRs.close();
- }
- if (jlStmt != null) {
- jlStmt.close();
- }
- }
- catch (Exception e) {
- }
- }
- }
- /**
- * CreateSjbbh產生新數據包包號
- */
- private void HaveSjbbh() {
- StringBuffer log = new StringBuffer();
- StringBuffer Sql = new StringBuffer();
- sun.misc.BASE64Encoder base64Encoder = new sun.misc.BASE64Encoder();
- String fssj = "";
- String fileName = "";
- String xmlFile = "";
- String fieldName = "";
- String fieldType = "";
- String fieldVal = "";
- String pc = "";
- String doFieldList = "";
- Vector fileNameList = new Vector();
- String tempStr = "";
- Statement sjbStmt = null;
- ResultSet sjbRs = null;
- Statement jlStmt = null;
- ResultSet jlRs = null;
- ResultSetMetaData rsMd = null;
- int recSum = 0;
- int sjbSum = 0;
- int sjbMax = 0;
- try {
- if (tableName.length() < 1) {
- return;
- }
- Sql.setLength(0);
- Sql.append("select distinct sjbbh from ").append(tableName)
- .append(" ").append(SQLWhere).append(" order by sjbbh"); //where rownum <= 2333333
- //得到數據記錄數
- sjbStmt = ZzJw.GetStatment();
- sjbRs = sjbStmt.executeQuery(Sql.toString());
- fssj = MyFunction.DataTimeStr("yyyyMMdd");
- // xmlPath = xmlPath + "//" + fssj;
- //更新記錄標記
- if (updateflag.equals("y")) {
- Sql.setLength(0);
- Sql.append("update ").append(tableName).append(" set fssj = '" + fssj + "' ").append(SQLWhere);
- //.append(" and sjbbh = '" + sjbbh + "',")
- ZzJw.PstmtExecSql(Sql.toString());
- ZzJw.PstmtCommit();
- }
- while (sjbRs.next()) {
- sjbbh = sjbRs.getString("sjbbh");
- Sql.setLength(0);
- if (updateflag.equals("y")) {
- tempStr = "rowid,";
- }
- //得到打包字段列表
- if (SQLWhere.toLowerCase().indexOf("where") < 0) {
- SQLWhere = " where ";
- }
- else {
- SQLWhere = " " + SQLWhere + " and sjbbh = " + sjbbh + " ";
- }
- doFieldList = GetFieldList(dofield, bbh);
- Sql.append("select ").append(tempStr).append(doFieldList).append(" from ").append(tableName)
- .append(" where sjbbh = " + sjbbh + " "); //
- //得到包體結果集
- jlStmt = ZzJw.GetStatment();
- jlRs = jlStmt.executeQuery(Sql.toString());
- rsMd = jlRs.getMetaData();
- Sql.setLength(0);
- sjbJls = ZzJw.GetCount(Sql.append("select count(*) a from ").append(tableName)
- .append(" where sjbbh = " + sjbbh + " ").toString());
- //文件生成路徑
- File bakdir = new File(xmlPath);
- if (!bakdir.exists()) {
- bakdir.mkdirs();
- }
- bakdir = new File(xmlPath);
- if (!bakdir.exists()) {
- bakdir.mkdirs();
- }
- //得到文件名
- fssj = MyFunction.DataTimeStr("yyyyMMddHHmmss");
- fileName = getXmlType + "_" + sjbbh + ".xml";
- xmlFile = xmlPath + "//" + fileName;
- WriteXml myxml = new WriteXml();
- myxml.WriteFile(xmlFile);
- //寫入包頭
- myxml.AddRoot(0, "Package");
- myxml.AddRoot(1, "PackageHead");
- myxml.AddItem(1, "BBH", bbh);
- myxml.AddItem(1, "SJBBH", sjbbh);
- myxml.AddItem(1, "SJBLX", sjblx);
- myxml.AddItem(1, "DWDM", dwdm);
- myxml.AddItem(1, "DWMC", dwmc);
- myxml.AddItem(1, "JLS", String.valueOf(sjbJls));
- myxml.AddItem(1, "FSSJ", fssj);
- myxml.AddRoot(1, "Data");
- //生成包體
- while (jlRs.next()) {
- myxml.AddRoot(2, "Record");
- for (int j = 1; j <= rsMd.getColumnCount(); j++) {
- fieldName = rsMd.getColumnName(j).toUpperCase();
- fieldType = rsMd.getColumnTypeName(j).toUpperCase();
- if (undofield.indexOf(fieldName + ",") == -1) { //包頭項不做處理
- if (fieldType.equals("BLOB")) {
- try {
- Blob blob = jlRs.getBlob(fieldName);
- fieldVal = base64Encoder.encode(blob.getBytes(1, (int) blob.length()));
- myxml.AddItem(2, MyFunction.fmtStr(fieldName),
- MyFunction.GetNewBase64(fieldVal));
- }
- catch (Exception e) {
- myxml.AddItem(2, MyFunction.fmtStr(fieldName), "");
- }
- }
- else if (fieldType.toUpperCase().equals("DATE")) {
- fieldVal = MyFunction.DataTimeStr(jlRs.getTimestamp(fieldName));
- myxml.AddItem(2, MyFunction.fmtStr(fieldName), fieldVal);
- }
- else {
- if (zdexchangeflag.equals("y") && (zdItem.indexOf(fieldName + ",") > 0)) { //是否轉換字典代碼
- fieldVal = ZdExchange.getGbZd(fieldName, jlRs.getString(fieldName)); // == null?jlRs.getString(fieldName):jlRs.getString(fieldName).trim()
- }
- else {
- fieldVal = jlRs.getString(fieldName);
- }
- myxml.AddItem(2, MyFunction.fmtStr(fieldName), fieldVal);
- }
- }
- }
- //更新記錄標記
- }
- //‘0’存儲爲"UTF-8",無standalone="yes"標識XML文件
- myxml.toSave(encodeFlag);
- fileNameList.add(fileName);
- log.setLength(0);
- log.append(xmlFile).append("文件生成完畢!");
- SetSxh(sjbbh, 0); //寫入最後包號
- SaveLog.SetInfo(log.toString(), 0);
- jlRs.close();
- jlStmt.close();
- //提交全部、生成批次文件、移動全部文件
- }
- // ZzJw.PstmtCommit();
- sjbRs.close();
- sjbStmt.close();
- }
- catch (Exception e) {
- log.setLength(0);
- log.append(xmlFile).append("文件生成異常:").append(e.toString());
- SaveLog.SetInfo(log.toString(), 1);
- }
- finally {
- try {
- if (jlRs != null) {
- jlRs.close();
- }
- if (jlStmt != null) {
- jlStmt.close();
- }
- if (sjbRs != null) {
- sjbRs.close();
- }
- if (sjbStmt != null) {
- sjbStmt.close();
- }
- }
- catch (Exception e) {
- }
- }
- }
- /**
- *GetFieldList 得到處理字段列表
- *@param dofieldstr 處理字段
- *@param bm 部門編號
- */
- private String GetFieldList(String dofieldstr, String bm) {
- String doFieldList = "";
- Statement jlStmt = null;
- ResultSet jlRs = null;
- if (dofieldstr.trim().equals("") || bm.trim().equals("")) {
- doFieldList = tableName + ".*";
- }
- else if (dofieldstr.toLowerCase().indexOf("select ") < 0) {
- doFieldList = dofieldstr;
- }
- else {
- try {
- jlStmt = ZzJw.GetStatment();
- jlRs = jlStmt.executeQuery(dofieldstr + " where ispk != 1 and tgbm='" + bm + "'");
- while (jlRs.next()) {
- doFieldList = doFieldList + jlRs.getString(1) + ",";
- }
- }
- catch (Exception ex) {
- }
- finally {
- try {
- if (jlRs != null) {
- jlRs.close();
- }
- if (jlStmt != null) {
- jlStmt.close();
- }
- }
- catch (Exception e) {
- }
- }
- doFieldList = doFieldList.substring(0, doFieldList.length() - 1);
- }
- return doFieldList;
- }
- /**
- *Getsjbbh 得到批次文件
- *@param sjb_pc 0 數據包 1 批次文件
- */
- private int GetPcXml(String path, String pc, Vector fileNameList) {
- StringBuffer log = new StringBuffer();
- String pcXmlFile = path + "//" + getXmlType.substring(0, 4) + "LIST_"
- + pc + ".xml";
- try {
- DomXML.GetBeginItem("System");
- WriteXml myxml = new WriteXml();
- myxml.WriteFile(pcXmlFile);
- //寫入包頭
- myxml.AddRoot(0, "Package");
- myxml.AddRoot(1, "PackageHead");
- myxml.AddItem(1, "BBH", "2.00");
- myxml.AddItem(1, "SJBBH", pc);
- myxml.AddItem(1, "SJBLX", "09");
- myxml.AddItem(1, "DWDM", DomXML.GetItemVal("dwdm").trim());
- myxml.AddItem(1, "DWMC", DomXML.GetItemVal("dwmc").trim());
- myxml.AddItem(1, "JLS", String.valueOf(fileNameList.size()));
- myxml.AddItem(1, "FSSJ", MyFunction.DataTimeStr("yyyyMMddHHmmss"));
- myxml.AddRoot(1, "Data");
- myxml.AddRoot(2, "Record");
- int i;
- for (i = 0; i < fileNameList.size(); i++) {
- myxml.AddItem(2, fileNameList.get(i).toString().trim(), "");
- }
- myxml.toSave("0");
- /*//拷貝文件到指定目錄*/
- //MyFunction.copyDirectiory(path.substring(0, path.length() - 15), path);
- log.append(pcXmlFile).append("文件生成完畢!");
- SaveLog.SetInfo(log.toString(), 0);
- return 0;
- }
- catch (Exception ex) {
- log.append(pcXmlFile).append("文件生成失敗!");
- SaveLog.SetInfo(log.toString(), 1);
- return 1;
- }
- }
- /**
- *SetSxh 得到當前最大數據包順序號
- *@param maxbh 最大包號
- *@param sjb_pc 0 數據包 1 批次文件
- */
- private void SetSxh(String maxbh, int sjb_pc) {
- String setbh = "";
- try {
- setbh = maxbh.substring(maxbh.length() - 13, maxbh.length());
- }
- catch (Exception ex) {
- setbh = MyFunction.DataTimeStr("yyyyMMddHHmmss").substring(0, 8) + "00001";
- }
- try {
- if (sjb_pc == 0) {
- editxml.EditNodeAttr("System", "maxsxh", "maxbh", setbh);
- }
- else {
- editxml.EditNodeAttr("System", "maxsxh", "maxpc", setbh);
- }
- editxml.toSave("1");
- }
- catch (Exception ex) {
- SaveLog.SetInfo("GetXmlFile中SetSxh異常,寫入最大包號失敗:" + ex, 2);
- }
- }
- /**
- *Getsjbbh 得到當前最大數據包或批次順序號
- *@param sjb_pc 0 數據包 1 批次文件
- */
- private int GetMaxBH(int sjb_pc) {
- String fssj = MyFunction.DataTimeStr("yyyyMMddHHmmss").substring(0, 8);
- String sjbbh = "";
- String maxbh = "";
- int maxbh_I = 0;
- try {
- DomXML.GetBeginItem("System");
- if (sjb_pc == 0) {
- sjbbh = DomXML.GetItemAttribute("maxsxh", "maxbh").trim();
- if (sjbbh.substring(0, 8).equals(fssj)) {
- maxbh = sjbbh.substring(8, 13);
- maxbh_I = Integer.parseInt(maxbh);
- }
- else {
- maxbh_I = 0;
- }
- }
- else {
- sjbbh = DomXML.GetItemAttribute("maxsxh", "maxpc").trim();
- if (sjbbh.substring(0, 8).equals(fssj)) {
- maxbh = sjbbh.substring(8, 13);
- maxbh_I = Integer.parseInt(maxbh) + 1;
- }
- else {
- maxbh_I = 1;
- }
- }
- return maxbh_I;
- }
- catch (Exception ex) {
- return 0;
- }
- }
- /**
- *Getsjbbh 得到當前最大數據包順序號
- *@param maxbh 最大包號
- */
- private String GetSxh(int maxbh) {
- String temp = "";
- for (int i = 0; i < (5 - String.valueOf(maxbh).length()); i++) {
- temp = "0" + temp;
- }
- return temp + maxbh;
- }
- public static void main(String[] args) {
- try {
- DomXML configXml = new DomXML("config.xml");
- System.out.println("XML配置文件讀取成功!");
- }
- catch (Throwable t) {
- System.out.println("檢驗XML配置文件讀取錯誤!");
- }
- //GetSjbHk.SetInfo("HUJ_CZRK_2203000000002005042500006.xml",24,"31");
- //GetTabHk("sfz_zlhkxxb", "32", "SFZ_ZLHK_");
- GetXmlFile getXmlFile = new GetXmlFile("CSH_JBXX");
- getXmlFile.Start();
- for (int i = 0; i < 10; i++) {
- //GetXmlFile.SetInfo("sfz_zzxxb", "31", "SFZ_ZZXX_");
- }
- Logger a = Logger.getLogger("dsfsf");
- a.debug("sdfsda");
- a.error("error");
- }
- }
getxml.java
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.