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_购票功能简单实现的更多相关文章

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

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

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

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

  3. 大型运输行业实战_day09_2_站间互售实现

    1.添加站间互售入口 对应的html代码 <button onclick="otherStation()">站间互售</button> 对应的js发送函数 ...

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

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

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

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

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

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

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

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

  8. 大型运输行业实战_day09_1_日期转换与My97DatePicker插件使用

    1.日期转换 1.1字符串类型转换成时间Date类型 /** * 给定字符串 转变 为 Date 类型 * @param date 时间 * @param format 时间格式 如:yyyy-MM- ...

  9. 大型运输行业实战_day07_1_订单查看实现

    1.业务分析 每个在窗口售票的售票员都应该可以随时查看自己的售票信息 简单的界面入口如图所示: 对应的html代码: <button onclick="orderDetail()&qu ...

随机推荐

  1. SEO之H1,H2,H3,H4....STRONG使用方法

    作为一个SEO从业人员,我们不仅仅是要懂得如何通过网站内容和外链等SEO手段,其实一个优秀的SEOER在从事一个SEO案例时,首先着手的是如何从网站程序本身来打好网站SEO基础. 在平时和很多朋友的交 ...

  2. appium出现的问题记录

    1,(自带的)启动模拟器提示 Starting emulator for AVD 'AVD_for_Galaxy_Nexus' emulator: ERROR: x86 emulation curre ...

  3. Js/jquery获取当前日期时间及其它操作

    var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...

  4. nsenter工具进入docker容器

    对于运行在后台的Docker容器,我们经常需要做的事情是进入到容器中,docker为我们提供了docker exec .docker attach 命令,并且还提供了nsenter工具,外部工具供我们 ...

  5. Nginx的ip_hash指令

    ip_hash 语法:ip_hash 默认值:none 使用环境:upstream 当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服 ...

  6. STL容器能力一览表和各个容器操作函数异常保证

    STL容器能力一览表 Vector Deque List Set Multiset map Multimap 典型内部 结构 dynamic array Array of arrays Doubly ...

  7. unity3d之Editor的Assembly-CSharp.dll文件路径

    在Editor中与自己project中使用的Mono与Managed文件夹路径区别: Editor中:在unity安装路径[AppDir]下: 自己project中:在project的路径下,由bui ...

  8. mvc和mtv

    Java中MVC详解以及优缺点总结 概念: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...

  9. WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException

    Hadoop 2.7.4 The reason is this: originally, DataStreamer::closeResponder always prints a warning ab ...

  10. 高斯混合模型(理论+opencv实现)

    查资料的时候看了一个不文明的事情,转载别人的东西而不标注出处,结果原创无人知晓,转载很多人评论~~标注了转载而不说出处这样的人有点可耻! 写在前面: Gaussian Mixture Model (G ...