SSH综合项目实战(快递) -- day07 定区关联快递员、搭建前台、客户注册

来源:互联网 发布:淘宝怎么设置打折价格 编辑:程序博客网 时间:2024/04/28 07:16

一、定区关联快递员

1、显示快递员列表

(1)、点击关联快递员按钮时的事件


(2)、编写CourierAction中提供查询快递员列表方法

/** * 获取所有未删除的快递员信息 */@Action(value="courierAction_listajax")public String listajax(){List<Courier> list = serivce.findCouriersNotDelete();this.list2json(list, new String[]{"standard","takeTime","fixedAreas"});return NONE;}

(3)、编写Service层代码

/** * 获取所有未删除的快递员信息 */public List<Courier> findCouriersNotDelete() {return dao.findByDeltagIsNull();}

(4)、编写Dao层代码

/** * 规范命名: * 查询所有未被删除的快递员信息 * @return */public List<Courier> findByDeltagIsNull();

(5)、页面展示效果


2、添加收派时间的增删改查功能


3、显示收派时间列表

(1)、修改fixed_area.html页面显示收派时间的列表

<input data-options="ditable:false, url:'../../takeTimeAction_listajax.action',valueField:'id',textField:'name'" required="true" class="easyui-combobox" name="takeTimeId"></input>


(2)、效果展示


4、实现定区关联快递员

(1)、绑定按钮点击事件

<!-- 为关联快递员按钮绑定点击事件 --><script type="text/javascript">$(function(){$("#associationCourierBtn").click(function(){//进行表单校验if($("#courierForm").form("validate")){//提交表单之前,给隐藏于(存放当前选中的定区id)动态赋值var id = $("#grid").datagrid("getSelections")[0].id;$("#courierFixedAreaId").val(id);$("#courierForm").submit();}});});</script>


(2)、编写Action动作类代码

//使用属性驱动封装地区关联快递员时接收的参数private Integer courierId;private Integer takeTimeId;public void setCourierId(Integer courierId) {this.courierId = courierId;}public void setTakeTimeId(Integer takeTimeId) {this.takeTimeId = takeTimeId;}/** * 定区关联快递员的操作 */@Action(value="fixedAreaAction_associationCourierToFixedArea",results={@Result(name="success",type="redirect",location="/pages/base/fixed_area.html")})public String associationCourierToFixedArea(){service.associationCourierToFixedArea(model.getId(), courierId, takeTimeId);return SUCCESS;}

(3)、编写Service层代码

@Autowiredprivate CourierDao courierDao;@Autowiredprivate TakeTimeDao takeTimeDao;/** * 定区关联快递员的操作 */public void associationCourierToFixedArea(String id, Integer courierId, Integer takeTimeId) {//根据定区id获取定区对象FixedArea fixedArea = dao.findOne(id);//根据快递员id获取的快递员对象Courier courier = courierDao.findOne(courierId);//根据收派时间id获取收派时间对象TakeTime takeTime = takeTimeDao.findOne(takeTimeId);//定区关联快递员操作fixedArea.getCouriers().add(courier);//快递员关联收派时间courier.setTakeTime(takeTime);}

二、前台项目bos_fore搭建

1、前台系统的功能

前台系统主要提供网上用户、在线用户可以进行注册、登录、在线下单、查询物流信息等功能。

2、搭建前台系统maven项目,继承common-parent



3、导入准备好的前台页面资源



4、配置web.xml中spring的监听和struts2的核心控制器

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><display-name>bos_fore</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><!-- 初始化spring容器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 配置struts2核心控制器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

5、配置spring核心配置文件

<beans  xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:task="http://www.springframework.org/schema/task"xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsdhttp://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!-- 组件扫描 @Server @Controller @Repository --><context:component-scan base-package="com.itheima.bos_fore.web"/></beans>

6、创建tomcat服务器,修改端口号,部署前台项目


7、启动tomcat,访问效果图


三、客户注册功能

1、客户注册页面验证码60秒倒计时效果实现

(1)、实现发送短信60秒倒计时的js代码

<!-- 实现点击获取验证码,60秒倒计时的操作 --><script type="text/javascript">var clock = '';var nums = 60;var btn;var reg = /^1[3|4|5|7|8][0-9]{9}$/;//定义手机号验证的正则表达式function sendCode(thisBtn) {//获取用户输入的手机号var telephone = $("#telephone").val();var r = reg.test(telephone);if(r == false){//输入的手机号错误return;}btn = thisBtn;btn.disabled = true; //将按钮置为不可点击btn.value = nums + '秒后重新获取';clock = setInterval(doLoop, 1000); //一秒执行一次}function doLoop() {nums--;if (nums > 0) {btn.value = nums + '秒后重新获取';} else {clearInterval(clock); //清除js定时器btn.disabled = false;btn.value = '重新获取验证码';nums = 60; //重置时间}}</script>


2、使用吉信通发送短信

(1)、将工具类导入前台系统

package com.itheima.bos_fore.utils;import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.URL;import java.net.URLConnection;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/** * 调用吉信通 发短信工具类 */public class SmsUtils {public static void main(String[] args) {String ret = sendSmsByWebService("xxx","尊敬的客户你好,您本次获取的验证码为:1234");System.out.println(ret);}/** * 调用 WebService 协议方式发送短信 *  * @param mobiles * @param msg * @return */public static String sendSmsByWebService(String mobiles, String msg) {String result = "-12";try {Document doc;DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setNamespaceAware(true);DocumentBuilder db = dbf.newDocumentBuilder();InputStream is = getSoapInputStream(userid, pass, mobiles, msg, "");if (is != null) {doc = db.parse(is);NodeList nl = doc.getElementsByTagName("SendMessagesResult");Node n = nl.item(0);result = n.getFirstChild().getNodeValue();is.close();}return result;} catch (Exception e) {System.out.print("SmsSoap.sendSms error:" + e.getMessage());return "-12";}}private static String getSoapSmssend(String userid, String pass,String mobiles, String msg, String time) {try {String soap = "";soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ "<soap:Body>"+ "<SendMessages xmlns=\"http://tempuri.org/\">" + "<uid>"+ userid + "</uid>" + "<pwd>" + pass + "</pwd>" + "<tos>"+ mobiles + "</tos>" + "<msg>" + msg + "</msg>" + "<otime>"+ time + "</otime>" + "</SendMessages>" + "</soap:Body>"+ "</soap:Envelope>";return soap;} catch (Exception ex) {ex.printStackTrace();return null;}}private static InputStream getSoapInputStream(String userid, String pass,String mobiles, String msg, String time) throws Exception {URLConnection conn = null;InputStream is = null;try {String soap = getSoapSmssend(userid, pass, mobiles, msg, time);if (soap == null) {return null;}try {URL url = new URL("http://service2.winic.org:8003/Service.asmx");conn = url.openConnection();conn.setUseCaches(false);conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestProperty("Content-Length",Integer.toString(soap.length()));conn.setRequestProperty("Content-Type","text/xml; charset=utf-8");conn.setRequestProperty("HOST", "service2.winic.org");conn.setRequestProperty("SOAPAction","\"http://tempuri.org/SendMessages\"");OutputStream os = conn.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");osw.write(soap);osw.flush();} catch (Exception ex) {System.out.print("SmsSoap.openUrl error:" + ex.getMessage());}try {is = conn.getInputStream();} catch (Exception ex1) {System.out.print("SmsSoap.getUrl error:" + ex1.getMessage());}return is;} catch (Exception e) {System.out.print("SmsSoap.InputStream error:" + e.getMessage());return null;}}private static String userid = "czbk";private static String pass = "itcast2006";}


3、客户注册页面js代码调整并提交表单

(1)、注册流程

        客户在页面输入手机号,点击获取验证码按钮

        验证手机号是否正确,如果正确,发送ajax请求,请求前台Action

        前台Action调用SmsUtils工具,通过WebService方式调用吉信通短信服务

        生成随机验证码,将随机验证码存入session中

        客户在注册页面输入收到的验证码,点击注册按钮,提交表单,请求前台Action

        在前台Action中调用CRM服务完成客户信息的保存操作

        为客户邮箱发送激活邮件,邮件中有一个激活码,将激活码存放到redis中,24小时失效

(2)、调整前台手机验证通过的js并发送请求


(3)、编写前台发送短信验证码的Action代码

package com.itheima.bos_fore.action.base;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.RandomStringUtils;import org.apache.commons.lang3.StringUtils;import org.apache.struts2.ServletActionContext;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.itheima.bos_fore.domain.Customer;import com.itheima.bos_fore.service.CustomerService;import com.itheima.bos_fore.utils.SmsUtils;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;/** * 客户管理的Action *  * @author Administrator * */@Controller@Namespace("/")@ParentPackage("struts-default")@Scope("prototype")public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {/** * 调用吉信通服务,为客户发送短信 * @throws Exception  */@Action(value="customerAction_sendMsg")public String sendMsg() throws Exception{//生成随机验证码String randomNumeric = RandomStringUtils.randomNumeric(4);System.out.println("生成的验证码为:" + randomNumeric);//将生成的验证码存入session中ServletActionContext.getRequest().getSession().setAttribute(model.getTelephone(), randomNumeric);//调用短信服务,发送短信String msg = "尊敬的客户你好,您本次的验证码为:" + randomNumeric;String ret = "";try {ret = SmsUtils.sendSmsByWebService(model.getTelephone(), msg);} catch (Exception e) {e.printStackTrace();}String success = "true";if(StringUtils.isNotBlank(ret) && ret.length() == 16){//发送成功}else{//发送失败success = "false"; }success = "true";//将结果写回浏览器HttpServletResponse response = ServletActionContext.getResponse();response.setContentType("text/html;charset=UTF-8");response.getWriter().print(success);return NONE;}//使用模型驱动获取用户信息private Customer model = new Customer();public Customer getModel() {return model;}

4、实现用户注册功能

(1)、为注册按钮绑定点击事件


(2)、编写用户注册的Action方法

//使用模型驱动获取用户信息private Customer model = new Customer();public Customer getModel() {return model;}//使用属性驱动获取页面传递的验证码private String checkcode;public void setCheckcode(String checkcode) {this.checkcode = checkcode;}@Autowiredprivate CustomerService service;/** * 用户注册的功能 */@Action(value="customerAction_regist",results={@Result(name="success",type="redirect",location="/signup-success.html"),@Result(name="error",type="redirect",location="/signup-fail.html")})public String regist(){//从session中获取当前手机号的验证码String randomNumeric = (String) ServletActionContext.getRequest().getSession().getAttribute(model.getTelephone());if(StringUtils.isNotBlank(randomNumeric) && StringUtils.isNotBlank(checkcode) && randomNumeric.equals(checkcode)){//验证成功,调用方法保存客户信息service.save(model);return SUCCESS;}else{//验证失败return ERROR;}}

(3)、编写crm项目中的Service方法

/** * 保存客户的方法 */public void save(Customer customer) {dao.save(customer);}

(4)、重新生成客户端代码

(5)、在spring配置文件中配置客户端调用

<!-- 注册CRM服务的客户端代理对象,用于通过WebService访问CRM项目 --><jaxws:client id="crmClient" address="http://localhost:8081/crm/webservice/customer"serviceClass="com.itheima.bos_fore.service.CustomerService"></jaxws:client>

阅读全文
0 0