宅急送项目第六天
一、 回顾前5天
1、 项目前端 easyui (为什么使用? 收费? ) 、服务器SSH三大框架
2、 数据层 GenericDAO 抽取
3、 业务层 分页查询 制作为通用组件
4、 AJAX交互 flexjson (网络上 flexjson插件 ,从google下载) ---------- 现在每次写json返回
JSONSerializer
include/exclude
JSONSerializer 提供 serialize / deepSerialize 序列化对象为json
response.getWriter.print(...)
将返回json内容 定义为 struts2 结果集 (自定义结果集)
5、 easyui 提供丰富的CSS 、layout布局 、tab菜单 (内嵌iframe, 每个tab可以单独刷新)、datagrid 数据表格(工具栏按钮,将json数据与表格捆绑自动显示数据,提供分页工具条)、form校验提示(validatebox numberbox datebox datetimebox ccmbobox )、消息提示(alert 中间弹出窗口、show 右下角)、弹出窗口 window (遮罩效果)
6、 菜单树形菜单 ztree
7、 POI Excel解析(导入导出)、Hibernate二级缓存(查询缓存)、Lucene全文检索
8、 JBPM工作流 (马上讲到)
====================================================================================
9、 业务 用户管理 、 宅急送(三大模块 基础设置、取派业务、中转业务 )
** 基础设置 标准、取派员、区域、分区、定区排班
** 取派业务 业务受理、工单生成、工作单录入、批量导入、人工调度 (包装、返货、签收 ....)
二、 业务受理
客户通过网络和电话 联系客服,客服记录客户送货请求,生成业务通知单
在生成业务通知单过程中,自动匹配定区,匹配相关取派员, 如果能够匹配,生成工单,通知取派员进行取货 ,如果不能匹配,转入人工调度
使用到达城市简码 去匹配region区域表,得知货物送往哪个城市
工单查询 ----- 进行追单或者销单
*** 因为取派员 很久 没有取货。客户 发出追单请求
*** 客户不想进行送货,发出销单请求
查询工单
1、 根据客户电话 ----- 通知单 ---- 工单
2、 根据客户名 ---- 通知单 ----- 工单
3、 根据日期 ----- 取货时间(受理时间+2小时) 业务通知单 ----- 工单
使用 datagrid 自带查询,传入queryParams 需要是一个js对象,如何将表单信息转换为js对象
** 通过jquery 提供fn 对函数进行扩展
$.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
销单,将工单类型 改为销单
三、工作单快速录入
业务受理: 客户业务被记录下来
工单: 通知取派员 去取货了
工作单 : 物流配送业务正式开始
工作单录入: 是系统中人机交互最多 (收货人信息、发货人信息、货物信息、保险、包装 、货物计费、返货、签单、出港 )
工作单快速录入: 货物、送货信息
* 操作人员在货量大单子多时简洁快速录入工作单的途径,快速录入中的信息主要是为了满足配载而设置的功能界面
* 工作单还需要完善其他信息
使用技术 : table的行编辑
* 点击td时,嵌入一个input (使用js可以做到)
很多前端UI控件,都提供表格的行编辑(easyui 也提供行编辑、 extjs 同样提供)
快速录入: 新增一行 ,输入后保存操作、 输入过程中取消输入 、 双击修改操作
var columns = [ [ {
field : 'id',
title : '工作单号',
width : 120,
align : 'center',
editor :{
type : 'validatebox',
options : {
required: true
}
}
}, {
field : 'arrivecity',
title : '到达地',
width : 120,
align : 'center',
editor :{
type : 'validatebox',
options : {
required: true
}
}
},{
field : 'product',
title : '产品',
width : 120,
align : 'center',
editor :{
type : 'validatebox',
options : {
required: true
}
}
}, {
field : 'num',
title : '件数',
width : 120,
align : 'center',
editor :{
type : 'numberbox',
options : {
required: true
}
}
}, {
field : 'weight',
title : '重量',
width : 120,
align : 'center',
editor :{
type : 'validatebox',
options : {
required: true
}
}
}, {
field : 'floadreqr',
title : '配载要求',
width : 220,
align : 'center',
editor :{
type : 'validatebox',
options : {
required: true
}
}
}] ];
1、 新增一行
appendRow 、insertRow ---- 为了业务员选择insert ,每次编辑第一行
为可以编辑的列指定 editor ----- 代表该列可以编辑
打开编辑 beginEdit 传入index 索引 (确保只能编辑一行 )
编辑完成 结束编辑 endEdit
取消编辑 cancelEdit
function isEmptyObject(obj) {
for ( var name in obj ) {
return false;
}
return true;
}
判断当前对象为空,就删除
将服务器代码完成 设计domain 实体类
在onAfterEdit 添加或者修改结束 ----- 使用ajax请求,将数据发送给服务器,完成数据添加
*** 增加 、修改、删除 $.post
*** 查询 $("#grid").datagrid(...)
生成json中不想有updatetime
第一种 jsonSerializer.include("id","arrivecity","product","num","weight","loadreqr").exclude("*"); // 只写include没有效果 (推荐)
第二种 jsonSerializer.exclude("*.updatetime","*.class");
2、 删除
只能选中一行 datagrid 有 singleSelect
删除时 获得选中行 $("#grid").datagrid('getSelected');
四、工作单录入
在业务人员有充分时间情况下,不需要使用快速录入,可以将之前快速录入工作单补全 ------- 很像业务受理
提供大form, 输入工作单信息,提交到服务器 ,判断如果工作单号,之前存在,修改完善信息, 如果之前不存在,新增一个工作单
工作单导入 :
批量导入
工作单录导入是提供固定的格式,集中在表外录入工作单信息,通过导入的方式批量生成系统的工作单信息。系统提供导出空白表格录入,和按照固定格式导入的功能,导入数据的校验方式同工作单录入。主要是应用在项目客户集中导入工作单中应用
每次新加一个功能。建立页面jsp,修改menu.json中菜单链接
1、 空白excel 模板下载
WEB-INF外 通过链接下载
WEB-INF里 编写struts2 的Action完成下载
****** 下载文件时,最好不要用中文文件名
if(filename==null){
return null;
}
System.out.println(filename);
//真实文件名 可能中文
String agent = ServletActionContext.getRequest().getHeader("user-agent");// 浏览器
if(agent.contains("Firefox")){
return "=?UTF-8?B?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";
}else{
// IE
return URLEncoder.encode(filename, "utf-8");
}
2、 编写数据,完成数据上传
struts2 上传 ------------- jquery ocupload
POI解析
业务层 两个方法互相调用 (事务传播问题) , 每个业务层方法都具有管理事务的能力