新增订单

  • 需求
  • 前端页面
    • 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项目实战之二十五:新增订单相关推荐

  1. SSM项目实战之二十四:表单数据校验

    表单数据校验 前言 前端页面 测试 前言 在前面的文章中我们并没有对表单提交的数据做校验,本文主要以添加用户为例介绍如何对表单数据添加校验. 前端页面 首先把原先的提交按钮换掉,设置一个点击函数 为表 ...

  2. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...

  3. Android项目实战(二十二):启动另一个APP or 重启本APP

    Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...

  4. Android项目实战(二十):浅谈ListView悬浮头部展现效果

    Android项目实战(二十):浅谈ListView悬浮头部展现效果 原文:Android项目实战(二十):浅谈ListView悬浮头部展现效果 先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数 ...

  5. Vue + Spring Boot 项目实战(二十二):生产环境初步搭建

    重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.虚拟机与 CentOS 安装 二.MySQL 服务部署 1.虚拟机克隆及网络配置 2.MySQL 安装 3.MySQL ...

  6. Android项目实战(二十六):蓝牙连接硬件设备开发规范流程

    前言: 最近接触蓝牙开发,主要是通过蓝牙连接获取传感器硬件设备的数据,并进行处理. 网上学习一番,现整理出一套比较标准的 操作流程代码. 如果大家看得懂,将来只需要改下 硬件设备的MAC码 和 改下对 ...

  7. 优秀的 Verilog/FPGA开源项目介绍(二十五)- FPGA图像处理库

    今天介绍几个和图像处理的项目,废话不多说,我们开始吧~ FPGA-Imaging-Library https://github.com/dtysky/FPGA-Imaging-Library 介绍 一 ...

  8. SSM项目实战之二十一:客户信息修改

    客户信息修改 实现步骤 customer.jsp CustomerServiceImpl CustomerMapper.xml customerUpdate.jsp CustomerControlle ...

  9. Vue实战篇二十六:创建动态仪表盘

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  10. Vue实战篇二十八:实现一个手机版的购物车

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

最新文章

  1. java dh密钥交换_java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换
  2. 彻底理解Spring IOC和DI
  3. distanceTransform函数
  4. Android 基础教程之-------Android ProgressBar的使用!
  5. php分列显示,【杂谈】PHP数组怎样按键名完成降序分列
  6. 4KB/2MB/1GB 4级/5级分页模式下的线性地址翻译以及CR3
  7. 【王道计组笔记】储存系统(1):基本概念
  8. Atitit it与互联网 的技术体系 目录 1. 概念范围 硬件 软件 应用 1 1.1. 职业分类 2 1.1.1. 软件类 2 1.1.2. 硬件类 2 1.1.3. 网络类 2 1.1.4.
  9. 自定义NodeJS-C++ Addons使用说明
  10. Go语言实战的知识图谱
  11. java基础实现一个基本的银行管理系统
  12. 系统流程图、数据流程图、IPO图和甘特图
  13. android原生TTS+语音引擎 实现纯离线 免费的中英TTS
  14. Java基础学习笔记(十)——常用API(3)
  15. 关于F# 6的那些新功能?你了解吗?
  16. 使用setoolkit 进行钓鱼攻击
  17. Ajax的常用技巧(4)---实现数据库分页
  18. 在自己项目或者 vue 中使用可爱的二次元((Live2D)
  19. 用js代码判断质数_Js关于质数的判定
  20. 引入助教来提高知识蒸馏效率

热门文章

  1. Android OTA升级
  2. qq聊天/msn聊天/发送邮件
  3. C语言———指针(1.3间接寻址运算符)
  4. 金士顿U盘被写保护的解决方法(量产)
  5. 复合函数高阶求导公式_复合函数求导公式有哪些
  6. word 去掉段落背景颜色
  7. 摄影构图学83年绝版_摄影师拍照好看的6个秘密:拍照必会构图技巧
  8. pe下修复linux磁盘分区,找回丢失的Linux分区及Grub修复过程
  9. HDU - 1728 逃离迷宫 【BFS】
  10. 身体指数bmi流程图_理想的身体脂肪百分比是多少?男女不同脂肪数据对照表