框架 day52 BOS项目练习(业务受理功能,快速录入工作单{datagrid数据表格编辑功能使用})

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

      

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值