Java实现河南软件客服系统 JAVA+Vue+SpringBoot+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 查询客户

@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 新增客户跟进情况

@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 查询客户历史

@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 新增服务派单

@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 新增客户服务费

@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. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/384431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习系列5-特征组合、简化正则化

1.特征组合 1.1特征组合&#xff1a;编码非线性规律 我们做出如下假设&#xff1a;蓝点代表生病的树。橙色的点代表健康的树。 您可以绘制一条直线将生病的树与健康的树清晰地分开吗&#xff1f;不可以。这是一个非线性问题。您绘制的任何线条都无法很好地预测树的健康状况…

1【算法】——最大子数组问题(maximum subarray)

一.问题描述 假如我们有一个数组&#xff0c;数组中的元素有正数和负数&#xff0c;如何在数组中找到一段连续的子数组&#xff0c;使得子数组各个元素之和最大。 二.问题分析 分治法求解&#xff1a; 初始状态&#xff1a; low0&#xff1b;highA.length-1&#xff1b;mid&am…

GO 的 Web 开发系列(五)—— 使用 Swagger 生成一份好看的接口文档

经过前面的文章&#xff0c;已经完成了 Web 系统基础功能的搭建&#xff0c;也实现了 API 接口、HTML 模板渲染等功能。接下来要做的就是使用 Swagger 工具&#xff0c;为这些 Api 接口生成一份好看的接口文档。 一、写注释 注释是 Swagger 的灵魂&#xff0c;Swagger 是通过…

leaflet 显示自己geoserver发布的中国地图

安装vscode 安装 通义灵码 问题&#xff1a; 用leaflet显示一个wms地图 修改下代码&#xff0c;结果如下&#xff1a; 例子代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&q…

【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门之常用属性

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

《统计学简易速速上手小册》第5章:回归分析(2024 最新版)

文章目录 5.1 线性回归基础5.1.1 基础知识5.1.2 主要案例&#xff1a;员工薪资预测5.1.3 拓展案例 1&#xff1a;广告支出与销售额关系5.1.4 拓展案例 2&#xff1a;房价与多个因素的关系 5.2 多元回归分析5.2.1 基础知识5.2.2 主要案例&#xff1a;企业收益与多因素关系分析5.…

【小沐学GIS】基于WebGL绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

最短路径算法

1. Dijkstra算法 在正数权重的有向图中求解某个源点到其余各个顶点的最短路径一般可以采用迪杰斯特拉算法&#xff08;Dijkstra算法&#xff09;。 1.1 适用场景 单源最短路径权重都为正 1.2 伪代码 1.3 示例 问题描述&#xff1a; 计算节点0到节点4的最短路径&#xff0c…

arduino uno R3驱动直流减速电机(蓝牙控制)

此篇博客用于记录使用arduino驱动直流减速电机的过程&#xff0c;仅实现简单的功能&#xff1a;PID调速、蓝牙控制 1、直流减速电机简介2、DRV8833电机驱动模块简介3、HC-05蓝牙模块简介电机转动测试4、PID控制5、蓝牙控制电机 1、直流减速电机简介 我在淘宝购买的电机&#x…

C语言整型数据类型..

1.整型数据类型 在C语言中 根据数据范围从小到大依次为char、short、int、long、long long 但是对于整型来说 为什么有这么多类型呢 我们得先说字节的本质&#xff1a; 计算机是通过晶体管的开关状态来记录数据 晶体管通常8个为一组 称为一个字节 而晶体管由两种状态 分别是开…

交叉熵损失函数(Cross-Entropy Loss)的基本概念与程序代码

交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;是机器学习和深度学习中常用的损失函数之一&#xff0c;用于分类问题。其基本概念如下&#xff1a; 1. 基本解释&#xff1a; 交叉熵损失函数衡量了模型预测的概率分布与真实概率分布之间的差异。在分类问题中&…

春节假期:思考新一年的发展思路

春节假期是人们放松身心、享受家庭团聚的时刻&#xff0c;但除了走亲戚、玩、吃之外&#xff0c;我们确实也需要思考新的一年的发展思路。以下是一些建议&#xff0c;帮助您在春节假期中为新的一年做好准备&#xff1a; 回顾过去&#xff0c;总结经验&#xff1a;在春节期间&a…

大华智慧园区综合管理平台/emap/devicePoint RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

【十六】【C++】stack的常见用法和练习

stack的常见用法 C标准库中的stack是一种容器适配器&#xff0c;它提供了后进先出&#xff08;Last In First Out, LIFO&#xff09;的数据结构。stack使用一个底层容器进行封装&#xff0c;如deque、vector或list&#xff0c;但只允许从一端&#xff08;顶部&#xff09;进行…

一周学会Django5 Python Web开发-Django5操作命令

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计11条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

第8讲个人中心页面搭建实现

个人中心页面搭建实现 <template><view class"user_center"><!-- 用户信息开始 --><view class"user_info_wrap"><!--获取头像--><button class"user_image"></button> <view class"user_n…

14.盔甲?装甲?装饰者模式!

人类的军工发展史就是一场矛与盾的追逐&#xff0c;矛利则盾坚&#xff0c;盾愈坚则矛愈利。在传统的冶金工艺下&#xff0c;更坚固的盾牌和盔甲往往意味着更迟缓笨重的运动能力和更高昂的移动成本。从战国末期的魏武卒、秦锐士&#xff0c;到两宋之交的铁浮图、重步兵&#xf…

Roop的安装教程

roop插件的安装&#xff0c;并不容易 并且最好就是在电脑本地完成&#xff0c;因为涉及到C、visual studio软件&#xff0c;并且还需要在电脑本地放置一些模型&#xff0c;用autoDL其实也有镜像&#xff0c;但是需要数据扩容至少100G&#xff0c;烧钱。。。 电脑本地&#xff0…

javaweb物业管理系统jsp项目

文章目录 物业管理系统一、系统演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 物业管理系统 可用作javaweb项目、servlet项目、jsp项目的项目设计 一、系统演示 物业管理系统 二、项目介绍 语言&a…

ChatGPT高效提问—prompt常见用法(续篇)

ChatGPT高效提问—prompt常见用法&#xff08;续篇&#xff09; ​ 对话式prompt适用于模拟各种交流情境。若我们意图探索在特殊场合下可能出现的对话情景&#xff0c;或者模拟一段对话流程&#xff0c;可以采用这种方法&#xff0c;通过精准的prompt指令&#xff0c;引导Chat…