1.添加站间互售入口

对应的html代码

<button onclick="otherStation()">站间互售</button>

对应的js发送函数

function otherStation(){
//进入进入站间互售页面列表
window.location.href="/otherTicket/index";
}

对应的控制层代码:

  /**
* 站间互售页面
* @return
*/
@RequestMapping("/index")
public String listPage() {
return "/WEB-INF/views/listOther.jsp";
}

2.站间互售列表页面listOther.jsp代码

站间互售的页面与本站的页面完全一样,其实站间互售的本质与本站售票的逻辑几乎完全一样,唯一的不同是数据来源不同

 <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>车票列表</title>
<%--引入jquery--%>
<script type="text/javascript" src="/static/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="/static/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<br/>
<button onclick="loginout()">注销</button>
<button onclick="orderDetail()">订单明细</button>
<br/>
<br/>
<div align="center">
开始车站:<input id="startStation" type="text" value="" /> 到
到达车站:<input id="stopStation" type="text" value="" />
<br/>
开始时间:<input id="startTimeMin" onclick="WdatePicker()" value=""/>
结束时间:<input id="startTimeMax" onclick="WdatePicker()" value=""/>
<button onclick="query(5,1)">查询</button> <table id="ticketList" width="50%" border="1" cellspacing="1">
<tr>
<td>编号</td>
<td>开始车站</td>
<td>到达车站</td>
<td>操作</td>
</tr>
<%--模拟假数据--%>
<tr>
<td>1</td>
<td>北京</td>
<td>成都</td>
<td><button>购买</button></td>
</tr>
</table>
<button onclick="firstPage()">首页</button>
<button onclick="upPage()">上页</button>
<button onclick="nextPage()">下页</button>
<button onclick="lastPage()">末页</button>
跳转到<input id="currentPage1" value="" size="1"/>页 <button onclick="jumpPage()">跳转</button>,
每页显示<span id="pageSize">10</span>条,
当前<span id="currentPage">5</span>/<span id="totalPage">10</span>页,
总共<span id="count">48</span>条
</div>
</body>
<script type="text/javascript"> function orderDetail(){
//进入订单明细页面
window.location.href="/order/index";
}
function loginout(){
//进入注销处理控制层
window.location.href="/login/loginout";
}
//首页
function firstPage(){
alert("--firstPage--");
//获取每页显示条数
var _pageSize = $("#pageSize").html();
query(_pageSize,1);
}
//上页
function upPage(){
alert("--upPage--");
var _pageSize = $("#pageSize").html();
//当前页
var currentPage=$("#currentPage").html();
var _currentPage=currentPage-1;
query(_pageSize,_currentPage);
}
//下页
function nextPage(){
alert("--nextPage--");
var _pageSize = $("#pageSize").html();
//当前页
var currentPage=$("#currentPage").html();
//var _currentPage=currentPage+1;//不能这样直接加必须使用函数
var _currentPage= parseInt(currentPage)+1;
query(_pageSize,_currentPage);
}
//末页
function lastPage(){
alert("--lastPage--");
var _pageSize = $("#pageSize").html();
//当前页
var _currentPage=$("#totalPage").html();
query(_pageSize,_currentPage);
}
//跳转到
function jumpPage(){
alert("--jumpPage--");
var _pageSize = $("#pageSize").html();
//当前页
var _currentPage=$("#currentPage1").val();
query(_pageSize,_currentPage);
}
/**
* 注意在调用该函数时必须输入参数
* 查询+ 分页
* */
function query(_pageSize,_currentPage){
// alert("------query------");
//1.获取参数
var startStation = $("#startStation").val();
var stopStation = $("#stopStation").val();
//查询时间范围获取
var startTimeMin = $("#startTimeMin").val();
var startTimeMax = $("#startTimeMax").val();
//2.发送请求
var params = {
// startStation:startStation,
stopStation:stopStation,
_pageSize:_pageSize,//分页需要的数据
_currentPage:_currentPage//分页需要的数据
};
if (null!=startStation && ''!=startStation){//开始车站有值的时候才传递参数
params['startStation']=startStation; //动态向json中添加参数
}
if (null!=startTimeMin && ''!=startTimeMin){//最小时间
params['startTimeMin']=startTimeMin;
}
if (null!=startTimeMax && ''!=startTimeMax){//最大时间
params['startTimeMax']=startTimeMax;
}
var url = '/otherTicket/data';
jQuery.ajax({
type: 'POST',
contentType: 'application/x-www-form-urlencoded',
url: url,
data: params,
dataType: 'json',
success: function (data) {
//取出列表
var ticketList = data.list;
//取出分页数据
var currentPage= data.currentPage;
var count= data.count;
var pageSize= data.pageSize;
var totalPage= data.totalPage;
var html='<tr>'+
'<td>编号</td>'+
'<td>开始车站</td>'+
'<td>到达车站</td>'+
'<td>发车时间</td>'+
'<td>余票数</td>'+
'<td>线路类型</td>'+
'<td>操作</td>'+ //添加购票按钮
'</tr>';
//解析数据到table表中
for (var i=0;i<ticketList.length;i++){
//取出一个对象 java里面的内省机制
var ticket = ticketList[i];
var id = ticket.id;
var startStation= ticket.startStation;
var stopStation= ticket.stopStation;
//发车时间
var startTime = ticket.startTime;
var standby = ticket.standby;
var typeName = ticket.typeName;
html+='<tr>'+
'<td>'+id+'</td>'+
'<td>'+startStation+'</td>'+
'<td>'+stopStation+'</td>'+
'<td>'+startTime+'</td>'+
'<td>'+standby+'</td>'+
'<td>'+typeName+'</td>'+
'<td><button onclick="buyTicket('+id+')">购买</button></td>'+ //添加购票按钮
'</tr>';
}
//3.填充数据
//填充列表
$("#ticketList").html(html);
//填充分页数据
$("#totalPage").html(totalPage);
$("#pageSize").html(pageSize);
$("#count").html(count);
$("#currentPage").html(currentPage);
},
error: function (data) {
alert("失败啦");
}
});
} function buyTicket(id){
alert("buyTicket----"+id);
//2.发送请求
var params = {
id:id
};
var url = '/ticket2/buyTicket';
jQuery.ajax({
type: 'POST',
contentType: 'application/x-www-form-urlencoded',
url: url,
data: params,
dataType: 'json',
success: function (data) {
alert("成功");
//刷新数据
query(5,1);
},
error: function (data) {
alert("失败啦");
}
});
}
//执行js函数
query(5,1);
</script>
</html>

listOther.jsp

3.获取列表的控制层代码

与本站售票逻辑一模一样

  /**
* 获取车票数据 高级查询 + 分页
*/
@RequestMapping("/data")
@ResponseBody //请求数据必须写这个
public ResultPage getData3(TicketQueryObj ticketQueryObj, String _pageSize, String _currentPage) {
//接收参数 可以将分页数据直接用TicketQueryObj对象就收,这里单独写出来是为了更好的理解 分页前端需要传的两个重要参数
if (_pageSize != null && !_pageSize.equals("")) {
ticketQueryObj.setPageSize(Integer.valueOf(_pageSize));
}
if (_currentPage != null && !_currentPage.equals("")) {
ticketQueryObj.setCurrentPage(Integer.valueOf(_currentPage));
}
//调用方法
ResultPage pageOther = ticketService.getPageOther(ticketQueryObj);
//控制跳转
return pageOther;
}

4.业务层代码

业务层逻辑与本站逻辑一样,都是在封装分页对象,不同的是本站的数据来自自己的dao获取,而站间互售来自接口调用返回的数据并解析

  @Override
public ResultPage getPageOther(TicketQueryObj ticketQueryObj) {
List<Ticket> tickets = new ArrayList<>();
Integer count=0;
//发送httpClient请求
try {
//发送请求获取分页对象数据
String strRe = HttpClientUtil2.post("http://10.3.2.149:8080/ticket/data?s=cbsjh");
//解析数据
JSONObject jsonObject = JSONObject.fromObject(strRe);
//获取分页对象的列表
JSONArray list = jsonObject.getJSONArray("list");
//获取分页对象中的总共条数
count = jsonObject.getInt("totalSize");
//循环取出 列表的中对象将其转变为本站需要的对象属性
for (int i=0;i<list.size();i++){
JSONObject jsonObject1 = list.getJSONObject(i);
TicketOTher ticketOther = (TicketOTher)JSONObject.toBean(jsonObject1, TicketOTher.class);
Ticket ticket = new Ticket();
ticket.setId(ticketOther.getId());
ticket.setStartStation(ticketOther.getStartStation());
ticket.setStopStation(ticketOther.getStopStation());
ticket.setStartTime(ticketOther.getMoveTime());
//将解析完成后的对象装进列表中
tickets.add(ticket);
}
} catch (IOException e) {
e.printStackTrace();
}
ResultPage resultPage =new ResultPage();
//获取数据列表
resultPage.setList(tickets);
//总共条数查询数据库
resultPage.setCount(count);
//当前页
Integer currentPage = ticketQueryObj.getCurrentPage();
resultPage.setCurrentPage(currentPage);
//每页显示条数
Integer pageSize = ticketQueryObj.getPageSize();
resultPage.setPageSize(pageSize);
//总共页数
Integer totalPage=((count-1)/pageSize)+1;
resultPage.setTotalPage(totalPage);
return resultPage;
}

5.用到的HttpClientUtil2.java简单工具类如下:

    //发送请求
public static String post(String url) throws IOException {
//1.发送对象
HttpPost httpPost = new HttpPost(url);
//2.创建客户端
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
//3.使用客户端发送请求
CloseableHttpResponse execute = defaultHttpClient.execute(httpPost);
//4.解析结果
HttpEntity entity = execute.getEntity();
String s = EntityUtils.toString(entity);
System.out.println("s="+s);
return s;
}

站间售票获取列表完成!重启项目查看站间互售列表吧!

大型运输行业实战_day09_2_站间互售实现的更多相关文章

  1. 大型运输行业实战_day11_2_事务理论与实际生产配置事务管理

    1.什么是事务(Transaction:tx) 数据库的某些需要分步完成,看做是一个整体(独立的工作单元),不能分割,要么整体成功,要么整体生效.“一荣俱荣,一损俱损”,最能体现事务的思想.案例:银行 ...

  2. 大型运输行业实战_day15_1_全文检索之Lucene

    1.引入 全文检索简介: 非结构化数据又一种叫法叫全文数据.从全文数据(文本)中进行检索就叫全文检索. 2.数据库搜索的弊端 案例 :     select  *  from product  whe ...

  3. 大型运输行业实战_day14_1_webserivce简单入门

    1.简单使用 1.1.服务端 1.编写接口 package com.day02.sation.ws; /** * Created by Administrator on 1/12. */ public ...

  4. 大型运输行业实战_day13_1_定时任务spring-quartz

    1.jar包 拷贝quartz-2.2.3.jar包到项目 2.编写定时任务类TicketQuart.java package com.day02.sation.task; import com.da ...

  5. 大型运输行业实战_day12_1_权限管理实现

    1.业务分析 权限说的是不同的用户对同一个系统有不同访问权限,其设计的本质是:给先给用户分配好URL,然后在访问的时候判断该用户是否有当前访问的URL. 2.实现 2.1数据库设计标准5表权限结构 2 ...

  6. 大型运输行业实战_day11_1_aop理论与aop实际业务操作

    1.aop概述 Spring的AOP:什么叫做AOP:Aspect oritention programming(面向切面编程)什么是切面:看图,业务方法 执行前后.AOP的目的:AOP能够将那些与业 ...

  7. 大型运输行业实战_day01_2_需求文档

    1.文档格式 (见模板文件) 2.Axure简单使用 2.1安装Axure傻瓜式安装 2.2简单使用axure 3.总结 需求文件完成后应该包括三种文件: 1.axure文件 2.axure生成的ht ...

  8. 大型运输行业实战_day01_1_业务分析

    1.业务分析 发展历史:  上车收费-->车站买票(相当于先收钱后上车)-->站务系统--->联网售票 2.项目结构 3.开发流程分析 1.业务分析            图文并茂  ...

  9. 大型运输行业实战_day10_1_自定义事务管理类

    1.创建事务管理类  TransactionManager.java package com.day02.sation.transaction; import com.day02.sation.uti ...

随机推荐

  1. C# 5.0中引入了async 和 await

    C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...

  2. neo4j图数据库入门

    一.安装及启动 1.安装 Java SDK 1)     地址:http://www.oracle.com/technetwork/java/javase/downloads 2)     下载:jd ...

  3. 数据库启动失败:The server quit without updating PID file

    1.可能是/usr/local/mysql/data/mysql.pid文件没有写的权限解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R ...

  4. [转]NSIS:安装、卸载时检查程序是否正在运行

    原文链接 http://www.flighty.cn/html/bushu/20110402_115.html 如果我们要安装或升级的程序正在运行,文件肯定会替换失败,以下代码可以提示用户结束正在运行 ...

  5. python selenium 问题汇总

    FAQ 1.python+selenium+Safari浏览器,定位元素 selenium.common.exceptions.ElementNotVisibleException: Message: ...

  6. php字符串类型讲解

    PHP 支持八种原始类型(type). 四种标量类型: string(字符串) integer(整型) float(浮点型,也作 double ) boolean(布尔型) 两种复合类型: array ...

  7. 温故而知新复习下PHP面向对象

    面向对象在PHP中是以类的形势展示的 PHP中的类是单继承的,用关键字extends来实现继承父类, 关键字public protected private 第一个是公开的 谁都可以访问,第二个只能本 ...

  8. 国内各类“壳子”浏览器,userAgent 一览

    [测试环境]:测试日期:2014-6-20 我本机的chrome是36.0的,IE是10.0的.下列各浏览器大多数都是最新版,少数是半年以内的版本. 内核 chrome 版本 36.0 userAge ...

  9. Sum All Numbers in a Range(两数之间数字总和)

    题目:我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. /*方法一: 公式法 (首+末)*项数/2 */ /*两个数比较大小的函数*/ func ...

  10. c#面向对象基础3

    静态与非静态的区别 (1)在非静态类中既可以有实例成员,也可以有静态成员(static修饰). (2)在调用静态成员的时候要使用:对象名.实例成员. (3)在调用静态成员的时候要使用:类名.静态成员. ...