javaWEB模块物流项目八.docx
《javaWEB模块物流项目八.docx》由会员分享,可在线阅读,更多相关《javaWEB模块物流项目八.docx(25页珍藏版)》请在冰点文库上搜索。
javaWEB模块物流项目八
BOS物流管理系统第8天工作单管理和权限说明
今天内容安排:
1:
工作单(快递单)管理
datagrid行编辑(表格内部)
2:
工作单搜索,使用索引-----------------------HibernateSearch框架(底层Lucene)
3:
权限系统分析表设计原则
1.任务一:
工作单快速录入
快速录入功能,非常符合datagrid行内编辑
解决:
同一时间工作单非常多,无法等到信息录入完毕再进行发货,提供录入员快速录入工作单信息的功能,这些录入的数据都是为了满足物流配载的需求
在闲暇时候,对工作单信息进行补全、完善
jqueryeasyuidatagrid行内编辑
jqueryeasyuidatagrid行内编辑
第一步:
在datagrid需要编辑列属性,添加editor属性
第二步:
通过事件,调用datagrid方法,打开某一行数据编辑状态
第三步:
编辑后,可以选择取消编辑或者接收编辑(编辑有效)
第四步:
可以向datagrid插入一行数据
第五步:
和编辑相关事件
工作单快速录入实现
理解快速录入,新增一行代码
WEB-INF/pages/qupai/quickworkorder.jsp工作单快速录入页面
上面代码,保证用户只能编辑一行!
(注意:
因为editEdit被调用,必须满足所有editor验证都通过,如果验证不通过,无法执行endEdit)
结束编辑,触发onAfterEdit函数
datagrid组件内部添加onAfterEdit事件提交用户编辑数据给action
提交一个Ajax请求,发给服务器
编写服务器,添加工作单数据(代码实现)
修改实体WorkOrderManage采用默认主键策略
BaseAction注入service
Action代码
Service代码
DAO代码
无条件分页查询工作单
1:
页面添加datagridurl查询action
编写action代码完成分页查询
service
dao省略!
测试无条件分页查询!
ok!
2.任务二:
工作单索引建立和搜索
什么是全文索引?
为什么要建立索引?
对目标搜索内容中每一个词都建立索引,根据目标内容每一个词进行搜索
操作数据库,采用like模糊查找,无法使用数据库内部索引
全文索引保存在哪?
在硬盘上,是一组文件
对工作单数据建立索引
后期会有lucene课程,详细讲解lucene使用细节、solr搜索服务器
今天课程,通过hibernatesearch创建lucene全文索引
Hibernate+Lucene结合开发==========HibernateSearch
第一步:
修改pom.xml引入hibernatesearch和IK分词器的jar包
导入hibernatesearch
3.4.2.Final
org.hibernate
hibernate-search
${hibernate-search.version}
方式一:
导入ik分词器(不被maven管理)
--ik坐标配置-->
org.wltea
IKAnalyzer
2012_u6
system
--根据磁盘路径将ikjar粗放目录下即可-->
e:
/ik/IKAnalyzer2012_u6.jar
方式二:
可以将ik分词器下载本地硬盘发布到maven仓库
如何将第三方jar发布到maven仓库:
cmd窗口将下面命令拷贝回车即可
mvninstall:
install-file-Dfile=e:
/ik/IKAnalyzer2012_u6.jar-DgroupId=cn.itcast.ik-DartifactId=tpsik-Dversion=2.0.1-Dpackaging=jar-DgeneratePom=true-DcreateChecksum=true
cmd窗口复制该命令即可
-Dfile第三方jar所在的磁盘位置-DgroupIdjar在仓库坐标位置包名-DartifactId发布jar工程名称-Dversionjar版本
第二步:
IK分词器,可以在src/main/resources下提供配置文件
将IKAnalyzer.cfg.xml和stopword.dic复制src/main/resource目录根据用户不同需求进行分词!
cn.itcast.bos.ik
myik
2.0.1
第三步:
配置hibernatesearch(官方文档)
参考
配置索引库生成磁盘位置
需要配置hibernate属性
hibernate.search.default.indexBase索引硬盘目录
2:
告知索引库将那些实体类的字段信息分词建立索引引入三个注解
需要通过注解配置实体类,对哪些数据进行索引
@Indexed(类)、@DocumentId(主键)、@Field(建立索引字段)
hibernte-search自带分词器
注解的最大的好处,不需要写lucene代码,进行hibernate添加操作时,自动创建索引、修改索引、删除索引
插入工作单!
对应Productarrivecity字段建立索引!
第四步:
使用luke工具,查看索引文件
运行java-jar路径
查询索引建立完成!
使用IK分词器分词实现:
引入ik分词器坐标
查看分词索引库文件信息
java-jarlukeall.jar
ik分词器扩展配置文件说明可以将用户指定词条选择分词或者不分词
引入配置文件src/main/resources目录下
测试:
分了.....
3.任务三:
工作单搜索功能(全文索引)
使用hibernatesearch建立索引
1)POM导入jar包
hibernatejar包、lucenejar包、hibernatesearchjar包、ik分词器jar包
2)配置hibernate属性
hibernate.search.default.indexBase
3)使用hibernatesearch提供注解,修饰哪些数据需要建立索引
实体类@Indexed、实体类@Analyzer、主键属性@DocumentId、需要创建索引属性@Field
4)hibernate、JPAAPI对实体数据进行增加、修改、删除操作,hibernatesearch自动同步操作索引库
jqueryeasyuisearchbox制作搜索框
下拉选择条件搜索
WEB-INF/pages/qupai/quickworkorder.jsp页面
1、页面提供north区域div,编写搜索框
2、通过input设置class=”easyui-searchbox”
3、通过设置搜索框menu指向div的id(下拉搜索项)
4、通过设置搜索框prompt属性提供搜索框默认提示信息
5、通过设置搜索框searcher属性指定点击搜索指向js函数名称
js函数value:
用户输入数据name:
搜索的name属性值
编写后台action接受name和value发送ajaxdatagrid提供load方法!
js函数采用load发送请求!
同一个方法!
load就可以向后台发同一个地址请求
服务器修改pageQuery方法!
引入条件分页查询+Luncen搜索查询!
编写服务器实现搜索功能
修改datagrid的url属性
检索查询实现
action判断是否含有条件参数接受条件参数如果进行索引查询执行else代码将easyui分页查询的的数据total和rows存放到Map(data)即可
service
1:
无条件分页查询
2:
有条件索引查询
业务层的实现
dao接口注意此时采用lucence索引检索目标数据我们需要自定义接口实现类编写索引查询!
查询索引库根据索引库的分词实现数据库的分页查询!
此时springdata会自动搜索以Impl结尾的类!
@SuppressWarnings("unchecked")
publicclassWorkOrderManageDaoImpl{
//索引查询索引自定义分页条件查询
//1:
获取EntityManager==session
@PersistenceContext
privateEntityManagerentityManager;
publicPagepageQueryByHibernateSearch(PageablepageRequest,StringconditionName,StringconditionValue){
try{
//官方文档2第三方文档
//EntityManagerem=entityManagerFactory.createEntityManager();
//2:
获取全文检索FullTextEntiyManager--->获取全文检索Query
FullTextEntityManagerfullTextEntityManager=org.hibernate.search.jpa.Search.getFullTextEntityManager(entityManager);
//3:
准备luncenQuery对象luceneQuery封装查询条件没有模糊匹配
//2:
解析词条
QueryParserqueryParser=newQueryParser(Version.LUCENE_31,conditionName,newIKAnalyzer());
Queryquery1=queryParser.parse(conditionValue);//完全匹配查询
WildcardQueryquery2=newWildcardQuery(newTerm(conditionName,"*"+conditionValue+"*"));//扩展查询*通配符
////3:
两个查询合并成一个查询BooleanQuery
BooleanQuerybooleanQuery=newBooleanQuery();
booleanQuery.add(query1,Occur.SHOULD);//should表示或者关系or
booleanQuery.add(query2,Occur.SHOULD);//should表示或者关系or
//4获取全文检索query
//javax.persistence.QueryfullTextQuery=fullTextEntityManager.createFullTextQuery(booleanQuery);
FullTextQueryfullTextQuery=fullTextEntityManager.createFullTextQuery(booleanQuery,WorkOrderManage.class);
//5
inttotalCounts=fullTextQuery.getResultSize();//总记录数total
//6:
分页查询
fullTextQuery.setFirstResult(pageRequest.getOffset());//起始记录数
fullTextQuery.setMaxResults(pageRequest.getPageSize());//每页显示记录数
ListresultList=fullTextQuery.getResultList();//rows
//7:
获取接口Page接口实现类
Pagedata=newPageImpl(resultList,pageRequest,totalCounts);
returndata;
}catch(ParseExceptione){
e.printStackTrace();
thrownewRuntimeException("索引查询失败"+e);
}
}
}测试完成!
ok!
4.项目中间总结
第一天
1)jqueryeasyui系统页面布局(掌握)
layout、accordion、tabs和Ztree
2)jqueryeasyuidatagrid
HTML和JS开发方式
3)maven搭建一个项目
Maven安装配置、eclipse的maven配置、建立项目导入坐标
4)将所有页面通过page_*_*配置映射为一个Action,使用拦截器进行控制管理
第二天
5)PowerDesigner数据建模,生成SQL
Oracle配置不要引号
5)JPA注解配置实体类
@Entity、@Table、@Id、@GeneratedValue、@GenericGenerator、@Column
@Temporal日期、@Transiant不生成表
7)struts2xml配置校验、提示国际化
8)struts2注解开发
导入struts2-convention-plugin
Action必须在action、actions、struts、struts2四个包中,以Action结尾
@ParentPackage@Namespace@Action@Result
9)spring注解开发
@Controller(配置多例@Scope)@Service@Repository@Autowired
扫描
10)applicationContext配置spring整合springdatajpa
整合hibernate配置sessionFactory
整合JPA配置EntityManagerFactory
11)SpringData使用
接口继承提供默认方法
方法命名规则写方法,生成语句
@NamedQuery注解
@Query注解
=============================命名参数@Param、修改Query@Modifying
13)Hibernate使用HibernateTemplate抽取泛型通用DAO
14)jqueryeasyuimenubutton下拉菜单、messager消息窗口、window普通窗口
15)自定义拦截器,控制不登陆无法访问页面
16)Ajax功能编程、服务器struts2-json-plugin转换json使用
第一步:
事件触发ajax请求$.post
第二步:
服务器处理数据
第三步:
将处理结果压入值栈顶部,配置Action继承json-default包,使用json结果集
============================如果保存、修改操作没有处理结果
try{
map.put(“success”,true);
}catch{
map.put(“success”,false);
}
将map转换为json返回
第三四五天
17)jqueryeasyuiform校验效果(自定义校验规则)
18)jqueryeasyuidatagrid结合springdata实现分页
第一步:
客户端发送page、rows
第二步:
服务器将page和rows存入Pageable
第三步:
服务器调用DAO的PagefindAll(Pageable)查询
第四步:
新建map,将page中totalElements和content放入map,设置key为total和rows
第五步:
将map压入栈顶,使用json结果类型,返回
19)修改数据,使用form的load方法,装载数据回显
20)区域信息批量导入ocupload一键上传
21)struts2FileUploadInterceptor文件接收
22)POI的Excel解析
23)pinyin4j汉字转换拼音
24)分区多条件组合查询自定义插件form转换json
25)springdata的Specification实现查询
26)分区查询结果导出,文件下载,POI生成Excel
第六天
23)CXF编写CRM,提供服务接口
编写接口和实现(@WebService@WebMethod)、配置jaxws:
server配置(只有类通过jaxws:
endpoint配置)、配置servlet
24)BOS客户端接口联调,实现定区关联客户
25)能说出基础设置模块核心业务
基础档案设置、收派标准关联、收派时间管理、取派员管理、车辆线路管理、区域管理、分区管理、管理定区调度排班
第七天
26)能说出取派模块核心业务
业务受理、自动分单、查台转单、人工调度、工单管理、工作单快速录入、导入、打印、查询
27)datagrid行内编辑
28)HibernateSearch配置使用
为什么使用索引?
好处?
分词器?
配置过程?
5.权限系统
权限表设计分析apacheshiro框架
web阶段如何控制访问资源权限
URL级别权限管理!
Filter过滤器/*
表设计关系:
t_user用户表
role角色表
fucntion权限表
关系表:
user_role
一个用户可以允许多个角色
一个角色可以被授予多个用户
角色权限表role_function
一个角色可以允许多个权限
一个权限可以被授予多个角色
user--->user_role--->role--->role_function--->function
搭建虚拟表环境