# 客户关系系统
使用的技术:maven Git
前端原型:搭建的 HTML 页面
前端:Bootstrap(UI)+ jQuery
后端:SpringMVC + Spring + MyBatis 框架
工具包:UUIDUtil、ServiceFactory、DataTimeUtil 等
服务器:Tomcat
插件:自动补全 统计图表 EChars MyBatis 逆向工程的插件等
## 一、物理模型
物理模型共有:
1. 数据字典
2. 用户
3. 市场活动
4. 线索\_客户\_联系人\_交易
创建模型:
使用 PowerDesigner 创建物理模型,生成 .pdm 文件
## 二、搭建项目
1. 设置字体
2. 设置字符集 utf-8
3. 设置 basePath 变量 及 base 标签
```jsp
<%
String path = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<base href = "<%=path%>">
```
4. 创建 maven:使用 settings 引入本地仓库
1. 搭建 webapp 模板
5. 搭建项目结构
main/java main/resources src/test
6. 导入 pom 依赖
```
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
```xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1.3-b06</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
```
正常得设置 .properties 和 .xml的扫描声明,我直接写到resources下 就不用加声明了
我自己的mysql是8的所以这个 mysql 连接依赖得改版本
```
> 这里学习的项目是 ssm,MyBatis 主配置文件是单独出来的,这里我改为 Spring 集成,直接写到 Spring 配置文件中,只保留一个 applicationContext.xml 文件,配置文件太多看着闹心
>
**创建数据库**
数据库名:crm_01
字符集:utf-8
**前端**
将前端原型拷贝到 webapp 下
**服务器**
使用 Tomcat 服务器
设置热部署 并且 修改 Tomcat 名称
URL:http://localhost:8080/CRM_01/
**CRM 模块划分**
* 系统设置模块(settings)
* 用户模块:登录
设计到数据字典模块信息的查询
* 工作台(workbench)
* 市场活动模块:activity
* 工具包 utils
* UUID:生成 32 位随机串
* DateTime:日期
* MD5:加密算法
* PrintJson:解析 JSON 串
* 搭建用户相关的 domain、dao、service、controller
* 对于 dao 层命名的说明:
## 三、登录模块
关乎登录
验证账号和密码
select count(*) from tbl_user where LoginAct=? and LoginPwd = ?
* 查询记录为 0 表示没查到
* 查询记录为 1 表示符合
* 查询记录大于 1 有垃圾数据
执行 SQL 语句 返回 User 对象
* 如果 User 对象为空:账号密码错误
* 如果不为空:只能说明账号密码正确 需要继续向下验证字段信息
从 User 中 get expireTime 验证失效时间 lockState 锁定状态 allowips 验证浏览器端的 ip 地址是否有效
验证失效时间
打印失效时间字段 expireTime,和当前时间比较
代码:
````
// 失效时间
@Test
public void testExpireDate(){
Date date = new Date();
System.out.println(date);
// Sat Nov 13 22:37:43 CST 2021
// 将当前时间按照指定格式进行输出
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateFormat = sdf.format(date);
System.out.println(dateFormat);
// 2021-11-13 22:37:43
}
````
验证失效时间借助字符串方法 comepareTo
该方法返回值:
* 大于 0:调用方法的字符串数值大于方法内的字符串数值
* 小于 0:调用方法的字符串数值小于方法内的字符串数值
* 等于 0:字符串内数值相等
代码:
```java
// 获取当前系统时间 (使用工具包)
String currentTime = DateTimeUtil.getSysTime();
String expireTime = "2012-11-13 22:41:29";
int i = expireTime.compareTo(currentTime);
// i > 0 -> expireTime > currentTime 未失效
// i < 0 -> expireTime < expireTime 失效
System.out.println(i);
```
验证是否锁定
```java
String lockState = "0";
// 字符串写前面 不会空指针
if ("0".equals(lockState)){
System.out.println("账号已锁定");
}else {
System.out.println("pass");
}
```
验证 ip 地址
```java
String ip = "192.168.1.10";
String allIps = "192.168.1.10,192.168.5.21";
if (allIps.contains(ip)){
System.out.println("有效的ip");
}else {
System.out.println("无效的ip");
}
```
验证密码 MD5 加密
```java
String pwd = "123";
pwd = MD5Util.getMD5(pwd);
System.out.println(pwd);
// 202cb962ac59075b964b07152d234b70
```
### UML
绘制时序图
工具:Rational Rose
**前端改造**:
1. 将登录 Login.html 改为 JSP 文件
并且加上 base 标签 防止相对路径出错
2. 每次切动服务器进入登录页面时自动将焦点放到用户名输入框
3. 并且每次登录如果出现异常都要给用户一个提示信息显示到登录界面中
* 这里使用 AJAX 传递用户名密码
* 统一异常处理 自定义的异常(抛出异常时传递异常信息)
4. 这里本来想使用 SpringMVC 自带的拦截器,但是不好使,百度之后改了一些也不行
就放弃了,用的原生的过滤器 Filter
## 四、市场活动
1. 时长活动表的设计
建表:
tbl_activity 市场活动表
tbl_activity_remark 市场活动备注表
一对多的关系
2. 市场活动的创建和修改都是以模态窗口的形式展现
出现的问题:
```
当我们重启服务器后,如果我们刷新页面会重新进入登录界面,但是如果我们点击市场活动或者其他导航栏按钮,就会出现只有工作区变成登录页面,很丑...
```
解决方案:
在登录页加入代码(js 中)
```javascript
if (window.top != window ){
window.location.top = window.location;
}
```
**创建工作台的组件**
项目结构:crm / workbench /
这里的 dao、domain、mapper.xml 我直接用 MyBatis 逆向工程生成了(tbl_activity tbl_activity_remark)
主配置文件记得把注解扫描添加一下
**展现市场活动的模态窗口**
这里 data-toggle="modal" 表示触发事件 打开模态窗口
data-target="#createActivityModal" 表示具体打开哪个模态窗口 根据#id
由于这里占用了两个属性,如果要添加操作在事件上加不了 被写死了
所以改为使用 jQuery 完成
> 这里要为按钮设置 id
>
> id 的设置需要一定约束,每个公司 项目都不一样
>
> 这里设置:
>
> add / create 表示打开模态窗口 跳转到添加页
>
> save 执行添加操作
>
> edit 跳转到修改页 或者打开修改操作的模态窗口
>
> update 执行修改操作
>
> get 执行查询操作 find / select / query / .. 也可以
>
> 特殊操作: login 等
添加模态窗口
```
需要操作的模态窗口的jquery
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
客户关系系统,使用的技术:maven Git、前端原型:搭建的 HTML 页面、前端:Bootstrap(UI)+ jQuery、后端:SpringMVC + Spring + MyBatis 框架、工具包:UUIDUtil、ServiceFactory、DataTimeUtil 等、服务器:Tomcat、插件:自动补全 统计图表 EChars MyBatis 逆向工程的插件等。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java(SSM)+MySQL实现客户关系系统【100012560】 (345个子文件)
ActivityController.class 8KB
ActivityController.class 8KB
ActivityTest.class 6KB
ActivityServiceImpl.class 6KB
ActivityServiceImpl.class 6KB
Activity.class 3KB
Activity.class 3KB
User.class 3KB
User.class 3KB
UserTest.class 3KB
ActivityRemark.class 2KB
ActivityRemark.class 2KB
UserServiceImpl.class 2KB
UserServiceImpl.class 2KB
WebFilter_Login.class 2KB
WebFilter_Login.class 2KB
GlobalExceptionHandler.class 2KB
GlobalExceptionHandler.class 2KB
PrintJson.class 2KB
PrintJson.class 2KB
UserController.class 2KB
UserController.class 2KB
TransactionInvocationHandler.class 2KB
TransactionInvocationHandler.class 2KB
LoginFilter.class 2KB
LoginFilter.class 2KB
SqlSessionUtil.class 2KB
SqlSessionUtil.class 2KB
ActivityService.class 1KB
ActivityService.class 1KB
MD5Util.class 1KB
MD5Util.class 1KB
Info.class 1KB
Info.class 1KB
ActivityMapper.class 1KB
ActivityMapper.class 1KB
UserMapper.class 920B
UserMapper.class 920B
NameAndPassException.class 767B
NameAndPassException.class 767B
ActivityRemarkMapper.class 748B
ActivityRemarkMapper.class 748B
LockException.class 746B
TimeException.class 746B
LockException.class 746B
TimeException.class 746B
IpException.class 740B
IpException.class 740B
DateTimeUtil.class 725B
DateTimeUtil.class 725B
ServiceFactory.class 601B
ServiceFactory.class 601B
UUIDUtil.class 582B
UUIDUtil.class 582B
LoginException.class 494B
LoginException.class 494B
UserException.class 462B
UserException.class 462B
UserService.class 367B
UserService.class 367B
bootstrap.min.css 111KB
bootstrap.min.css 111KB
bootstrap-theme.min.css 19KB
bootstrap-theme.min.css 19KB
bootstrap-datetimepicker.min.css 11KB
bootstrap-datetimepicker.min.css 11KB
zTreeStyle.css 6KB
zTreeStyle.css 6KB
jquery.bs_pagination.min.css 285B
jquery.bs_pagination.min.css 285B
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.eot 20KB
zTreeStandard.gif 5KB
zTreeStandard.gif 5KB
loading.gif 381B
loading.gif 381B
line_conn.gif 45B
line_conn.gif 45B
.gitignore 38B
index.html 12KB
index.html 12KB
detail.html 10KB
detail.html 10KB
edit.html 9KB
edit.html 9KB
index.html 9KB
index.html 9KB
detail.html 8KB
detail.html 8KB
index.html 7KB
index.html 7KB
index.html 7KB
index.html 7KB
index.html 7KB
index.html 7KB
index.html 7KB
index.html 7KB
editTask.html 7KB
editTask.html 7KB
saveTask.html 7KB
共 345 条
- 1
- 2
- 3
- 4
资源评论
神仙别闹
- 粉丝: 2680
- 资源: 7667
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2009photoshop试题及答案(八).doc
- python爱心代码高级python-bit-manipulation.rar
- python爱心代码高级python-backtracking.rar
- python爱心代码高级python-audio-filters.rar
- 生存世界28684--4008032458487170973-1493251025945.apk
- 2011年3月全国计算机等级考试四级数据库工程师笔试试卷及答案.doc
- 2011年计算机等级考试二级VFP基础综合试.doc
- 信奥赛C++:枚举算法的算法思想
- 上海 文科 陈隽姝 英语翻译笔记(上)
- 学生实验之FPGA 多路分频器实验,适合FPGA初学者
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功