宅急送项目第三天笔记!(SVN插件和反编译插件)

宅急送 第三天 
* 第一天 SSH整合,项目中常见问题解决 
* 第二天 easyui控件简单使用 、完整的用户管理模块 (登陆、设置密码、增删改查 )

一、SVN的使用 
需要服务器和客户端 两个软件 ,企业开发中,使用linux服务器
1、服务器
练习时,暂时将SVN服务器安装 windows (VisualSVN-Server-2.1.5.msi)------ 安装时不要使用含有中文 空格目录 (默认端口 443 、8443)

** 安装后访问地址 https://PC2011101416ajs:8443/svn/ 
** 建议使用  https://localhost:8443/svn 
 
建立仓库,可以以项目为单位 来建立 --- 存放和项目相关所有文档 (代码只是一个部分 )
建立用户 本机用户 yuy/123 
2、 客户端软件 TortoiseSVN 
可以在任何文件夹,导入import/检出checkout SVN仓库文档 ,进行版本控制 

3、在myeclipse安装SVN插件 
去官网上下载SVN ----- 现在官网流行在线安装版 
site-1.8.8.zip 是SVN1.8.8 离线安装版 


myeclipse 8.5以后插件安装 推荐,在dropins 目录进行安装 
* 传统安装,将插件覆盖安装目录 features 和 plugins 
* 现在推荐 在myeclipse/dropins  满足目录结构
插件目录/eclipse/features 和 plugins 
安装插件后 windows-preferences 中多了个SVN配置,在视图中多了SVN视图
建立与Respository 连接
将myeclipse工程 上传到仓库 ------ 右键工程 ---- team ---- share project (工程显示*和? 当前工程与仓库中不同 )
右键选中工程 ---- team --- 提交  (工程上出现小仓库图标,代表被管理了 )

标记tag和分支branch 
*** 当代码完成一定功能,在里程杯 为代码创建一个tag 标记 (标签记录当时各个文件对应版本,当项目升级出现问题,可以还原到指定tag)
**  代码完成通用功能后,建立另一个分支继续开发,一个代码可以创建多个分支,多个软件系统基于同一个公共代码 

反编译插件 将class文件 解析为 java源代码 
将jad目录复制到myeclipse安装目录下dropins 目录 ,将jad.exe 复制到jdk/bin 目录
重启myeclipse ,在jadclipse中 配置jad.exe 路径 即可 完成反编译
window - preferences - 搜索jadclipse --- path to decompliler  (D:\Program Files\Java\jdk1.7.0_09\bin\jad.exe)

====================================================================================
二、 修改用户管理模块遗留的bug 
bug1 : flexjson 序列化日期对象时,将日期序列化 毫秒值 ----- 页面上回显不符合日期格式 
在Domain类 User中添加 getBirthdayStr()方法
// 手动将日期格式化为字符串
@Transient
public String getBirthdayStr(){
if(birthday== null){
return null;
}
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(birthday);
}

***  JSONSerializer jsonSerializer = new JSONSerializer().transform(new DateTransformer("yyyy-MM-dd"), Date.class);

bug2 : 日期查询 ,提交请求参数获取不到 
<input type="text" id="birthday" name="beginBirthday" class="easyui-datebox" /> 
问题: $("#birthday").val() 无法获得选中日期 ??? 


<input type="text" class="combo-text validatebox-text" autocomplete="off" style="width: 133px; height: 20px; line-height: 20px;">
进行选择
<input type="hidden" class="combo-value" name="beginBirthday" value="2013-03-01"> 存放选中值 (name为原来指定值 )


解决方案  $("[name='beginBirthday']").val(); 使用name属性选择器就可以了


bug3 : 修改用户时,如果查询id对象用户比较密码,再更新提交用户,产生两个不同对象 有着相同标识符 
@Override
public void updateUser(User user) {// 传递参数 是脱管对象
// 先查询
User existUser =  userDAO.findById(User.class, user.getId()); // 持久对象 

if(!existUser.getPassword().equals(user.getPassword())){ // 用加密后的比
user.setPassword(MD5Utils.md5(user.getPassword()));
}
BeanUtils.copyProperties(user, existUser);
}
添加 查看用户和删除用户,不选中 提示信息 
function doView() {
alert("编辑用户");
var item = $('#grid').datagrid('getSelected');
if(item!=null){
console.info(item.id);
location.href = "${pageContext.request.contextPath}/user_view.action?id="+item.id; 
}else{
$.messager.alert("信息提示","查看用户必须选中一行用户信息","error");
}

}
function doDelete() {
alert("删除用户");
var ids = [];
var items = $('#grid').datagrid('getSelections');
if(items.length == 0){
$.messager.alert("信息提示","删除用户必须至少选中一行用户信息","error");
return ;
}
for(var i=0; i<items.length; i++){
   ids.push(items[i].id);    
}
}


====================================================================================
三、 宅急送 业务第一部分: 基础设置业务 
基础设置该部分业务,主要为系统其它功能提供一些 基础数据信息, 其它功能可以依赖基本数据信息来完成 

1) ****  基础档案 (数据词典的功能 )
2)线路类型: 全国、全省、省内 、市内   -----------------  设置线路时 ,select 选择线路类型,查询线路数据词典 
3)取派员类型: 司机、小件员 
*** 数据词典与业务流程无关,只与业务数据相关  

4)收派时间: 收件和派件的时间  (不同取派员 上班时间不同)
5)收派标准: 取派员能拿多少货物 0-5公斤  5-10公斤 
5)取派员设置 : 对取派员信息进行增删改查  (替班,谁有事,找其他取派员替班 )
6)车辆和线路设置  (忽略)
7)区域、分区、定区 :  当前宅急送业务能够覆盖省市区 (区域管理)、区域比较大(分区 路、街道、小区)、定区(是分区的集合,是取派员的送货范围)
8) 指定定区时,为取派员排班  

****** 简化业务 (假设一个定区只有一个取派员负责,24小时上班 )

企业端进行数据建模时,最专业软件 PowerDesigner (sybase公司产品) --- 收费
pd 中新建model 有三种 : CDM 概念图 针对需求 、OOM 面向对象设计图 、PDM 物理数据模型图 (针对数据库)
*** 三种图直接可以相互转换 

创建table ----- name属性给用户看的,code属性生成代码的 , 将相同数据类型定义为domain 
***  domain 例如很多表主键都是 int  ,又有很多表主键都是 uuid varchar(32) 
columns 定义表中列 
preview 查看生成SQL代码 

导出 : database - generate database

基础设置部分数据表 :
users 操作系统用户 
收派标准表: 取派员使用收派标准 
create table bc_standard
(
   id                   varchar(32) not null,   // 编号 uuid生成
   name                 varchar(30),  // 标准名称 
   minweight            double,      // 最小重量
   maxweight            double,      // 最大重量
   deltag               char(1),     // 是否作废  1 作废, 0 正常使用
   user_id              int,         // 操作人 
   updatetime           timestamp,   // 更新时间 
   primary key (id)
);


=================  操作用户和标准之间 一对多,一个系统用户可以制定多个标准 

取派员表 : 存放取派员信息
create table bc_staff
(
   id                   varchar(32) not null,   // 编号
   name                 varchar(20),   // 姓名
   telephone            int,   // 手机
   haspda               char(1),  // 是否有PDA 移动设备 
   deltag               char(1),  // 作废标志
   station              varchar(40), // 所属公司
   standard_id          varchar(32), // 采用取派标准 
   primary key (id)
);
================== 标准表和取派员表之间 一对多, 多个取派员使用同一个标准 
区域表 : 存放省 市 区信息
create table bc_region
(
   id                   varchar(32) not null,  // 编号
   province             varchar(50),  // 省
   city                 varchar(50), // 市
   district             varchar(50), // 区
   postcode             varchar(50), // 邮编
   shortcode            varchar(30), // 简码
   citycode             varchar(30), // 城市编码
   primary key (id)
);

分区表 : 区域太大了,完成取派任务 ,必须分区
create table bc_subarea
(
   id                   varchar(32) not null,  // 编号
   decidedzone_id       varchar(32),  // 定区编号
   region_id            varchar(32),  // 区域编号 
   addresskey           varchar(100), // 关键字
   startnum             varchar(30),  // 开始 楼、小区 、街道号 
   endnum               varchar(30),  // 结束 楼、小区、街道号
   single               char(1),      // 单双号 
   position             varchar(255), // 位置信息 
   primary key (id)
);

定区表 : 为取派员指定负责分区 
create table bc_decidedzone
(
   id                   varchar(32) not null,  // 编号
   name                 varchar(30),   // 名称
   staff_id             varchar(32),  // 取派员 
   primary key (id)
);

一个取派员负责多个定区 ,一个定区由一个取派员负责
一个区域别划分给多个分区
一个定区由多个分区组成 

-----------------------------------------------------------------------------------------------------------------------------
基础档案设置 主表中 存放"取派类型"  子表中 存放 "司机" "小件员"  ------ 一对多关系
用户登录后,先建立收派标准 、再管理收派员信息 、 进行区域设置 、 进行分区 、 管理定区(为定区指定负责的收派员)

------------------------------------------------------------------------------------------------------------------------------
四、先根据 PDM设计。编写Java实体类 ,完成建表工作 
新增5个实体类 
Standard  标准
Staff   取派员
Region   区域
Subarea  分区
Decidedzone  定区

修改页面中ztree菜单 ------ menu.jso维护 
** 使用第三天新功能代码中 menu.json 替换员工工程的 
** 使用第三天新功能代码中 base 覆盖原有base 
** 页面假的数据 standard.json  、 staff.json

五。 基础设置 功能实现 
用户管理页面结构,在数据列表部分套入单独iframe,用链接方式访问 userinfo.jsp ,采用普通请求提交的方式,提交表单 
***  页面添加、修改 传统页面提交 ; 查询、删除 使用Ajax提交 

收派标准、取派员、区域管理  ---- 将使用一个页面完成增删改查 
*** 将添加修改表单form 存放一个div中,使用窗口弹出  ----- 可以在一个页面内完成增删改查
*** 纯Ajax编程 (struts2标签库没用了 )

standard.jsp 设计
1、 引入easyui 需要所有 js和css
2、 页面布局整体一个部分 datagrid  -------  
<body class="easyui-layout" style="visibility:hidden">
<div region="center">
<table id="grid"></table> 
</div>   <!-- 只有中 -->
</body>
* 小技巧, 先将body隐藏 style="visibility:hidden" , 在页面加载后再显示 $("body").css({visibility:"visible"}); 
3、表格工具栏  iconCla 显示按钮图标  easyui/theme/icon.css
//工具栏
var toolbar = [ {
id : 'button-view',
text : '查询',
iconCls : 'icon-search',
handler : doView
}, {
id : 'button-add',
text : '增加',
iconCls : 'icon-add',
handler : doAdd
}, {
id : 'button-delete',
text : '删除',
iconCls : 'icon-cancel',
handler : doDelete
}];
* 点击三个按钮,分别调用 doView doAdd doDelete 三个方法 

4、定义表格中列 
var columns = [{列一信息},{列二信息},{列三信息}];  //很多列
第一种 勾选id
{
field : 'id',
checkbox : true,  // 生成第一列勾选,用于删除、查看 
}
第二种 普通列
{
field : 'name',  // 返回json数据中属性名
title : '标准名称',  // 表格中列名
width : 120,   // 宽度
align : 'center'  // 居中
}
第三中 复杂json数据解析
// 特殊结构的显示 
{"id":"001","name":"0-10公斤","minweight":"0","maxweight":"10","updatetime":"1999-10-10 12:23:34","operator":{"username":"张三","station":"总公司"}}  =============================
{
field : 'operator.username',
title : '操作人',
width : 120,
align : 'center',
formatter : function(data,row, index){ // data 代表json中返回对应属性的数据 、row代表整个json数据
return row.operator.username;
}
}  
5、隐藏添加标准的div 编写form
<div class="easyui-window"> 弹出窗口 
分为两个部分 : 第一部分 保存按钮 、第二部分 表单(用于添加和修改)

=============== 添加标准 、标准列表查看 、标准删除 

六 、收派标准代码实现
1、 添加收派标准窗口弹出 
<div class="easyui-window"></div>  
在js中设置窗口属性  
$('#addStandardWindow').window({
            title: '添加收派标准', 
            width: 400,
            modal: true,
            shadow: true,
            closed: true,
            height: 400,
            resizable:false
        });
通过 <div>中设置 style="top:..px; left:..px" 

在StandardAction 进行输入数据校验 ------ name非空 ,minweight 大于0校验 , maxweight 必须大于 minweight (作业 fieldExpression)
在StandardService中 先判断minweight和maxweight对应记录是否存在, NamedQuery
定义Ajax通用结果页面 success.jsp  error.jsp 

2、列表分页查询 (无条件)
分页条件  : page 页码、rows 每页多少条

查询Standard需要显示User信息,但是User信息在另一张表 
// 将其设置为 lazy=false 立即查询
@LazyToOne(LazyToOneOption.FALSE)
private User user;

3、 删除勾选id 
在js中  $("#grid").datagrid("getSelections"); 获得所有选中对象,再从对象获得id 拼接字符串发送到服务器

***** 作业,可以在查询时,不去查询作废的标准  /  在页面显示作废的标准(添加一列)


宅急送项目第三天笔记!(SVN插件和反编译插件)_第1张图片


宅急送项目第三天笔记!(SVN插件和反编译插件)_第2张图片
宅急送项目第三天笔记!(SVN插件和反编译插件)_第3张图片




























































































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