网站首页 > 技术文章 正文
第四日,项目实战系列终结篇(1)。
之前文章关联阅读
Java实战系列-项目简介、技术选型 、JNA身份证读卡踩坑
Java实战系列-小票打印机格式化打印 docx转pdf打印
一、开发任务分析
1、设计登录页面,同事之前登录页面已经做好,这里主要是美工设计界面,图片等资源替换。
2、人员信息管理界面。人员信息按村进行管理,设计左侧组织架构选择组件,右侧为人员管理界面,界面上设计 查询条件,查询按钮、新增、导入、导出、修改、删除等功能点。
3、登记管理界面。人员登记也参考人员信息管理的界面布局,左右结构,左侧为组织机构,右侧为管理界面。 功能主要包括查询条件,查询按钮,手动登记、刷身份证登记、导出、补打印几个主要功能。
二、功能实现
先介绍一下我们用的开发环境。我们用的是最新的#jeecg# boot版本,前端是基于 Ant Design of Vue 阿里巴巴前端团队出品,质量和美观度都不错! 这里给积极做开源的公司团队点个赞!当然也希望大家能给我这个知识的搬运工,热衷分享的老程序员一个关注,点个赞!
给没有太多接触过前端的朋友介绍一下vue的开发思路,有些类似于Java的类的概念,将功能、数据、展现、样式整体封装成一个可以重复使用的组件,如果一个公司在同一套代码上长期积累的话,能形成很好的一个整体代码风格,前端展示风格,大大提高开发效率,技术栈该更新要更新,跟上时代的步伐才不容易被淘汰。
1、登录界面设计
2、人员信息管理界面
这个界面我采用了两个组件来组合开发的,一个组织机构的导航组件,一个业务组件,导航组件可以在需要的地方重复使用,开源系统中的系统管理模块中就有,直接重复利用,提高效率。另外一个组件主体代码可以由代码生成器生成出来,根据业务需求再进行调整即可。
2.1 导入功能实现
前端默认有生成的导入控件,这里主要我需要多传一个村的参数到后台就可以。主要修改代码如下:departId 是由选择组织的组件传参到我这个业务组件的,用prop参数进行接收就可以了,对参数传参方式不了解的,建议读官方文档,也可以买书籍进行全面了解。
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}?departId=${this.departId}`;
},
后端处理逻辑:这里用到的主要框架为jxls 2.5.1 ,支持格式化导出,格式化导入的功能,网上也能查询到相关介绍,我这里也不多说了。
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-reader</artifactId>
<version>2.0.6</version>
</dependency>
读取电子表格需要设计一个导入配置参数文件peopleImport.xml,文件内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<workbook>
<worksheet idx="0">
<section startRow="0" endRow="2"></section>
<loop startRow="3" endRow="3" items="peopleList" var="people" varType="org.jeecg.modules.sqxf.people.entity.SqxfPeople">
<section startRow="3" endRow="3">
<mapping row="3" col="0">people.no</mapping>
<mapping row="3" col="1">people.familyNo</mapping>
<mapping row="3" col="2">people.name</mapping>
<mapping row="3" col="3">people.familyMain</mapping>
<mapping row="3" col="4">people.cardId</mapping>
</section>
<loopbreakcondition>
<rowcheck offset="0">
<cellcheck offset="2"></cellcheck>
</rowcheck>
</loopbreakcondition>
</loop>
</worksheet>
</workbook>
这个框架的主要好处是可以通过配置文件来对应列和实体中的字段,能灵活地进行配置,如果新增列或调整列的话,几乎不用调整程序相关内容。
接口端代码如下:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
List<SqxfPeople> peopleList = new ArrayList();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
//获取上传文件对象
MultipartFile file = entity.getValue();
org.springframework.core.io.Resource resource = new ClassPathResource("peopleImport.xml");
InputStream in = resource.getInputStream();
XLSReader mainReader = ReaderBuilder.buildFromXML(in);
in.close();
List<SqxfPeople> itemList = new ArrayList();
Map beans = new HashMap();
beans.put("peopleList", itemList);
XLSReadStatus readStatus = mainReader.read(file.getInputStream(), beans);
if (readStatus.isStatusOK()) {
for(SqxfPeople item: itemList ){
// 这里使用Hutool 中的身份证校验的工具类,也推荐一下
boolean isvalid = IdcardUtil.isValidCard(item.getCardId());
// 此处省略部分业务代码,有业务处理代码可以在这里添加
peopleList.add(item);
}
}
}
message = "读取" + sum.getOrDefault("total", 0) + "行,";
message += "导入" + sum.getOrDefault("succ", 0) + "行,";
message += "错误" + sum.getOrDefault("error", 0) + "行,";
message += "小于18岁人员" + sum.getOrDefault("lt18", 0) + "行。";
sqxfPeopleService.deleteByDepartId(departId);
// 这里也强调一下 批量提交数据提交导入效率!
sqxfPeopleService.saveBatch(peopleList, 500);
return Result.ok(message);
这里也强调一下 批量提交数据提交导入效率!
sqxfPeopleService.saveBatch(peopleList, 500);
这里使用Hutool 中的身份证校验的工具类,也推荐一下,这个工具类功能强大,建议多了解一下,很多东西拿来就用,也能提高效率。
文章比较长了,后面的内容后面文章继续分享吧。
关注我,持续技术、方案分享!至少也点赞分享一下,鼓励鼓励,谢谢!
- 上一篇: Vue高性能渲染大数据Tree组件「实践」
- 下一篇: 让Jenkins自动部署你的Vue项目「实践」
猜你喜欢
- 2024-10-25 文档在线预览新版(四)使用js前端组件实现文档在线预览
- 2024-10-25 细聊Vue 3 系列之 JSX 语法(vue中jsx语法)
- 2024-10-25 一篇文章教你并列比较React.js和Vue.js的语法【实践】
- 2024-10-25 带你了解 vue-next(Vue 3.0)之 初入茅庐【实践】
- 2024-10-25 10个Vue开发技巧「实践」(vue开发视频教程)
- 2024-10-25 Python开发打印服务(2)(python打印代码)
- 2024-10-25 Vue.js 项目实践——创建记忆卡片游戏
- 2024-10-25 让Jenkins自动部署你的Vue项目「实践」
- 2024-10-25 Vue高性能渲染大数据Tree组件「实践」
- 2024-10-25 轻量级Vue图片上传插件——Vue-core-image-Upload
- 11-26Win7\8\10下一条cmd命令可查得笔记本电脑连接过的Wifi密码
- 11-26一文搞懂MySQL行锁、表锁、间隙锁详解
- 11-26电脑的wifi密码忘记了?一招教你如何找回密码,简单明了,快收藏
- 11-26代码解决忘记密码问题 教你用CMD命令查看所有连接过的WIFI密码
- 11-26CMD命令提示符能干嘛?这些功能你都知道吗?
- 11-26性能测试之慢sql分析
- 11-26论渗透信息收集的重要性
- 11-26如何查看电脑连接过的所有WiFi密码
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)