Work(Ⅰ)营销与集抄系统Web Service(一)

项目分4个部分:服务器端程序(eclipse)、服务器为Apache tomcat、axis下wsdd方式发布程序、调用对方(营销系统)服务器接口的客户端。

 


 

项目所需工具以及环境:

WindowsXP

JDK1.5.0                         //java_home = C:/Program Files/Java/jdk1.5.0

Oracle8i

Eclipse3.2 + MyEclipse5.5  

Axis1.4                                //axis_home = D:/axis/axis-1_4

Tomcat5.5                               //tomcat_home =  D:/tomcat5.5

 


 

(一)服务器端程序

eclipse下建工程 V_Gsystem 工程下建4个包 

cn.spume.server     服务器接口包

                              此包下有1个类 是描述服务器接口类  HningWQ.java

cn.spume.logic    逻辑处理包

                              此包下有4个类 分别为 QryCustomerAmeterData.java      MsgCustomerInfo.java

                              MsgCustomerAmeterInfo.java       MsgCBQInfo.java

cn.spume.tools    工具包

                               此包下有1个类  是序列化和反序列化数据类  DataParse.java

cn.spume.test     测试包

                              此包下有4个类 分别为 TestQryCustomerAmeterData.java    TestMsgCustomerInfo.java

                              TestMsgCustomerAmeterInfo.java      TestMsgCBQInfo.java

 


cn.spume.server     服务器接口包    HningWQ.java

package cn.spume.server;

import cn.spume.logic.MsgCBQInfo;
import cn.spume.logic.MsgCustomerAmeterInfo;
import cn.spume.logic.MsgCustomerInfo;
import cn.spume.logic.QryCustomerAmeterData;

public class HningWQ {
	
	public static int msgCustomerInfo(String parameter){
		String clientData = parameter;
		int result;
		result = new MsgCustomerInfo().xmlParse(clientData);
		return result;
	}
	
	public static int msgCustomerAmeterInfo(String parameter){
		String clientData = parameter;
		int result;
		result = new MsgCustomerAmeterInfo().xmlParse(clientData);
		return result;
	}
	
	public static String msgCBQInfo(String parameter){
		String clientData = parameter;
		String result ="";
		result = new MsgCBQInfo().xmlParse(clientData);
		return result;
	}
	
	public static String qryCustomerAmeterData(String parameter){
		String clientData = parameter;
		String result ="";
		result = new QryCustomerAmeterData().xmlParse(clientData);
		return result;
	}
}

 

 


 

 

cn.spume.logic    逻辑处理包     QryCustomerAmeterData.java

package cn.spume.logic;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

import cn.spume.tool.DataParse;

public class QryCustomerAmeterData{

	public String xmlParse (String xmlDoc){
		 
		//测试服务器接口是否被调用and客户端参数是什么
		//把客户端参数保存到d:/VG/取抄表数据Catch.txt
		String st = "服务器正在被访问>>>>";
		File write = new File("d://VG//取抄表数据Catch.txt");
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(write));
			bw.write(st + "客户端参数是:   " + xmlDoc);
			bw.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		//用JDOM对数据进行处理
		StringReader read = new StringReader(xmlDoc);
		InputSource source = new InputSource(read);
		SAXBuilder sb = new SAXBuilder();	
		String backData = "";
		String [] s = new String [100];
		String [] ss = new String [100];
		try {
			Document doc = sb.build(source);
			Element root = doc.getRootElement();
			List node = root.getChildren();
			Element et = null;
			for(int i = 0; i < node.size(); i++){
				et = (Element)node.get(i);
				s [i] = et.getName();
				ss [i] = et.getText();
			}
			
			    backData = this.qryData(s,ss);
			    
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return backData;
	}
	
	
	//操作数据库
	private String qryData (String [] s, String [] ss){
		int flag1 = 0;	//取得实际数组元素长度所需要的变量
		int flag2 = 0;	//取得得到实际数组元素长度所需要的变量
		int r = 0;	//取得实际数组元素长度所需要的变量
		String[] t = s;
	    String[] tt = ss;
	    String sumData [] = new String [10000];
	    String resultString = "";
	    String cbqm = "";
	    String hh = "";
	    String fdts = "";
	    String rq = "";
	    for(int i = 0; i < t.length; i++){
	    	if("HH".equals(t[i])){
	    		hh = tt[i];
	    		break;
	    	}
	    }
	    for(int i = 0; i < t.length; i++){
	    	if("CBQM".equals(t[i])){
	    		cbqm = tt[i];
	    		break;
	    	}
	    }
	    for(int i = 0; i < t.length; i++){
	    	if("RQ".equals(t[i])){
	    		rq = tt[i];
	    		break;
	    	}
	    }
	    for(int i = 0; i < t.length; i++){
	    	if("FDTS".equals(t[i])){
	    		fdts = tt[i];
	    		break;
	    	}
	    }
		String query1 = "select hh,jh,data01,data02,dtime from gatherdata a,ammeter b where " + 
						"a.aid(+)=b.aid and to_char(dtime+" + fdts + 
						",'YYYY-MM-DD')>='" + rq + "' and to_char(dtime,'YYYY-MM-DD')<='" +
						rq + "' and to_char(dtime,'HH24')='00' and data01>=0 and " +
						"hh=" + hh  + " order by dtime desc";
		String query2 = "select hh,jh,data01,data02,dtime from gatherdata a,ammeter b where " +
						"a.aid(+)=b.aid and to_char(dtime+" + fdts + 
						",'YYYY-MM-DD')>='" + rq + "' and to_char(dtime,'YYYY-MM-DD')<='" +
						rq + "' and to_char(dtime,'HH24')='00' and data01>=0 and " + 
						"cbqm=" + cbqm + " order by a.aid,dtime desc";
		Connection conn = null;
		//连接字符串格式: "jdbc:数据库驱动名称:连接模式:@数据库服务器ip:端口号:数据库SID" 
		String url = "jdbc:oracle:thin:@XXXXXX";   //此处信息隐藏
		String username = "XXXXXX";
		String password = "XXXXXX";
		try {
			//创建oracle数据库驱动实例
			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
			//获得与数据库的连接 
			conn = DriverManager.getConnection(url,username,password);
			//创建执行语句对象
			Statement stmt = conn.createStatement();
			ResultSet rs1 = null;
			ResultSet rs2 = null;
			//执行sql语句,返回结果集
			if((hh == null && cbqm == null) || ("".equals(hh) && "".equals(cbqm)))
			{
				return "-1";
			}
			if(!"".equals(hh)){
				rs1 = stmt.executeQuery(query1);
				while(rs1.next()){
					for(int j = 1; j <= rs1.getMetaData().getColumnCount(); j++){
					    sumData [j-1] = rs1.getString(j);
					    r++;
					    flag1 = r;  //得到数组长度
					}				
				}
				rs1.close();
			}else{
				rs2 = stmt.executeQuery(query2);
				int count = 0;
				while(rs2.next()){
					for(int j = 1; j <= rs2.getMetaData().getColumnCount(); j++){
						sumData [count] = rs2.getString(j);
						count++;
						r++;			//得到实际数组元素长度
						flag2 = r;  	
					}
				}
				rs2.close();
			}
			stmt.close();
			conn.close();

			//分2种情况重新赋值
			String [] sumData1 = new String [flag1];
			String [] sumData2 = new String [flag2];
			for(int i = 0; i < flag1; i++){
				sumData1[i] = sumData[i];
			}
			for(int i = 0; i < flag2; i++){
				sumData2[i] = sumData[i];
			}
			//判断之后再调用序列化方法
			DataParse dp = new DataParse();
			if(rs1 == null){				
				resultString = dp.StoX2(sumData2);
			}else{
				resultString = dp.StoX1(sumData1);
			}
			
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//把服务器端返回结果保存到d:/VG/取抄表数据Return.txt
		File write = new File("d://VG//取抄表数据Return.txt"); 
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(write));
			bw.write(resultString  + "服务器访问完毕!");
			bw.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		return resultString;
	}
}
 
 
cn.spume.logic    逻辑处理包     MsgCustomerInfo.java
package cn.spume.logic;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public class MsgCustomerInfo {
	
	//解析营销系统通知参数数据,如果参数正确调用saveData方法
	public int xmlParse (String xmlDoc){
		
		//把客户端参数保存到d:/VG/客户档案变更Catch.txt
		String st = "服务器已被访问>>>>";
		File write = new File("d://VG//客户档案变更Catch.txt");
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(write));
			bw.write(st + "客户端参数是: " + xmlDoc);
			bw.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		//用JDOM对数据进行处理
		StringReader read = new StringReader(xmlDoc);
		InputSource source = new InputSource(read);
		SAXBuilder sb = new SAXBuilder();
		boolean flag = false;
		boolean flag2 = false;
		String [] s = new String [10];
		String [] ss = new String [10];
		try {
			Document doc = sb.build(source);
			Element root = doc.getRootElement();
			List node = root.getChildren();
			Element et = null;
			for(int i = 0; i < node.size(); i++){
				et = (Element)node.get(i);
				s [i] = et.getName();
				ss [i] = et.getText();
			}			
			for(int j = 0; j < s.length; j++){			
				if("DW".equals(s[j]) || "HH".equals(s[j]) || "SQLB".equals(s[j])){
					flag = true; break;
				}else{
					flag = false; 
				}
			}
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		if(flag){
		    flag2 = this.saveData(s,ss);
		    if(flag2){
		    	return 0;
		    }else{
		    	return -1;
		    }
		}else{
			return -1;
		}
	}
	
	//把营销系统的有用数据保存到数据库表msgcustomer
	private boolean saveData (String [] s, String [] ss){
	    String dw = "";
	    String hh = "";
	    String sqlb = "";
	    boolean flag = false;
	    for(int i = 0; i < s.length; i++){
	    	if("DW".equals(s[i])){
	    		dw = ss[i]; 
	    		continue;
	    	}
	    	if("HH".equals(s[i])){
		    	hh = ss[i]; 
		    	continue;
	    	}	
	    	if("SQLB".equals(s[i])){
	    		sqlb = ss[i]; 
	    		continue;
	    	}	
	    }
	    
	    Date date = new Date();
	    java.sql.Date date2 = new java.sql.Date(date.getTime());
		String dataInsert = "insert into msgcustomer (dw,hh,msgtime,bgnr,sqlb,dealt) values (" +
					    "'" + dw + "'" + "," +
					    "'" + hh + "'" + "," +
					    "to_date(" + "'" + date2 + "', 'YYYY-MM-DD'" + ")" + ","  + 
					    "0" + "," +
					    "'" + sqlb + "'" + "," +
					    "1)" ;
		Connection conn = null;
		//连接字符串格式: "jdbc:数据库驱动名称:连接模式:@数据库服务器ip:端口号:数据库SID" 
		String url = "jdbc:oracle:thin:@XXXXXX";   //此处信息隐藏
		String username = "XXXXXX";
		String password = "XXXXXX";
		try {
			//创建oracle数据库驱动实例
			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
			//获得与数据库的连接 
			conn = DriverManager.getConnection(url,username,password);
			//创建执行语句对象
			Statement stmt = conn.createStatement(); 
			//执行sql语句,返回结果集
			int rs = stmt.executeUpdate(dataInsert);
			if(rs <= 0){
				flag = false;
			}else{
				flag = true;
			}
			stmt.close();
			conn.commit();
			conn.close();
			
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//把服务器端返回结果保存到d://VG//客户档案变更Return.txt
		File write = new File("d:/VG/客户档案变更Return.txt"); 
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(write));
			bw.write(flag + ">>>>" + "服务器访问完毕!!");
			bw.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		return flag;
	}
}
 
  
  
cn.spume.logic  逻辑处理包  MsgCustomerAmeterInfo.java  MsgCBQInfo.java略......
  
  
 cn.spume.tools    工具包   DataParse.java
 
package cn.spume.tools;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;

public class DataParse {

	//序列化数据方法(qryCustomerAmeterData接口当根据HH查询的时候)
	public String StoX1(String [] dbData){
		String [] ziduan = new String []{"HH","ZDJH","JH","SJBH","SJZ","SJCBRQ"}; 
		String [] zhi = new String []{dbData[0],"",dbData[1],"106,104",dbData[2] + "," + dbData[3],dbData[4].substring(0,19)};
		Element rootElement = new Element("DBSET");
		rootElement.setAttribute(new Attribute("RESULT",1 + ""));
		Document myDocument = new Document(rootElement);
		Element [] element = new Element[6];
		for(int i = 0; i < 6; i++){
			element[i] = new Element(ziduan[i]);
			element[i].addContent(zhi[i]);
			rootElement.addContent(element[i]);
		}
		XMLOutputter xmlOut = new XMLOutputter("    ",true);
		String outString = xmlOut.outputString(myDocument);
		return outString;
	}

	//序列化数据方法(qryCustomerAmeterData接口当根据CBQM查询的时候)
	public String StoX2(String [] dbData){
		String [] ziduan = new String []{"HH","ZDJH","JH","SJBH","SJZ","SJCBRQ"};
		String [][] zhi = new String [dbData.length/5][6];
		for(int i = 0; i < dbData.length/5; i++){
			zhi[i][0] = dbData[i * 5];
			zhi[i][1] = "";
			zhi[i][2] = dbData[i * 5 + 1];
			zhi[i][3] = "106,104";
			zhi[i][4] = dbData[i * 5 + 2] + "," + dbData[i * 5 + 3];
			zhi[i][5] = dbData[i * 5 + 4].substring(0,19);
			}
		Element rootElement = new Element("DBSET");
		Element rowElement []  = new Element[dbData.length/5];
		rootElement.setAttribute(new Attribute("RESULT",dbData.length/5 + ""));
		Document myDocument = new Document(rootElement);
		Element [][] element = new Element[dbData.length/5][6];
		for(int i = 0; i < dbData.length/5; i++){
			rowElement[i] = new Element("ROW");
		}
		for(int i = 0; i < dbData.length/5 ; i++){
			for(int j = 0; j < 6; j++){
				element[i][j] = new Element(ziduan[j]);
				element[i][j].addContent(zhi[i][j]);
				rowElement[i].addContent(element[i][j]);
			}
			rootElement.addContent(rowElement[i]);
		}
		XMLOutputter xmlOut = new XMLOutputter("  ",true);
		String outString = xmlOut.outputString(myDocument);
		return outString;
	}

}

cn.spume.test     测试包   略......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值