开发步骤
- 1.首页的开发
- 2.由首页跳转到登陆页面
- 3.用户登录
- 4.记住密码实现
- 5.安全退出
- 6.登录验证
- 7.创建市场活动
- 8.分页查询市场活动
- 9.删除市场活动
- 10.修改市场活动
- 11.批量导出市场活动
- 12.导入市场活动
- 13.查看市场活动明细
- 14.添加市场活动备注
- 15.删除市场活动备注
- 16.修改市场活动备注
- 17.线索(潜在客户)
- 18.创建线索
- 19.查看线索明细
- 20.线索关联市场活动
- 21.解除线索关联市场活动
- 22.线索转换
- 23.添加线索备注
- 24.删除线索备注
- 25.修改线索备注
- 26.创建交易
- 27.可能性的可配置
- 28.分页显示交易列表
- 29.查看交易明细
- 30.实现显示交易的图标信息
- 31.统计图表
1.首页的开发
(1)需求分析
用户访问首页,进入登录页面
(2)分析与设计
客户端 ---发送url请求---> IndexController ---跳转到---> index.jsp ---先在tomcat上运行,
然后将页面返回给客户端
2.由首页跳转到登陆页面
首页打开时,通过window.location向登录页面发送请求,UserController接收到请求,转发到index.jsp,tomcat服务器运行结束后,
将html页面返回给浏览器
3.用户登录
(1)用户名密码不能为空
(2)用户名或者密码错误,用户已过期,用户状态被锁定,ip受限 都不能登录成功
(3)登录成功后,所有的业务页面显示当前用户的名称
(4)实现10天记住密码
(5)登录成功后跳转到主业务页面
(6)登录失败 页面不跳转,提示信息
4.记住密码实现
(1)
用户访问login.jsp ---> 判断上次如果选择了记住密码,就自动填上账号和密码;否则不填
(2)
如何判断上次是否记住密码:
每次登录成功,就判断是否需要记住密码:如果需要记住密码,则往浏览器写cookie;否则不写
cookie的值必须是该用户的账号和密码,如果这次登录不需要记住密码了,就需要删除之前的cookie
下次登录时,判断该用户有没有cookie:如果有就自动填写账户和密码,没有就不自动填写
5.安全退出
清空cookie,销毁session
退出完成后跳转到首页
6.登录验证
(1)登录验证的作用
为了保证系统业务管理的功能安全运行,用户访问任何业务资源都要进行登录验证
(2)使用拦截器实现登录验证
实现HandlerInterceptor方法
7.创建市场活动
给市场部人规划市场活动
用户点击市场活动,跳转到市场活动页面 ----> 跳转的时候需要同时查询出需要的动态数据
查询数据:需要service mapper层,查询所有的用户
用户点击创建按钮:填写完数据点击保存 ---> 异步请求,表单中所有的参数发送到后端 ---->
后端获取参数(实体类对象) ---> 执行sql语句保存创建的市场活动 ---> 根据处理结果,生成响应信息 --->
根据响应信息(0|1),解析json,渲染页面
正则表达式语法通则:
(1)//:定义一个正则表达式
(2)[]:表示匹配指定字符集中的一位字符
(3)^:匹配字符串的开头位置
$:匹配字符串的结尾
(4){}:匹配次数 {m}:匹配m次 {m,n}:匹配m次到n次 {m,}:表示匹配m次或者更多次
(5)特殊符号:\d:匹配一位数字(相当于[0-9]) \D:匹配一位非数字 \w:匹配所有的字符 \W:匹配非字符
*:匹配0次或者多次(相当于{0,}) +:匹配1次或者多次(相当于{1,}) ?:匹配0次或者1次
匹配26个字母:/^[a-z]$/ 匹配0,1,2 ...9:/^[0-9]$/
8.分页查询市场活动
客户端发送查询请求(异步请求:查询条件,页号,每页显示条数) ---> 获取参数 封装参数 --->
根据参数查询市场活动 ---> 根据查询结果,生成响应信息 ---> 响应 ---> 解析JSON渲染页面
9.删除市场活动
用户选择要删除的市场活动 ---> 发送删除的异步请求(提交要删除的活动的id) ---> Controller层获取封装参数
---> 根据id删除市场活动 ---> 返回是否删除成功int ---> 根据处理结果生成响应信息 ---> 解析JSON响应
10.修改市场活动
用户选择要修改的市场活动 ---> 发送查询请求 异步请求(id) ---> Controller获取参数,调用service层方法
---> service调用mapper层方法查询数据 ---> 根据查询结果生成响应信息 ---> 返回一个JSON ---> 解析JSON渲染页面
---> 弹出要修改的市场活动的窗口 ---> 修改,点击更新按钮 ---> 发送异步请求(提交表单中所有的参数) --->
Controller获取封装参数 ---> 调用service层方法更新市场活动 ---> service调用mapper层方法执行sql语句 --->
根据处理结果,生成响应信息 ---> 解析JSON渲染页面
11.批量导出市场活动
给"批量导出"按钮添加单击事件,向后台发送请求(同步请求) ---> 查询所有的市场活动 --->
创建一个excel文件,并且将市场活动写入excel文件中---> 把生成的excel文件输出到浏览器(文件下载)
apache-poi插件
把办公文档的所有元素封装成普通的java类,我们可以操作这些类来操作办公文档
(1)行 --------------- HSSFRow
(2)列 --------------- HSSFCell
(3)页 --------------- HSSFSheet
(4)文件 ------------- HSSFWorkbook
(5)样式 ------------- HSSFCellStyle
使用apache-poi生成excel
(1)添加依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
(2)使用封装类来生成excel文件
12.导入市场活动
把用户计算机上的excel文件上传到服务器(前端技术) ---> 解析excel文件来获取文件中的数据(后端技术)
--->将解析出来的数据添加到数据库 ---> 返回响应信息
13.查看市场活动明细
用户点击市场活动名称 ---> 发送同步请求(id) ---> Controller层获取参数 ---> 根据id查询详细信息
---> 根据id查询备注信息 ---> 把数据保存到request中 ---> 渲染页面 ---> 浏览器在工作区中显示详细信息页面
14.添加市场活动备注
用户在市场活动明细页面输入备注内容并点击保存按钮 ---> 浏览器发送异步请求(提交备注内容 市场活动id) --->
Controller层获取参数 封装参数(remark实体对象) ---> 调用service层 ---> 调用mapper层执行sql语句保存信息 --->
根据处理结果,生成响应信息
15.删除市场活动备注
用户点击市场活动备注后边删除图标 ---> 发送异步请求(id) ---> Controller层封装参数,调用service层方法
---> 调用mapper层方法,执行SQL语句删除 ---> 根据处理结果,生成响应信息 ---> 解析JSON,渲染页面
16.修改市场活动备注
用户点击市场活动后边修改图标 ---> 获取备注的id和noteContent ---> 将备注的id和noteContent写到修改备注的模态窗口
---> 弹出修改备注的模态窗口 ---> 用户填写表单 --->用户点击更新按钮 ---> 发送异步请求(id和noteContent) --->
Controller层获取参数,封装参数(实体类对象remark) ---> 调用service,调用mapper层执行SQL语句更新 ---> 根据处理结果
生成响应信息 ---> 解析JSON渲染页面
17.线索(潜在客户)
给销售部的人使用去发现客户,数据量大,每一条数据最详细 tbl_clue,有购买意向的客户转到客户
18.创建线索
客户端点击线索菜单 ---> 发送跳转的同步请求 ---> 调用UserService UserMapper 查询所有的用户 ---> 返回用户集合
调用DicValueService DicValueMapper 查询称呼数据字典值 ---> 返回称呼数据字典值的集合
查询线索状态数据字典值
查询线索来源数据字典值
将数据保存到request中 ---> 请求转发 ---> 从request中取出数据,渲染页面
点击创建按钮 ---> 填写表单发送异步请求 ---> Controller层获取参数封装参数 ---> 执行SQL语句创建 --->
返回响应信息
19.查看线索明细
用户点击线索名称 ---> 发送同步请求(id) ---> Controller层获取参数,调用service层 mapper层执行SQL语句
查询线索备注明细 ---> 返回一个集合 ---> 将所有数据保存到request中返回 ---> 请求转发,从作用域中获取数据渲染页面
20.线索关联市场活动
用户点击关联市场活动窗口 ---> 弹出线索关联市场活动的模态窗口 ---> 用户输入搜索条件 ---> 每次键盘弹起 --->
发送搜索请求(异步请求:根据市场活动名称查询所有符合条件的hi市场活动,根据clueId查询已经关联过的市场活动(排除不显示))
---> Controller层获取参数封装参数 ---> 调用service层 mapper层 执行SQL语句 ---> 根据查询结果生成响应信息
---> 解析JSON显示相关市场活动
用户点击关联按钮 ---> 发送异步请求(activityId=xxx&activityId=xxx...&clueId=xxx) --->
Controller获取参数封装参数 ---> 调用service层 mapper层执行SQL语句批量保存线索和市场活动的关联信息
---> 根据处理结果,生成响应信息 ---> 解析JSON渲染页面 ---> 关联成功根据activityId查询数据库刷新列表
21.解除线索关联市场活动
用户点击解除关联按钮 ---> 发送异步请求(activityId,clueId) ---> Controller层接收参数封装参数 --->
调用service层 mapper层方法执行SQL语句删除关联市场活动 ---> 根据处理结果生成响应信息 ---> 解析JSON
22.线索转换
点击转换按钮 ---> 发送同步请求(id) ---> ClueController获取参数 ---> 调用service层 mapper层方法执行SQL语句 --->
把数据保存到request作用域中 ---> 请求转发 ---> 从request中获取数据渲染页面 ---> 显示页面
还需要执行SQL语句查询交易的阶段
用户点击市场活动源的搜索按钮 ---> 弹出搜索市场活动的模态窗口 ---> 用户搜索市场活动 ---> 每次键盘谈起
---> 发送搜索请求 异步(activityName,clueId) ---> Controller层获取参数封装参数 Map --->
调用service层 mapper层方法执行SQL语句查询出市场活动 ---> 根据查询结果生成响应信息 ---> 解析JSON
用户选择市场活动 ---> 把市场活动id写道隐藏域中,把name写道输入框中 ---> 关闭市场活动模态窗口
用户点击线索转换按钮 ---> 发送异步请求(clueId,交易表单中的数据,是否创建交易的状态) ---> Controller层获取参数
封装参数map ---> 调用service层 调用mapper(多个mapper)层方法 ---> 查询出线索信息 ---> 把线索中有关公司的信息
转换到客户表 ---> 有关个人的信息转换到联系人表中 ---> 有关备注的信息转换到客户备注表中 ---> 有关备注的信息转换到
联系人备注表中 ---> 把该线索和市场活动的关联关系转换到联系人和市场活动的关联关系表 ---> 如果需要创建
交易,往交易表中添加一条数据 ---> 如果需要创建交易,将该线索下的备注信息转换到交易备注表中 ---> 删除该线索
下的所有备注 ---> 删除该线索和市场活动的关联关系 ---> 删除线索
上述需要在一个事务中完成,只要有出错的立即回滚
根据处理结果生成响应信息 --->
23.添加线索备注
用户在市场活动明细页面输入备注内容并点击保存按钮 ---> 浏览器发送异步请求(提交备注内容 市场活动id) --->
Controller层获取参数 封装参数(remark实体对象) ---> 调用service层 ---> 调用mapper层执行sql语句保存信息 --->
根据处理结果,生成响应信息
24.删除线索备注
用户点击市场活动备注后边删除图标 ---> 发送异步请求(id) ---> Controller层封装参数,调用service层方法
---> 调用mapper层方法,执行SQL语句删除 ---> 根据处理结果,生成响应信息 ---> 解析JSON,渲染页面
25.修改线索备注
用户点击线索备注后边修改图标 ---> 获取备注的id和noteContent ---> 将备注的id和noteContent写到修改备注的模态窗口
---> 弹出修改备注的模态窗口 ---> 用户填写表单 --->用户点击更新按钮 ---> 发送异步请求(id和noteContent) --->
Controller层获取参数,封装参数(实体类对象remark) ---> 调用service,调用mapper层执行SQL语句更新 ---> 根据处理结果
生成响应信息 ---> 解析JSON渲染页面
26.创建交易
用户点击交易按钮 ---> 同步请求(跳转到交易页面) ---> TranController 调用service层 mapper层方法执行SQL语句
查询交易类型 ---> 返回交易类型List
查询交易阶段 ---> 返回交易阶段List
调用service层方法查询交易来源 ---> 把上述查询到的数据保存到request作用域中 ---> 请求转发 ---> 获取数据渲染页面
用户点击创建按钮 ---> 发送同步请求跳转页面 ---> 执行SQL语句查询所有的用户,返回List
执行SQL语句查询交易的阶段,返回List
执行SQL语句查询交易类型,返回List
执行SQL语句查询交易来源,返回List ---> 将这些list保存到request作用域中,请求转发
---> 跳转到创建交易的页面 ---> 解析数据响应页面
可能性的可配置:
用户选择阶段 ---> 发送异步请求(stage) ---> Controller获取参数 解析properties配置文件生成响应信息 --->
响应possibillity展示在页面
客户名称的自动补全:
用户输入客户名称 ---> 加一个键盘弹起事件 ---> 去后台模糊查询客户名称 ---> 返回调用插件自动补全
用户点击保存按钮 ---> 发送异步请求(表单中所有参数) ---> Controller获取参数 封装参数 map --->
调用service层方法 ---> 根据客户名称查询客户表中有没有该客户 ---> 当客户不存在时,调用insertCustomer保存客户
---> 当客户存在时直接使用客户id ---> 调用TranMapper保存创建的交易 ---> 根据处理结果生成响应信息 --->
解析JSON渲染页面
在保存交易的时候会将交易信息的重要信息保存到交易历史表中
27.可能性的可配置
根据用户选择的阶段来显示可能性
xxx.properties配置文件:适合配置数据简单,几乎没有冗余数据,效率高
xxx.xml配置文件:适合配置复杂数据,产生冗余数据,效率低
28.分页显示交易列表
每次进入页面将交易查询出来显示在页面,每次新建交易后也要显示该交易
29.查看交易明细
用户点击交易名称 ---> 发送同步请求(id) ---> 根据id查询交易的明细信息 ---> 查询交易备注的明细信息 --->
查询该交易下所有的历史信息 ,返回list --->将数据保存到request中 ---> 跳转到交易的明细页面 ---> 渲染页面
30.实现显示交易的图标信息
按照顺序查询交易所有的阶段stageList ---> 遍历stageList 显示每一个阶段对应的图标
31.统计图表
销售漏斗图:展示交易表中的数据
使用echarts这个插件来实现图表
用户点击交易统计图表菜单 ---> 发送同步请求 Controller层跳转到 transaction/index.jsp这个页面 --->
响应网页浏览器在工作区显示交易图表页面 ---> 当页面加载完成,向后台发送异步请求 ---> CharController 调用service层
mapper层方法执行SQL语句查询数据,返回一个List<实体类{阶段名称:数据量}> ---> 把数据传递给插件,插件
根据数据显示漏斗图