Crm-客户管理
客户信息管理模块表结构
这里主要涉及表:
t_customer_order客户订单字段字段类型字段限制字段描述主键idint(11)自增id主键cus_idint(11)可空客户idorder_novarchar(40)可空订单编号order_datedatetime可空下单时间addressvarchar(200)可空地址stateint(11)可空状态create_datedatetime可空创建时间update_datedatetime可空更新时间is_validint(4)可空有效状态
t_order_details订单详情表字段字段类型字段限制字段描述主键idint(11)自增id主键order_idint(11)可空订单idgoods_namevarchar(100)可空商品名称goods_numint(11)可空商品数量unitvarchar(20)可空商品单位pricefloat可空单价sumfloat可空总金额is_validint(4)可空有效状态create_datedatetime可空创建时间update_datedatetime可空更新时间
客户流失管理模块表结构
这里主要涉及表有
t_customer_loss 客户流失表
t_customer_reprieve 客户流失暂缓表
t_customer_loss客户流失表字段字段类型字段限制字段描述主键idint(11)自增id主键cus_novarchar(40)可空客户编号cus_namevarchar(20)可空客户姓名cus_managervarchar(20)可空客户经理last_order_timedate可空最后下单时间confirm_loss_timedate可空确认流失时间stateint(11)可空流失状态loss_reasonvarchar(1000)可空流失原因is_validtinyint(4)可空有效状态create_datedatetime可空创建时间update_datedatetime可空更新时间
t_customer_reprieve客户流失暂缓表字段字段类型字段限制字段描述主键idint(11)自增id主键loss_idint(11)可空流失idmeasurevarchar(500)可空措施is_validtinyint(4)可空有效状态create_datedatetime可空创建时间update_datedatetime可空更新时间
客户信息管理模块实现
客户信息管理查询
客户信息管理页面效果
客户信息查询后端代码实现
layui 框架通过表格展示后端表数据,数据格式见官网测试数据地址。
CustomerMapper 接口定义与Sql配置
- CustomerMapper .java
public interface CustomerMapper extends BaseMapper<Customer,Integer> {
/*
由于考虑到多个模块均涉及多条件查询
这里对于多条件分页查询方法由父接口BaseMapper定义
*/
}
- CustomerMapper .xml
<select id="selectByParams" parameterType="com.xxxx.crm.query.CustomerQuery" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from t_customer
<where>
is_valid=1
<!--
state 流失状态
0 未流失
1 已流失
-->
and state =0
<if test="null !=cusName and cusName !=">
and name like concat(%,#{cusName},%)
</if>
<if test="null !=cusNo and cusNo !=">
and khno =#{cusNo}
</if>
<if test="null !=level and level !=">
and level =#{level}
</if>
<if test="null !=myd and myd !=">
and myd =#{myd}
</if>
</where>
</select>
- CustomerQuery.java
在crm.query 包下创建CustomerQuery.java 查询类,设置查询条件
public class CustomerQuery extends BaseQuery {
private String cusName;
private String cusNo;
private String level;
}
CustomerService 定义
- CustomerService .java
@Service
public class CustomerService extends BaseService<Customer, Integer> {
/*
由于考虑到多个模块均涉及多条件查询
这里对于多条件分页查询方法由父类BaseService定义并实现
*/
}
- BaseService.java 分页查询方法定义与实现
public Map<String, Object> queryByParamsForTable(BaseQuery baseQuery) {
Map<String,Object> result = new HashMap<String,Object>();
PageHelper.startPage(baseQuery.getPage(),baseQuery.getLimit());
PageInfo<T> pageInfo =new PageInfo<T>(selectByParams(baseQuery));
result.put("count",pageInfo.getTotal());
result.put("data",pageInfo.getList());
result.put("code",0);
result.put("msg","");
return result;
}
CustomerController.java
@Controller
@RequestMapping("customer")
public class CustomerController extends BaseController {
@Resource
private CustomerService customerService;
@Resource
private CustomerOrderService orderService;
@RequestMapping("index")
public String index(){
return "customer/customer";
}
@RequestMapping("list")
@ResponseBody
public Map<String,Object> queryCustomersByParams(CustomerQuery customerQuery){
return customerService.queryByParamsForTable(customerQuery);
}
客户信息管理前端核心代码
客户信息管理主页面模板
resources/views/customer目录创建customer.ftl 模块文件,模板内容如下(模板依赖的layui文件由common.ftl 文件提供),layui表格数据展示模板文件实现参考该地址
- customer.ftl
<!DOCTYPE html>
<html>
<head>
<title>客户管理</title>
<#include "../common.ftl">
</head>
<body class="childrenBody">
<form class="layui-form" >
<blockquote class="layui-elem-quote quoteBox">
<form class="layui-form">
<p class="layui-inline">
<p class="layui-input-inline">
<input type="text" name="name"
class="layui-input
searchVal" placeholder="客户名" />
</p>
<p class="layui-input-inline">
<input type="text" name="khno" class="layui-input
searchVal" placeholder="客户编号" />
</p>
<p class="layui-input-inline">
<select name="level" id="level">
<option value="">请选择...</option>
<option value="战略合作伙伴">战略合作伙伴</option>
<option value="大客户">大客户</option>
<option value="重点开发客户">重点开发客户</option>
</select>
</p>
<a class="layui-btn search_btn" data-type="reload"><i
class="layui-icon"></i> 搜索</a>
</p>
</form>
</blockquote>
<table id="customerList" class="layui-table" lay-filter="customers"></table>
<!--操作-->
<script id="customerListBar" type="text/html">
<a class="layui-btn layui-btn-xs" id="edit" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
</script>
</form>
<script type="text/javascript" src="${ctx}/static/js/customer/customer.js"></script>
</body>
</html>
客户信息管理主页面模板核心js
static/js/customer目录下创建customer.js 文件,初始化layui表格数据,layui表格数据展示模板文件实现参考该地址
- customer.js
layui.use([table,layer,"form"],function(){
var layer = parent.layer === undefined ? layui.layer : top.layer,
$ = layui.jquery,
table = layui.table,
form = layui.form;
//客户列表展示
var tableIns = table.render({
elem: #customerList,
url : ctx /customer/list,
cellMinWidth : 95,
page : true,
height : "full-125",
limits : [10,15,20,25],
limit : 10,
toolbar: "#toolbarDemo",
id : "customerListTable",
cols : [[
{type: "checkbox", fixed:"center"},
{field: "id", title:编号,fixed:"true"},
{field: name, title: 客户名,align:"center"},
{field: fr, title: 法人, align:center},
{field: khno, title: 客户编号, align:center},
{field: area, title: 地区, align:center},
{field: cusManager, title: 客户经理, align:center},
{field: myd, title: 满意度, align:center},
{field: level, title: 客户级别, align:center},
{field: xyd, title: 信用度, align:center},
{field: address, title: 详细地址, align:center},
{field: postCode, title: 邮编, align:center},
{field: phone, title: 电话, align:center},
{field: webSite, title: 网站, align:center},
{field: fax, title: 传真, align:center},
{field: zczj, title: 注册资金, align:center},
{field: yyzzzch, title: 营业执照, align:center},
{field: khyh, title: 开户行, align:center},
{field: khzh, title: 开户账号, align:center},
{field: gsdjh, title: 国税, align:center},
{field: dsdjh, title: 地税, align:center},
{field: createDate, title: 创建时间, align:center},
{field: updateDate, title: 更新时间, align:center},
{title: 操作, templet:#customerListBar,fixed:"right",align:"center", minWidth:150}
]]
});
});
客户信息多条件查询事件添加
客户信息数据表格数据展示成功后,接下来考虑添加多条件查询点击事件,这里使用layui表格reload重载基础方法实现,点击这里参考官网介绍。
<script type="text/html" id="toolbarDemo">
<p class="layui-btn-container">
<a class="layui-btn layui-btn-normal addNews_btn" lay-event="add">
<i class="layui-icon"></i>
添加
</a>
<a class="layui-btn layui-btn-normal " lay-event="link">
<i class="layui-icon"></i>
联系人管理
</a>
<a class="layui-btn layui-btn-normal addNews_btn" lay-event="recode">
<i class="layui-icon"></i>
交往记录
</a>
<a class="layui-btn layui-btn-normal addNews_btn" lay-event="order">
<i class="layui-icon"></i>
订单查看
</a>
</p>
</script>
- customer.js 添加搜索点击事件
// 多条件搜索
$(".search_btn").on("click",function(){
table.reload("customerListTable",{
page: {
curr: 1 //重新从第 1 页开始
},
where: {
cusName: $("input[name=name]").val(), //客户名
cusNo: $("input[name=khno]").val(), //客户编号
level: $("#level").val() //客户等级
}
})
});
- 搜索效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaoeZkwl-1608711963854)(imagesimage-20200227215721847.png)]
机会数据添加核心代码
@Transactional(propagation = Propagation.REQUIRED)
public void saveCustomer(Customer customer){
checkParams(customer.getName(),customer.getPhone(),customer.getFr());
AssertUtil.isTrue(null!=customerMapper.queryCustomerByName(customer.getName()),"该客户已存在!");
customer.setIsValid(1);
customer.setState(0);
customer.setCreateDate(new Date());
customer.setUpdateDate(new Date());
String khno = "KH_" new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
customer.setKhno(khno);
AssertUtil.isTrue(insertSelective(customer)<1,"客户添加失败!");
}
private void checkParams(String name, String phone, String fr) {
AssertUtil.isTrue(StringUtils.isBlank(name),"请指定客户名称!");
AssertUtil.isTrue(!(PhoneUtil.isMobile(phone)),"手机号格式非法!");
AssertUtil.isTrue(StringUtils.isBlank(fr),"请指定公司法人!");
}
@RequestMapping("addOrUpdateSaleChancePage")
public String addOrUpdateSaleChancePage(Integer id,Model model){
model.addAttribute("customer",customerService.selectByPrimaryKey(id)) ;
return "customer/add_update";
}
@RequestMapping("save")
@ResponseBody
public ResultInfo saveCustomer(Customer customer){
customerService.saveCustomer(customer);
return success("客户添加成功");
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。