联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码
生活随笔
收集整理的這篇文章主要介紹了
联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
聯系人管理-客戶拜訪記錄| CRM客戶關系管理系統項目 實戰七(Struts2+Spring+Hibernate)解析+源代碼
客戶拜訪記錄的列表的顯示,
客戶拜訪記錄的保存,
客戶拜訪記錄查詢(條件搜索),
修改保存操作
一、客戶拜訪記錄的管理
1、客戶拜訪記錄需求的概述
一個系統的用戶(公司的業務員),業務員需要對客戶進行拜訪,對拜訪的過程進行記錄。業務員(用戶)和客戶(客戶)之間的關系(需要具體業務進行具體分析:一對多-公司產品比較單一,只允許一個業務員來對應多個客戶。多對多-一些大公司有不同的產品,不同產品下有不同的業務員都可以接觸到同一個客戶,一個客戶也可以對應多業務員)。大部分情況習慣與創建為多對多的。
2、多對多建表原則
- 創建中間表,中間表當中至少兩個字段,分別作為外鍵指向多對多雙方的各自的主鍵。
二、客戶拜訪記錄的準備工作
1、創建表
CREATE TABLE `sale_visit` (`visit_id` varchar(32) NOT NULL,`visit_cust_id` bigint(32) DEFAULT NULL COMMENT '客戶id',`visit_user_id` bigint(32) DEFAULT NULL COMMENT '負責人id',`visit_time` datetime DEFAULT NULL COMMENT '拜訪時間',`visit_addr` varchar(128) DEFAULT NULL COMMENT '拜訪地點',`visit_detail` varchar(256) DEFAULT NULL COMMENT '拜訪詳情',`visit_nexttime` datetime DEFAULT NULL COMMENT '下次拜訪時間',PRIMARY KEY (`visit_id`),KEY `FK_sale_visit_cust_id` (`visit_cust_id`),KEY `FK_sale_visit_user_id` (`visit_user_id`),CONSTRAINT `FK_sale_visit_cust_id` FOREIGN KEY (`visit_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,CONSTRAINT `FK_sale_visit_user_id` FOREIGN KEY (`visit_user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8;2、創建實體和映射
- 創建實體
在SaleVisit當中配置屬性并設置客戶對象以及對應的用戶
- 創建映射SaleVisit.hbm.xml文件當中設置多對一的映射關系
- 將實體交給Spring管理,在appliactionContext.xml當中配置對應
3、創建相關的類
SaleVisitDao
SaleVisitDaoImpl
創建SaleVisitAction,并注入SaleVisit
4、將相關的類進行配置
- Bean管理交給Spring的XML
- 屬性注入使用注解方式
(1)在applicationContext.xml當中開啟屬性注入
- 將saleVisitAction和saleVisitService和saleVisitDao交給Spring管理
(2)在要注入類當中設置標簽@Resource(name="")
在action當中注入service
在service層注入DAO
三、客戶拜訪記錄的列表的顯示
1、修改menu.jsp的提交訂單路徑
2、編寫Action的findAll的方法
在SaleVisitAction
3、編寫service
SaleVisitServiceImpl
package com.itzheng.crm.service.impl; import java.util.List; import javax.annotation.Resource; import org.hibernate.criterion.DetachedCriteria; import com.itzheng.crm.dao.SaleVisitDao; import com.itzheng.crm.domain.PageBean; import com.itzheng.crm.domain.SaleVisit; import com.itzheng.crm.service.SaleVisitService; /*- 客戶拜訪記錄的業務層的接口*/ public class SaleVisitServiceImpl implements SaleVisitService {// 注入客戶拜訪記錄的DAO:@Resource(name = "saleVisitDao")private SaleVisitDao saleVisitDao;@Override// 業務層分頁顯示拜訪記錄的方法:public PageBean<SaleVisit> findByPage(DetachedCriteria detachedCriteria, Integer currPage, Integer pageSize) {PageBean<SaleVisit> pageBean = new PageBean<SaleVisit>();// 設置當前頁數pageBean.setCurrPage(currPage);// 設置每一頁顯示的記錄數pageBean.setPageSize(pageSize);// 設置總的記錄數Integer totalCount = saleVisitDao.findCount(detachedCriteria);pageBean.setTotalCount(totalCount);// 設置總頁數:double tc = totalCount;Double num = Math.ceil(tc / pageSize);// 設置總頁數:pageBean.setTotalPage(num.intValue());// 設置每一頁所顯示的數據的集合Integer begin = (currPage - 1) * pageSize;List<SaleVisit> list = saleVisitDao.findByPage(detachedCriteria, begin, pageSize); pageBean.setList(list);return pageBean;} }4、在頁面上進行顯示
(1)配置struts.xml
(2)在創建salevisit并創建list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib uri="/struts-tags" prefix="s" %> <html> <head> <TITLE>客戶拜訪記錄列表</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <LINK href="${pageContext.request.contextPath }/css/Style.css" type=text/css rel=stylesheet> <LINK href="${pageContext.request.contextPath }/css/Manage.css" type=text/cssrel=stylesheet> <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script> <SCRIPT language=javascript>function to_page(page){if(page){$("#page").val(page);}document.customerForm.submit();} </SCRIPT> <META content="MSHTML 6.00.2900.3492" name=GENERATOR> </HEAD> <BODY><FORM id="customerForm" name="customerForm"action="${pageContext.request.contextPath }/saleVisit_findAll.action"method=post><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><TBODY><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_019.jpg"border=0></TD><TD width="100%" background="${pageContext.request.contextPath }/images/new_020.jpg"height=20></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_021.jpg"border=0></TD></TR></TBODY></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><TBODY><TR><TD width=15 background="${pageContext.request.contextPath }/images/new_022.jpg"><IMGsrc="${pageContext.request.contextPath }/images/new_022.jpg" border=0></TD><TD vAlign=top width="100%" bgColor=#ffffff><TABLE cellSpacing=0 cellPadding=5 width="100%" border=0><TR><TD class=manageHead>當前位置:客戶拜訪記錄管理 > 客戶拜訪記錄列表</TD></TR><TR><TD height=2></TD></TR></TABLE><TABLE borderColor=#cccccc cellSpacing=0 cellPadding=0width="100%" align=center border=0><TBODY><TR><TD height=25><TABLE cellSpacing=0 cellPadding=2 border=0><TBODY><TR><TD>聯系人名稱:</TD><TD><s:textfield theme="simple" name="lkm_name" cssClass="textbox" cssStyle="WIDTH: 80px" maxLength="50"/><TD> <TD>聯系人性別:</TD><TD><s:select theme="simple" name="lkm_gender" list="#{'1':'男','2':'女'}" headerKey="" headerValue="-請選擇-"/><TD> <INPUT class=button id=sButton2 type=submit value="篩選 " name=sButton2></TD></TR></TBODY></TABLE></TD></TR> <TR><TD><TABLE id=gridstyle="BORDER-TOP-WIDTH: 0px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 0px; BORDER-LEFT-COLOR: #cccccc; BORDER-BOTTOM-WIDTH: 0px; BORDER-BOTTOM-COLOR: #cccccc; WIDTH: 100%; BORDER-TOP-COLOR: #cccccc; FONT-STYLE: normal; BACKGROUND-COLOR: #cccccc; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #cccccc"cellSpacing=1 cellPadding=2 rules=all border=0><TBODY><TRstyle="FONT-WEIGHT: bold; FONT-STYLE: normal; BACKGROUND-COLOR: #eeeeee; TEXT-DECORATION: none"><TD>業務員名稱</TD><TD>客戶名稱</TD><TD>拜訪時間</TD><TD>拜訪地點</TD><TD>拜訪詳情</TD><TD>下次拜訪時間</TD><TD>操作</TD></TR><s:iterator value="list"><TRstyle="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none"><TD><s:property value="user.user_name"/> </TD><TD><s:property value="customer.cust_name"/></TD><TD><s:date name="visit_time" format="yyyy-MM-dd"/></TD><TD><s:property value="visit_addr"/> </TD><TD><s:property value="visit_detail"/> </TD><TD><s:date name="visit_nexttime" format="yyyy-MM-dd"/></TD> <TD><a href="#">修改</a> <a href="#">刪除</a></TD></TR></s:iterator></TBODY></TABLE></TD></TR><TR><TD><SPAN id=pagelink><DIV style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">共[<B> <s:property value="totalCount" /></B>]條記錄,[<B><s:property value="totalPage" /> </B>]頁 ,每頁顯示 <select name="pageSize" onchange="to_page()"><option value="3"<s:if test="pageSize == 3">selected</s:if>>3</option><option value="5"<s:if test="pageSize == 5">selected</s:if>>5</option><option value="10"<s:if test="pageSize == 10">selected</s:if>>10</option></select> 條<s:if test="currPage != 1">[<A href="javascript:to_page(<s:property value="1" />)">首頁</A>] [<A href="javascript:to_page(<s:property value="currPage-1" />)">前一頁</A>] </s:if> <B> <s:iterator var="i" begin="1" end="totalPage"><s:if test="#i == currPage"><s:property value="#i" /></s:if><s:else><a href="javascript:to_page(<s:property value="#i" />)"><s:property value="#i" /></a></s:else></s:iterator></B> <s:if test="currPage != totalPage">[<A href="javascript:to_page(<s:property value="currPage+1" />)">后一頁</A>] [<A href="javascript:to_page(<s:property value="totalPage" />)">尾頁</A>] </s:if>到 <input type="text" size="3" id="page" name="currPage" />頁 <input type="button" value="Go" onclick="to_page()" /></DIV></SPAN></TD></TR></TBODY></TABLE></TD><TD width=15 background="${pageContext.request.contextPath }/images/new_023.jpg"><IMGsrc="${pageContext.request.contextPath }/images/new_023.jpg" border=0></TD></TR></TBODY></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><TBODY><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_024.jpg"border=0></TD><TD align=middle width="100%"background="${pageContext.request.contextPath }/images/new_025.jpg" height=15></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_026.jpg"border=0></TD></TR></TBODY></TABLE></FORM> </BODY> </HTML>(3)測試
四、客戶拜訪記錄的保存
1、跳轉到添加保存頁面(修改menu.jsp的鏈接地址)
2、編寫Action中的saveUI方法
3、跳轉到添加頁面
- 在struts2當中配置跳轉
4、在salevisit下的add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <TITLE>添加客戶拜訪記錄</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <LINK href="${pageContext.request.contextPath }/css/Style.css" type=text/css rel=stylesheet> <LINK href="${pageContext.request.contextPath }/css/Manage.css" type=text/cssrel=stylesheet> <META content="MSHTML 6.00.2900.3492" name=GENERATOR> </HEAD> <BODY><s:form id="form1" name="form1" namespace="/" action="saleVisit_save" method="post" theme="simple"><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><TBODY><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_019.jpg"border=0></TD><TD width="100%" background="${pageContext.request.contextPath }/images/new_020.jpg"height=20></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_021.jpg"border=0></TD></TR></TBODY></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><TBODY><TR><TD width=15 background=${pageContext.request.contextPath }/images/new_022.jpg><IMG src="${pageContext.request.contextPath }/images/new_022.jpg" border=0></TD><TD vAlign=top width="100%" bgColor=#ffffff><TABLE cellSpacing=0 cellPadding=5 width="100%" border=0><TR><TD class=manageHead>當前位置:客戶拜訪記錄管理 > 添加客戶拜訪記錄</TD></TR><TR><TD height=2></TD></TR></TABLE><TABLE cellSpacing=0 cellPadding=5 border=0><tr><td>拜訪客戶:</td><td><select name="customer.cust_id" id="customer"><option value="">-請選擇-</option></select></td><td>業務員名稱:</td><td><select name="user.user_id" id="user"><option value="">-請選擇-</option></select></td></tr><TR><td>拜訪時間:</td><td><s:textfield cssClass="textbox" id="sChannel2" cssStyle="WIDTH: 180px" name="visit_time"/></td><td>拜訪地點:</td><td><s:textfield cssClass="textbox" id="sChannel2" cssStyle="WIDTH: 180px" maxlength="50" name="visit_addr"></s:textfield></td></TR><TR><td>拜訪詳情 :</td><td><s:textfield cssClass="textbox" id="sChannel2" cssStyle="WIDTH: 180px" maxlength="50" name="visit_detail"></s:textfield></td><td>下次拜訪時間:</td><td><s:textfield cssClass="textbox" id="sChannel2" cssStyle="WIDTH: 180px" maxlength="50" name="visit_nexttime"></s:textfield></td></TR><tr><td rowspan=2><INPUT class=button id=sButton2 type=submit value="保存 " name=sButton2></td></tr></TABLE> </TD><TD width=15 background="${pageContext.request.contextPath }/images/new_023.jpg"><IMG src="${pageContext.request.contextPath }/images/new_023.jpg" border=0></TD></TR></TBODY></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><TBODY><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_024.jpg"border=0></TD><TD align=middle width="100%"background="${pageContext.request.contextPath }/images/new_025.jpg" height=15></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_026.jpg"border=0></TD></TR></TBODY></TABLE> </s:form> </BODY> </HTML>5、在salevisit下的add.jsp
6、異步加載數據
7、修改頁面數據-異步加載客戶信息
8、編寫異步加載的Action
(1)CustomerAction
(2)CustomerAction
(3)UserAction
9、測試
10、客戶拜訪記錄的保存操作
(1)導入日期控件
(2)在salevisit下的add.jsp引入日期控件
設置對應標簽的ID并設置只讀屬性
(3)日期控件顯示的效果
11、編寫保存客戶信息的Action即Action的save方法
(1)編寫SaleVisitAction
(2)編寫SaleVisitServiceImpl的save方法
設置事務
(3)在struts.xml當中配置跳轉
五、客戶拜訪記錄查詢(條件搜索)
1、salevisit當中的list.jsp頁面上
(1)引入JQuery的日期控件
(2)修改搜索表單的屬性
2、SaleVisitAction當中的findAll方法當中組織添加條件
3、設置visit_end_time的get方法(因為visit_end_time不再棧當中)
設置get方法后就可以在頁面當中回顯
4、測試
六、修改保存操作
1、在salevisit下的list.jsp頁面上修改
2、在創建salevisit下創建edit.jsp頁面
直接復制add.jsp,修改回顯數據的下拉列表
3、在SaleVisitAction當中設置查詢所有的Customer和user對應的list
(1)通過屬性注入的方式注入service
(2)在SaleVisitAction下創建edit方法
(3)在struts.xml當中配置
4、測試
5、保存操作
(1)修改頁面salevisit的edit.jsp
設置提交的action和隱藏id屬性
(2)遍歷對應值棧當中的list集合以及對應的回顯的屬性
(3)在SaleVisitAction當中設置update方法
(4)在SaleVisitServiceImpl
(5)測試
總結
以上是生活随笔為你收集整理的联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “基础 、中级 、高级”Java 程序员
- 下一篇: java信息管理系统总结_java实现科