大型运输行业实战_day06_1_购票功能简单实现
1.添加购票按钮

对应的html代码
因为列表是js函数动态填充的,故添加按钮应该在js函数中,完整代码如下:
/**
* 注意在调用该函数时必须输入参数
* 查询+ 分页
* */
function query(_pageSize,_currentPage){
// alert("------query------");
//1.获取参数
var startStation = $("#startStation").val();
var stopStation = $("#stopStation").val();
//2.发送请求
var params = {
startStation:startStation,
stopStation:stopStation,
_pageSize:_pageSize,//分页需要的数据
_currentPage:_currentPage//分页需要的数据
};
var url = 'http://localhost:8080/ticket2/data3';
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>'+ //添加购票按钮
'</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 standby = ticket.standby;
html+='<tr>'+
'<td>'+id+'</td>'+
'<td>'+startStation+'</td>'+
'<td>'+stopStation+'</td>'+
'<td>'+standby+'</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("失败啦");
}
});
}
购买js函数
function buyTicket(id){
alert("buyTicket----"+id);
//2.发送请求
var params = {
id:id
};
var url = 'http://localhost:8080/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("失败啦");
}
});
}
2.控制层代码
/**
* 购票功能
* @param id
* @param req
* @return
*/
@RequestMapping("/buyTicket")
@ResponseBody //请求数据必须写这个
public Result getData3(Integer id,HttpServletRequest req){
//1.接收参数
//2.调用业务方法
HttpSession session = req.getSession();
LoginUser loginUser = (LoginUser) session.getAttribute("LOGIN_IN_SESSION");
Result<Object> objectResult = ticketService.buyTicket(id,loginUser);
//3.控制跳转
return objectResult;
}
3.业务层代码
@Override
public Result buyTicket(Integer id,LoginUser loginUser) {
Result result = new Result();
//1.修改原来的余票数
//查询出车票
Ticket ticket = ticketDao.queryById(id);
Integer standby = ticket.getStandby();
if (standby<=0){//购票失败 余票不足
result.setSuccess(false);
result.setCode("0001");//余票不足
result.setMsg("余票不足");
return result;
}
// 修改车票
ticket.setStandby(standby-1);//余票减1
ticketDao.update(ticket);
//2.创建订单 车票id 用户id 购票数 订单编号(业务编号 + 时间 + 序列号 + 用户id)
TicketOrder ticketOrder = new TicketOrder();
//车票id
ticketOrder.setTicketId(id);
//用户id session
ticketOrder.setUserId(loginUser.getId());
//订单编号
String orderNUm = UUID.randomUUID().toString();
ticketOrder.setOrderNumber(orderNUm);
//3.保存订单数据
tiketOrderDao.saveTicketOrder(ticketOrder);
return result;
}
4.dao层接口
4.1对车票的查询与修改接口
/**
* 根据id查询车票对象
* @param id
* @return
*/
Ticket queryById(Integer id); /**
* 根据id修改余票数修改余票数
* @param ticket
*/
void update(Ticket ticket);
4.2对车票的查询与修改 mapper 文件
<!-- 根据id查询-->
<select id="queryById" parameterType="int" resultType="com.day02.sation.model.Ticket">
SELECT id,start_station startStation,stop_station stopStation,standby from ticket WHERE id=#{id}
</select>
<!-- 根据id修改-->
<update id="update" parameterType="com.day02.sation.model.Ticket" >
UPDATE ticket SET standby=#{standby} WHERE id=#{id}
</update>
4.3对订单保存接口
/**
* 保存订单
* @param ticketOrder
*/
void saveTicketOrder(TicketOrder ticketOrder);
4.4对订单保存 mapper 文件
<!--保存一个订单-->
<insert id="saveTicketOrder" parameterType="com.day02.sation.model.TicketOrder">
INSERT INTO ticket_order (order_number,user_id,ticket_id) VALUES (#{orderNumber},#{userId},#{ticketId})
</insert>
5.测试各dao
/**
* 测试 根据id查询车票
*/
@Test
public void testQueryById(){
Ticket ticket = ticketDao.queryById(1);
System.out.println("ticket="+ticket);
} /**
* 测试 更新
*/
@Test
public void testUpdate(){
Ticket ticket1 = new Ticket();
ticket1.setId(1);
ticket1.setStandby(32);
ticketDao.update(ticket1);
} /**
* 测试保存订单
*/
@Test
public void testSave(){
TicketOrder ticketOrder = new TicketOrder();
ticketOrder.setOrderNumber("123456");
ticketOrder.setUserId(5);
ticketOrder.setTicketId(2);
this.ticketOrder.saveTicketOrder(ticketOrder);
}
6.新增的ticketOrder.java模型
package com.day02.sation.model; /**
* Created by Administrator on 1/2.
*/
public class TicketOrder {
private Integer id;
private String orderNumber;
private Integer userId;
private Integer ticketId; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getOrderNumber() {
return orderNumber;
} public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
} public Integer getUserId() {
return userId;
} public void setUserId(Integer userId) {
this.userId = userId;
} public Integer getTicketId() {
return ticketId;
} public void setTicketId(Integer ticketId) {
this.ticketId = ticketId;
}
}
TicketOrder.java
到此购票功能完成,重启项目购票吧!
大型运输行业实战_day06_1_购票功能简单实现的更多相关文章
- 大型运输行业实战_day11_2_事务理论与实际生产配置事务管理
1.什么是事务(Transaction:tx) 数据库的某些需要分步完成,看做是一个整体(独立的工作单元),不能分割,要么整体成功,要么整体生效.“一荣俱荣,一损俱损”,最能体现事务的思想.案例:银行 ...
- 大型运输行业实战_day14_1_webserivce简单入门
1.简单使用 1.1.服务端 1.编写接口 package com.day02.sation.ws; /** * Created by Administrator on 1/12. */ public ...
- 大型运输行业实战_day09_2_站间互售实现
1.添加站间互售入口 对应的html代码 <button onclick="otherStation()">站间互售</button> 对应的js发送函数 ...
- 大型运输行业实战_day15_1_全文检索之Lucene
1.引入 全文检索简介: 非结构化数据又一种叫法叫全文数据.从全文数据(文本)中进行检索就叫全文检索. 2.数据库搜索的弊端 案例 : select * from product whe ...
- 大型运输行业实战_day11_1_aop理论与aop实际业务操作
1.aop概述 Spring的AOP:什么叫做AOP:Aspect oritention programming(面向切面编程)什么是切面:看图,业务方法 执行前后.AOP的目的:AOP能够将那些与业 ...
- 大型运输行业实战_day01_2_需求文档
1.文档格式 (见模板文件) 2.Axure简单使用 2.1安装Axure傻瓜式安装 2.2简单使用axure 3.总结 需求文件完成后应该包括三种文件: 1.axure文件 2.axure生成的ht ...
- 大型运输行业实战_day01_1_业务分析
1.业务分析 发展历史: 上车收费-->车站买票(相当于先收钱后上车)-->站务系统--->联网售票 2.项目结构 3.开发流程分析 1.业务分析 图文并茂 ...
- 大型运输行业实战_day09_1_日期转换与My97DatePicker插件使用
1.日期转换 1.1字符串类型转换成时间Date类型 /** * 给定字符串 转变 为 Date 类型 * @param date 时间 * @param format 时间格式 如:yyyy-MM- ...
- 大型运输行业实战_day07_1_订单查看实现
1.业务分析 每个在窗口售票的售票员都应该可以随时查看自己的售票信息 简单的界面入口如图所示: 对应的html代码: <button onclick="orderDetail()&qu ...
随机推荐
- VBA改写VBA代码
问题源自:Excel 一个困扰我很长时间的代码转换问题-Word-ExcelHome技术论坛 - http://club.excelhome.net/thread-1334942-1-1.html ...
- ASP.NET Web Pages:文件
ylbtech-.Net-ASP.NET Web Pages:文件 1.返回顶部 1. ASP.NET Web Pages - 文件 本章介绍有关使用文本文件的知识. 使用文本文件 在前面的章节中,我 ...
- ajax异步、同步问题,KindEditor ajax提交内容,ajax提交form表单 解决按两次的问题
版权声明:本文为博主原创文章,未经博主允许不得转载. 如果ajax不采用异步,整个js代码在服务器返回结果前都将阻塞,alert方法除外 lookUp('lookUp','',100,300,3); ...
- PLSQL导出表结构
1:进行plsql后选怎Tools--------->Exports User Ojbects------------->选中需要导出的table,squence,view,type,fu ...
- java如何写自己的native方法实现调用本地的c++库?
等待编辑 1:首先可以找一本jni java native interface相关的书籍来看.
- Python单例模式的4种实现方法
#-*- encoding=utf-8 -*- print '----------------------方法1--------------------------' #方法1,实现__new__方法 ...
- 2018ICPC网络赛(焦作站)K题题解
一.题目链接 https://nanti.jisuanke.com/t/31720 二.题意 给$N$种船只,第$i$种船的载重量是$V_i$,数量是$2^{C_i}-1$.接下来有$Q$次询问,每次 ...
- Software Scalability with MapReduce
Software Scalability with MapReduce Craig Henderson First published online April 2010 The architec ...
- Swift里的CAP理论和NWR策略应用
http://blog.sina.com.cn/s/blog_57f61b490101a8ca.html 最近有人讨论到swift副本数是否能够调整,3副本成本过高,如果改成2副本怎么样?多聊了几句以 ...
- WinRAR 代码执行漏洞复现
影响版本: WinRAR < 5.70 Beta 1 Bandizip < = 6.2.0.0 好压(2345压缩) < = 5.9.8.10907 360压缩 & ...