一、项目简介
本项目是一个挖掘行业的ERP系统的子模块,实现其生产调度方面的管理。
二、生产数据分析系统的整体需求
1、 用户分为三个层次(根据其组织结构)集团公司、指挥部、厂矿。
各个层次的用户分析的数据不同,厂矿、指挥部、集团公司依次是汇总关系。
2、 生产数据分析的类别:各层次用户的总产量、总产量的子类别产量。
3、 生产数据分析的阀值:年、月、日
4、 要求产生的图表及分析形式:各阀值的产量走势图、柱状图
5、 要求根据鼠标的实时移动动态产生阀值的日期、计划产量、实际产量、超欠量[部门根据用户确定]
三、资源及环境情况
数据库服务器IBMP670、应用服务器SUME650、应用程序服务器TOMCAT5(调试)、WebSphere 、ORACLE9I
分析系统所需要的数据已经由其他系统产生。
四、生产数据分析系统的运行模式
JAVA桌面程序、JWS部署、以原来的数据库连接池连接数据库获得数据
五、实现的构想
注释:为了充分利用原来的资源,不进行单独写对数据库的操作,而是利用JAVA客户端程序与一SERVLET进行通讯,而此SERVLET可以充分利用原来开发的操作数据库的类库。
六、JavaClient的实现
系统界面基础类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class BaseWindow extends JFrame implements MouseMotionListener{
BaseWindow () {
/**
*增加鼠标移动监听
*/
addMouseMotionListener(this);
/**
*把屏幕的构件显示形式为WINDOW模式
*/
String UIlaf = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(UIlaf);
}catch(Exception e) {
System.out.println("不能改变构件显示模式。错误:"+e.getMessage());
}
/**
*设置如果用户强行退出系统时,系统的动作
*/
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
/**
*设置系统的显示模式为800*600 16 等
*/
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = environment.getDefaultScreenDevice();
DisplayMode displayMode = new DisplayMode(1024,768,32,75);
/**
*设置系统为全屏幕方式
*/
this.setUndecorated(true);
device.setFullScreenWindow(this);
device.setDisplayMode(displayMode);
}
public void mouseDragged(MouseEvent e) {
mouseMoved(e);
}
public void mouseMoved(MouseEvent e) {
}
}
系统主界面类
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.Calendar;
public class AnalysisMainWindow extends BaseWindow {
public static void main(String[] args) {
AnalysisMainWindow AMW = new AnalysisMainWindow();
AMW.run();
}
/**************************************************************************************************
*下面定义的变量主要是为了描绘系统主界面用
*
**************************************************************************************************/
int heightY;
int widthX;
int heightY1;
int heightY2;
int heightY3;
int heightY4;
int heightY5;
/*************************************************************************************************
*系统中涉及到构件
**************************************************************************************************/
Choice departmentGJ;
Choice fxlbGJ;
Choice fxfzGJ;
TextField fxyearGJ;
Label MousePositionX;
Label MousePositionY;
Label NowDate;//显示系统现在日期
Label NowTime;//显示系统现在时间
Label UserName;//显示用户得名字
Button ExitSys;//退出系统
/*************************************************************************************************
*事件完成标志
**************************************************************************************************/
boolean prepareParameterFinished = false;
boolean drawSysMainFrameFinished = false;
boolean getDataFinished = false;
String waitingFlag ="正在准备提取数据...";
String waitingFlagTemp ="正在准备提取数据...";
/**
*取的生产数据并且把他进行存储
*/
SCQuantity SCData = new SCQuantity();
SaveSCQuantity SaveSCData = new SaveSCQuantity();
/**
*系统运行的主要方法
*/
public void run() {
//调用初始化变量方法
//准备屏幕系统参数
waitingFlag = "正在准备屏幕参数,请等待...";
repaint();
prepareFrameParameter();
//获取生产数据
waitingFlag = "正在获取数据库数据,请等待...";
repaint();
SCData.getSCData();
getDataFinished = true;
//数据处理完毕
waitingFlag = "";
repaint();
//注册构件
processEvent();
/**
*显示对话框,让用户进行登陆
*/
// Login();
/**
*取的生产方面的数据
*/
}
public void prepareFrameParameter() {
//把变量进行付值
setBackground(Color.black);
widthX = getWidth()-10;
heightY = getHeight()-10;
heightY1 = Math.round(heightY/10);
heightY2 = Math.round(heightY*3/10);
heightY3 = Math.round(heightY-heightY*3/10-heightY*2/20-heightY/10);
heightY4 = Math.round(heightY/20);
heightY5 = Math.round(heightY/20);
try {
Thread.sleep(1500);
}catch(Exception e) {
}
prepareParameterFinished = true;
}
//画系统的主框架
public void drawSysMainFrame(Graphics g) {
g.setColor(Color.red);
//画总体矩形
g.drawLine(5,5,widthX+5,5);
g.drawLine(5,5,5,heightY+5);
g.drawLine(5,heightY+5,widthX+5,heightY+5);
g.drawLine(widthX+5,5,widthX+5,heightY+5);
//画第一条分割线及系统表标
g.drawLine(5,5+heightY1,widthX+5,5+heightY1);
g.setColor(Color.white);
g.setFont(new Font("宋体", Font.PLAIN, 28));
g.drawString("宁夏煤业集团公司生产数据分析系统",305,50);
//画第二条分割线
g.setColor(Color.red);
g.drawLine(5,5+heightY1+heightY2,Math.round((5+widthX)*9/10),5+heightY1+heightY2);
//画第三条分割线
g.setFont(new Font("宋体",Font.PLAIN,18));
g.drawLine(5,5+heightY1+heightY2+heightY3,5+widthX,5+heightY1+heightY2+heightY3);
g.drawString("部门:",8,5+heightY1+heightY2+heightY3+23);
g.drawString("分析类别:",150,5+heightY1+heightY2+heightY3+23);
g.drawString("分析阀值:",330,5+heightY1+heightY2+heightY3+23);
g.drawString("分析年份:",470,5+heightY1+heightY2+heightY3+23);
g.drawLine(639,5+heightY1+heightY2+heightY3,639,5+heightY1+heightY2+heightY3+heightY4);
g.drawString("日期:",642,5+heightY1+heightY2+heightY3+23);
g.drawString("用户:",790,5+heightY1+heightY2+heightY3+23);
g.drawLine(Math.round((5+widthX)*9/10),5+heightY1+heightY2+heightY3,Math.round((5+widthX)*9/10),5+heightY1+heightY2+heightY3+heightY4);
//画第四条分割线
g.drawLine(5,5+heightY1+heightY2+heightY3+heightY4,5+widthX,5+heightY1+heightY2+heightY3+heightY4);
//显示供应商名字及版权信息
g.setColor(Color.white);
g.setFont(new Font("宋体",Font.PLAIN,15));
g.drawString("软件开发商:希望软件有限责任公司 CopyRight AllRightServer 2004 版权所有 ",8,5+heightY1+heightY2+heightY3+heightY4+23);
//画右边的侧线
g.setColor(Color.red);
g.drawLine(Math.round((5+widthX)*9/10),5+heightY1,Math.round((5+widthX)*9/10),5+heightY1+heightY2+heightY3);
//画实时数据
g.setColor(Color.green);
g.drawString("分析类别",Math.round((5+widthX)*9/10)+14,5+heightY1+30);
g.drawString("分析部门",Math.round((5+widthX)*9/10)+14,5+heightY1+95);
g.drawString("分析日期",Math.round((5+widthX)*9/10)+14,5+heightY1+160);
g.drawString("计划产量",Math.round((5+widthX)*9/10)+14,5+heightY1+235);
g.drawString("实际产量",Math.round((5+widthX)*9/10)+14,5+heightY1+300);
g.drawString("超欠产量",Math.round((5+widthX)*9/10)+14,5+heightY1+365);
g.drawString("同期产量",Math.round((5+widthX)*9/10)+14,5+heightY1+430);
g.drawString("同 期 比",Math.round((5+widthX)*9/10)+14,5+heightY1+500);
g.setColor(Color.red);
g.drawLine((Math.round((5+widthX)*9/10)),5+heightY1+555,5+widthX,5+heightY1+555);
}
//消息处理函数
public void processEvent() {
/**
*分析的部门
*/
departmentGJ = new Choice();
departmentGJ.addItem("集团公司");
departmentGJ.addItem("指挥部");
//departmentGJ.setEditable(false);
departmentGJ.reshape(53,5+heightY1+heightY2+heightY3+8,80,20);
this.getContentPane().add(departmentGJ);
/**
*分析类别
*/
fxlbGJ = new Choice();
fxlbGJ.addItem("原煤产量");
fxlbGJ.addItem("回采产量");
fxlbGJ.addItem("掘进进尺");
fxlbGJ.addItem("开拓进尺");
fxlbGJ.reshape(230,5+heightY1+heightY2+heightY3+8,80,20);
this.getContentPane().add(fxlbGJ);
/**
*分析阀值
*/
fxfzGJ = new Choice();
fxfzGJ.add("年");
fxfzGJ.add("月");
fxfzGJ.add("日");
fxfzGJ.reshape(410,5+heightY1+heightY2+heightY3+8,40,20);
this.getContentPane().add(fxfzGJ);
/**
*分析年份
*/
fxyearGJ = new TextField();
fxyearGJ.reshape(550,5+heightY1+heightY2+heightY3+8,80,20);
this.getContentPane().add(fxyearGJ);
/**
*使内容窗格透明
*/
if(getContentPane() instanceof JComponent) {
((JComponent)getContentPane()).setOpaque(true);
}
/**
*显示现在的日期与时间
*/
NowDate = new Label();
this.getContentPane().add(NowDate);
NowDate.setBackground(getBackground());
NowDate.setForeground(Color.yellow);
NowDate.reshape(690,5+heightY1+heightY2+heightY3+8,95,20);
NowDate.setText(NowDate().toString().substring(0,4)+"年"+NowDate().toString().substring(5,7)+"月"+NowDate().toString().substring(8,10)+"日");
/**
*显示用户得名字
*/
UserName = new Label();
UserName.reshape(840,5+heightY1+heightY2+heightY3+8,75,20);
UserName.setForeground(Color.yellow);
UserName.setBackground(Color.black);
this.getContentPane().add(UserName);
UserName.setText("测试用户");
/**
*退出系统
*/
ExitSys = new Button("退出系统");
ExitSys.reshape(Math.round((5+widthX)*9/10)+3,5+heightY1+heightY2+heightY3+4,96,32);
this.getContentPane().add(ExitSys);
ExitSys.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
if((e.getActionCommand()).equals("退出系统")) {
System.exit(0);
}
}
});
/**
*初始化鼠标及产量标签
*/
MousePositionX = new Label();
MousePositionY = new Label();
MousePositionX.setBackground(getBackground());
MousePositionY.setBackground(getBackground());
MousePositionX.setForeground(Color.white);
MousePositionY.setForeground(Color.white);
MousePositionX.reshape((Math.round((5+widthX)*9/10))+10,5+heightY1+555+5,80,20);
MousePositionY.reshape((Math.round((5+widthX)*9/10))+10,5+heightY1+555+25,80,20);
this.getContentPane().add(MousePositionX);
this.getContentPane().add(MousePositionY);
MousePositionX.setText("X:");
MousePositionY.setText("Y:");
}
public void paint(Graphics g) {
//等待信息的显示
g.setFont(new Font("宋体", Font.PLAIN, 18));
g.setColor(getBackground());
g.drawString(waitingFlagTemp,200,50);
g.setColor(Color.white);
g.drawString(waitingFlag,200,50);
waitingFlagTemp = waitingFlag;
//显示系统主框架
if(prepareParameterFinished&&getDataFinished) {
drawSysMainFrame(g);
}
}
//===================================================砸项函数======================================================
/**
获得当日的日期(本机)
*/
public java.sql.Date NowDate() {
Calendar cal = Calendar.getInstance();
java.util.Date UtilDate = cal.getTime();
long NowTime = UtilDate.getTime();
java.sql.Date NowDate = new java.sql.Date(NowTime);
return NowDate;
}
//===================================================鼠标移动事件==================================================
public void mouseMoved(MouseEvent e) {
MousePositionX.setText("X: "+e.getX());
MousePositionY.setText("Y: "+e.getY());
}
}
//连接SERVLET的类,在这里我们先什么都不做
public class SCQuantity {
public void getSCData() {
try {
Thread.sleep(1000);
}catch(Exception e) {}
}
}
//存储缓冲数据的类,在这里先什么都不做
public class SaveSCQuantity {
}
其他类库整理中。。。