客户需求:
用户进入工作台主页面,点击 线索菜单选项,工作台的工作区跳转到线索菜单页面。
在跳转到线索菜单页面的同时,查询出各个模态窗口以及条件查询所需要的下拉框数据。
功能实现
1.根据客户需求画出实现显示线索主页面,并查询表单各个下拉框数据的UML时序图

2.为了查询下拉框:所有者的数据
调用之前的selectAllUsers方法
userMapper接口

userMapper.xml文件

UserService 接口

UserServiceImpl文件

3.使用mybatis逆向工程生成DicValue实体类以及mapper文件,由于生成的实体类属于系统文件,所以生成文件的目标位置设置为setting
generatorConfig.xml
- generatorConfiguration
- PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
-
- <generatorConfiguration>
-
-
-
-
-
- <properties resource="generator.properties">properties>
-
-
- <classPathEntry location="${jdbc.driverLocation}"/>
-
- <context id="default" targetRuntime="MyBatis3">
-
-
- <commentGenerator>
- <property name="suppressDate" value="false"/>
- <property name="suppressAllComments" value="false"/>
- commentGenerator>
-
-
- <jdbcConnection
- driverClass="${jdbc.driverClass}"
- connectionURL="${jdbc.connectionURL}"
- userId="${jdbc.userId}"
- password="${jdbc.password}">
- jdbcConnection>
-
-
-
- <javaTypeResolver>
- <property name="forceBigDecimals" value="false"/>
- javaTypeResolver>
-
-
-
- <javaModelGenerator targetPackage="com.it.crm.settings.entity"
- targetProject="D:/SSM框架/SSM版CRMTest/crm/src/main/java">
-
-
- <property name="enableSubPackages" value="false"/>
-
- <property name="constructorBased" value="false"/>
-
- <property name="trimStrings" value="true"/>
-
- <property name="immutable" value="false"/>
- javaModelGenerator>
-
-
- <sqlMapGenerator targetPackage="com.it.crm.settings.mapper"
- targetProject="D:/SSM框架/SSM版CRMTest/crm/src/main/java">
- <property name="enableSubPackages" value="false"/>
- sqlMapGenerator>
-
-
- <javaClientGenerator targetPackage="com.it.crm.settings.mapper"
- targetProject="D:/SSM框架/SSM版CRMTest/crm/src/main/java" type="XMLMAPPER">
- <property name="enableSubPackages" value="true"/>
- javaClientGenerator>
-
-
-
-
-
-
- <table tableName="tbl_dic_value" domainObjectName="DicValue"
- enableCountByExample="false" enableUpdateByExample="false"
- enableDeleteByExample="false" enableSelectByExample="false"
- selectByExampleQueryId="false">
- table>
-
-
-
-
-
-
-
-
- context>
- generatorConfiguration>
4.生成的DicValueMapper接口

DicValueMapper.xml文件

DicValueService接口
- package com.it.crm.settings.service;
-
- import com.it.crm.settings.entity.DicValue;
-
- import java.util.List;
-
- public interface DicValueService {
- List
queryDicValueByTypeCode(String typeCode); - }
DicValueServiceImpl实现类
- package com.it.crm.settings.service.impl;
-
- import com.it.crm.settings.entity.DicValue;
- import com.it.crm.settings.mapper.DicValueMapper;
- import com.it.crm.settings.service.DicValueService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.List;
-
- @Service("dicValueService")
- public class DicValueServiceImpl implements DicValueService {
- @Autowired
- private DicValueMapper dicValueMapper;
-
- @Override
- public List
queryDicValueByTypeCode(String typeCode) { - return dicValueMapper.selectDicValueByTypeCode(typeCode);
- }
- }
5.创建ClueController类,调用刚才展示的两种service方法
- package com.it.crm.workbench.web.controller;
-
- import com.it.crm.settings.entity.DicValue;
- import com.it.crm.settings.entity.User;
- import com.it.crm.settings.service.DicValueService;
- import com.it.crm.settings.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- import javax.servlet.http.HttpServletRequest;
- import java.util.List;
-
- @Controller
- public class ClueController {
-
- @Autowired
- private UserService userService;
- @Autowired
- private DicValueService dicValueService;
-
- @RequestMapping(value = "/workbench/clue/index.do")
- public String index(HttpServletRequest request){
- //调用service层方法,查询动态数据
- List
userList = userService.queryAllUsers(); - List
appellation = dicValueService.queryDicValueByTypeCode("appellation"); - List
clueState = dicValueService.queryDicValueByTypeCode("clueState"); - List
source = dicValueService.queryDicValueByTypeCode("source"); - //把数据保存到request中
- request.setAttribute("userList",userList);
- request.setAttribute("appellation",appellation);
- request.setAttribute("clueState",clueState);
- request.setAttribute("source",source);
- //请求转发
- return "workbench/clue/index";
- }
- }
6.workbench的index.jsp页面,实现点击线索菜单,跳转到线索页面
- <ul id="no1" class="nav nav-pills nav-stacked">
- <li class="liClass"><a href="workbench/main/index.do" target="workareaFrame"><span class="glyphicon glyphicon-home">span> 工作台a>li>
- <li class="liClass"><a href="javascript:void(0);" target="workareaFrame"><span class="glyphicon glyphicon-tag">span> 动态a>li>
- <li class="liClass"><a href="javascript:void(0);" target="workareaFrame"><span class="glyphicon glyphicon-time">span> 审批a>li>
- <li class="liClass"><a href="javascript:void(0);" target="workareaFrame"><span class="glyphicon glyphicon-user">span> 客户公海a>li>
- <li class="liClass"><a href="workbench/activity/index.do" target="workareaFrame"><span class="glyphicon glyphicon-play-circle">span> 市场活动a>li>
- <li class="liClass"><a href="workbench/clue/index.do" target="workareaFrame"><span class="glyphicon glyphicon-search">span> 线索(潜在客户)a>li>
- <li class="liClass"><a href="customer/index.html" target="workareaFrame"><span class="glyphicon glyphicon-user">span> 客户a>li>
- <li class="liClass"><a href="contacts/index.html" target="workareaFrame"><span class="glyphicon glyphicon-earphone">span> 联系人a>li>
- <li class="liClass"><a href="transaction/index.html" target="workareaFrame"><span class="glyphicon glyphicon-usd">span> 交易(商机)a>li>
- <li class="liClass"><a href="visit/index.html" target="workareaFrame"><span class="glyphicon glyphicon-phone-alt">span> 售后回访a>li>
- <li class="liClass"
7.clue的index.jsp页面,分别用EL表达式和JSTL来循环遍历下拉框数据
- <%@page contentType="text/html; charset=UTF-8" language="java" %>
- <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <%
- String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
- %>
- <html>
- <head>
- <meta charset="UTF-8">
- <base href="<%=basePath%>">
-
- <link href="jquery/bootstrap_3.3.0/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
- <link href="jquery/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css" type="text/css" rel="stylesheet" />
-
- <script type="text/javascript" src="jquery/jquery-1.11.1-min.js">script>
- <script type="text/javascript" src="jquery/bootstrap_3.3.0/js/bootstrap.min.js">script>
- <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/js/bootstrap-datetimepicker.js">script>
- <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/locale/bootstrap-datetimepicker.zh-CN.js">script>
-
- <script type="text/javascript">
-
- $(function(){
-
-
-
- });
-
- script>
- head>
- <body>
-
-
- <div class="modal fade" id="createClueModal" role="dialog">
- <div class="modal-dialog" role="document" style="width: 90%;">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal">
- <span aria-hidden="true">×span>
- button>
- <h4 class="modal-title" id="myModalLabel">创建线索h4>
- div>
- <div class="modal-body">
- <form class="form-horizontal" role="form">
-
- <div class="form-group">
- <label for="create-clueOwner" class="col-sm-2 control-label">所有者<span style="font-size: 15px; color: red;">*span>label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="create-clueOwner">
- <c:forEach items="${userList}" var="user">
- <option value="${user.id}">${user.name}option>
- c:forEach>
- select>
- div>
- <label for="create-company" class="col-sm-2 control-label">公司<span style="font-size: 15px; color: red;">*span>label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-company">
- div>
- div>
-
- <div class="form-group">
- <label for="create-call" class="col-sm-2 control-label">称呼label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="create-call">
- <option>option>
- <c:forEach items="${appellation}" var="app">
- <option value="${app.id}">${app.value}option>
- c:forEach>
- select>
- div>
- <label for="create-surname" class="col-sm-2 control-label">姓名<span style="font-size: 15px; color: red;">*span>label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-surname">
- div>
- div>
-
- <div class="form-group">
- <label for="create-job" class="col-sm-2 control-label">职位label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-job">
- div>
- <label for="create-email" class="col-sm-2 control-label">邮箱label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-email">
- div>
- div>
-
- <div class="form-group">
- <label for="create-phone" class="col-sm-2 control-label">公司座机label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-phone">
- div>
- <label for="create-website" class="col-sm-2 control-label">公司网站label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-website">
- div>
- div>
-
- <div class="form-group">
- <label for="create-mphone" class="col-sm-2 control-label">手机label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-mphone">
- div>
- <label for="create-status" class="col-sm-2 control-label">线索状态label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="create-status">
- <option>option>
- <c:forEach items="${clueState}" var="clu">
- <option value="${clu.id}">${clu.value}option>
- c:forEach>
- select>
- div>
- div>
-
- <div class="form-group">
- <label for="create-source" class="col-sm-2 control-label">线索来源label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="create-source">
- <option>option>
- <c:forEach items="${source}" var="sou">
- <option value="${sou.id}">${sou.value}option>
- c:forEach>
- select>
- div>
- div>
-
-
- <div class="form-group">
- <label for="create-describe" class="col-sm-2 control-label">线索描述label>
- <div class="col-sm-10" style="width: 81%;">
- <textarea class="form-control" rows="3" id="create-describe">textarea>
- div>
- div>
-
- <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative;">div>
-
- <div style="position: relative;top: 15px;">
- <div class="form-group">
- <label for="create-contactSummary" class="col-sm-2 control-label">联系纪要label>
- <div class="col-sm-10" style="width: 81%;">
- <textarea class="form-control" rows="3" id="create-contactSummary">textarea>
- div>
- div>
- <div class="form-group">
- <label for="create-nextContactTime" class="col-sm-2 control-label">下次联系时间label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="create-nextContactTime">
- div>
- div>
- div>
-
- <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative; top : 10px;">div>
-
- <div style="position: relative;top: 20px;">
- <div class="form-group">
- <label for="create-address" class="col-sm-2 control-label">详细地址label>
- <div class="col-sm-10" style="width: 81%;">
- <textarea class="form-control" rows="1" id="create-address">textarea>
- div>
- div>
- div>
- form>
-
- div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭button>
- <button type="button" class="btn btn-primary" data-dismiss="modal">保存button>
- div>
- div>
- div>
- div>
-
-
- <div class="modal fade" id="editClueModal" role="dialog">
- <div class="modal-dialog" role="document" style="width: 90%;">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal">
- <span aria-hidden="true">×span>
- button>
- <h4 class="modal-title">修改线索h4>
- div>
- <div class="modal-body">
- <form class="form-horizontal" role="form">
-
- <div class="form-group">
- <label for="edit-clueOwner" class="col-sm-2 control-label">所有者<span style="font-size: 15px; color: red;">*span>label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="edit-clueOwner">
- <c:forEach items="${userList}" var="user">
- <option value="${user.id}">${user.name}option>
- c:forEach>
- select>
- div>
- <label for="edit-company" class="col-sm-2 control-label">公司<span style="font-size: 15px; color: red;">*span>label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-company" value="动力节点">
- div>
- div>
-
- <div class="form-group">
- <label for="edit-call" class="col-sm-2 control-label">称呼label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="edit-call">
- <option>option>
- <c:forEach items="${appellation}" var="app">
- <option value="${app.id}">${app.value}option>
- c:forEach>
- select>
- div>
- <label for="edit-surname" class="col-sm-2 control-label">姓名<span style="font-size: 15px; color: red;">*span>label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-surname" value="李四">
- div>
- div>
-
- <div class="form-group">
- <label for="edit-job" class="col-sm-2 control-label">职位label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-job" value="CTO">
- div>
- <label for="edit-email" class="col-sm-2 control-label">邮箱label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-email" value="lisi@bjpowernode.com">
- div>
- div>
-
- <div class="form-group">
- <label for="edit-phone" class="col-sm-2 control-label">公司座机label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-phone" value="010-84846003">
- div>
- <label for="edit-website" class="col-sm-2 control-label">公司网站label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-website" value="http://www.bjpowernode.com">
- div>
- div>
-
- <div class="form-group">
- <label for="edit-mphone" class="col-sm-2 control-label">手机label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-mphone" value="12345678901">
- div>
- <label for="edit-status" class="col-sm-2 control-label">线索状态label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="edit-status">
- <option>option>
- <c:forEach items="${clueState}" var="clu">
- <option value="${clu.id}">${clu.value}option>
- c:forEach>
- select>
- div>
- div>
-
- <div class="form-group">
- <label for="edit-source" class="col-sm-2 control-label">线索来源label>
- <div class="col-sm-10" style="width: 300px;">
- <select class="form-control" id="edit-source">
- <option>option>
- <c:forEach items="${source}" var="sou">
- <option value="${sou.id}">${sou.value}option>
- c:forEach>
- select>
- div>
- div>
-
- <div class="form-group">
- <label for="edit-describe" class="col-sm-2 control-label">描述label>
- <div class="col-sm-10" style="width: 81%;">
- <textarea class="form-control" rows="3" id="edit-describe">这是一条线索的描述信息textarea>
- div>
- div>
-
- <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative;">div>
-
- <div style="position: relative;top: 15px;">
- <div class="form-group">
- <label for="edit-contactSummary" class="col-sm-2 control-label">联系纪要label>
- <div class="col-sm-10" style="width: 81%;">
- <textarea class="form-control" rows="3" id="edit-contactSummary">这个线索即将被转换textarea>
- div>
- div>
- <div class="form-group">
- <label for="edit-nextContactTime" class="col-sm-2 control-label">下次联系时间label>
- <div class="col-sm-10" style="width: 300px;">
- <input type="text" class="form-control" id="edit-nextContactTime" value="2017-05-01">
- div>
- div>
- div>
-
- <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative; top : 10px;">div>
-
- <div style="position: relative;top: 20px;">
- <div class="form-group">
- <label for="edit-address" class="col-sm-2 control-label">详细地址label>
- <div class="col-sm-10" style="width: 81%;">
- <textarea class="form-control" rows="1" id="edit-address">北京大兴区大族企业湾textarea>
- div>
- div>
- div>
- form>
-
- div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭button>
- <button type="button" class="btn btn-primary" data-dismiss="modal">更新button>
- div>
- div>
- div>
- div>
-
-
-
-
- <div>
- <div style="position: relative; left: 10px; top: -10px;">
- <div class="page-header">
- <h3>线索列表h3>
- div>
- div>
- div>
-
- <div style="position: relative; top: -20px; left: 0px; width: 100%; height: 100%;">
-
- <div style="width: 100%; position: absolute;top: 5px; left: 10px;">
-
- <div class="btn-toolbar" role="toolbar" style="height: 80px;">
- <form class="form-inline" role="form" style="position: relative;top: 8%; left: 5px;">
-
- <div class="form-group">
- <div class="input-group">
- <div class="input-group-addon">名称div>
- <input class="form-control" type="text">
- div>
- div>
-
- <div class="form-group">
- <div class="input-group">
- <div class="input-group-addon">公司div>
- <input class="form-control" type="text">
- div>
- div>
-
- <div class="form-group">
- <div class="input-group">
- <div class="input-group-addon">公司座机div>
- <input class="form-control" type="text">
- div>
- div>
-
- <div class="form-group">
- <div class="input-group">
- <div class="input-group-addon">线索来源div>
- <select class="form-control">
- <option>option>
- <c:forEach items="${source}" var="sou">
- <option value="${sou.id}">${sou.value}option>
- c:forEach>
- select>
- div>
- div>
-
- <br>
-
- <div class="form-group">
- <div class="input-group">
- <div class="input-group-addon">所有者div>
- <input class="form-control" type="text">
- div>
- div>
-
-
-
- <div class="form-group">
- <div class="input-group">
- <div class="input-group-addon">手机div>
- <input class="form-control" type="text">
- div>
- div>
-
- <div class="form-group">
- <div class="input-group">
- <div class="input-group-addon">线索状态div>
- <select class="form-control">
- <option>option>
- <c:forEach items="${clueState}" var="clu">
- <option value="${clu.id}">${clu.value}option>
- c:forEach>
- select>
- div>
- div>
-
- <button type="submit" class="btn btn-default">查询button>
-
- form>
- div>
- <div class="btn-toolbar" role="toolbar" style="background-color: #F7F7F7; height: 50px; position: relative;top: 40px;">
- <div class="btn-group" style="position: relative; top: 18%;">
- <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#createClueModal"><span class="glyphicon glyphicon-plus">span> 创建button>
- <button type="button" class="btn btn-default" data-toggle="modal" data-target="#editClueModal"><span class="glyphicon glyphicon-pencil">span> 修改button>
- <button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-minus">span> 删除button>
- div>
-
-
- div>
- <div style="position: relative;top: 50px;">
- <table class="table table-hover">
- <thead>
- <tr style="color: #B3B3B3;">
- <td><input type="checkbox" />td>
- <td>名称td>
- <td>公司td>
- <td>公司座机td>
- <td>手机td>
- <td>线索来源td>
- <td>所有者td>
- <td>线索状态td>
- tr>
- thead>
- <tbody>
- <tr>
- <td><input type="checkbox" />td>
- <td><a style="text-decoration: none; cursor: pointer;" onclick="window.location.href='detail.html';">李四先生a>td>
- <td>动力节点td>
- <td>010-84846003td>
- <td>12345678901td>
- <td>广告td>
- <td>zhangsantd>
- <td>已联系td>
- tr>
- <tr class="active">
- <td><input type="checkbox" />td>
- <td><a style="text-decoration: none; cursor: pointer;" onclick="window.location.href='detail.html';">李四先生a>td>
- <td>动力节点td>
- <td>010-84846003td>
- <td>12345678901td>
- <td>广告td>
- <td>zhangsantd>
- <td>已联系td>
- tr>
- tbody>
- table>
- div>
-
- <div style="height: 50px; position: relative;top: 60px;">
- <div>
- <button type="button" class="btn btn-default" style="cursor: default;">共<b>50b>条记录button>
- div>
- <div class="btn-group" style="position: relative;top: -34px; left: 110px;">
- <button type="button" class="btn btn-default" style="cursor: default;">显示button>
- <div class="btn-group">
- <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
- 10
- <span class="caret">span>
- button>
- <ul class="dropdown-menu" role="menu">
- <li><a href="#">20a>li>
- <li><a href="#">30a>li>
- ul>
- div>
- <button type="button" class="btn btn-default" style="cursor: default;">条/页button>
- div>
- <div style="position: relative;top: -88px; left: 285px;">
- <nav>
- <ul class="pagination">
- <li class="disabled"><a href="#">首页a>li>
- <li class="disabled"><a href="#">上一页a>li>
- <li class="active"><a href="#">1a>li>
- <li><a href="#">2a>li>
- <li><a href="#">3a>li>
- <li><a href="#">4a>li>
- <li><a href="#">5a>li>
- <li><a href="#">下一页a>li>
- <li class="disabled"><a href="#">末页a>li>
- ul>
- nav>
- div>
- div>
-
- div>
-
- div>
- body>
- html>
功能测试

点击条件查询的线索状态,根据数据库内容查出各种数据

点击创建,弹出模态窗口,展示各个选项的下拉框,数据从数据库中查询而来,增加了系统后期的数据维护性。

