黑马传智健康项目

目录

 

一、传智健康环境搭建

二、 预约管理-检查项管理

三、预约管理-套餐管理    

四:定时任务组件Quartz(与spring-task功能类似)

五、预约管理-预约设置

六、移动端开发-体检预约

七、移动端开发-手机快速登录、权限控制

八、ECharts图型报表

九、sql回顾

十、导出excel(POI导出excel)


一、传智健康环境搭建

1.1 采用分布式开发,按模块分为:
  health_parent:父工程,打包方式为pom,统一锁定依赖的版本,同时聚合其他子模块便于统一执行maven命令
  health_common:通用模块,打包方式为jar,存放项目中使用到的一些工具类、实体类、返回结果和常量类
  health_interface:打包方式为jar,存放服务接口
  health_service_provider:Dubbo服务模块,打包方式为war,存放服务实现类、Dao接口、Mapper映射文件等,作为服务提供方,需要部署到tomcat运行
  health_backend:传智健康管理后台,打包方式为war,作为Dubbo服务消费方,存放Controller、HTML页面、js、css、spring配置文件等,需要部署到tomcat运行
  health_mobile:移动端前台,打包方式为war,作为Dubbo服务消费方,存放Controller、HTML页面、js、css、spring配置文件等,需要部署到tomcat运行

1.2 ElementUI介绍
  ElementUI是一套基于VUE2.0的桌面端组件库,ElementUI提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。
  官网地址:http://element-cn.eleme.io/#/zh-CN
  传智健康项目后台系统就是使用ElementUI来构建页面,在页面上引入 js 和 css 文件即可开始使用,如下:
   
 
 
 
 

二、 预约管理-检查项管理

2.1 ajax异步获取数据
     
     axios.post("/checkItem/findPage.do",param).then((response) =>{//箭头函数
                    //正常结束
                }).catch((r)=>{
                    //异常结束
                });

2.2 输入校验
     //写在data:{}里面
     rules: {//校验规则
                code: [{ required: true, message: '项目编码为必填项', trigger: 'blur' }],
                name: [{ required: true, message: '项目名称为必填项', trigger: 'blur' }]
            }
     //写着方法里面 (dataEditForm为表单名称)
    this.$refs['dataEditForm'].validate((valid)=>{
         if(valid){//校验成功} else{}
    });

2.3 框架的注解
 Controller:
   @RestController //包含@control 另将Java对象自动转成json对象
   @RequestMapping("/checkItem") //与url的路径对应
   @Reference  //添加dubbo服务的service注入
   @PreAuthorize("hasAuthority('CHECKITEM_ADD')")//权限校验 写在方法上
   @RequestBody //写在方法形参前,自动将表单数据封装成Java对象
Service:
   @Service(interfaceClass = CheckItemService.class) //此处的注解为dubbo提供的,interfaceClass是为了事务生成指定的对象,此处是cglib代理
   @Transactional  //事务注解
   @Autowired  //自动注入

2.4 分页条组件(绑定current-change事件,此事件是分页条组件自己定义的事件,当页码改变时触发,对应的处理函数为handleCurrentChange)
               @current-change="handleCurrentChange" 
               :current-page="pagination.currentPage"
               :page-size="pagination.pageSize" 
               layout="total, prev, pager, next, jumper"
               :total="pagination.total">

handleCurrentChange(currentPage) { //切换页码
    //currentPage为切换后的页码 
    this.pagination.currentPage = currentPage; 
    this.findPage(); 
}

三、预约管理-套餐管理    



3.1 七牛云存储
官网:https://www.qiniu.com/
七牛云提供了多种方式操作对象存储服务,本项目采用Java SDK方式,地址:https://developer.qiniu.com/kodo/sdk/1239/java

//sql的添加方法自动返回自增的主键并封装到传过来的JavaBean中

    SELECT LAST_INSERT_ID()
    insert into t_setmeal (code,name,sex,age,helpCode,price,remark,attention,img) values
    (#{code},#{name},#{sex},#{age},#{helpCode},#{price},#{remark},# {attention},#{img})

四:定时任务组件Quartz(与spring-task功能类似)



maven坐标:
 
    org.quartz-scheduler
    quartz
    2.2.1


    org.quartz-scheduler
    quartz-jobs
    2.2.1

提供Spring配置文件spring-jobs.xml,配置自定义Job、任务描述、触发器、调度工厂等
spring-jobs.xml
applicationContext-job.xml

五、预约管理-预约设置



 Apache POI(spread插件也有类似功能)
Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。
POI操作Excel表格封装了几个核心对象:
XSSFWorkbook:工作簿 
XSSFSheet:工作表 
Row:行 
Cell:单元格

六、移动端开发-体检预约



1. 阿里云短信服务:
导入相应maven坐标
导入工具类
入门:
public static void main(String[] args)throws Exception {
   SMSUtils.sendShortMessage("SMS_159620392","13812345678","1234");}

2.  日历展示
页面中使用DatePicker控件来展示日历。根据需求,最多可以提前一个月进行体检预约,所以日历控件只展示未来一个月的日期


     
     
   

七、移动端开发-手机快速登录、权限控制



1、权限模块数据模型
前面已经分析了认证和授权的概念,要实现最终的权限控制,需要有一套表结构支撑:
用户表t_user、权限表t_permission、角色表t_role、菜单表t_menu、用户角色关系表t_user_role、角
色权限关系表t_role_permission、角色菜单关系表t_role_menu。

2、Spring Security简介
Spring Security是 Spring提供的安全认证服务的框架。 使用Spring Security可以帮助我们来简化认证和授权的过程。
官网:https://spring.io/projects/spring-security
3、总结
   主要有4张表,用户,角色,权限,菜单。
   认证只需要用户表
   授权:用户和角色是一对多,角色和权限、菜单、用户是一对多。
             认证通过后,需要根据用户找出对应的角色和权限。
             权限控制可以通过spring_sercurity.xml中配置
               
               
               
             也可以通过注入配置,精确到方法级别的权限控制
                 @PreAuthorize("hasAuthority('add')")//表示用户必须拥有add权限才能调用当前方法
                 不过需要开启组件扫描
                  
                 
                 还需要配置spring-security.xml文件。
                 

4、登录后获取用户名
  org.springframework.security.core.userdetails.User user = (org.springframework.security.core.userdetails.User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

八、ECharts图型报表



ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用JavaScript实现的数据可视化工具
官网:https://echarts.baidu.com/
下载地址:https://echarts.baidu.com/download.html
官方实例地址:https://www.echartsjs.com/examples/

九、sql回顾



 

十、导出excel(POI导出excel)



//获得Excel模板文件绝对路径
String temlateRealPath = request.getSession().getServletContext().getRealPath("template") + File.separator +
"report_template.xlsx";
//读取模板文件创建Excel表格对象
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(temlateRealPath)));
XSSFSheet sheet = workbook.getSheetAt(0);
XSSFRow row = sheet.getRow(2);
row.getCell(5).setCellValue(reportDate);//日期
row = sheet.getRow(4);
row.getCell(5).setCellValue(todayNewMember);//新增会员数(本日)
...
rowNum = 12;
for(Map map : hotSetmeal){//热门套餐
String name = (String) map.get("name");
Long setmeal_count = (Long) map.get("setmeal_count");
BigDecimal proportion =(BigDecimal) map.get("proportion");
row = sheet.getRow(rowNum ++);
row.getCell(4).setCellValue(name);//套餐名称
row.getCell(5).setCellValue(setmeal_count);//预约数量
row.getCell(6).setCellValue(proportion.doubleValue());//占比 }

//通过输出流进行文件下载 
ServletOutputStream out = response.getOutputStream(); 
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-Disposition", "attachment;filename=report.xlsx");
workbook.write(out);
out.flush();
out.close(); 
workbook.close();

你可能感兴趣的:(java项目(实战))