【医疗健康项目】传智健康项目(一)

第1章 项目概述和环境搭建

1. 项目概述

1.1 前言

传智健康管理系统是一款应用于健康管理机构的业务系统,实现健康管理机构工作内容可视化、会员管理专业化、健康评估数字化、健康干预流程化、知识库集成化,从而提高健康管理师的工作效率,加强与会员间的互动,增强管理者对健康管理机构运营情况的了解。

1.2 项目介绍

传智健康项目是一套医疗健康项目,包括前台预约系统以及后台管理系统,基于SSM实现,采用Dubbo+ZooKeeper部署。前台预约系统包括:用户登录、体检预约、短信验证、自动注册、套餐详情、预约成功展示等模块。后管理系统包括:用户登录、检查项管理、检查组管理、套餐管理、预约设置、会员数量统计、套餐占比统计、运营数据统计、运营数据统计导出Excel、PDF文件等模块。

项目Gitee地址:

https://gitee.com/chovy-pyc/itcast_health

有需要的小伙伴可以自行去拷贝。

1.3 项目演示

1.3.1 前台预约系统展示

登录展示

【医疗健康项目】传智健康项目(一)_第1张图片
【医疗健康项目】传智健康项目(一)_第2张图片

体检预约展示
【医疗健康项目】传智健康项目(一)_第3张图片
【医疗健康项目】传智健康项目(一)_第4张图片
【医疗健康项目】传智健康项目(一)_第5张图片
【医疗健康项目】传智健康项目(一)_第6张图片
【医疗健康项目】传智健康项目(一)_第7张图片

1.3.2 后台管理系统展示

检查项管理

【医疗健康项目】传智健康项目(一)_第8张图片

检查组管理
【医疗健康项目】传智健康项目(一)_第9张图片

套餐管理
【医疗健康项目】传智健康项目(一)_第10张图片

预约设置
【医疗健康项目】传智健康项目(一)_第11张图片

会员数量统计
【医疗健康项目】传智健康项目(一)_第12张图片

套餐占比统计
【医疗健康项目】传智健康项目(一)_第13张图片

运营数据
【医疗健康项目】传智健康项目(一)_第14张图片

1.4 组织架构

health_parent
├── health_common -- 工具类及通用代码
├── health_backend -- 后台管理系统模块
├── health_mobile -- 前台预约系统模块
├── health_interface -- 服务接口模块
├── health_service_provider -- 服务提供模块
└── health_jobs -- 系统任务模块

1.5 技术架构

【医疗健康项目】传智健康项目(一)_第15张图片

1.6 功能架构

【医疗健康项目】传智健康项目(一)_第16张图片

1.7 环境搭建

1.7.1 开发工具

工具 说明 官网
IDEA 开发Java程序 https://www.jetbrains.com/idea/download
SQLyog 开发数据库 https://webyog.com/
RedisDesktopManager redis客户端连接工具 https://redisdesktop.com/download
TIBCO Jaspersoft Studio jrxml模块设计器 https://community.jaspersoft.com/community-download
Typora Markdown编辑器 https://typora.io/

1.7.2 开发环境

工具 版本号
JDK 1.8 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
MySQL 5.7 https://www.mysql.com
Redis 3.2 https://redis.io/download
ZooKeeper 3.4.6 https://zookeeper.apache.org/

1.8 软件开发流程

软件开发一般会经历如下几个阶段,整个过程是顺序展开,所以通常称为瀑布模型。
【医疗健康项目】传智健康项目(一)_第17张图片

2. 环境搭建

2.1 项目结构

本项目采用maven分模块开发方式,即对整个项目拆分为几个maven工程,每个maven工程存放特定的一类代码,具体如下:
【医疗健康项目】传智健康项目(一)_第18张图片
各模块职责定位:

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运行

2.2 maven项目搭建

通过前面的项目功能架构图可以知道本项目分为传智健康管理后台和传智健康前台(微信端)

2.2.1 health_parent

创建health_parent,父工程,打包方式为pom,用于统一管理依赖版本

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
		 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <groupId>com.itheimagroupId>
    <artifactId>health_parentartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>
    
    <properties>
        <junit.version>4.12junit.version>
        <spring.version>5.0.5.RELEASEspring.version>
        <pagehelper.version>4.1.4pagehelper.version>
        <servlet-api.version>2.5servlet-api.version>
        <dubbo.version>2.6.0dubbo.version>
        <zookeeper.version>3.4.7zookeeper.version>
        <zkclient.version>0.1zkclient.version>
        <mybatis.version>3.4.5mybatis.version>
        <mybatis.spring.version>1.3.1mybatis.spring.version>
        <mybatis.paginator.version>1.2.15mybatis.paginator.version>
        <mysql.version>5.1.32mysql.version>
        <druid.version>1.0.9druid.version>
        <commons-fileupload.version>1.3.1commons-fileupload.version>
        <spring.security.version>5.0.5.RELEASEspring.security.version>
        <poi.version>3.14poi.version>
        <jedis.version>2.9.0jedis.version>
        <quartz.version>2.2.1quartz.version>
    properties>
    
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-beansartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webmvcartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-jdbcartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-aspectsartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-jmsartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-context-supportartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-testartifactId>
                <version>${spring.version}version>
            dependency>
            
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>dubboartifactId>
                <version>${dubbo.version}version>
            dependency>
            <dependency>
                <groupId>org.apache.zookeepergroupId>
                <artifactId>zookeeperartifactId>
                <version>${zookeeper.version}version>
            dependency>
            <dependency>
                <groupId>com.github.sgroschupfgroupId>
                <artifactId>zkclientartifactId>
                <version>${zkclient.version}version>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.12version>
            dependency>
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>fastjsonartifactId>
                <version>1.2.47version>
            dependency>
            <dependency>
                <groupId>javassistgroupId>
                <artifactId>javassistartifactId>
                <version>3.12.1.GAversion>
            dependency>
            <dependency>
                <groupId>commons-codecgroupId>
                <artifactId>commons-codecartifactId>
                <version>1.10version>
            dependency>
            <dependency>
                <groupId>com.github.pagehelpergroupId>
                <artifactId>pagehelperartifactId>
                <version>${pagehelper.version}version>
            dependency>
            
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatisartifactId>
                <version>${mybatis.version}version>
            dependency>
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatis-springartifactId>
                <version>${mybatis.spring.version}version>
            dependency>
            <dependency>
                <groupId>com.github.miemiedevgroupId>
                <artifactId>mybatis-paginatorartifactId>
                <version>${mybatis.paginator.version}version>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>${mysql.version}version>
            dependency>
            
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>${druid.version}version>
            dependency>
            
            <dependency>
                <groupId>commons-fileuploadgroupId>
                <artifactId>commons-fileuploadartifactId>
                <version>${commons-fileupload.version}version>
            dependency>
            <dependency>
                <groupId>org.quartz-schedulergroupId>
                <artifactId>quartzartifactId>
                <version>${quartz.version}version>
            dependency>
            <dependency>
                <groupId>org.quartz-schedulergroupId>
                <artifactId>quartz-jobsartifactId>
                <version>${quartz.version}version>
            dependency>
            <dependency>
                <groupId>com.sun.jerseygroupId>
                <artifactId>jersey-clientartifactId>
                <version>1.18.1version>
            dependency>
            <dependency>
                <groupId>com.qiniugroupId>
                <artifactId>qiniu-java-sdkartifactId>
                <version>7.2.0version>
            dependency>
            
            <dependency>
                <groupId>org.apache.poigroupId>
                <artifactId>poiartifactId>
                <version>${poi.version}version>
            dependency>
            <dependency>
                <groupId>org.apache.poigroupId>
                <artifactId>poi-ooxmlartifactId>
                <version>${poi.version}version>
            dependency>
            <dependency>
                <groupId>redis.clientsgroupId>
                <artifactId>jedisartifactId>
                <version>${jedis.version}version>
            dependency>
            
            <dependency>
                <groupId>org.springframework.securitygroupId>
                <artifactId>spring-security-webartifactId>
                <version>${spring.security.version}version>
            dependency>
            <dependency>
                <groupId>org.springframework.securitygroupId>
                <artifactId>spring-security-configartifactId>
                <version>${spring.security.version}version>
            dependency>
            <dependency>
                <groupId>org.springframework.securitygroupId>
                <artifactId>spring-security-taglibsartifactId>
                <version>${spring.security.version}version>
            dependency>
            <dependency>
                <groupId>com.github.pengglegroupId>
                <artifactId>kaptchaartifactId>
                <version>2.3.2version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.servletgroupId>
                        <artifactId>javax.servlet-apiartifactId>
                    exclusion>
                exclusions>
            dependency>
            <dependency>
                <groupId>dom4jgroupId>
                <artifactId>dom4jartifactId>
                <version>1.6.1version>
            dependency>
            <dependency>
                <groupId>xml-apisgroupId>
                <artifactId>xml-apisartifactId>
                <version>1.4.01version>
            dependency>
        dependencies>
    dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>servlet-apiartifactId>
            <version>${servlet-api.version}version>
            <scope>providedscope>
        dependency>
    dependencies>
    <build>
        <plugins>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.2version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
        plugins>
    build>
project>

dependency 爆红解决方案

  1. 变换本地仓库地址,改为项目提供的仓库
  2. 无视,后续导入相关依赖后自动解决。

2.2.2 health_common

创建health_common,子工程,打包方式为jar,存放通用组件,例如工具类、实体类等

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
		 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>health_parentartifactId>
        <groupId>com.itheimagroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>
    <artifactId>health_commonartifactId>
    <packaging>jarpackaging>
    <dependencies>
        <dependency>
            <groupId>com.github.pagehelpergroupId>
            <artifactId>pagehelperartifactId>
        dependency>
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
        dependency>
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-springartifactId>
        dependency>
        <dependency>
            <groupId>com.github.miemiedevgroupId>
            <artifactId>mybatis-paginatorartifactId>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
        dependency>
        <dependency>
            <groupId>commons-fileuploadgroupId>
            <artifactId>commons-fileuploadartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-beansartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aspectsartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jmsartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-context-supportartifactId>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-testartifactId>
        dependency>
        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>dubboartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
        dependency>
        <dependency>
            <groupId>com.github.sgroschupfgroupId>
            <artifactId>zkclientartifactId>
        dependency>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
        dependency>
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>fastjsonartifactId>
        dependency>
        <dependency>
            <groupId>javassistgroupId>
            <artifactId>javassistartifactId>
        dependency>
        <dependency>
            <groupId>commons-codecgroupId>
            <artifactId>commons-codecartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.poigroupId>
            <artifactId>poiartifactId>
        dependency>
        <dependency>
            <groupId>redis.clientsgroupId>
            <artifactId>jedisartifactId>
        dependency>
        <dependency>
            <groupId>com.qiniugroupId>
            <artifactId>qiniu-java-sdkartifactId>
        dependency>
        <dependency>
            <groupId>com.sun.jerseygroupId>
            <artifactId>jersey-clientartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.poigroupId>
            <artifactId>poi-ooxmlartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.securitygroupId>
            <artifactId>spring-security-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.securitygroupId>
            <artifactId>spring-security-configartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.securitygroupId>
            <artifactId>spring-security-taglibsartifactId>
        dependency>
    dependencies>
project>

2.2.5 health_interface

创建health_interface,子工程,打包方式为jar,存放服务接口

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>health_parentartifactId>
        <groupId>com.itheimagroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>
    <artifactId>health_interfaceartifactId>
    <packaging>jarpackaging>
    <dependencies>
        <dependency>
            <groupId>com.itheimagroupId>
            <artifactId>health_commonartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
    dependencies>
project>

2.2.6 health_service_provider

创建health_service_provider,子工程,打包方式为war,作为服务单独部署,存放服务类、Dao接口和Mapper映射文件等

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.itheimagroupId>
        <artifactId>health_parentartifactId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>
    <artifactId>health_service_providerartifactId>
    <packaging>warpackaging>
    <dependencies>
        <dependency>
            <groupId>com.itheimagroupId>
            <artifactId>health_interfaceartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
    dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.mavengroupId>
                <artifactId>tomcat7-maven-pluginartifactId>
                <configuration>
                    
                    <port>81port>
                    
                    <path>/path>
                configuration>
            plugin>
        plugins>
    build>
project>

log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout

SqlMapConfig.xml


DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<plugins>
		
		<plugin interceptor="com.github.pagehelper.PageHelper">
			
			<property name="dialect" value="mysql"/>
		plugin>
	plugins>
configuration>

spring-dao.xml


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
							http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
							http://www.springframework.org/schema/context
							http://www.springframework.org/schema/context/spring-context.xsd
							http://www.springframework.org/schema/aop
							http://www.springframework.org/schema/aop/spring-aop.xsd
							http://www.springframework.org/schema/tx
							http://www.springframework.org/schema/tx/spring-tx.xsd
							http://www.springframework.org/schema/util
							http://www.springframework.org/schema/util/spring-util.xsd">

	
	<bean id="dataSource" 
      	  class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
		<property name="username" value="root" />
		<property name="password" value="root" />
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/health" />
	bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:SqlMapConfig.xml" />
	bean>
	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		
		<property name="basePackage" value="com.itheima.dao" />
	bean>
beans>

spring-tx.xml


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd">
    
    <bean id="transactionManager" 
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    bean>
    
    <tx:annotation-driven transaction-manager="transactionManager" 
                          proxy-target-class="true"/>
beans>

spring-service.xml


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/mvc
                            http://www.springframework.org/schema/mvc/spring-mvc.xsd
                            http://code.alibabatech.com/schema/dubbo
                            http://code.alibabatech.com/schema/dubbo/dubbo.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context.xsd">
    
    <dubbo:application name="health_service_provider"/>
    
    <dubbo:protocol name="dubbo" port="20887"/>
    
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    
    <dubbo:annotation package="com.itheima.service"/>
beans>

web.xml

DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Applicationdisplay-name>
  
  <context-param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath*:applicationContext*.xmlparam-value>
  context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
  listener>
web-app>

2.2.7 health_backend

创建health_backend,子工程,打包方式为war,单独部署,存放Controller、页面等

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>health_parentartifactId>
        <groupId>com.itheimagroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>
    <artifactId>health_backendartifactId>
    <packaging>warpackaging>
    <dependencies>
        <dependency>
            <groupId>com.itheimagroupId>
            <artifactId>health_interfaceartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
    dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.mavengroupId>
                <artifactId>tomcat7-maven-pluginartifactId>
                <configuration>
                    
                    <port>82port>
                    
                    <path>/path>
                configuration>
            plugin>
        plugins>
    build>
project>

log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

springmvc.xml


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/mvc
						http://www.springframework.org/schema/mvc/spring-mvc.xsd
						http://code.alibabatech.com/schema/dubbo
						http://code.alibabatech.com/schema/dubbo/dubbo.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context.xsd">
	<mvc:annotation-driven>
	  <mvc:message-converters register-defaults="true">
	    <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
	      <property name="supportedMediaTypes" value="application/json"/>
	      <property name="features">
	        <list>
	          <value>WriteMapNullValuevalue>
	          <value>WriteDateUseDateFormatvalue>
	        list>
	      property>
	    bean>
	  mvc:message-converters>
	mvc:annotation-driven>
	
	<dubbo:application name="health_backend" />
	
	<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
	
	<dubbo:annotation package="com.itheima.controller" />
	
	<dubbo:consumer timeout="600000" check="false"/>
	
	<bean id="multipartResolver" 
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="104857600" />
		<property name="maxInMemorySize" value="4096" />
		<property name="defaultEncoding" value="UTF-8"/>
	bean>
beans>

web.xml

DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>Archetype Created Web Applicationdisplay-name>
  
  <filter>
    <filter-name>CharacterEncodingFilterfilter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    <init-param>
      <param-name>encodingparam-name>
      <param-value>utf-8param-value>
    init-param>
    <init-param>
      <param-name>forceEncodingparam-name>
      <param-value>trueparam-value>
    init-param>
  filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilterfilter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>
  <servlet>
    <servlet-name>springmvcservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    
    <init-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>classpath:springmvc.xmlparam-value>
    init-param>
    <load-on-startup>1load-on-startup>
  servlet>
  <servlet-mapping>
    <servlet-name>springmvcservlet-name>
    <url-pattern>*.dourl-pattern>
  servlet-mapping>
web-app>

3. Power Designer

3.1 Power Designer介绍

PowerDesigner是Sybase公司的一款软件,使用它可以方便地对系统进行分析设计,他几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型、面向对象模型。

在项目设计阶段通常会使用PowerDesigner进行数据库设计。使用PowerDesigner可以更加直观的表现出数据库中表之间的关系,并且可以直接导出相应的建表语句。

3.2 Power Designer使用

3.2.1 创建物理数据模型

操作步骤:

(1)创建数据模型PDM
【医疗健康项目】传智健康项目(一)_第19张图片
(2)选择数据库类型

【医疗健康项目】传智健康项目(一)_第20张图片
(3)创建表和字段
【医疗健康项目】传智健康项目(一)_第21张图片
指定表名
【医疗健康项目】传智健康项目(一)_第22张图片
创建字段
【医疗健康项目】传智健康项目(一)_第23张图片
设置某个字段属性,在字段上右键
【医疗健康项目】传智健康项目(一)_第24张图片
添加外键约束
【医疗健康项目】传智健康项目(一)_第25张图片

【医疗健康项目】传智健康项目(一)_第26张图片
【医疗健康项目】传智健康项目(一)_第27张图片
【医疗健康项目】传智健康项目(一)_第28张图片
【医疗健康项目】传智健康项目(一)_第29张图片

3.2.2 从PDM导出SQL脚本

可以通过PowerDesigner设计的PDM模型导出为SQL脚本,如下:

【医疗健康项目】传智健康项目(一)_第30张图片
【医疗健康项目】传智健康项目(一)_第31张图片

3.2.3 逆向工程

上面我们是首先创建PDM模型,然后通过PowerDesigner提供的功能导出SQL脚本。实际上这个过程也可以反过来,也就是我们可以通过SQL脚本逆向生成PDM模型,这称为逆向工程,操作如下:
【医疗健康项目】传智健康项目(一)_第32张图片

【医疗健康项目】传智健康项目(一)_第33张图片
【医疗健康项目】传智健康项目(一)_第34张图片
【医疗健康项目】传智健康项目(一)_第35张图片

3.2.4 生成数据库报表文件

通过PowerDesigner提供的功能,可以将PDM模型生成报表文件,具体操作如下:

(1)打开报表向导窗口
【医疗健康项目】传智健康项目(一)_第36张图片
(2)指定报表名称和语言

【医疗健康项目】传智健康项目(一)_第37张图片
(3)选择报表格式和样式

【医疗健康项目】传智健康项目(一)_第38张图片
【医疗健康项目】传智健康项目(一)_第39张图片
(4)选择对象类型
【医疗健康项目】传智健康项目(一)_第40张图片
(5)执行生成操作

【医疗健康项目】传智健康项目(一)_第41张图片

4. ElementUI

4.1 ElementUI介绍

ElementUI是一套基于VUE2.0的桌面端组件库,ElementUI提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。

官网地址:http://element-cn.eleme.io/#/zh-CN

传智健康项目后台系统就是使用ElementUI来构建页面,在页面上引入 js 和 css 文件即可开始使用,如下:


<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://unpkg.com/vue/dist/vue.js">script>

<script src="https://unpkg.com/element-ui/lib/index.js">script>

4.2 常用组件

4.2.1 Container 布局容器

用于布局的容器组件,方便快速搭建页面的基本结构:

:外层容器。当子元素中包含 时,全部子元素会垂直上下排列,否则会水平左右排列

:顶栏容器

:侧边栏容器

:主要区域容器

:底栏容器

<body>
  <div id="app">
    <el-container>
      <el-header>Headerel-header>
      <el-container>
        <el-aside width="200px">Asideel-aside>
        <el-container>
          <el-main>Mainel-main>
          <el-footer>Footerel-footer>
        el-container>
      el-container>
    el-container>
  div>
  <style>
    .el-header, .el-footer {
      background-color: #B3C0D1;
      color: #333;
      text-align: left;
      line-height: 60px;
    }

    .el-aside {
      background-color: #D3DCE6;
      color: #333;
      text-align: center;
      line-height: 200px;
    }

    .el-main {
      background-color: #E9EEF3;
      color: #333;
      text-align: center;
      line-height: 590px;
    }
  style>
body>
<script>
  new Vue({
    el:'#app'
  });
script>

4.2.2 Dropdown 下拉菜单

将动作或菜单折叠到下拉菜单中。

<el-dropdown split-button size="small" trigger="click">
  个人中心
  <el-dropdown-menu>
    <el-dropdown-item >退出系统el-dropdown-item>
    <el-dropdown-item divided>修改密码el-dropdown-item>
    <el-dropdown-item divided>联系管理员el-dropdown-item>
  el-dropdown-menu>
el-dropdown>

4.2.3 NavMenu 导航菜单

为网站提供导航功能的菜单。

<el-menu>
  <el-submenu index="1">
    <template slot="title">
      <i class="el-icon-location">i>
      <span slot="title">导航一span>
    template>
    <el-menu-item>选项1el-menu-item>
    <el-menu-item>选项2el-menu-item>
    <el-menu-item>选项3el-menu-item>
  el-submenu>
  <el-submenu index="2">
    <template slot="title">
      <i class="el-icon-menu">i>
      <span slot="title">导航二span>
    template>
    <el-menu-item>选项1el-menu-item>
    <el-menu-item>选项2el-menu-item>
    <el-menu-item>选项3el-menu-item>
  el-submenu>
el-menu>

4.2.4 Table 表格

用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。

<el-table :data="tableData" stripe>
  <el-table-column prop="date" label="日期">el-table-column>
  <el-table-column prop="name" label="姓名">el-table-column>
  <el-table-column prop="address" label="地址">el-table-column>
  <el-table-column label="操作" align="center">
    
    <template slot-scope="scope">
      <el-button type="primary" size="mini" @click="handleUpdate(scope.row)">编辑el-button>
      <el-button type="danger" size="mini"  @click="handleDelete(scope.row)">删除el-button>
    template>
  el-table-column>
el-table>
<script>
  new Vue({
    el:'#app',
    data:{
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 弄'
      }]
    },
    methods:{
      handleUpdate(row){
        alert(row.date);
      },
      handleDelete(row){
        alert(row.date);
      }
    }
  });
script>

4.2.5 Pagination 分页

当数据量过多时,使用分页分解数据。


<el-pagination
               @current-change="handleCurrentChange"
               current-page="5"
               page-size="10"
               layout="total, prev, pager, next, jumper"
               :total="305">
el-pagination>
<script>
  new Vue({
    el:'#app',
    methods:{
      handleCurrentChange(page){
        alert(page);
      }
    }
  });
script>

4.2.6 Message 消息提示

常用于主动操作后的反馈提示。

<el-button :plain="true" @click="open1">消息el-button>
<el-button :plain="true" @click="open2">成功el-button>
<el-button :plain="true" @click="open3">警告el-button>
<el-button :plain="true" @click="open4">错误el-button>
<script>
  new Vue({
    el: '#app',
    methods: {
      open1() {
        this.$message('这是一条消息提示');
      },
      open2() {
        this.$message({
          message: '恭喜你,这是一条成功消息',
          type: 'success'
        });
      },
      open3() {
        this.$message({
          message: '警告哦,这是一条警告消息',
          type: 'warning'
        });
      },
      open4() {
        this.$message.error('错了哦,这是一条错误消息');
      }
    }
  })
script>

4.2.7 Tabs 标签页

分隔内容上有关联但属于不同类别的数据集合。

<h3>基础的、简洁的标签页h3>

<el-tabs value="first">
  <el-tab-pane label="用户管理" name="first">用户管理el-tab-pane>
  <el-tab-pane label="配置管理" name="second">配置管理el-tab-pane>
  <el-tab-pane label="角色管理" name="third">角色管理el-tab-pane>
  <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿el-tab-pane>
el-tabs>
<h3>选项卡样式的标签页h3>
<el-tabs value="first" type="card">
  <el-tab-pane label="用户管理" name="first">用户管理el-tab-pane>
  <el-tab-pane label="配置管理" name="second">配置管理el-tab-pane>
  <el-tab-pane label="角色管理" name="third">角色管理el-tab-pane>
  <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿el-tab-pane>
el-tabs>
<h3>卡片化的标签页h3>
<el-tabs value="first" type="border-card">
  <el-tab-pane label="用户管理" name="first">用户管理el-tab-pane>
  <el-tab-pane label="配置管理" name="second">配置管理el-tab-pane>
  <el-tab-pane label="角色管理" name="third">角色管理el-tab-pane>
  <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿el-tab-pane>
el-tabs>
<script>
  new Vue({
    el: '#app'
  })
script>

4.2.8 Form 表单

由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。在 Form 组件中,每一个表单域由一个 Form-Item 组件构成,表单域中可以放置各种类型的表单控件,包括 Input、Select、Checkbox、Radio、Switch、DatePicker、TimePicker。


<el-form ref="form" :model="form" :rules="rules" label-width="80px">
  
  <el-form-item label="活动名称" prop="name">
    <el-input v-model="form.name">el-input>
  el-form-item>
  <el-form-item label="活动区域" prop="region">
    <el-select v-model="form.region" placeholder="请选择活动区域">
      <el-option label="区域一" value="shanghai">el-option>
      <el-option label="区域二" value="beijing">el-option>
    el-select>
  el-form-item>
  <el-form-item label="活动时间">
    <el-col :span="11">
      <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;">el-date-picker>
    el-col>
    <el-col class="line" :span="2">-el-col>
    <el-col :span="11">
      <el-time-picker type="fixed-time" placeholder="选择时间" v-model="form.date2" style="width: 100%;">el-time-picker>
    el-col>
  el-form-item>
  <el-form-item label="即时配送">
    <el-switch v-model="form.delivery">el-switch>
  el-form-item>
  <el-form-item label="活动性质">
    <el-checkbox-group v-model="form.type">
      <el-checkbox label="美食/餐厅线上活动" name="type">el-checkbox>
      <el-checkbox label="地推活动" name="type">el-checkbox>
      <el-checkbox label="线下主题活动" name="type">el-checkbox>
      <el-checkbox label="单纯品牌曝光" name="type">el-checkbox>
    el-checkbox-group>
  el-form-item>
  <el-form-item label="特殊资源">
    <el-radio-group v-model="form.resource">
      <el-radio label="线上品牌商赞助">el-radio>
      <el-radio label="线下场地免费">el-radio>
    el-radio-group>
  el-form-item>
  <el-form-item label="活动形式">
    <el-input type="textarea" v-model="form.desc">el-input>
  el-form-item>
  <el-form-item>
    <el-button type="primary" @click="onSubmit">立即创建el-button>
  el-form-item>
el-form>
<script>
  new Vue({
    el: '#app',
    data:{
      form: {
        name: '',
        region: '',
        date1: '',
        date2: '',
        delivery: false,
        type: [],
        resource: '',
        desc: ''
      },
      //定义校验规则
      rules: {
        name: [
          { required: true, message: '请输入活动名称', trigger: 'blur' },
          { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
        ],
        region: [
          { required: true, message: '请选择活动区域', trigger: 'change' }
        ]
      }
    },
    methods:{
      onSubmit() {
        console.log(this.form);
        //validate:对整个表单进行校验的方法,参数为一个回调函数。
        //该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。
        this.$refs['form'].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      }
    }
  })
script>

本文章参考B站 黑马程序员Java项目《传智健康》,超完整的企业级医疗行业项目(基于SSM+Zookeeper+Dubbo+Spring Security技术栈),仅供个人学习使用,部分内容为本人自己见解,与黑马程序员无关。

你可能感兴趣的:(Java项目,java,spring,maven,mysql)