目录

  1. 1    业务受理部分需求分析
  2. 2    根据pdm导出sql脚本文件
  3. 3    业务受理功能实现
  4. 4    数据表格编辑功能使用
  5. 5    实现工作单快速录入功能基于datagrid编辑


1.    业务受理部分需求分析

整个BOS项目分为:基础设置、取派、中转、路由、报表。

受理功能为整个取派的一部分

受理环节,是物流业务的开始,作为服务前端,客户通过电话、网络等多种方式进行委托,业务受理员通过与客户交流,获取客户的服务需求和具体委托信息,将服务指令输入我司服务系统。

    业务通知单:客户通过打电话方式进行物流委托,物流公司业务人员将委托信息录入到bos系统中------业务通知单

    工单:业务人员将业务通知单信息录入到系统后,BOS系统会尝试根据客户的取件地址自动找到取派员,为取派员产生一个取货的任务-----工单

    工作单:取派员将货物从客户住处取回物流公司,将货物的相关信息(寄件人信息、收件人信息)录入到bos系统中------工作单

2.    根据pdm导出sql脚本文件

业务架构 受理层 业务受理部_javascript

3.    业务受理功能实现

3.1   在crm系统中扩展方法---根据手机号查询客户信息

注意:需要将CustomerService接口中扩展的方法复制到bos接口中

3.2   在业务受理页面调整

业务受理页面:

目的:通过电话号码字段触发丢失焦点发送ajax查询此手机号的相关用户信息回显到当前表单

 

业务架构 受理层 业务受理部_ico_02

    为“来电号码”输入框绑定离焦事件



    1. <td>来电号码:</td>  
    2. <td><input type="text" class="easyui-validatebox" name="telephone"  
    3. "true" />  
    4.     <script>  
    5. function(){  
    6. //为“来电号码”绑定离焦事件  
    7. "input[name=telephone]").blur(function(){  
    8. //发送ajax请求,请求Action,在action中调用代理对象,通过代理对象远程调用crm  
    9. var url = "${pageContext.request.contextPath}/noticebillAction_findCustomerByPhone.action";  
    10. "telephone":this.value},function(data){  
    11. if(data != null){  
    12. //将客户信息回显到相应的输入框中  
    13. var id = data.id;  
    14. var name = data.name;  
    15. var address = data.address;  
    16. "input[name=customerId]").val(id);  
    17. "input[name=customerName]").val(name);  
    18. "input[name=delegater]").val(name);  
    19. "input[name=pickaddress]").val(address);  
    20. else{  
    21. "input[name=customerId]").val("");  
    22. "input[name=customerName]").val("");  
    23. "input[name=delegater]").val("");  
    24. "input[name=pickaddress]").val("");  
    25.                     }  
    26.                 });  
    27.             });  
    28.         });  
    29.     </script>



        创建一个NoticebillAction,注入Customerservice代理对象,提供方法findCustomerByPhone



      1. //注入代理对象,调用crm服务  
      2. @Resource  
      3. private CustomerService customerService;  
      4.   
      5. /**
      6.  * 根据手机号查询客户信息
      7.  */  
      8. public String findCustomerByPhone(){  
      9. //调用crm服务  
      10.     Customer customer = customerService.findCustomerByPhone(model.getTelephone());  
      11. this.writeObjectBean2Json(customer, new String[]{});  
      12. return NONE;  
      13. }



      配置struts.xml

          提交表单


        1. <script type="text/javascript">  
        2. function(){  
        3. "body").css({visibility:"visible"});  
        4.           
        5. // 对save按钮条件 点击事件  
        6. '#save').click(function(){  
        7. // 对form 进行校验  
        8. if($('#noticebillForm').form('validate')){  
        9. '#noticebillForm').submit();  
        10.             }  
        11.         });  
        12.     });  
        13. </script>


            在action中接受参数,保存业务通知单

        保存业务通知单:通过判断用户所关联的定区id 来进行自动分单或手动分单


          1. /**
          2.  * 保存业务通知单
          3.  */  
          4. public String add(){  
          5.     noticebillService.save(model);  
          6. return "toAddUI";  
          7. }



          Service代码:


          1. @Service  
          2. @Transactional  
          3. public class NoticebillServiceImpl implements INoticebillService{  
          4. @Resource  
          5. private INoticebillDao noticebillDao;  
          6. //注入代理对象  
          7. @Resource  
          8. private CustomerService customerService;  
          9. @Resource  
          10. private IDecidedzoneDao decidedzoneDao;  
          11. @Resource  
          12. private IWorkbillDao workbillDao;  
          13.       
          14. public void save(Noticebill model) {  
          15.         User user = BOSContext.getLoginUser();  
          16. //当前登录用户  
          17. //持久对象  
          18.           
          19. //自动分单----为当前客户找到一个取派员,取件  
          20. //取件地址  
          21.         String pickaddress = model.getPickaddress();  
          22. //根据取件地址获取定区ID  
          23.         String decidedzoneId = customerService.findDecidedzoneidByPickAddress(pickaddress);  
          24. if(decidedzoneId != null){  
          25. "自动");  
          26. //匹配成功,可以自动分单  
          27.             Decidedzone decidedzone = decidedzoneDao.findById(decidedzoneId);  
          28. //获得定区的负责人  
          29.               
          30. //建立业务通知单和取派员关系  
          31.               
          32. //为当前匹配到取派员产生一个工单  
          33. new Workbill();  
          34. //关联业务通知单  
          35. //关联取派员  
          36. "新");//类型  
          37. "未取件");//取件状态  
          38. new Timestamp(System.currentTimeMillis()));//系统时间  
          39. 0);//追单次数  
          40. //备注  
          41. //保存工单  
          42.             workbillDao.save(workbill);  
          43.               
          44. //调用短信接口向取派员发送短信  
          45.               
          46. else{  
          47. //匹配失败,转入人工分单  
          48. "人工");  
          49.         }  
          50.           
          51.     }  
          52. }



          4.    数据表格编辑功能使用

              使用datagrid的[列属性]开启编辑功能

          editor

          属性值类型:string,object      

          详情:

          指明编辑类型。当字符串指明编辑类型的时候,对象包含2个属性:

          type:字符串,该编辑类型可以使用的类型有:text,textarea,checkbox,numberbox,validatebox,datebox,combobox,combotree。

          options:对象,object, 该编辑器属性对应于编辑类型。

              开始编辑和结束编辑[方法]

          beginEdit  

          endEdit  

              插入一行数据

          insertRow   

          详情:

          插入一个新行,参数包括一下属性:

          index:要插入的行索引,如果该索引值未定义,则追加新行。

          row:行数据。

              获得行索引

          getRowIndex

          参数row

          返回指定行的索引号,该行的参数可以是一行记录或一个ID字段值。

           

              删除行

          deleteRow

           

              结束编辑状态时触发的[事件]

          onAfterEdit    

          参数:rowIndex,rowData, changes  

          详情:

          在用户完成编辑一行的时候触发,参数包括:

          rowIndex:编辑行的索引,索引从0开始。

          rowData:对应于完成编辑的行的记录。

          changes:更改后的字段(键)/值对。

          示例


          1. <script type="text/javascript">  
          2. function() {  
          3. var index = -1;  
          4. "#grid").datagrid({  
          5.             columns : [ [ {  
          6. 'id',  
          7. true,  
          8.             }, {  
          9. 'name',  
          10. '姓名',  
          11.                 width : 120,  
          12. 'center',  
          13.                 editor : {  
          14. 'validatebox',  
          15.                     options : {  
          16. true  
          17.                     }  
          18.                 }  
          19.             }, {  
          20. 'telephone',  
          21. '手机号',  
          22.                 width : 120,  
          23. 'center',  
          24.                 editor : {  
          25. 'validatebox',  
          26.                     options : {  
          27. true  
          28.                     }  
          29.                 }  
          30.             } ] ],  
          31. //事件:结束编辑状态时触发  
          32. function(rowIndex, rowData, changes){  
          33. //发送ajax请求,将数据提交到服务端修改数据库  
          34.             },  
          35. '${pageContext.request.contextPath}/json/staff.json',  
          36.                 toolbar : [ {  
          37. 'button-add',  
          38. '增加一行',  
          39. 'icon-add',  
          40. function(){  
          41. "#grid").datagrid("insertRow",{//插入一行  
          42. //在第一行插入  
          43. //空行  
          44.                                     });  
          45.                                     index = 0;  
          46. //开启第一行的编辑状态  
          47. "#grid").datagrid("beginEdit",index);//开启第一行编辑状态  
          48.                                 }  
          49. //按钮  
          50.                             {  
          51. 'button-save',  
          52. '保存',  
          53. 'icon-save',  
          54. function(){  
          55. //结束编辑状态  
          56. "#grid").datagrid("endEdit",index);//开启第一行编辑状态  
          57.                                 }  
          58.                             },  
          59.                             {  
          60. 'button-eidt',  
          61. '编辑',  
          62. 'icon-save',  
          63. function(){  
          64. var rows = $("#grid").datagrid("getSelections");  
          65. if(rows.length == 1){  
          66. //获得当前选中行的索引  
          67. "#grid").datagrid("getRowIndex",rows[0]);  
          68. "#grid").datagrid("beginEdit",index);  
          69.                                     }  
          70.                                 }  
          71.                             }  
          72.                         ]  
          73.         });  
          74.     });  
          75. </script>  
          76. </head>  
          77. <body>  
          78. "grid"></table>  
          79. </body>


          5.    实现工作单快速录入功能(基于datagrid编辑)

          页面:

          业务架构 受理层 业务受理部_ico_03

          按钮



          1. //行数全局变量  
          2. var editIndex ;  
          3. //添加按钮  
          4. function doAdd(){  
          5. //当填完一行数据(一个工作单)后不点保存直接点击下增加一行  
          6. if(editIndex != undefined){  
          7. //根据全局变量完成上次的编辑  
          8. "#grid").datagrid('endEdit',editIndex);  
          9.     }  
          10. //新增一行  
          11. if(editIndex==undefined){  
          12. //alert("快速添加电子单...");  
          13. "#grid").datagrid('insertRow',{  
          14. //第一行  
          15. //添加一排空行  
          16.         });  
          17. //开启新增行的编辑  
          18. "#grid").datagrid('beginEdit',0);  
          19.         editIndex = 0;  
          20.     }  
          21. }  
          22. //保存按钮  
          23. function doSave(){  
          24. //结束编辑  
          25. "#grid").datagrid('endEdit',editIndex );  
          26. }  
          27.   
          28. function doCancel(){  
          29. if(editIndex!=undefined){  
          30. "#grid").datagrid('cancelEdit',editIndex);  
          31. if($('#grid').datagrid('getRows')[editIndex].id == undefined){  
          32. "#grid").datagrid('deleteRow',editIndex);  
          33.         }  
          34.         editIndex = undefined;  
          35.     }  
          36. }


              修改datagrid的事件onAfterEdit



            1. // 收派标准数据表格  
            2. $('#grid').datagrid( {  
            3. 'icon-forward',  
            4. true,  
            5. true,  
            6. true,  
            7. true,  
            8.     pageList: [30,50,100],  
            9. true,  
            10.     toolbar : toolbar,  
            11. "",  
            12. 'id',  
            13.     columns : columns,  
            14.     onDblClickRow : doDblClickRow,  
            15. function(rowIndex, rowData, changes){  
            16.         console.info(rowData);  
            17.         editIndex = undefined;  
            18. //发送ajax请求保存工作单  
            19. var url="${pageContext.request.contextPath}/workordermanageAction_quickAdd";  
            20. function(data){  
            21. //alert(data);  
            22. if(data=='1'){  
            23. "提示","添加成功","info");  
            24. else{  
            25. "错误提示","添加失败","warning");  
            26.             }  
            27.         });  
            28.     }  
            29. });



                创建WorkordermanageAction


            1. /**
            2.  * ajax 工作单快速添加
            3.  * @return
            4.  * @throws IOException 
            5.  */  
            6. public String quickAdd() throws IOException{  
            7. // 添加更新时间  
            8. this.getModel().setUpdatetime(new Date());  
            9. "0";  
            10. try {  
            11. this.getModel());  
            12. catch (Exception e) {  
            13. "1";  
            14.         e.printStackTrace();  
            15.     }  
            16. //相应通知  
            17. "text/html;charset=utf-8");  
            18.     ServletActionContext.getResponse().getWriter().print(flag);  
            19. return NONE;  
            20. }


                配置struts.xml