-
1 项目实施
-
2 引导训练
学习目的
1.熟知井下人员定位管理系统架构
2.学会安卓端人员定位系统开发流程
3.学会井下人员定位管理系统的接口设计
4.学会人员定位服务端和定位终端功能的实现方法
实现方法及步骤
1. 接入层系统
2. 人员定位服务端
3. 人员定位终端
4. 接口设计
井下人员管理系统
²案例1 模块接口设计
1.井下地图人员个数信息接口
url地址:underMembersNumberList
Action 流程:
调用getUnderMembersNumberList()函数获取井下所有区域里面所有人员数量;
把获取的list存储data.map里面;
map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式:
{
substationNum:
//员工工作信息,类型:List<SubstationNum>
[{
String substationName; 分站名称
String number; 分站下人数
}]}
2.人员列表通讯接口
获取一系列处于甩道,已经下井或者地面人员详细信息。
url地址:membersLogList?area=工作位置(甩道,下井或者地面)
工作位置:1.Platform 甩道 2. Ground地面 3. Underground 下井
Action 流程:
调用getMembersLogList(Stringarea)函数获取制定工作区域里面所有人员信息列表;
把获取的list存储data.map里面;²map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式:
{
logInfo: //员工工作信息,类型:List<LogInfo>
[{
String id; //编号
String name; //姓名
Stringdepartment; //部门
String type; //工种
String stayTime; //停留时间
String currentPosition; //当前位置
}]
}
3.单个人员工作信息通讯接口
通过人员ID去查询人员工作信息,相当于获取人员列表,包含工作信息和时间轴。
url地址:memberTimePathList?id=编号
Action流程:
调用getMemberTimePathList(Stringid)函数获取特定员工工作信息;
把获取的单个对象存储data.map里面;
map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式:
{
positionInfo: //员工工作信息,类型:List<PositionInfo>
{
String id 员工ID
String name; 员工姓名
String department 部门
String type
positionLoglist: //单个员工当天时间轴信息组,类型
List< PositionLog>
[{
String oldBase 离开分站
String enterTime; 进入时间
String newBase 进入分站
}]
}
}
4.人员数量查询通讯接口
查询当前已经下井和等待下井的人员数量,也可以查询早班,中班,晚班的人员数量。
url地址:membersNumber?type=查询类型
查询类型:1.Underground下井 2. Waiting等待下井 3. Early早班 4. Noon中班 5. Evening晚班
Action流程:
调用getMembersNumber(String type)函数获取特定区域员工数量;
把获取的单个对象存储data.map里面;
map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式:
{
membersNumber: //员工数量,类型:MembersNumber
{
Integer allNumber; //所有数量
Integer employeeNumber; //员工数量
Integer employerNumber; //领导数量,领导没有的话,则显示为NULL
}
}
5.区域查询通讯接口
查询主区域里面具体分区域列表。
url地址:areaList?area=工作位置(甩道,下井或者地面)
工作位置:1.Platform 甩道 2. Ground地面 3. Underground 下井
Action流程:
调用getAreaList(Stringtype)函数获取特定区域分区域列表;
把获取的list对象存储data.map里面;
map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式: 类型Area和Base
{
areaInfo: //大区区域,类型:AreaInfo
[{
String id; //区域ID
String name; //区域name
base: //包含的分站列表
[{
String id; //分站ID
String name; //分站name
}]
}]
}
6.超时或者异常人员报警记录查询通讯接口
主要用来显示异常人员和异常原因的,信息通过列表显示。
url地址:troubleInfoList
类型:1.TimeOut超时 2. Error异常
Action流程:
调用getWrongMembersList()函数获取特定异常类型的员工List;
把获取的list对象存储data.map里面;
map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式:
{
troubleInfoList: //异常员工信息列表,类型List<TroubleInfo>
[{
String id; //员工编号
String name; //员工姓名
String team; //员工班组
String entertime; //进井时间
String worktime; //工作时间
String reason; //异常原因(和超时原因混用)
}]
}
7.单个员工身份信息查询通讯接口
url地址:employeeDetailInfo?id=编号
Action流程:
调用getMemberDetailInformation(String id)函数获取特定员工信息;
把获取的单个数据对象存储data.map里面;
map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式:
{
employeeDetailInfo: //身份信息,类型:EmployeeDetailInfo
{
String id; //员工ID
String name; //员工name
String light; //灯号
String uid; //身份证号
String sex; //性别
String notion; //民族
Booleanofficer; //干部
Date birthday; //生日
String political; //政治面貌
}
}
8.制定查询员工信息列表查询通讯接口
url地址:employeeInfo?type=工种&bz=部门&officer=职务
工种:1.机电工 2. 特种工 3. 正常工
部门:1.办公室 2.财务部 3. 办事处
职务:1.员工 2.组长 3. 经理
注意:当查询的时候,必定有其中一项有类型限制,别的两项均为NULL。
Action要做相应处理,知道他是按照什么限定方式搜索的。
Action流程:
调用getMembersInformationList(String type , String content);
函数获取特定员工信息列表;
把获取的list对象存储data.map里面;
map里面数据处理成JSON格式;
返回Success,同时让struts将JSON数据返回给客户端。
JSON格式:
{
employeeInfo: //身份信息,类型:EmployeeInfo
[{
String id; //编号
String name; //姓名
String card; //卡号
String bz; //部门
String type; //工种
}]
}
案例2 主要函数的设计
以子模块为单位,列出为实现模块功能,所需要的模块内部接口。包括函数接口、全局变量接口等任何函数间操作所用到的内容。其中函数接口需要将输入、输出参数及返回值确定。
1.井下分站人数查询接口
函数名:publicstatic List<Substation> getUnderMembersNumberList()
函数流程:
创建List<Substation>对象list;
获取ApplicationContext对象,即获取springXML配置文件上下文;
创建PeoplePositionDao对象,获取SpringXML文件中bean实例;
调用findSubstation方法,获取某个分站下的人数赋值给list;
返回list。
函数输入:无
函数输出:List<Substation>
先获取所有分站的ID号,通过分站ID号分别查询每个分站下的人数,所有分站信息和对应的人数最后以List形式返回
2.特定分站下人员列表查询接口
函数名:publicstatic List<LogInfo> getMembersLogList(String area)
函数流程:
创建List<LogInfo>对象list;
获取ApplicationContext对象,即获取springXML配置文件上下文;
创建PeoplePositionDao对象,获取SpringXML文件中bean实例;
调用findLogInfo方法,获取特定分站下人员信息列表;
返回list。
函数输入:Stringarea 分站名称
函数输出:List<LogInfo>
根据不同分站ID号,查询对应的人员列表
3.特定员工井下位置记录信息查询接口
函数名:publicstatic List<PositionInfo> getMemberTimePathList(String id)
Path特定员工的井下位置记录信息
函数流程:
创建PositionInfo对象positionInfo;
创建List<PositionLog>对象list_pl;
调用getPositionLogList方法获取个人位置记录的时间轴;
获取ApplicationContext对象,即获取springXML配置文件上下文;
创建PeoplePositionDao对象,获取SpringXML文件中bean实例;
调用findPositionInfo方法,获取特定员工部分个人信息列表;
将list_pl赋值给positionInfo对象的对应属性;
返回list。
函数输入:Stringid 员工ID
函数输出:List<PositionInfo>
根据员工ID查询该员工当天的位置记录信息,最后记录信息以List形式返回
4.特定员工井下位置记录时间轴查询接口
函数名:publicstatic List<PositionLog> getPositionLogList(String id)
Path特定员工的井下位置记录信息
函数流程:
创建List<PositionLog>对象list;
获取ApplicationContext对象,即获取springXML配置文件上下文;
创建PeoplePositionDao对象,获取SpringXML文件中bean实例;
调用findPositionLog方法,获取特定员工井下位置记录信息列表;
返回list。
函数输入:Stringid 员工ID
函数输出:List<PositionLog>
5.区域信息查询接口
函数名:publicstatic List<AreaInfo> getAreaList()
Area是区域以及区域内的分站列表
函数流程:
创建List<AreaInfo>对象list_a;
创建List<BaseInfo>对象list_b;
获取ApplicationContext对象,即获取springXML配置文件上下文;
创建PeoplePositionDao对象,获取SpringXML文件中bean实例;
调用findAeraInfo方法,获取所有区域信息列表;
调用getBaseList方法获取特定区域的分站列表;
将list_b赋值给list_a中对应的属性;
返回list_a
函数输入:无
函数输出:List<AreaInfo>
6.特定区域分站信息查询接口
函数名:publicstatic List<BaseInfo> getBaseList()
Area是区域以及区域内的分站列表
函数流程:
创建List<BaseInfo>对象list;
获取ApplicationContext对象,即获取springXML配置文件上下文;
创建PeoplePositionDao对象,获取SpringXML文件中bean实例;
调用findBaseInfo方法,获取所有区域信息列表;
返回list。
函数输入:无
函数输出:List<BaseInfo>
先查询出所有区域的ID号,根据区域ID号逐一查询出该区域下所有的分站ID和名字,区域类中有List对象保存分站数据。最后只把保存区域信息的List返回
7.人员异常/超时信息查询接口
函数名:publicstatic List<TroubleInfo> getWrongMembersList ()
函数流程:
创建List<TroubleInfo>对象list;
获取ApplicationContext对象,即获取spring XML配置文件上下文;
创建PeoplePositionDao对象,获取Spring XML文件中bean实例;
调用findTroubleInfo方法,获取当日人员异常信息列表;
返回list。
函数输入:无
函数输出:List<TroubleInfo>
查询当天所有的异常信息和超时信息
8.员工个人信息查询接口
函数名:publicstatic EmployeeDetailInfogetWorkerDetailInfo(String id)
函数流程:
创建EmployeeDetailInfo对象e;
获取ApplicationContext对象,即获取spring XML配置文件上下文;
创建PeoplePositionDao对象,获取Spring XML文件中bean实例;
调用findEmployeeDetailInfo方法,获取当日员工个人信息列表;
返回list。
函数输入:Stringid 员工ID号
函数输出:EmployeeDetailInfo
9.特定条件下人员信息查询接口
函数名:privatestatic List<EmployeeInfo> getWorkerInfo(String id)
函数流程:
创建List<EmployeeInfo>对象list;
获取ApplicationContext对象,即获取spring XML配置文件上下文;
创建PeoplePositionDao对象,获取Spring XML文件中bean实例;
调用findEmployeeInfo方法,获取当日员工个人信息列表;
返回list。
函数输入:Stringid 员工ID号
函数输出:List<EmployeeInfo>
10.三种特定条件下人员信息查询接口
函数名:privatestatic List<EmployeeInfo> getWorkerInfo(String type,String bz,Stringofficer)
函数流程:
创建List<EmployeeInfo>对象list;
获取ApplicationContext对象,即获取spring XML配置文件上下文;
创建EmployeeInfoDao对象,获取Spring XML文件中bean实例;
分别监测Type,Bz,Officer是否为空,把不为空的组合成sql语句;
调用findEmployeeInfo方法,获取当日员工个人信息列表;
返回list。
函数输入:Type工种 Bz 部门 Officer 职务
函数输出:List<EmployeeInfo>
案例3 模块函数集成实现与训练
/**
* get the people list of one area
*
* @param point
* @return
*/
public static List<LogInfo>getMembersLogList(String point) {
List<LogInfo> list = newArrayList<LogInfo>();
ApplicationContext actx = getXML();
PeoplePositionDao ppd = (PeoplePositionDao)actx
.getBean("peoplePositionDao");
//long time1 = System.currentTimeMillis();
//long time2 = System.currentTimeMillis() - 20* 60 * 1000;
//String day1 = convert(time1, s_time);
//String day2 = convert(time2, s_time);
//String month = convert(time1,s_month).replaceAll("-", "");
String table = "ag_under";
String query = "select u.empId,e.NAME, b.BZNAME, e.typeOfWork,u.stayTimeAll, c.ADRESS from "
+ table
+ " u "
+ "LEFT JOIN tb_employee e ON u.empId =e.EMPID "
+ "LEFT JOIN tb_bz b ON e.bzid = b.bzid"
+ "LEFT JOIN tb_base c ON u.newBaseId =c.BaseID "
+ " param "
+ "ORDER BY u.empId;";
if (point.equals("1")) {
System.out.println("xxx1");
query = query.replaceAll("param","where u.oldBaseId = '0' AND u.newBaseId = '21'");
}
else if (point.equals("2")) {
System.out.println("xxx2");
query = query.replaceAll("param",
"where u.oldBaseId != '0' AND u.newBaseId!= '21'");
}
else if (point.equals("3")) {
System.out.println("xxx3");
query = query
.replaceAll("param",
"where u.oldBaseId != '0' AND u.newBaseId!= '21' AND b.bzid = 'QY001'");
}
else {
System.out.println("xxx4");
query = query.replaceAll("param"," ");
}
System.out.println(query);
list = ppd.findLogInfo(query);
return list;
}
/**
* get the history path of a worker
*
* @param id
* @return
*/
public static PositionInfogetMemberTimePathList(String id) {
PositionInfo positionInfo = newPositionInfo();
List<PositionLog> list = newArrayList<PositionLog>();
list = getPositionLogList(id);
ApplicationContext actx = getXML();
PeoplePositionDao ppd = (PeoplePositionDao)actx
.getBean("peoplePositionDao");
String query = "SELECT e.EMPID,e.NAME,b.BZNAME, e.typeOfWork FROM tb_employee e LEFT JOIN tb_bz b ON e.bzid =b.bzid WHERE e.EMPID = '"
+ id + "'";
positionInfo =ppd.findPositionInfo(query).get(0);
positionInfo.setList(list);
return positionInfo;
}