项目三总结
一、功能总结:
1.档案录入功能
·功能描述:
单独的一个档案录入页面,点击提交把档案内容提交保存到数据库
·功能实现过程:
在接到这个模块时候,首先看了文档的描述,发现字段比较多有二十多个,关联对象也比较多,接着就开始建表,在建表的过程过程中好多字段都不太明白其中含义,也没有管那么多,直接把表建好。
而后开始做前台页面,但是马上就发现了问题,就是忘记from表单立面怎么嵌入一个表格,后来慢慢查询以前的资料,把前台页面做好。
前台页面完成后开始写后台代码,这个时候就发现在存入值的时候遇到了关联对象值没有存入数据库,造成页面显示不出数据,进过一系列的修改和配置domain关系把新增页面做好。这个时候就有个问题档案附件上传可以直接写在新增页面,也可以分开写。我的选择是写在了新增页面,后面有时间在分开写。
·页面展示
2.档案查询
·功能描述:
用户通过点击菜单按钮,或者添加档案成功后,或者修改档案成功后进入该模块,分页展示所有的档案信息,并且可以根据档案类型、存档点、标题进行组合模糊查询。其中档案管理员和系统管理员可以选择对应的档案进行修改操作。
·功能实现过程:
在看到这个需求时候开始觉得这个界面就是最基础的增删改查,自己在做的时候发现增删改查好像也不简单。
以前做的两个项目模式都是老师做一遍,然后我们自己回去敲出来,现在自己做的时候发现增删改查自己掌握的也不是那么好,在做分页查询的时候遇到了两个问题,一个是关联对象没有格式化到页面,找不到mapper的xml映射,高级查询sql映射报错,添加条件就报错找不到映射,最终通过问同学和老师把问题解决了。
分页条件查询代码
@Override
public PageResult selectByQuery(ArchiveQuery aq){
//分页查询
PageHelper.startPage(aq.getPage(),aq.getRows());
Page pagelist = (Page)archiveMapper.selectByQueryMapper(aq);
PageResult pageResult =new PageResult<>(pagelist.getTotal(), pagelist.getResult());
return pageResult;
}
在做时间区间的添加没有注意到前台页面要引一个汉化js包,还有就是传入的数据用easyui时间主键需要格式化set方法才能不包400类型错误。
@DateTimeFormat(pattern ="yyyy-MM-dd")
public void setExpirationTime(Date expirationTime) {
this.expirationTime = expirationTime;
}
@DateTimeFormat(pattern ="yyyy-MM-dd")
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
最后就是条件查询没有做那么多,只写了一个档案名称的条件查询。
·页面展示
3.档案导出
·功能描述:
档案导出可以先根据档案类型、存档点进行筛选数据后,选择导出数据保存文件的类型进行导出数据,可以导出成PDF、DOC文档、EXCEL表格、TXT文本文件
·功能实现过程:
在做档案导出功能时候遇到的错主要有两个,档案导出按钮直接写在档案查询页面。
问题1:档案导出这个功能也是之前老师讲过的,遇到的第一个问题就是页面上传的字段没有传入后台,再对比了前台页面和后台页面的字段发现字段没问题,这个时候就有点没有思路了,后来通过百度包问题解决了原是什么也没搞清楚,单效果出来了,给传入字段加了一个别名就没问题了。
上传加别名(@RequestParam("fileImage") MultipartFile fileImage)
//导出excel表格功能
@RequestMapping("/download")
public String download(ArchiveQuery aq, HttpServletRequest req, ModelMap map){
//查询出要导入出的数据
List queryList =archiveService.findByQuery(aq);
//导出的参数
ExportParams params =new ExportParams("档案列表","内容", ExcelType.XSSF);
//params.setFreezeCol(2);//冻结的列
map.put(NormalExcelConstants.DATA_LIST, queryList);//前台传入的数据集合
map.put(NormalExcelConstants.CLASS, Archive.class);//导出实体
map.put(NormalExcelConstants.PARAMS, params);//参数
map.put(NormalExcelConstants.FILE_NAME,"archive");//导入的文件名称
return NormalExcelConstants.EASYPOI_EXCEL_VIEW;//View名称
}
问题2:就是导出文件用的是easypoi,domain配置需要打标签,关联对象多对一没什么问题能够成功导出,但是一对多的配置就不能导出关联对象,这个问题还没有解决
·页面展示
4.档案附件上传
·功能描述:
档案的附件上传功能,首先根据用户输入要添加附件的档案编号进行查询出档案的数据,通过点击“上传“进行添加附件的操作,操作时需要提供数据有:附件标题、附件类型、附件文件、备注信息、所属档案编号、上传附件时间、文件大小、上传用户等数据,上传成功后返回查询页面。
·功能实现过程:
附件上传要求是单独的一个页面进行上传,刚开始做项目是直接把附件上传功能和新增档案功能做在一起的,后面又分开了,但是遇到的问题是前台页面不知道怎么从数组里面取值处理,造成这个功能没有做成功。
还有个问题就是之前上传图片附件都是一张图片上传到本地,数据库保存图片的项目路径地址,如果有多个图片时候这个功能就不行,于是新建了一个附件表,用来存图片和附件相关描述,但是功能没有做出来。
·代码实现
private void uploadImage(Archive archive, MultipartFile fileImage, HttpServletRequest req)throws IOException {
//判断上传的文件是否为空
if(fileImage.getSize()!=0L){//上传文件不为空
//获取绝对路径
String realPath = req.getServletContext().getRealPath("/");
String rootpath = realPath.substring(0, realPath.lastIndexOf("mg"));
//如果类型不为空,证明是修改图片
if(archive.getId() !=null && StringUtils.isNotBlank(archive.getArchiveItem())){
//删除图片
File file =new File(rootpath, archive.getArchiveItem());
file.delete();
}
//随机产生名字
long name = System.currentTimeMillis();//3434543534534534
//获取上传附件的名字
String filename = fileImage.getOriginalFilename();//a.png
//获取文件的后缀名
String extension = FilenameUtils.getExtension(filename);//png
//最终生成文件的名字
String bigFileName = name +"." + extension;//3434543534534534.png
//存储附件图片的路径
String filePath ="/upload/" + bigFileName;// /upload/3434543534534534.png
//附件图片的绝对路径
File file =new File(rootpath, filePath);// E:\ideaProject\target\aisell/upload/3434543534534534.png
//如果图片的父文件夹不存在,则创建
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
//获取输出流
FileOutputStream fileOutputStream =new FileOutputStream(file);
//上传的核心代码
IOUtils.copy(fileImage.getInputStream(),fileOutputStream);
//图片上传完毕之后,则把路径设置到archive中
archive.setArchiveItem(filePath);
//关闭流
fileOutputStream.close();
}
}
·页面展示
5.档案到期管理
·功能描述:
档案到期查询功能中,需要提供到期时间来查询数据,如:已经到期、今天到期、三天内到期、一周内到期、两周内到期、一个月内到期、三个月内到期、半年内到期、一年内到期等进行查询。
·功能实现过程:
刚开始做这个功能的时候没有搞清楚功能要求,做错一次,在理解到意思过后发现实现有些困难,需要动态的获取创建文档日期和文档到期的时间差进行判断什么时间文件过期,然在百度查询到计算时间差的方法后,开始写逻辑,但写出来的逻辑怎么都不对,最后只好放弃,改用手动修改到期时间来解决这个功能需求。
·页面展示
二、心得总结:
做第三个项目之前还跃跃欲试,在做的过程中才发现自己掌握的多么差,但是在做这个项目还是学到了很多东西,收获感觉比较上课要多,独立完成能力和对代码的理解能力都有提升,最后遗憾的是做项目过程中我们小组基本都没有过什么交流,造成了我的档案模块和其他人冲突(关联对象维护关系递归),项目合并出了很多问题。总的来说这个项目做完后收获还是比较多的。