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. 工欲善其事必先利其器系列之:更换Visual Studio代码风格.

    前言:如果你厌倦了默认的VS的背景颜色,可以在studiostyl下载.vssettinggs文件,将其导入VS中,黑色的风格还是蛮不错的,如果用的12的话就没这个必要了我觉得. 从网站下载后会得到扩 ...

  2. 无需公众号PHP微信登录微信授权微信第三方登录微信开发php开发

    无论是个人还是公司,无需申请公众号,无需申请微信开放平台,即可实现手机网站和PC网站的微 信登录!!! 正常的微信登录是这样的: 1.手机版网站做微信登录,需要申请一个认证公众号,认证不仅需要公司营 ...

  3. 利用python,简单的词语纠错

    利用python,编写一个简单的词语纠正修改器. 原文:http://norvig.com/spell-correct.html #!/usr/bin/env python # coding=utf- ...

  4. [UE4]Axis Mappings轴映射和动作映射Action Mappings的区别

    这里添加的映射只能在“玩家角色(Character)”的事件蓝图中使用. 从它们设置和蓝图使用界面就能看出他们的区别

  5. Scrapy-下载中间件

    下载中间件 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和response的一个轻量.底层的系统 编写您自己的下载器中间 ...

  6. sqoop操作之ORACLE导入到HIVE

    导入表的所有字段 sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --passw ...

  7. Solr如何使用in语法查询

    Solr可以用AND.||  布尔操作符 表示查询的并且, 用OR.&&  布尔操作符 表示或者 用NOT.!.-(排除操作符不能单独与项使用构成查询)表示非 如果要用在查询的时候使用 ...

  8. navicate for mysql mac 含注册机 亲测可用

    百度网盘:https://pan.baidu.com/s/1hrXnRes

  9. Windows下OpenCV 3.1.0 在 Qt Creator 4.0.2 (Qt 5.7.0 MinGW) 中的开发环境配置

    2017-2-23 Update: 修改并添加了部分细节 最近正在学习OpenCV ,为毕业设计做准备.Windows版本的OpenCV都默认提供对VS的支持,其在VS中的配置比较简单,网上也有大批教 ...

  10. svn完整搭建

    安装软件 # yum install httpd mod_dav_svn subversion mod_ssl 查看是否安装成功   #svn --version 如果出现版本号如 则说明svn安装成 ...