【开源】基于JAVA的河南软件客服系统

news/2024/7/10 20:29:33 标签: java, vue.js, 开发语言, 开源, 前端, spring boot, mysql

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 系统管理人员
    • 2.2 业务操作人员
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询客户
    • 4.2 新增客户跟进情况
    • 4.3 查询客户历史
    • 4.4 新增服务派单
    • 4.5 新增客户服务费
  • 五、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的河南软件客服系统,包含了客户信息维护模块、客户跟进记录模块、客户服务费模块、售后服务单模块、客服统计分析模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,河南软件客服系统基于角色的访问控制,给客服主管、普通客服使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

2.1 系统管理人员

包括系统维护,基础资料维护、统计分析/报表导出、系统登录、企业资源导入等功能;主要体现在系统的运行保障上面;数据统计导出相关报表,可让领导即时了解客户跟进情况,提取有用的信息转化成商机(销售软件、升级、加站等)﹐直接或者间接提升公司效益。

  1. 系统维护:用户管理(系统管理员、客服入员、资源分派员、技术服务等;包含基本信息、所属部门、角色、联系方式等)﹐数据字典维护,系统日志审计等。
  2. 基础资料维护:客户资料维护(包含企业名称、详细地址、企业社会信用码、注册日期、区域、法人、法人电话、财务、财务电话、出纳、出纳电话、所属行业、运营状态、跟进状态等))、部门、角色等。客户资料可手工录入亦可使用 Excel 根据制定的模板批量导入(通过一些渠道获取的大批量企业信息);
  3. 统计分析/报表导出:生成跟进汇总统计报表,可按日期时间段、客服人员、跟进进度等进行统计,可统计服务费收取情况、服务费到期情况、技术服务派单情况、商机转化情况,可导出Excel、PDF文件留档;
  4. 系统登录:系统管理员和业务员登录认证功能:根据登录用户的角色不同,所拥有的权限不同,显示不同的页面内容。
  5. 客户资源分派维护:客户资料可依据多种条件进行筛选(基本资料各个字段皆可作为条件任意组合进行正向或反向筛选,还需要根据分派情况正向或反向筛选),然后给客服人员进行分派;跟进不理想的资源可收回重新分派。
  6. 服务费审核:生成服务费流水账表,由财务人员进行对账审核;审核过之后才能计入对应客服的业绩。

2.2 业务操作人员

主要包括客户信息维护、服务费收取、客户跟进维护、售后服务、服务派单、客户评价等;成交客户反馈问题后,由客服人员录入系统,客服经理收到信息提示,然后进行服务派单,完成后由技术人员录入解决情况汇总到该客户档案中;资源池中客户被分派给跟进人进行电话跟进,根据情况转化成商机。

  1. 客户信息维护:客服人员收集到一些客户信息录入系统,有些信息可能有误或者企业信息变更,在跟进过程中可以进行修改调整,修改过程历史记录保留,可进行回查复核。添加企业联系人和电话,定期计算联系电话任职于几个企业,可查询相关联的企业信息。
  2. 客户跟进维护:客服人员定期主动电话联系客户,沟通信息化需求或者使用过程中的问题,记录跟进情况和维护跟进进度(跟进进度:启新老客户、已用金蝶、已用用友、已用其他软件、意向客户、长期跟进、暂无需求、其他)。历史记录保留可查,每次跟进人、跟进情况、跟进时间等。
  3. 服务费收取:成交客户可查看成交记录和服务费收取记录,以及服务费到期时间,服务费即将到期的客户要有消息提醒和一键查询功能,服务费逾期客户红色标注,收取服务费后录入系统,提示后台进行服务费审核对账。
  4. 售后服务:客服接到成交客户的咨询或者问题反馈后可快速查询定位到客户,调出客户档案和跟进历史记录,将客户多描述情况汇总录入系统,提交给客服经理,客户经理收到问题反馈,初步评估之后分派给技术服务人员跟进解决(亦可客服经理亲自解决),技术人员解决后将解决情况录入系统,该问题关闭。
  5. 回访评价:客户的问题解决后,由客服人员进行回访,根据客户反馈的情况对技术人员的服务态度、技术能力、回应速度等进行客观评价(很满意、满意、一般、有待改善)。

三、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、核心代码

4.1 查询客户

java">@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询客户")
public Result<IPage<Customer>> getByPage(@ModelAttribute Customer customer ,@ModelAttribute PageVo page){
    QueryWrapper<Customer> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(customer.getCompanyName())) {
        qw.like("company_name",customer.getCompanyName());
    }
    if(!ZwzNullUtils.isNull(customer.getTrade())) {
        qw.like("trade",customer.getTrade());
    }
    if(!ZwzNullUtils.isNull(customer.getStatus2())) {
        qw.eq("status2",customer.getStatus2());
    }
    if(!ZwzNullUtils.isNull(customer.getMobile1())) {
        qw.and(wrapper -> wrapper.eq("mobile1", customer.getMobile1()).or().eq("mobile1",customer.getMobile1()).or().eq("mobile3",customer.getMobile1()));
    }
    IPage<Customer> data = iCustomerService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Customer>>().setData(data);
}

4.2 新增客户跟进情况

java">@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增单条客户跟进")
public Result<Object> addOne(@RequestParam String id,@RequestParam String level,@RequestParam String content){
    Customer customer = iCustomerService.getById(id);
    if(customer == null) {
        return ResultUtil.error("客户不存在");
    }
    CustomerItem customerItem = new CustomerItem();
    customerItem.setCustomerId(customer.getId());
    customerItem.setCustomerName(customer.getCompanyName());
    customerItem.setLevel(level);
    customerItem.setContent(content);
    User currUser = securityUtil.getCurrUser();
    customerItem.setUserId(currUser.getId());
    customerItem.setUserName(currUser.getNickname());
    customerItem.setTime(DateUtil.now());
    iCustomerItemService.saveOrUpdate(customerItem);
    return ResultUtil.success();
}

4.3 查询客户历史

java">@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询客户历史")
public Result<IPage<CustomerHistory>> getByPage(@ModelAttribute CustomerHistory customerHistory ,@ModelAttribute PageVo page){
    QueryWrapper<CustomerHistory> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(customerHistory.getCompanyName())) {
        qw.like("company_name",customerHistory.getCompanyName());
    }
    IPage<CustomerHistory> data = iCustomerHistoryService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<CustomerHistory>>().setData(data);
}

4.4 新增服务派单

java">@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增单条服务派单")
public Result<Object> addOne(@RequestParam String id,@RequestParam String content){
    Customer customer = iCustomerService.getById(id);
    if(customer == null) {
        return ResultUtil.error("客户不存在");
    }
    ServiceOrder serviceOrder = new ServiceOrder();
    serviceOrder.setCustomerId(customer.getId());
    serviceOrder.setCustomerName(customer.getCompanyName());
    serviceOrder.setContent(content);
    User currUser = securityUtil.getCurrUser();
    serviceOrder.setStatus("未派单");
    serviceOrder.setUserId(currUser.getId());
    serviceOrder.setUserName(currUser.getNickname());
    serviceOrder.setWorkId("");
    serviceOrder.setWorkName("");
    serviceOrder.setReplyContent("");
    serviceOrder.setAppraiseLevel("");
    serviceOrder.setAppraiseContent("");
    iServiceOrderService.saveOrUpdate(serviceOrder);
    return ResultUtil.success();
}

4.5 新增客户服务费

java">@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增客户服务费")
public Result<Object> addOne(@RequestParam String id,@RequestParam String startDate,@RequestParam String endDate,
                                    @RequestParam BigDecimal price){
    Customer customer = iCustomerService.getById(id);
    if(customer == null) {
        return ResultUtil.error("客户不存在");
    }
    User currUser = securityUtil.getCurrUser();
    ServicePrice servicePrice = new ServicePrice();
    servicePrice.setCustomerId(customer.getId());
    servicePrice.setCustomerName(customer.getCompanyName());
    servicePrice.setStartDate(startDate);
    servicePrice.setEndDate(endDate);
    servicePrice.setPrice(price);
    servicePrice.setStatus("未审核");
    servicePrice.setUserId(currUser.getId());
    servicePrice.setUserName(currUser.getNickname());
    servicePrice.setTime(DateUtil.now());
    iServicePriceService.saveOrUpdate(servicePrice);
    return ResultUtil.success();
}

五、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述


http://www.niftyadmin.cn/n/5335275.html

相关文章

Redis 存在线程安全问题吗?为什么?

一个工作了 5 年的粉丝私信我。 他说自己准备了半年时间&#xff0c;想如蚂蚁金服&#xff0c;结果第一面就挂了&#xff0c;非常难过。 问题是&#xff1a; “Redis 存在线程安全问题吗&#xff1f;” 一、问题解析 关于这个问题&#xff0c;我从两个方面来回答。 第一个&a…

编程框架概述:MVC, MVP, MVVM, Flux/Redux, 和 Clean Architecture

前言 在软件开发中&#xff0c;选择合适的编程框架和架构模式对于构建可维护和可扩展的应用程序至关重要。初学者在面对多种架构选项时可能会感到困惑。本文将详细介绍五种流行的编程框架&#xff1a;MVC、MVP、MVVM、Flux/Redux和Clean Architecture。 MVC&#xff08;Model-V…

c++:基于c语言基础上的语法不同(1)

前言&#xff1a;此篇文章适合学完c语言基础概念的同学&#xff0c;是帮助c向c语言的同学快速掌握基本语法。 基础格式 #include<iostream>using namespace std; int main() {system("pause");return 0; } 输入&#xff1a; cin>>a;//a是输入内容 输出…

SD-WAN企业组网:实现高效、安全的跨国企业连接

在当今数字化时代&#xff0c;企业日益全球化&#xff0c;跨国办公成为常态。为了应对这一挑战&#xff0c;越来越多的企业选择采用先进的网络技术&#xff0c;其中SD-WAN&#xff08;软件定义广域网&#xff09;便是一种备受青睐的解决方案。 什么是SD-WAN企业组网&#xff1…

Spring重要知识点

一、Spring中相关概念 1.IOC 控制反转 IoC&#xff08;Inverse of Control:控制反转&#xff09;是⼀种设计思想&#xff0c;就是将原本在程序中⼿动创建对象的控制权&#xff0c;交由Spring框架来管理。IoC 在其他语⾔中也有应⽤&#xff0c;并⾮ Spring 所独有。 IoC 容器…

什么?2024年AMC8正式比赛提前20多分钟强制交卷?后续如何处理?

今天&#xff08;2024年1月19日&#xff09;17:00-17:40是2024年AMC8美国数学思维活动&#xff08;竞赛&#xff09;正式比赛的时间&#xff0c;全国报名参加AMC8比赛的孩子们按要求提前架设好了设备&#xff0c;准时按要求登录考试系统&#xff0c;17点准时开考。原计划是要考…

STM32新建工程详细教程

链接: https://pan.baidu.com/s/1JtjKg_jeo7U2irD4hLd_bg?pwd45cw 提取码: 45cw STM32的开发方式 目前stm32的开发方式主要有基于寄存器的方式、基于标准库的方式&#xff08;库函数的方式&#xff09;、基于HAL库的方式。 基于库函数的方式是使用ST官方提供的封装好的函数…

使用Python的pygame库实现下雪的效果

使用Python的pygame库实现下雪的效果 关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 先给出效果图&#xff1a; 源码如下&#xff1a; import pygame import random# 初始化pygame pygame.init()# 设置屏幕尺寸 width…