目录
1.CRM客户关系管理系统:客户拜访记录
1.1需求概述
1.2准备工作
1.2.1创建表
1.2.2创建实体和映射
1.2.3创建相关类,并交给Spring管理
1.3客户拜访记录列表显示
1.3.1修改left.jsp的提交路径
1.3.2编写action
1.3.3编写service
1.3.4编写显示页面
1.4客户拜访记录列表显示
1.4.1编写action
1.4.2编写service
1.4.3编写保存页面
2.权限管理
2.1编写一个类继承拦截器类
2.2配置拦截器
3验证码
3.1编写工具类
3.2编写action
3.3编写页面
一个系统的用户(公司业务员),业务员需要对客户进行拜访,对拜访的过程进行记录。业务员(用户)和客户(客户)之间关系(需要具体业务具体分析:一对多—公司产品比较单一,只允许一个业务员对应多个客户。多对多—大公司有不同的产品,不同产品下有不同业务员都可以接触到同一个客户,一个客户可以对应多个业务员)。大部分情况创建成多对多。
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` date 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;
实体:
package com.albertyy.crm.entity;
import java.sql.Date;
import java.sql.Timestamp;
/**
* 项目名称:CRM 类名称:SaleVisit 类描述: 客户拜访实体类 创建人:yangyangyang
* 创建时间:2019年1月1日 下午4:32:53 修改人:yangyangyang 修改时间:2019年1月1日 下午4:32:53
* 修改备注: @version
*/
public class SaleVisit {
private String visit_id;
private Timestamp visit_time;
private String visit_addr;
private String visit_detail;
private Date visit_nexttime;
// 拜访记录关联的客户对象
private Customer customer;
// 拜访记录关联的用户对象
private User user;
public String getVisit_id() {
return visit_id;
}
public void setVisit_id(String visit_id) {
this.visit_id = visit_id;
}
public Timestamp getVisit_time() {
return visit_time;
}
public void setVisit_time(Timestamp visit_time) {
this.visit_time = visit_time;
}
public String getVisit_addr() {
return visit_addr;
}
public void setVisit_addr(String visit_addr) {
this.visit_addr = visit_addr;
}
public String getVisit_detail() {
return visit_detail;
}
public void setVisit_detail(String visit_detail) {
this.visit_detail = visit_detail;
}
public Date getVisit_nexttime() {
return visit_nexttime;
}
public void setVisit_nexttime(Date visit_nexttime) {
this.visit_nexttime = visit_nexttime;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
映射:
客户拜访管理
// 分页查询客户拜访记录的方法
public String findAll() {
// 创建离线条件查询对象
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(SaleVisit.class);
// 设置条件
PageBean pageBean = saleVisitService.findByPage(detachedCriteria, page, pageSize);
ActionContext.getContext().getValueStack().push(pageBean);
return "findAll";
}
//客户拜访分页查询业务层方法
@Override
public PageBean findByPage(DetachedCriteria detachedCriteria, Integer page, Integer pageSize) {
PageBean pageBean=new PageBean();
pageBean.setPage(page);
pageBean.setPageSize(pageSize);
int totalCount=saleVisitDao.findCount(detachedCriteria);
pageBean.setTotalCount(totalCount);
double tc=totalCount;
Double num=Math.ceil(tc/pageSize);
pageBean.setTotalPage(num.intValue());
Integer begin=(page-1)*pageSize;
List list=saleVisitDao.findByPage(detachedCriteria, begin, pageSize);
pageBean.setList(list);
return pageBean;
}