宅急送项目第六天笔记!

宅急送项目第六天 
一、 回顾前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解析 

业务层 两个方法互相调用 (事务传播问题) , 每个业务层方法都具有管理事务的能力  

  

你可能感兴趣的:(宅急送项目)