服务管理表结构设计
t_customer_serve | 客户服务表 | |||
---|---|---|---|---|
字段 | 字段类型 | 字段限制 | 字段描述 | |
主键 | id | int(11) | 自增 | id主键 |
serve_type | varchar(30) | 可空 | 服务类型 | |
overview | varchar(500) | 可空 | 概要 | |
customer | varchar(30) | 可空 | 客户 | |
state | varchar(20) | 可空 | 服务状态 | |
service_request | varchar(500) | 可空 | 服务请求 | |
create_people | varchar(100) | 可空 | 服务创建人 | |
assigner | varchar(100) | 可空 | 服务分配人 | |
assign_time | datetime | 可空 | 分配时间 | |
service_proce | varchar(500) | 可空 | 服务处理 | |
service_proce_people | varchar(20) | 可空 | 服务处理人 | |
service_proce_time | datetime | 可空 | 服务处理时间 | |
service_proce_result | varchar(500) | 可空 | 处理结果 | |
myd | varchar(50) | 可空 | 满意度 | |
is_valid | int(4) | 可空 | 是否有效 | |
update_date | datetime | 可空 | 更新时间 | |
create_date | datetime | 可空 | 创建时间 |
服务管理模块实现
Crm系统添加客服系统便于企业更好的服务与客户需要,及时满足客户对于企业信息,产品相关信息的了解,同时对于产品售后也起到好的保障。这里在实现服务管理时设置服务记录的创建,分配,处理,反馈与归档五个子模块。
服务列表展示核心实现
- CustomerServeMapper.xml
- CustomerServeController.java
@Controller
@RequestMapping("customer_serve")
public class CustomerServeController extends BaseController {
@Resource
private CustomerServeService customerServeService;
// 服务管理页面转发方法
@RequestMapping("index/{type}")
public String index(@PathVariable Integer type){
if(type==1){
return "customerServe/customer_serve";
}else if(type==2){
return "customerServe/customer_serve_assign";
}else if(type==3){
return "customerServe/customer_serve_proce";
}else if(type==4){
return "customerServe/customer_serve_feed_back";
}else if(type==5){
return "customerServe/customer_serve_archive";
}else{
return "";
}
}
// 服务信息列表展示
@RequestMapping("list")
@ResponseBody
public Map queryCustomerServeByParams(Integer flag, HttpServletRequest request, CustomerServeQuery customerServeQuery){
if(null !=flag && flag==1){
customerServeQuery.setAssigner(LoginUserUtil.releaseUserIdFromCookie(request));
}
return customerServeService.queryByParamsForTable(customerServeQuery);
}
// 服务添加页面转发
@RequestMapping("addCustomerServePage")
public String addCustomerServePage(){
return "customerServe/customer_serve_add";
}
//服务分配页面转发
@RequestMapping("addCustomerServeAssignPage")
public String addCustomerServeAssignPage(Integer id, Model model){
model.addAttribute("customerServe",customerServeService.selectByPrimaryKey(id));
return "customerServe/customer_serve_assign_add";
}
// 服务反馈页面转发
@RequestMapping("addCustomerServeBackPage")
public String addCustomerServeBackPage(Integer id, Model model){
model.addAttribute("customerServe",customerServeService.selectByPrimaryKey(id));
return "customerServe/customer_serve_feed_back_add";
}
// 服务处理页面转发
@RequestMapping("addCustomerServeProcePage")
public String addCustomerServeProcePage(Integer id, Model model){
model.addAttribute("customerServe",customerServeService.selectByPrimaryKey(id));
return "customerServe/customer_serve_proce_add";
}
//服务添加 分配 处理 归档处理
@RequestMapping("saveOrUpdateCustomerServe")
@ResponseBody
public ResultInfo saveOrUpdateCustomerServe(CustomerServe customerServe){
customerServeService.saveOrUpdateCustomerServe(customerServe);
return success("操作成功");
}
服务记录创建、分配、处理后端核心实现
这里对于服务管理服务的创建,分配,处理与反馈后端代码实现放在同一个方法中进行处理,同时方便对于服务状态值统一处理,这里定义CustomerServeStatus 枚举类来实现。
- 服务状态枚举类定义
/**
* 客户服务状态枚举类
*/
public enum CustomerServeStatus {
// 创建
CREATED("fw_001"),
// 分配
ASSIGNED("fw_002"),
// 处理
PROCED("fw_003"),
// 反馈
FEED_BACK("fw_004"),
// 归档
ARCHIVED("fw_005");
private String state;
CustomerServeStatus(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
- CustomerServeService.java
@Transactional(propagation = Propagation.REQUIRED)
public void saveOrUpdateCustomerServe(CustomerServe customerServe){
if(null == customerServe.getId()){
/** 服务添加操作
* 1.参数校验
* 客户名 非空
* 客户类型 非空
* 2.添加默认值
* state 设置状态值
* isValid createDate updateDate
* 3.执行添加 判断结果
*/
AssertUtil.isTrue(StringUtils.isBlank(customerServe.getCustomer()),"请指定客户!");
AssertUtil.isTrue(null ==customerMapper.queryCustomerByName(customerServe.getCustomer()),"当前客户暂不存在!");
AssertUtil.isTrue(StringUtils.isBlank(customerServe.getServeType()),"请指定服务类型!");
customerServe.setIsValid(1);
customerServe.setCreateDate(new Date());
customerServe.setUpdateDate(new Date());
customerServe.setState(CustomerServeStatus.CREATED.getState());
AssertUtil.isTrue(insertSelective(customerServe)<1,"服务记录添加失败!");
}else{
/**
* 分配 处理 反馈
*/
CustomerServe temp = selectByPrimaryKey(customerServe.getId());
AssertUtil.isTrue(null == temp,"待处理的服务记录不存在!");
if(customerServe.getState().equals(CustomerServeStatus.ASSIGNED.getState())){
// 服务分配
AssertUtil.isTrue(StringUtils.isBlank(customerServe.getAssigner())||
(null == userMapper.selectByPrimaryKey(Integer.parseInt(customerServe.getAssigner()))),"待分配用户不存在");
customerServe.setAssignTime(new Date());
customerServe.setUpdateDate(new Date());
AssertUtil.isTrue(updateByPrimaryKeySelective(customerServe)<1,"服务分配失败!");
} if(customerServe.getState().equals(CustomerServeStatus.PROCED.getState())){
// 服务处理
AssertUtil.isTrue(StringUtils.isBlank(customerServe.getServiceProce()),"请指定处理内容!");
customerServe.setServiceProceTime(new Date());
customerServe.setUpdateDate(new Date());
AssertUtil.isTrue(updateByPrimaryKeySelective(customerServe)<1,"服务处理失败!");
}if(customerServe.getState().equals(CustomerServeStatus.FEED_BACK.getState())){
// 服务处理
AssertUtil.isTrue(StringUtils.isBlank(customerServe.getServiceProceResult()),"请指定反馈内容!");
AssertUtil.isTrue(StringUtils.isBlank(customerServe.getMyd()),"请指定反馈满意度!");
customerServe.setUpdateDate(new Date());
customerServe.setState(CustomerServeStatus.ARCHIVED.getState());
AssertUtil.isTrue(updateByPrimaryKeySelective(customerServe)<1,"服务反馈失败!");
}
}
}
服务创建前端视图 & 核心代码
服务列表主页面视图 & 核心js
- customer_serve.ftl
views/customerServe 目录下新建customer_serve.ftl 模板文件。
服务创建
<#include "../common.ftl">
- customer.serve.js
js/customerServe 目录下新建customer.serve.js 文件,实现记录服务记录列表展示
layui.use(['table','layer',"form"],function(){
var layer = parent.layer === undefined ? layui.layer : top.layer,
$ = layui.jquery,
table = layui.table;
//服务列表展示
table.render({
elem: '#customerServeList',
url : ctx+'/customer_serve/list?state=fw_001',
cellMinWidth : 95,
page : true,
height : "full-125",
limits : [10,15,20,25],
limit : 10,
toolbar: "#toolbarDemo",
id : "customerServeListTable",
cols : [[
{type: "checkbox", fixed:"left", width:50},
{field: "id", title:'编号',fixed:"true", width:80},
{field: 'customer', title: '客户名', minWidth:50, align:"center"},
{field: 'dicValue', title: '服务类型', minWidth:100, align:'center'},
{field: 'overview', title: '概要信息', align:'center'},
{field: 'createPeople', title: '创建人', minWidth:100, align:'center'},
{field: 'createDate', title: '创建时间', align:'center',minWidth:150},
{field: 'updateDate', title: '更新时间', align:'center',minWidth:150},
]]
});
// 多条件搜索
$(".search_btn").on("click",function(){
table.reload("customerServeListTable",{
page: {
curr: 1 //重新从第 1 页开始
},
where: {
customer: $("input[name='customer']").val(), //客户名
type: $("#type").val() //服务类型
}
})
});
});
服务创建视图 & 核心js
这里添加服务创建点击事件,修改customer.serve.js
//头工具栏事件
table.on('toolbar(customerServes)', function(obj){
switch(obj.event){
case "add":
openAddCustomerServeDialog();
break;
};
});
// 打开服务创建页面
function openAddCustomerServeDialog(){
var url = ctx+"/customer_serve/addCustomerServePage";
layui.layer.open({
title : "服务管理-服务创建",
type : 2,
area:["700px","420px"],
maxmin:true,
content : url
});
}
- customer_serve_add.ftl
views/customerServe 目录下添加customer_serve_add.ftl 文件准备服务添加表单
<#include "../common.ftl">