SSM项目实战之二十五:新增订单
新增订单
- 需求
- 前端页面
- left.jsp
- orderUpdate.jsp
- 后端接口
- 实体类
- Controller层
- Service层
- Mapper
- 测试
需求
新增订单的规则如下
序号 | 规则 |
---|---|
1 | 指定客户,如果新的客户,则跳转到新增客户页面,添加客户信息。 |
2 | 货运区间默认选择客户的常用货运区间 |
3 | 指定配送货物的明细。 |
4 | 选择取件方式,取件方式分为上门取件、客户自行配送到仓库上门取件需要收取费用,指定取件地址、联系人、电话等;客户自己配送则不需要收取配送费用;快递邮递(即客户自行发送快递至仓库),需要提供快递单号及公司。 |
5 | 指定付款方式(预付全款、预付定金&到付尾款、到付) |
6 | 指定物流方式(海运、陆运、空运),不同物流方式收费标准不同。 |
7 | 录入货物估价信息,用来收取关税&申请价保。 |
8 | 提交之后,在后台将订单状态修改为取件。 |
前端页面
left.jsp
添加新增订单链接
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" src="js/jquery.js"></script>
<script type="text/javascript">
$(function(){ //导航切换$(".menuson li").click(function(){$(".menuson li.active").removeClass("active")$(this).addClass("active");});$('.title').click(function(){var $ul = $(this).next('ul');$('dd').find('ul').slideUp();if($ul.is(':visible')){$(this).next('ul').slideUp();}else{$(this).next('ul').slideDown();}});
})
</script>
</head>
<body style="background:#f0f9fd;"><div class="lefttop"><span></span>主菜单</div><dl class="leftmenu"><dd><div class="title"><span><img src="data:images/leftico01.png" /></span>系统管理</div><ul class="menuson"><li><cite></cite><a href="index.html" target="rightFrame">首页模版</a><i></i></li><li><cite></cite><a href="/user/queryPage" target="rightFrame">用户管理</a><i></i></li><li><cite></cite><a href="/role/query" target="rightFrame">角色管理</a><i></i></li><li><cite></cite><a href="/basic/query" target="rightFrame">基础数据管理</a><i></i></li></ul> </dd><dd><div class="title"><span><img src="data:images/leftico02.png" /></span>系统管理</div><ul class="menuson"><shiro:hasAnyRoles name="业务员,操作员,管理员"><li><cite></cite><a href="/customer/query" target="rightFrame">客户管理</a><i></i></li></shiro:hasAnyRoles></ul> </dd><dd><div class="title"><span><img src="data:images/leftico03.png" /></span>订单管理</div><ul class="menuson"><shiro:hasAnyRoles name="业务员,操作员"><li><cite></cite><a href="/order/orderUpdate" target="rightFrame">新增订单</a><i></i></li></shiro:hasAnyRoles></ul>
</dd></dl>
<div style="display:none"><script src='http://v7.cnzz.com/stat.php?id=155540&web_id=155540' language='JavaScript' charset='gb2312'></script></div>
</body>
</html>
orderUpdate.jsp
新增订单页面
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link href="/css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/js/jquery.js"></script>
<script src="https://cdn.bootcss.com/jquery.serializeJSON/2.6.2/jquery.serializejson.js"></script>
<style type="text/css">.tablelist1{border:solid 1px #cbcbcb; width:90%; clear:both;margin: 10px;}.tablelist1 td{height:35px;line-height:35px; text-indent:11px; border: solid 1px #3B3B3B;padding-right: 5px;}table .td1{text-align: right;background-color: #F1F1F1;font-weight: bold;}table .td2{text-align: center;background-color: #F1F1F1;font-weight: bold;}table select{width: 100px;border: 1px solid #3B3B3B;height: 23px;}table input{width: 150px;border: 1px solid #3B3B3B;height: 23px;padding-left: 5px;padding-top: 2px;padding-bottom: 2px;}
</style>
</head>
<body>
<div class="place"><span>位置:</span><ul class="placeul"><li><a href="/">首页</a></li><li><a href="/user/query">订单管理</a></li></ul></div><div class="formbody"><div class="formtitle"><span>新增订单</span></div><div style="border: 0px red solid;"><form action="/order/save" method="post" id="myform"><table class="tablelist1" ><tr><td class="td1">业务员:</td><td><select name="userId"><c:forEach items="${users }" var="sale"><option value="${sale.userId }">${sale.realName }</option></c:forEach></select></td><td class="td1" >客户:</td><td><select name="customerId" id="customerId"><c:forEach items="${customers }" var="c"><option value="${c.customerId }" >${c.customerName }</option></c:forEach></select></td><td class="td1">到达国家:</td><td><!-- 货运区间默认选择客户的常用货运区间 --><select name="destAreaId" id="destAreaId"><c:forEach items="${countrys }" var="country"><option value="${country.baseId }" >${country.baseName}</option></c:forEach></select></td></tr><tr><td class="td1" >收货地址:</td><td><input type="text" name="shippingAddress"></td><td class="td1" >收货人:</td><td><input type="text" name="shippingName"></td><td class="td1">联系电话: </td><td><input type="text" name="shippingPhone"></td></tr><tr><td class="td1">付款方式:</td><td><select name="paymentMethodId"><c:forEach items="${payments }" var="pay"><option value="${pay.baseId }">${pay.baseName }</option></c:forEach></select></td><td class="td1">货运方式:</td><td colspan="3"><select name="transMethodId"><c:forEach items="${freights }" var="freight"><option value="${freight.baseId }">${freight.baseName }</option></c:forEach></select></td></tr> <tr><td class="td1">取件方式:</td><td><select name="takeMethodId"><c:forEach items="${fetchs }" var="fetch"><option value="${fetch.baseId }">${fetch.baseName }</option></c:forEach></select></td><td class="td1">物流公司:</td><td><input type="text" value="xxx" disabled="disabled"></td><td class="td1">物流单号:</td><td><input type="text" value="xxx" disabled="disabled"></td></tr><tr><td class="td1">收件人:</td><td><input type="text" value="xxx" disabled="disabled"></td><td class="td1">收货地址:</td><td><input type="text" value="深圳..." disabled="disabled"></td><td class="td1">联系电话:</td><td><input type="text" value="xxx" disabled="disabled"></td></tr><tr><td class="td1">取件地址:</td><td><input type="text" name="takeAddress"></td><td class="td1" >联系电话:</td><td><input type="text" name="takePhone"></td><td class="td1">取件联系人:</td><td><input type="text" name="takeName"></td></tr><tr><td class="td1">订单备注:</td><td colspan="5"><input type="text" style="width: 600px;" name="orderDesc"></td></tr></table><table class="tablelist1" id="orderDetailID"><tr><td class="td2">货物名称</td><td class="td2">数量</td><td class="td2">单位</td><td class="td2">单价</td><td class="td2">总价值(计算关联)</td><td class="td2">备注</td><td align="center"><img src="/images/t01.png" id="mytab1" style="width: 20xpx;height: 20px;"></td></tr><tr class="mytr" ><td align="center"><input type="text" name="orderDetails[][goodsName]"></td><td align="center"><input type="text" class="goodsNumber" style="width: 50px;" name="orderDetails[][goodsNumber]" onblur="calculateTotalNumber(this)"></td><td align="center"> <select name="orderDetails[][goodsUnit]"><c:forEach items="${units }" var="unit"><option value="${unit.baseId }">${unit.baseName }</option></c:forEach></select><!-- <input type="text" style="width: 50px;" name="orderDetails[][goodsUnit]"> --></td><td align="center"><input type="text" class="goodsUnitPrice" style="width: 50px;" name="orderDetails[][goodsUnitPrice]" onblur="calculateTotalPrice(this)"></td><td align="center"><input type="text" class="goodsTotal1" style="width: 50px;" disabled="disabled"><input type="hidden" class="goodsTotal2" name="orderDetails[][goodsTotal]"></td><td align="center"><input type="text" name="orderDetails[][goodsRemark]"></td><td align="center"><img class="mytab2" onclick="removeTr(this)" src="/images/t03.png" style="width: 20xpx;height: 20px;"></td></tr></table> <div style="width: 100%;text-align: center; margin: 20px;" > <input type="button" value="提交" onclick="submitForm();"style="width: 200px;height: 40px;font-size: 24px;background-color: #41A8C6;color: #ffffff;"> </div></form></div> <script type="text/javascript">var index = 0;$(function(){$("#mytab1").click(function(){var tab = $("#orderDetailID");var mytr = $(".mytr").clone().attr("class","mytr"+index);index++;mytr.find("td").find("input").val("");tab.append(mytr);});// 客户选择改变 同时更新区间为客户默认的区间$("#customerId").change(function(){// 获取选中的客户编号var customerId = $(this).val();changeInterval(customerId);});// 页面加载完成设置 常用区间var opt = $("#customerId option").first().get(0);changeInterval(opt.value); });// 单价按钮触发计算总价function calculateTotalPrice(ct){// 单价var price = $(ct).val();var tr = $(ct).parent().parent();// 数量var number = tr.find(".goodsNumber").val();// 设置总价tr.find(".goodsTotal1").val(price*number);tr.find(".goodsTotal2").val(price*number); }// 数量按钮触发计算总价function calculateTotalNumber(ct){// 数量var number = $(ct).val();var tr = $(ct).parent().parent();// 单价var price = tr.find(".goodsUnitPrice").val();// 设置总价tr.find(".goodsTotal1").val(price*number);tr.find(".goodsTotal2").val(price*number); }// 删除详情选项function removeTr(mytr){$(mytr).parent().parent().remove();}// 默认区间调整function changeInterval(customerId){// 获取客户对应的baseId$.get("/customer/queryBaseIdByCustomerId",{"customerId":customerId},function(baseId){// 设置区间的默认选项console.log($("#destAreaId"));var opts = $("#destAreaId").get(0).options;for(var i = 0 ; i < opts.length;i++){var opt = opts[i];if(opt.value == baseId){$(opt).attr("selected","selected");}}});} /*** 提交表单*/function submitForm(){$.ajax({type: "POST",url: "/order/save",contentType: "application/json; charset=utf-8",data: JSON.stringify($("#myform").serializeJSON()),success: function(msg){alert( "---》 " + msg );$("#myform").reset();}});}</script> </div><div style="display: none"><script src='http://v7.cnzz.com/stat.php?id=155540&web_id=155540'language='JavaScript' charset='gb2312'></script></div>
</body>
</html>
后端接口
实体类
/*** 常量工具类* @author JustinNeil*/
public class Constant {public static final String ROLE_SALESMAN = "业务员";public static final String ROLE_OPERATOR = "操作员";public static final String ROLE_ADMIN = "管理员";public static final String BASIC_COMMON_INTERVAL = "常用区间";public static final String BASIC_FETCH_TYPE = "取件方式";public static final String BASIC_FREIGHT_TYPE = "货运方式";public static final String BASIC_PAYMENT_TYPE = "付款方式";public static final String BASIC_UNIT = "单位";public static final String PAGE_MODEL = "pageModel";
}
OrderDto
package com.yjn.dto;
import java.util.List;
import com.yjn.pojo.Order;
import com.yjn.pojo.OrderDetail;
public class OrderDto extends Order{private List<OrderDetail> orderDetails;public List<OrderDetail> getOrderDetails() {return orderDetails;}public void setOrderDetails(List<OrderDetail> orderDetails) {this.orderDetails = orderDetails;}
}
Controller层
package com.yjn.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.yjn.dto.OrderDto;
import com.yjn.service.IOrderService;
@Controller
@RequestMapping("/order")
public class OrderController { @Resourceprivate IOrderService orderService; @RequestMapping("/orderUpdate")public String orderUpdate(Integer id,Model m){orderService.getUpdateInfo(id, m);return "order/orderUpdate";}@RequestMapping("/save")@ResponseBodypublic String saveOrder(@RequestBody OrderDto dto){orderService.addOrder(dto);return "success";}
}
Service层
IOrderService
package com.yjn.service;
import org.springframework.ui.Model;
import com.yjn.dto.OrderDto;
public interface IOrderService {public void getUpdateInfo(Integer id, Model m);public void addOrder(OrderDto dto);
}
OrderServiceImpl
package com.yjn.service.impl;
import java.util.List;
import javax.annotation.Resource;import org.springframework.stereotype.Service;
import org.springframework.ui.Model;import com.yjn.dto.OrderDto;
import com.yjn.mapper.OrderDetailMapper;
import com.yjn.mapper.OrderMapper;
import com.yjn.pojo.BasicData;
import com.yjn.pojo.Customer;
import com.yjn.pojo.OrderDetail;
import com.yjn.pojo.User;
import com.yjn.service.IBasicService;
import com.yjn.service.ICustomerService;
import com.yjn.service.IOrderService;
import com.yjn.service.IUserService;
import com.yjn.utils.Constant;@Service
public class OrderServiceImpl implements IOrderService {@Resourceprivate OrderMapper orderMapper;@Resourceprivate OrderDetailMapper orderDetailMapper;@Resourceprivate IUserService userService;@Resourceprivate IBasicService basicService;@Resourceprivate ICustomerService customerService;/*** 新增订单需要查询的信息有* 1.查询出所有的业务员* 2.查询出所有的客户* 3.查询基础数据* 付款方式:BASIC_PAYMENT_TYPE* 货运方式:BASIC_FREIGHT_TYPE* 取件方式:BASIC_FETCH_TYPE* 常用区间:BASIC_COMMON_INTERVAL* 国家:Constant.BASIC_COMMON_INTERVAL* 单位:Constant.BASIC_UNIT*/@Overridepublic void getUpdateInfo(Integer id, Model m) {// 1.查询所有具有业务员角色的用户信息List<User> users = userService.queryUserByRoleName(Constant.ROLE_SALESMAN);// 2.查询 常用区间的基础数据List<BasicData> intervals = basicService.getBasicDataByParentName(Constant.BASIC_COMMON_INTERVAL);// 3.付款方式List<BasicData> payments = basicService.getBasicDataByParentName(Constant.BASIC_PAYMENT_TYPE);// 4.货运方式List<BasicData> freights = basicService.getBasicDataByParentName(Constant.BASIC_FREIGHT_TYPE);// 5.取件方式List<BasicData> fetchs = basicService.getBasicDataByParentName(Constant.BASIC_FETCH_TYPE);// 6.查询客户信息List<Customer> customers = customerService.query(null);// 7.国家List<BasicData> countrys = basicService.getBasicDataByParentName(Constant.BASIC_COMMON_INTERVAL);// 8.单位List<BasicData> units = basicService.getBasicDataByParentName(Constant.BASIC_UNIT);m.addAttribute("users", users);m.addAttribute("intervals", intervals);m.addAttribute("payments", payments);m.addAttribute("freights", freights);m.addAttribute("fetchs", fetchs);m.addAttribute("customers", customers);m.addAttribute("countrys", countrys);m.addAttribute("units", units);}@Overridepublic void addOrder(OrderDto dto) {orderMapper.insertSelective(dto);List<OrderDetail> details = dto.getOrderDetails();if(details !=null && details.size() > 0 ){for (OrderDetail orderDetail : details) {orderDetail.setOrderId(dto.getOrderId());orderDetailMapper.insertSelective(orderDetail);}}}
}
CustomerService添加方法
List<Customer> query(Customer customer);
实现
@Overridepublic List<Customer> query(Customer customer) {CustomerExample example = new CustomerExample();return customerMapper.selectByExample(example);}
Mapper
测试
SSM项目实战之二十五:新增订单相关推荐
- SSM项目实战之二十四:表单数据校验
表单数据校验 前言 前端页面 测试 前言 在前面的文章中我们并没有对表单提交的数据做校验,本文主要以添加用户为例介绍如何对表单数据添加校验. 前端页面 首先把原先的提交按钮换掉,设置一个点击函数 为表 ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...
- Android项目实战(二十二):启动另一个APP or 重启本APP
Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...
- Android项目实战(二十):浅谈ListView悬浮头部展现效果
Android项目实战(二十):浅谈ListView悬浮头部展现效果 原文:Android项目实战(二十):浅谈ListView悬浮头部展现效果 先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数 ...
- Vue + Spring Boot 项目实战(二十二):生产环境初步搭建
重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.虚拟机与 CentOS 安装 二.MySQL 服务部署 1.虚拟机克隆及网络配置 2.MySQL 安装 3.MySQL ...
- Android项目实战(二十六):蓝牙连接硬件设备开发规范流程
前言: 最近接触蓝牙开发,主要是通过蓝牙连接获取传感器硬件设备的数据,并进行处理. 网上学习一番,现整理出一套比较标准的 操作流程代码. 如果大家看得懂,将来只需要改下 硬件设备的MAC码 和 改下对 ...
- 优秀的 Verilog/FPGA开源项目介绍(二十五)- FPGA图像处理库
今天介绍几个和图像处理的项目,废话不多说,我们开始吧~ FPGA-Imaging-Library https://github.com/dtysky/FPGA-Imaging-Library 介绍 一 ...
- SSM项目实战之二十一:客户信息修改
客户信息修改 实现步骤 customer.jsp CustomerServiceImpl CustomerMapper.xml customerUpdate.jsp CustomerControlle ...
- Vue实战篇二十六:创建动态仪表盘
系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...
- Vue实战篇二十八:实现一个手机版的购物车
系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...
最新文章
- java dh密钥交换_java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换
- 彻底理解Spring IOC和DI
- distanceTransform函数
- Android 基础教程之-------Android ProgressBar的使用!
- php分列显示,【杂谈】PHP数组怎样按键名完成降序分列
- 4KB/2MB/1GB 4级/5级分页模式下的线性地址翻译以及CR3
- 【王道计组笔记】储存系统(1):基本概念
- Atitit it与互联网 的技术体系 目录 1. 概念范围 硬件 软件 应用	1 1.1. 职业分类	2 1.1.1. 软件类	2 1.1.2. 硬件类	2 1.1.3. 网络类	2 1.1.4.
- 自定义NodeJS-C++ Addons使用说明
- Go语言实战的知识图谱
- java基础实现一个基本的银行管理系统
- 系统流程图、数据流程图、IPO图和甘特图
- android原生TTS+语音引擎 实现纯离线 免费的中英TTS
- Java基础学习笔记(十)——常用API(3)
- 关于F# 6的那些新功能?你了解吗?
- 使用setoolkit 进行钓鱼攻击
- Ajax的常用技巧(4)---实现数据库分页
- 在自己项目或者 vue 中使用可爱的二次元((Live2D)
- 用js代码判断质数_Js关于质数的判定
- 引入助教来提高知识蒸馏效率