zoukankan      html  css  js  c++  java
  • 项目一:第九天 1、前台客户登录 2、Jquery citypicker省市区三级联动插件 4、业务受理(在线下单)

    1、 前台客户登录

    2、 Jquery citypicker省市区三级联动插件

    3、 百度地图介绍

    4、 业务受理(在线下单)

    实现前台系统登录功能

    1.1 Md5加密

    admin(明文)---------Md5加密---------à(密文) 21232f297a57a5a743894a0e4a801fc3

    MD5加密算法公开,不可逆。

     

    注册:将用户密码加密为 密文。在数据库中存密文

     

    登陆:将用户输入明文加密 ,比对密文是否一致

    1.2 前台系统页面调整

    1、增加formAction请求地址 ,修改表单Id

    2、方式一:提交表单  注意:需要在action中配置结果视图

     

     

     

     

    3、方式二:给登录按钮绑定点击事件,在单击后提交表单:ajax请求方式提交 不需要结果视图

    <script type="text/javascript">

    //将表单中输入项(必须有name) 序列化为json对象

    $.fn.serializeJson=function(){  

                var serializeObj={};  

                var array=this.serializeArray();  

                var str=this.serialize();  

                $(array).each(function(){  

                    if(serializeObj[this.name]){  

                        if($.isArray(serializeObj[this.name])){  

                            serializeObj[this.name].push(this.value);  

                        }else{  

                            serializeObj[this.name]=[serializeObj[this.name],this.value];  

                        }  

                    }else{  

                        serializeObj[this.name]=this.value;   

                    }  

                });  

                return serializeObj;  

            };

     

     

     

    1.3 CRM中扩展登陆方法

    Service

     

    Dao:

     

    重新发布服务,生成本地调用代码:

    1.4 前台实现登陆

    页面代码:

     

    服务端代码:

     

     

    JQuery citypicker省市区三级联动插件

    引入文件:

    <link rel="stylesheet" type="text/css" href="../plugins/city-picker.css">

    <script src="../plugins/jquery.min.js"></script><!-- jQuery is required -->

    <script src="../plugins/city-picker.data.js"></script>

    <script src="../plugins/city-picker.js"></script>

    1.1 Demo案例

    <body>

    <!-- html方式创建 -->

    <div style="position: relative;">

      <!-- container  data-toggle:初始化省市区插件 -->

      <input readonly type="text" data-toggle="city-picker">

    </div>

    <hr>

    <!-- 通过js代码创建 -->

    <div style="position: relative;">

      <!-- container  data-toggle:初始化省市区插件 提交值:北京市/北京市/昌平区 -->

      <input id="city" readonly type="text" name="sendAreaInfo">  

      <script type="text/javascript">

    $(function(){

    //创建citypicker

    $("#city").citypicker();

     

    //调用citypicker的方法

    $("#restBtn").click(function(){

    $("#city").citypicker("reset");

    })

    $("#initBtn").click(function(){

    $("#city").citypicker("reset");

    $("#city").citypicker("destroy");

    //指定为某个省市区

    $("#city").citypicker({

    province:"北京市",

    city:"北京市",

    district:"昌平区"

    });

    })

    })  

      </script>

    </div>

    <input type="button" value="重置" id="restBtn">

    <input type="button" value="初始化" id="initBtn">

    </body>

     

     

    业务受理需求

    注要:通过客户提交信息自动找到快递员上门取件。

     

    1、客户通过打电话,网络(前台系统)提交物流委托信息(寄件人地址,电话)到后台管理系统,后台管理系统会将客户物流委托信息保存到数据库中,这个物流委托信息称为:订单 Order

     

    2、后台管理保存完订单数据后,系统根据取件地址自动匹配到快递员,系统会给快递员产生取件任务,系统会给快递员发送一条短信。。这个取件任务称为:工单 WorkBill

     

    3、快递员根据短信中取件信息上门取件,快递员会给客户提供纸质单据(快递单),填写详细信息(寄件人的信息,收件人信息,物流单号信息)。快递员将客户货物取回网点后,工作人员会将物流单详细信息录入后台系统。这个物流单信息称为:运单  WayBill

     

    引入实体

     

     

     

     

    业务受-尝试自动分单(重点)

    自动分单:系统自动找到快递员,通知快递员上门取件。

     

    第一步:在bos系统中搭建CXF服务端环境,提供保存订单方法供前台系统调用

    第二步:在前台系统订单页面中:封装订单对象,调用bos中提供保存订单方法

    第三步:完善bos中保存订单方法

    **通过两种策略尝试完成自动分单

    **完成取派对象之间关联

    **给快递员产生取件任务,发送短信

    完成自动分单。

    3.1 后台管理系统搭建CXF服务端环境

    1、 web.xml中配置CXFServlet

    <!-- cxfServlet 处理cxf客户端请求 -->

    <servlet>

    <servlet-name>cxf</servlet-name>

    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

    </servlet>

     

    <servlet-mapping>

    <servlet-name>cxf</servlet-name>

    <url-pattern>/service/*</url-pattern>

    </servlet-mapping>

     

    2、 提供cxf配置文件(引入javxws名称空间)

    3、 创建服务接口,实现类,在接口上使用注解@WebService

     

     

    4、 在后台管理系统spring配置文件中配置CXF服务对象

     

    5、 启动项目,进行测试

    访问可用服务url,struts2过滤器拦截到

     

    6、 解决方案:strtus2框架处理.action 结尾请求

     

    7、 重新启动项目:访问可用服务

     

    3.2 前台系统调用后台管理系统保存订单

    1、 生成前台系统调用代码

    http://localhost:8080/bos_management_web/service/order?wsdl

     

    2、 在前台关联系统中添加bos_managerment_domain依赖:同样的实体不能存在两份,保证有一个实体

     

     

    3、 前台order.html中,使用citypicker插件,百度地图地址补全

     

     

     

    4、 提交订单数据

     

     

    5、 OrderAction中调用后台管理系统,在前台系统spring配置文件配置客户端调用对象

     

     

    配置远程调用代理对象:

     

     

     

    1.1 完善后台管理系统保存订单方法:尝试自动分单

    自动分单:系统自动匹配到快递员。

     

    1.1.1 完善保存订单

     

    1.1.2 策略一:根据客户详细地址找定区ID:完成自动分单(不会使用)

     

    1.1.2.1 CRM扩展方法:根据地址查询定区ID

    Service:

       

    Dao:

     

    重新发布CRM服务,生成后台管理系统调用代码。

    1.1.2.2 在后台调用CRM完成自动分单

     

    /**

      * @Description: 1、保存订单  2、尝试自动分单

      * @return 

    */

    public void save(Order order) {

    System.out.println("服务端保存订单方法被调用");

    order.setOrderTime(new Date());

    order.setOrderNum(UUID.randomUUID().toString());

    //在前台系统中订单中封装区域对象,区域对象状态:瞬时态  问题:order对象引用瞬时态区域对象

    //解决:方式一将区域对象置为null order.setRecArea(null); 将来订单表中区域id无值

    //方式二:根据省市区查询区域对象(持久态)

    Area sendArea = order.getSendArea();

    sendArea = areaDao.findByProvinceAndCityAndDistrict(sendArea.getProvince(), sendArea.getCity(), sendArea.getDistrict());

     

    Area recArea = order.getRecArea();

    recArea = areaDao.findByProvinceAndCityAndDistrict(sendArea.getProvince(), sendArea.getCity(), sendArea.getDistrict());

     

    order.setSendArea(sendArea);

    order.setRecArea(recArea);

     

    orderDao.save(order);

    //尝试自动分单-两种策略

    //根据寄件人详细地址 去 CRM中查询该地址对应定区ID

    String fixedAreaId = customerProxy.findFixedAreaIdByAddress(order.getSendAddress());

    if(StringUtils.isNotBlank(fixedAreaId)){

    //查询定区对象

    FixedArea fixedArea = fixedAreaDao.findOne(fixedAreaId);

    if(fixedArea!=null){

    //定区-快递员:多对多  

    Set<Courier> couriers = fixedArea.getCouriers();

    //TODO 简化操作 判断上班时间   取件任务数量

    for (Courier courier : couriers) {

    //完成自动分单-1、产生快递员工单  2、发送取件短信

    WorkBill workBill = new WorkBill();

    workBill.setAttachbilltimes(0);//追单次数

    workBill.setBuildtime(new Date());//工单时间

    workBill.setCourier(courier);  //工单关联快递员

    workBill.setOrder(order); //工单关联订单

    workBill.setPickstate("待取件");

    workBill.setRemark(order.getRemark());

    workBill.setType("新单");

    workBillDao.save(workBill);

     

    Map<String, Object> map = new HashMap<>();

    map.put("customerAddress", order.getSendAddress());

    map.put("customerName", order.getSendName());

    map.put("customerTelephone", order.getSendMobile());

    map.put("customerRemark", order.getSendMobileMsg());

    //发送短信

    Boolean flag = AliSmsUtil.sendMessage(courier.getTelephone(), "SMS_121136520", map);

    workBill.setSmsNumber(flag.toString());

     

    //自动分单

    order.setOrderType("自动分单");

    order.setStatus("待取件");

    order.setCourier(courier);  //订单关联快递员

    return;

    }

    }

    }

    //策略二尝试自动分单

     

    //人工分单

    order.setOrderType("人工分单");

     

    }

     

     

    1.1.3 策略二:根据客户取件地址解析完成自动分单

     

     

    //策略二:根据客户地址解析

    if(sendArea!=null){

    //根据省市区查询到持久态区域对象

    Area area = areaDao.findByProvinceAndCityAndDistrict(sendArea.getProvince(), sendArea.getCity(), sendArea.getDistrict());

    if(area!=null){

    //查询当前区域下分区列表

    Set<SubArea> subareas = area.getSubareas();

    for (SubArea subArea : subareas) {

    if(order.getSendAddress().contains(subArea.getKeyWords()) ||

    order.getSendAddress().contains(subArea.getAssistKeyWords())){

    //找到所在分区  分区:定区 多对一

    FixedArea fixedArea = subArea.getFixedArea();

    if(fixedArea!=null){

    Set<Courier> couriers = fixedArea.getCouriers();

    //找定区下快递员:根据快递员上上班时间点:参考资料中时间工具类:判断快递员是否在上班时间

    for (Courier courier : couriers) {

    if(courier!=null){

    //给快递员创建工单

    WorkBill workBill = new WorkBill();

    workBill.setAttachbilltimes(0);  //追单次数

    workBill.setBuildtime(new Date());

    workBill.setCourier(courier); //工单关联快递员

    workBill.setPickstate("未取件");

    workBill.setRemark(order.getRemark());

    workBill.setType("新单");

    workBill.setOrder(order);  //工单关联订单

    workBillDao.save(workBill); //保存工单

    //给快递员发送短信  TODO 后期发短信使用activeMQ实现

    String msg="【新单】新单到达,请及时取件。取件地址:"+order.getSendAddress()+",客户电话:"+order.getTelephone()+",备注:"+order.getSendMobileMsg();

    String ret = SmsUtils.sendSmsByWebService(courier.getTelephone(), msg);

    workBill.setSmsNumber(ret);

    //完成自动分单

    order.setCourier(courier);

    order.setStatus("待取件");

    order.setOrderType("自动分单");

    break;

    }

    }

    }

    }

    }

    }

    }else{

    order.setOrderType("人工分单");  //需要客户人员在后台管理系统中进行人工分配:  调度---人工调度

  • 相关阅读:
    Linux——强制退出命令
    2019-08-07-安装jdk1.8配置环境变量
    2019-08-07-查看当前的系统版本-中文乱码显示
    2019-08-07-centos系统上文件出现乱码
    2019-08-06-centos6.4关闭防火墙-设置通过防火墙的端口
    2019-08-06-写批处理
    2019-08-06-centos 打包
    2019-07-26_解密黑客攻击前的准备
    2019-07-24-DOS 常用命令大全
    2019-07-24-windows一些常用命令-netsh
  • 原文地址:https://www.cnblogs.com/shan1393/p/9250620.html
Copyright © 2011-2022 走看看