暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java项目笔记之CRM中导入导出和数据字典

java学途 2021-06-21
822



不点蓝字,我们哪来故事?



导入导出

导出数据到一个表格中,导出是不需要分页的。工资条

导入:类似批量插入。添加很多员工。

表的模板要和表中的数据对应起来,导入的时候就能自动插入了。

使用第三方工具导入导出

POI:

maven仓库搜POI,选择版本,点击拷贝依赖,粘贴到pom.xml中;

面向对象,POI中处理Excel的概念:

  • workbook:整个Excel文件

  • sheet:一页数据(一张纸)

  • row:行

  • column:列

  • cell:单元格

POI的官方文档:

快速入门;


1、按钮添加

员工中ftl:

请求用什么?

不能用异步请求,因为响应的是文件,用同步的方式发生请求。

2、controller中添加方法:

创建工作簿(从文档拷贝)

测试一下,效果,点击左下角出现文件。文件名称是.do后缀,所以要设置文件下载的响应头。

文件下载的响应头:需要配置,拷贝(xmind)里;

提供数据:

将创建Excel相关的代码抽成一个工具:


在业务层中来创建该方法:

查询员工数据,遍历数据集:每个员工就是一行,行中每个属性就是一格。

在数据之前有一行显示属性名称的标题行:

循环中第一行要+1:


异步请求为什么不行:

以function回调函数的形式去接受,在function中只能把后台响应回来的数据,通过毁掉函数来处理,最后是一堆的字符串。文件上传和下载的时候,只能用同步请求的方式来处理。


导入功能:

提供一个Excel模板,规定好文件的格式:

标题

每一列的单元格格式与数据库中设计的列格式要一致。

将模板存放在

模态框:导出

导入按钮的点击事件:

显示模态框。

文件上传:

用异步请求方式去提交,导入成功或者失败的结果

controller中导入的方法:异步JsonResult返回

参数:涉及到文件上传,文件上传的格式必须是MultipartFile


配置文件上传解析器:

文件上传一定要配mvc.xml中,id的值是不能修改的,

控制文件大小:

启动报错:

没有依赖:就找不到类。添加文件上传的依赖。

再试一下。


业务层接收到文件之后的处理:

把接受到的文件以Excel的方式去读取并操作:

传流的方式来读,不传流是创建一个新的,

读取:getSheetAt/row...

看着表从什么地方开始读,获取总行数,循环去读。

开始读的索引位置:1,忽略掉标题行,

读取时要根据某种格式去读,年龄的类型是文本,

测试:导入选择文件,点击保存。

发现最后一行没有读到,那么lastRowNum不是指行数,而是行的索引数。

将模板中年龄的格式是数值时:对应就不用Integer.valueOf()

要指定的方式获取,得到的是Double

类型不匹配的时候:会报错,

如:模板中有标题和一个样例,让用户根据样例来填数据。


模板中不填数据的时候是空的,有可能出现空指针异常,业务层可以加个判断来排除空值的情况。


POI的工具:esaypoi、easyexcel

用的方式是贴注解,文档看实例。

工具需要依赖:

maven中央仓库中搜,拷贝粘贴。

在domain中铁注解,@ExcelProperty(value=“列名”,index=0)

文档中有使用方法,

添加依赖多了,因为传递性依赖导致依赖冲突。



数据字典

数据字典的作用:


一,      在一定程度上,通过系统维护人员即可改变系统的行为(功能),不需要开发人员的介入。使得系统的变化更快,能及时响应客户和市场的需求。

二,      提高了系统的灵活性、通用性,减少了主体和属性的耦合度

三,      简化了主体类的业务逻辑

四,      能减少对系统程序的改动,使数据库、程序和页面更稳定。特别是数据量大的时候,能大幅减少开发工作量

五,      使数据库表结构和程序结构条理上更清楚,更容易理解,在可开发性、可扩展性、可维护性、系统强壮性上都有优势。


修改添加数据可通过页面进行管理;

我们不用建太多的表,数据字典只需要两张表:字典目录、字典明细。

字典目录:

字典明细:通过外键与字典目录关联起来。

逆向工程生成基本文件:


字典目录:

拷贝controller,service修改,分页等功能。

拷贝页面:




做了目录的列表查询;


添加

修改添加的模态框:

测试添加功能;


编辑

编辑需要json


明细:

怎删改查

还是拷贝替换基本的功能,

实现、分页;

模态框数据的回显,


查看页面显示是否正常;


要实现的界面效果:

界面设计


左侧显示的标题是列表组:

bootstrap拷贝:



把数据变成动态:

把打开字典明细时,把字典目录全部查出来;

返回视图之前查询字典目录,共享出去。

页面上:循环将数据拿出来显示


点击字典目录,就会去查询目录下的明细:

同步还是异步?

根据目录的id来查询字典的明细(一对多),查询语句的id=被点击的目录的id

分页查询的语句要加条件,高级查询一样的:

xml中对id的的字句:

用在明细的List方法中,


目录是链接;将href改成订台的动态的目录id。

点击之后的目录应该回显一下:

点击过的目录添加一个active的class样式,颜色突出。

bug:点下一页,又是重新查所有的数据:

点击下一页就是提交高级查询的表单,如何让表单将条件带过去;

加一个隐藏域:


模态框:

添加明细的时候:模态框的字典目录自动显示刚才选择的目录名称:

新增和编辑都会显示目录的名称:

把目录的名称设置到模态框的名称中,a链接的内容



测试是:报错parent_id不能为空,原因:表单中没有把目录的id传过去后台,加个隐藏域方目录的id,在提交表单时把目录的id带到后台去。



明细编辑的回显:

前台的回显:

序号用于排序,下拉框里用得越多的显示越靠前。

在分页的时候去排:

排序也让分页插件自己去加上去:

第三个参数,就是排序的规则:

添加时明细序号在用户不填的情况下,自动在最大的序号加一:

查询当前字典目录下最大的序号:

查询最大序号的SQL语句

mapper中的方法返回值在排除null后,可以是int基本类型;


保存之前:看用户填没填,不填就自动给他加上序号。

如果将即将保存的默认序号(max + 1)回显到input中的效果会更好,需要在前台去查max再然后+1 显示出来。


需求:在没有选择目录的情况下,点击添加,需要提示:请先选中目录,选中就之间 显示明细列表。




java学途

只分享有用的Java技术资料 

扫描二维码关注公众号

 


笔记|学习资料|面试笔试题|经验分享 

如有任何需求或问题欢迎骚扰。微信号:JL2020aini

或扫描下方二维码添加小编微信

 




小伙砸,欢迎再看分享给其他小伙伴!共同进步!




文章转载自java学途,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论