实现以下图片的功能:
实现的功能:
如果旷工在井下按了报警按钮的话,手环就会发生数据alarm=1,然后这个页面就会出现时间 地点 人员名称 单位的信息,点击提交就会显示在LED的屏幕上面
思路:
1.根据报警的信息查询yh表,得到时间和手卡编号
2.根据编号查询number表中的name和part
3.再根据基站bs来查询表base的名称name
注意:表和表之间的关系
存储人员的信息,姓名 手卡编号 部门 职位 职责 状态
这个是接受的数据 编号 基站 心率 高压 低压 报警 数据 时间 状态
遇到的问题:
008c00000000001d
00 8c是手环的编号
00256+ HEX(8C)=140
如果是01 01则代表
1256+1=257
之所以要这样处理是为了准确度,手环和人员姓名一一对应的关系;
每个手环最后4位的地址就是它发送数据过来的时候的地址;
如果接受的信号是010100000000001d
前面的0101不能直接转换16进制,前面的01是高位的,所有需要HEX(01)*256+(01)=257才是实际的地址而不是2;
我的处理方式:
int sz[] = new int[8];
int ubs=0;
int lbs=0;
String szs[] = new String[9];
for (int n = 0; n < 8; n++) {// n<8
// n=0 0,2 n=1 2,2
if(n>=2){
String str = null;
str = a.substring(2 * n, 2 * n + 2);
sz[n] = Integer.parseInt(str, 16);
}
if(n<2){
String str = null;
ubs=sz[n]*256;
str = a.substring(2 * n, 2 * n + 2);
ubs=Integer.parseInt(str);
if(n==0){
sz[0]=ubs*256;
}else{
sz[1]=ubs;
}
}
}
for (int i = 0; i < 9; i++) {
if (i == 0) {
lbs=sz[0];
}
if (i == 1) {
lbs=lbs+sz[1];
szs[0] = Integer.toString(lbs);
}
if (i == 6) {
sb1.append(sz[i]);
}
if (i == 7) {
sb1.append(sz[i]);
szs[1] = sb1.toString();
}
if (i == 3 || i == 4 || i == 5 || i == 2) {
szs[i] = String.valueOf(sz[i]);
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
szs[6] = a;
szs[7] = df.format(new Date());
szs[8] = "1";
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date();
String dd = sim.format(d);
}
if(szs[0]!=null&&szs[1]!=null&&szs[2]!=null&&szs[3]!=null&&szs[4]!=null&&szs[5]!=null&&szs[6]!=null&&szs[7]!=null&&szs[8]!=null&&a.length()==16){
insert_num(a, szs);
}
ALTER TABLE person_info ADD UNIQUE(number);
设置表person_info 的字段number的唯一性;
我已经实现把数据库里面报警人员的信息显示在LED的文本框里面:
实际图如下:
servlet代码如下:
package cn.com.servlet;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.com.gj.Four;
import cn.com.lf.JdbcUtils;
public class Inform_LED extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取数据库里面的报警信息
//查询的条件:当天时间 报警信息非0,的
Date da=new Date();
SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd");
String time=sim.format(da);
String sql="select * from yh where time like '"+ time + "%' and alarm=1 ";
ResultSet rs=JdbcUtils.select(sql, null);
//List<Four> list=new ArrayList<Four>();
List<String> list=new ArrayList<String>();
//1.根据报警的信息查询yh表,得到时间和手卡编号
try {
while(rs.next()){
String num=rs.getString(1);//手卡编号
String times=rs.getString(8);//时间
String name=null;
String part=null;
String bsname=null;
//2.根据编号查询number表中的name和part
String sqlq1="SELECT * FROM person_info WHERE number=?";
String sz[]={num};
ResultSet rs1=JdbcUtils.select(sqlq1, sz);
if(rs1.next()){
name=rs1.getString(1);//姓名
part=rs1.getString(3);//部门
}
//3.再根据基站bs来查询表base的名称name
String sqlq2="SELECT * FROM base WHERE num=?";
String sz2[]={num};
ResultSet rs2=JdbcUtils.select(sqlq2, sz2);
if(rs2.next()){
bsname=rs2.getString(1);//基站所处的地段
}
String infor=times+" "+name+" "+bsname+" "+part;
//把时间 姓名 地段名称 单位都存储到一个集合里面
//Four four=new Four(times, name, bsname, part);
list.add(infor);
}
//把信息全部都返回页面
request.setAttribute("list", list);
request.getRequestDispatcher("/inform_LED.jsp").forward(request, response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
jsp页面如下:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>华金矿业-LED通知维护</title>
<!-- 首页 -->
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<link rel="stylesheet" type="text/css" href="css/index.css">
<script type="text/javascript">
function hide(){
var id=document.getElementById("center_img");
var name=id.getAttribute("name");
var left=document.getElementById("center-left");
if(name=="block"){
left.setAttribute("style", "display:none;");
id.setAttribute("name", "none");
}if(name=="none"){
left.setAttribute("style", "display:block;");
id.setAttribute("name", "block");
}
}
function display(a){
var elements=[];
//获得所有的li标签
var list=document.getElementsByTagName("li");
var len=list.length;//获得长度
//把class=sub-menu的li都放在集合里面
for(var i=0;i<len;i++){
if(list[i].className== "sub-menu"){
elements[elements.length]=list[i];
}
}
/*把所有的隐藏 */
for(var i=0;i<elements.length;i++){
//获得下面的ul
var ul=elements[i].childNodes[3];
/* 设置属性为隐藏 */
ul.setAttribute("style","display:none");
/* 点击当前元素的Ul设置可见 */
}
/* 对所有的input背景颜色设置 */
var tree=document.getElementsByName("tree");
for(var i=0;i<tree.length;i++){
tree[i].setAttribute("style", "background-color:#E1F1FD;");
}
var input=document.getElementById(a);
input.setAttribute("style", "background-color:#5094D6;");
var ula=input.parentNode;
var lla=ula.childNodes;
for(var i=0;i<lla.length;i++){
if(lla[i].nodeName=='UL'){
lla[i].setAttribute("style","display:block");
}
}
}
/*获取当前的日期和时间 */
function tm(){
var today = new Date();
var year=today.getFullYear();
var month=today.getMonth()+1;
var day=today.getDay();
var tm=year+"年"+month+"月"+day+"日"+" "+today.getHours() + ":"
+ today.getMinutes() + ":" + today.getSeconds(); ;
var rq=document.getElementById("rq");
rq.innerHTML=tm;
}
</script>
</head>
<body onload="tm();">
<!-- 上 -->
<div id="up">
<div id="up_left">
<ul>
<li style="font-size:12px;">铜陵华金矿业有限责任公司</li>
<li>井下综合监管系统</li>
</ul>
</div>
<table id="up_right">
<tr>
<td class="prompt">您好!<%=request.getParameter("username") %></td>
<td class="prompt">[华金矿业]:</td>
<td class="prompt" id="rq"></td>
</tr>
<tr>
<td class="prompt">密码</td>
<td class="prompt">桌面</td>
<td class="prompt">注销</td>
</tr>
</table>
</div>
<div style="width:102%;height: 50px;background-color: #4891C6;position: relative;margin-top: -14px;margin-left: -7px;"></div>
<!--中 -->
<div id="centers">
<div id="center-left">
<input type="button" value="功能菜单" class="view">
<ul id="all">
<!-- 第一个菜单 -->
<li class="sub-menu">
<input type="button" value="图形展现" class="button" name="tree" id="jpg" onclick="display(this.id);">
<ul style="display: none;">
<li><a href="total_picture.jsp">实时总图</a></li>
<li><a href="role_position.jsp" >轨迹定位</a></li>
</ul>
</li>
<!-- 第二个菜单 -->
<li class="sub-menu">
<input type="button" value="人员定位" class="button" name="tree" id="people" onclick="display(this.id);">
<ul style="display: none;">
<li>井下人员状况</li>
<li>LED通知管理</li>
<li>LED显示管理</li>
<li>大屏幕输出</li>
<li>人员定位搜索</li>
<li>人员考勤搜索</li>
<li>调度统计</li>
</ul>
</li>
<!-- 第三个菜单 -->
<li class="sub-menu">
<input type="button" value="环境监测" class="button" name="tree" id="supervise" onclick="display(this.id);">
<ul style="display: none;">
<li>环境测试总图</li>
<li>环境监测数据查询</li>
<li>环境报警数据查询</li>
</ul>
</li>
<!-- 第四个菜单 -->
<li class="sub-menu">
<input type="button" value="查询统计" class="button" name="tree" id="select" onclick="display(this.id);">
<ul style="display: none;">
<li>人员报警查询</li>
<li>超时人员查询</li>
<li>设备工作状况</li>
<li>设备工作状态查询</li>
</ul>
</li>
<!-- 第五个菜单 -->
<li class="sub-menu">
<input type="button" value="基础信息管理" class="button" name="tree" id="information" onclick="display(this.id);">
<ul style="display: none;">
<li>基站定义</li>
<li>采集基站定义</li>
<li>采集设备定义</li>
<li><a href="/Socket/Personnel_definition">人员定义</a></li>
<li>工种定义</li>
<li>职务定义</li>
<li>带班领导定义</li>
</ul>
</li>
<!-- 第六个菜单 -->
<li class="sub-menu">
<input type="button" value="系统管理" class="button" name="tree" id="system" onclick="display(this.id)">
<ul style="display: none;">
<li>机构定义</li>
<li>用户定义</li>
</ul>
</li>
</ul>
<!--隐藏下面的具体字节 -->
</div>
<div id="center-right">
<!-- 人员信息界面-->
<div id="peo_head">基础信息管理-LED通知维护</div>
<br>
<div id="peo_info">
<form action="/Socket/" method="post">
<table style="width: 60%;border-collapse:separate; border-spacing:3px;font-size: 14px;">
<tr><td><span style="color:red;">*</span>通知:</td>
<td><textarea style="width:320px;height:185px;resize: none;overflow:scroll; overflow-x:hidden; ">
<c:forEach items="${list}" var="i" varStatus="status">
${i }
</c:forEach>
</textarea></td>
</tr>
<tr><td><span style="color:red;">*</span>安全口号:</td><td><input type="text" style="width:320px;" placeholder="安全生产"></td></tr>
<tr><td colspan="2"><input type="submit" value="提交" style="background-color:#8dc2e6;color:white;height: 40px;width: 128px; "></td></tr>
</table>
</form>
</div>
</div>
<!-- 遍历数据库里面的集合-->
</div>
<!--下 -->
<div id="bottom">
诚信安天下-------铜陵力凡有限责任公司
</div>
</body>
<style>
#peo_info{
background-color:#e2e7ea;
width:105%;
height: 430px;
position: relative;
margin-left: 23px;
padding-left: 30px;
padding-top: 40px;
}
.trr{
height: 30px;
font-size: 14px;
}
#peo_head{
width:119%;
height: 40px;
background-color:#8dc2e6;
text-align: center;
color:white;
position: relative;
margin-top: -2px;
padding-top: 19px;
}
#peo_info td{
width: 15%;
text-align: center;
}
</style>
</html>
最后一个功能就是点击提交的时候把文本框里的内容放在一个新建的记事本文件里面。
当点击提交按钮的时候就会跳转到如下的servlet里面
FileIo.java代码如下:
package cn.com.servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileIo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取多行文本框里的内容
String info=request.getParameter("textarea");
info = URLEncoder.encode(info, "ISO-8859-1");
info= URLDecoder.decode(info, "UTF-8");
System.out.println(info);
//2.文件写入文本框里面
FileOutputStream fos =null;
try {
fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\led.txt", false);
//向文件中写入数据
byte[] data = info.getBytes();
fos.write(data);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();//关闭输出流
} catch (IOException e) {
e.printStackTrace();
}
}
request.getRequestDispatcher("/LED_success.jsp").forward(request, response);
}
}
效果图如下: