框架 day52 BOS项目练习(业务受理功能,快速录入工作单{datagrid数据表格编辑功能使用})
2016-06-12 17:19
671 查看
BOS项目笔记第6天
1. 业务受理部分需求分析
整个BOS项目分为:基础设置、取派、中转、路由、报表。受理功能为整个取派的一部分
受理环节,是物流业务的开始,作为服务前端,客户通过电话、网络等多种方式进行委托,业务受理员通过与客户交流,获取客户的服务需求和具体委托信息,将服务指令输入我司服务系统。
业务通知单:客户通过打电话方式进行物流委托,物流公司业务人员将委托信息录入到bos系统中------业务通知单
工单:业务人员将业务通知单信息录入到系统后,BOS系统会尝试根据客户的取件地址自动找到取派员,为取派员产生一个取货的任务-----工单
工作单:取派员将货物从客户住处取回物流公司,将货物的相关信息(寄件人信息、收件人信息)录入到bos系统中------工作单
2. 根据pdm导出sql脚本文件
3. 业务受理功能实现
3.1 在crm系统中扩展方法---根据手机号查询客户信息注意:需要将CustomerService接口中扩展的方法复制到bos接口中
3.2 在业务受理页面调整
业务受理页面:
目的:通过电话号码字段触发丢失焦点发送ajax查询此手机号的相关用户信息回显到当前表单
为“来电号码”输入框绑定离焦事件
<td>来电号码:</td> <td><input type="text" class="easyui-validatebox" name="telephone" required="true" /> <script> $(function(){ //为“来电号码”绑定离焦事件 $("input[name=telephone]").blur(function(){ //发送ajax请求,请求Action,在action中调用代理对象,通过代理对象远程调用crm var url = "${pageContext.request.contextPath}/noticebillAction_findCustomerByPhone.action"; $.post(url,{"telephone":this.value},function(data){ if(data != null){ //将客户信息回显到相应的输入框中 var id = data.id; var name = data.name; var address = data.address; $("input[name=customerId]").val(id); $("input[name=customerName]").val(name); $("input[name=delegater]").val(name); $("input[name=pickaddress]").val(address); }else{ $("input[name=customerId]").val(""); $("input[name=customerName]").val(""); $("input[name=delegater]").val(""); $("input[name=pickaddress]").val(""); } }); }); }); </script>
创建一个NoticebillAction,注入Customerservice代理对象,提供方法findCustomerByPhone
//注入代理对象,调用crm服务 @Resource private CustomerService customerService; /** * 根据手机号查询客户信息 */ public String findCustomerByPhone(){ //调用crm服务 Customer customer = customerService.findCustomerByPhone(model.getTelephone()); this.writeObjectBean2Json(customer, new String[]{}); return NONE; }
配置struts.xml
提交表单
<script type="text/javascript"> $(function(){ $("body").css({visibility:"visible"}); // 对save按钮条件 点击事件 $('#save').click(function(){ // 对form 进行校验 if($('#noticebillForm').form('validate')){ $('#noticebillForm').submit(); } }); }); </script>
在action中接受参数,保存业务通知单
保存业务通知单:通过判断用户所关联的定区id 来进行自动分单或手动分单
/** * 保存业务通知单 */ public String add(){ noticebillService.save(model); return "toAddUI"; }
Service代码:
@Service @Transactional public class NoticebillServiceImpl implements INoticebillService{ @Resource private INoticebillDao noticebillDao; //注入代理对象 @Resource private CustomerService customerService; @Resource private IDecidedzoneDao decidedzoneDao; @Resource private IWorkbillDao workbillDao; public void save(Noticebill model) { User user = BOSContext.getLoginUser(); model.setUser(user);//当前登录用户 noticebillDao.save(model);//持久对象 //自动分单----为当前客户找到一个取派员,取件 //取件地址 String pickaddress = model.getPickaddress(); //根据取件地址获取定区ID String decidedzoneId = customerService.findDecidedzoneidByPickAddress(pickaddress); if(decidedzoneId != null){ model.setOrdertype("自动"); //匹配成功,可以自动分单 Decidedzone decidedzone = decidedzoneDao.findById(decidedzoneId); Staff staff = decidedzone.getStaff();//获得定区的负责人 model.setStaff(staff);//建立业务通知单和取派员关系 //为当前匹配到取派员产生一个工单 Workbill workbill = new Workbill(); workbill.setNoticebill(model);//关联业务通知单 workbill.setStaff(staff);//关联取派员 workbill.setType("新");//类型 workbill.setPickstate("未取件");//取件状态 workbill.setBuildtime(new Timestamp(System.currentTimeMillis()));//系统时间 workbill.setAttachbilltimes(0);//追单次数 workbill.setRemark(model.getRemark());//备注 //保存工单 workbillDao.save(workbill); //调用短信接口向取派员发送短信 }else{ //匹配失败,转入人工分单 model.setOrdertype("人工"); } } }
4. 数据表格编辑功能使用
使用datagrid的[列属性]开启编辑功能editor
属性值类型:string,object
详情:
指明编辑类型。当字符串指明编辑类型的时候,对象包含2个属性:
type:字符串,该编辑类型可以使用的类型有:text,textarea,checkbox,numberbox,validatebox,datebox,combobox,combotree。
options:对象,object, 该编辑器属性对应于编辑类型。
开始编辑和结束编辑[方法]
beginEdit 参数:index 开始编辑行。
endEdit 参数:index 结束编辑行。
插入一行数据
insertRow
详情:
插入一个新行,参数包括一下属性:
index:要插入的行索引,如果该索引值未定义,则追加新行。
row:行数据。
获得行索引
getRowIndex
参数row
返回指定行的索引号,该行的参数可以是一行记录或一个ID字段值。
删除行
deleteRow index 删除行。
结束编辑状态时触发的[事件]
onAfterEdit
参数:rowIndex,rowData, changes
详情:
在用户完成编辑一行的时候触发,参数包括:
rowIndex:编辑行的索引,索引从0开始。
rowData:对应于完成编辑的行的记录。
changes:更改后的字段(键)/值对。
示例
<script type="text/javascript"> $(function() { var index = -1; $("#grid").datagrid({ columns : [ [ { field : 'id', checkbox : true, }, { field : 'name', title : '姓名', width : 120, align : 'center', editor : { type : 'validatebox', options : { required : true } } }, { field : 'telephone', title : '手机号', width : 120, align : 'center', editor : { type : 'validatebox', options : { required : true } } } ] ], //事件:结束编辑状态时触发 onAfterEdit:function(rowIndex, rowData, changes){ //发送ajax请求,将数据提交到服务端修改数据库 }, url : '${pageContext.request.contextPath}/json/staff.json', toolbar : [ { id : 'button-add', text : '增加一行', iconCls : 'icon-add', handler : function(){ $("#grid").datagrid("insertRow",{//插入一行 index:0,//在第一行插入 row:{}//空行 }); index = 0; //开启第一行的编辑状态 $("#grid").datagrid("beginEdit",index);//开启第一行编辑状态 } }, //按钮 { id : 'button-save', text : '保存', iconCls : 'icon-save', handler : function(){ //结束编辑状态 $("#grid").datagrid("endEdit",index);//开启第一行编辑状态 } }, { id : 'button-eidt', text : '编辑', iconCls : 'icon-save', handler : function(){ var rows = $("#grid").datagrid("getSelections"); if(rows.length == 1){ //获得当前选中行的索引 index = $("#grid").datagrid("getRowIndex",rows[0]); $("#grid").datagrid("beginEdit",index); } } } ] }); }); </script> </head> <body> <table id="grid"></table> </body>
5. 实现工作单快速录入功能(基于datagrid编辑)
页面:按钮
//行数全局变量 var editIndex ; //添加按钮 function doAdd(){ //当填完一行数据(一个工作单)后不点保存直接点击下增加一行 if(editIndex != undefined){ //根据全局变量完成上次的编辑 $("#grid").datagrid('endEdit',editIndex); } //新增一行 if(editIndex==undefined){ //alert("快速添加电子单..."); $("#grid").datagrid('insertRow',{ index : 0,//第一行 row : {}//添加一排空行 }); //开启新增行的编辑 $("#grid").datagrid('beginEdit',0); editIndex = 0; } } //保存按钮 function doSave(){ //结束编辑 $("#grid").datagrid('endEdit',editIndex ); } function doCancel(){ if(editIndex!=undefined){ $("#grid").datagrid('cancelEdit',editIndex); if($('#grid').datagrid('getRows')[editIndex].id == undefined){ $("#grid").datagrid('deleteRow',editIndex); } editIndex = undefined; } }
修改datagrid的事件onAfterEdit
// 收派标准数据表格 $('#grid').datagrid( { iconCls : 'icon-forward', fit : true, border : true, rownumbers : true, striped : true, pageList: [30,50,100], pagination : true, toolbar : toolbar, url : "", idField : 'id', columns : columns, onDblClickRow : doDblClickRow, onAfterEdit : function(rowIndex, rowData, changes){ console.info(rowData); editIndex = undefined; //发送ajax请求保存工作单 var url="${pageContext.request.contextPath}/workordermanageAction_quickAdd"; $.post(url,rowData,function(data){ //alert(data); if(data=='1'){ $.messager.alert("提示","添加成功","info"); }else{ $.messager.alert("错误提示","添加失败","warning"); } }); } });
创建WorkordermanageAction
/** * ajax 工作单快速添加 * @return * @throws IOException */ public String quickAdd() throws IOException{ // 添加更新时间 this.getModel().setUpdatetime(new Date()); String flag="0"; try { workordermanageService.quickAdd(this.getModel()); } catch (Exception e) { flag= "1"; e.printStackTrace(); } //相应通知 ServletActionContext.getResponse().setContentType("text/html;charset=utf-8"); ServletActionContext.getResponse().getWriter().print(flag); return NONE; }
配置struts.xml
相关文章推荐
- Spark源码学习(3)——Job Runtime
- bzoj1116: [POI2008]CLO
- 生成英语单词
- Linux用户磁盘配额
- RequireJS入门(二)
- CPU卡相关资料收集总结
- Android学习笔记——界面相关逻辑
- Android 编程下 Touch 事件的分发和消费机制
- Shell命令速查
- 上下移动jquery
- Android通用流行框架大全
- Linux磁盘分区实战案例
- poj 2723
- Libcurl笔记三
- 不同版本PHP之间cURL的区别
- java基础整理-File类
- 单点登录SSO的实现原理
- Linux中文显示设置
- python学习笔记 可变参数关键字参数**kw相关学习
- Appium总结