cms 网站后台内容管理系统模板(我手撸自助快递单导入excel功能四、五五)

优采云 发布时间: 2021-12-16 11:39

  cms 网站后台内容管理系统模板(我手撸自助快递单导入excel功能四、五五)

  三、导入excel功能四、FAQ五、最后参考文章一、项目介绍

  上一篇文章分享了我的自助快递单项目。本周我想优化这个快速查询。开发后台内容管理系统,统一管理后台快递信息。搜索了2个小时,找到了一个比较合适的瀑布式内容管理系统项目pb-cms。本项目适用于搭建博客和企业网站,后台为内容管理。关键是作者说项目已经更新了。然后在本地开始构建。

  二、开发环境搭建2.1技术栈2.2部署

  下载项目

  git clone https://gitee.com/LinZhaoguan/pb-cms.git

  修改配置文件配置文件在项目根目录resources下,主要配置文件如下:

  application-dev.yml #dev(开发版)配置文件

application-prd.yml #prd(生产版)配置文件

application.yml #主配置文件

logback-spring.xml #日志配置文件

  在这里修改application-dev.yml,内容如下:

  spring:

datasource:

type: com.alibaba.druid.pool.DruidDataSource

driverClassName: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://127.0.0.1:3306/pb-cms-base?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true

username: root

password: 123456

redis:

host: 127.0.0.1

port: 6379

password: 123456

timeout: 5000

jedis:

pool:

max-idle: 8

min-idle: 0

max-active: 8

max-wait: -1

server:

servlet:

context-path:/cms

  这里注意修改mysql数据库的url(链接)、username(用户名)、password(和密码)。修改redis的主机(服务器地址)、端口(端口)、密码(密码)。如果它们相同,则无需修改它们。

  使用数据库可视化工具Navicat工具导入数据库脚本,首先创建数据库pb-cms-base,如下图:

  然后导入数据库脚本,数据库脚本文件在docs\db\pb_cms_base.sql,导入数据如下图:

  运行项目打开SpringbootApplication,运行main方法:

  开发环境以调试模式启动。当然,如果你的项目已经开发完成,想部署给别人使用,可以将项目打包成jar包,独立运行。

  java -jar pb-cms.jar #本地jar包运行

nohup java -jar pb-cms.jar > pb-cms.log & #linux服务器运行

  项目运营的前端运营效果:

  项目运行后端运行效果:

  注意:我的想法的主题是Material Theme UI。

  三、导入excel功能

  pom.xml配置引入了hutools工具,因为它封装了很多工具类,所以可以直接使用。在项目 pom.xml 中添加以下依赖项:

  

cn.hutool

hutool-all

5.3.0

org.apache.poi

poi-ooxml

4.1.2

xerces

xercesImpl

2.12.0

  工具类 ExcelUtils 创建工具类,代码如下

  /**

* @author wangzg

* @date 2020/4/13

*/

public class ExcelUtils {

/**

* 获取第一个sheet页的内容

* @param inputStream

* @return

*/

public static List getKuaiDiList(InputStream inputStream) {

List kuaiDiList = new ArrayList();

if(Objects.nonNull(inputStream)){

ExcelReader excelReader = ExcelUtil.getReader(inputStream);

//表头添加别名,主要是将中文名转为数据库对应的字段

excelReader.addHeaderAlias("快递单号","kuaidiNo");

excelReader.addHeaderAlias("用户名","userName");

excelReader.addHeaderAlias("电话","phone");

excelReader.addHeaderAlias("快递公司","company");

List rowList = excelReader.readAll();

if(CollectionUtil.isNotEmpty(rowList)){

rowList.stream().forEach(r->{

KuaiDi kuaiDi = new KuaiDi();

try {

populate(kuaiDi,r);

kuaiDi.setCreateTime(new Date());

kuaiDiList.add(kuaiDi);

} catch (Exception e) {

e.printStackTrace();

}

});

}

}

return kuaiDiList;

}

public static void main(String[] args) {

List kuaiDiList = getKuaiDiList(ResourceUtil.getStream("D:\\快递.xls"));

kuaiDiList.stream().forEach(System.out::println);

}

}

  service调用service层比较简单。获取上传的multipartFile文件对象,将输入传给ExcelUtils.getKuaiDiList,即可返回对象集合kuaiDiList。代码如下:

   @Override

public void importData(MultipartFile multipartFile) throws Exception {

List kuaiDiList = ExcelUtils.getKuaiDiList(multipartFile.getInputStream());

if(CollectionUtil.isNotEmpty(kuaiDiList)){

//批量插入

this.saveBatch(kuaiDiList);

}

}

  四、FAQ3.1 项目可以不指定type-aliases-package属性来集成Mybatis吗?

  答案是肯定的。你为什么单独谈这个问题?因为我发现在项目报告配置文件配置文件中配置了如下内容:

  mybatis-plus:

global-config:

db-config:

id-type: auto

mapper-locations: classpath:mapper/*.xml

type-aliases-package: com.puboot.model

  com.puboot.model 没有包路径项。类型别名包是否支持模糊匹配?我从来没有想过作者写错了。最后,我在本地测试并检查了Mybitas Plus。最后的解释是这样的:

  》TypeAliasesPackage:MyBaits别名包扫描路径,通过该属性可以为包中的类注册别名,注册后可以直接在Mapper对应的XML文件中使用类名,而不是使用全限定类名(也就是不需要收录包名,看了部分源码,发现了一个小知识点:type-aliases-package支持定义多个包的别名。

   /**

* Packages to search type aliases. (Package delimiters are ",; \t\n")

*/

private String typeAliasesPackage;

  3.2 @RestController 和@Controller 的区别?

  因为这个项目集成了spring-boot-starter-thymeleaf,所以我们可以通过thymeleaf来开发我们的前端页面。学过Struts2同步应该知道怎么开发Web项目了。前端请求进入后端控制器的业务处理方法,处理方法将数据绑定到上下文,然后该方法返回一个字符串,该字符串将匹配返回给前端的生成页面。但是有时候你需要一个方法来直接返回响应数据的json数据。所以两者的区别是很明显的。@RestController:这个注解相当于@Controller + @ResponseBody。

  3.3 控制器如何注入服务?

  我们通常的方式可能是这样,使用@Autowired注入我们想要的服务,代码如下:

  @RequestMapping("kuaidi")

@Controller

public class KuaiDiController {

@Autowired

private KuaiDiService kuaiDiService;

}

  在这个项目中,我找到了一种写法,代码如下:

  @Controller

@RequestMapping("article")

@AllArgsConstructor

public class ArticleController {

private final BizArticleService articleService;

private final BizArticleTagsService articleTagsService;

private final BizCategoryService categoryService;

private final BizTagsService tagsService;

private final SysConfigService configService;

}

  这个方法其实就是构造方法注入。@AllArgsConstructor 是lombok 插件的注解,插件会自动生成全参数构造方法。

  五、终于

  开源项目让我们很容易获取和学习其他人的源代码。我也在优化自助快递查询功能。没有别的,只是为了不浪费时间;每次完成一个功能,都有一定的成就感,让我乐在其中!

  参考文章

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线