提供:项目源码、项目文档、数据库脚本、软件工具等所有资料
从零开始手把手教学部署运行本系统
该项目附带的源码资料可作为毕设使用
提供技术答疑和远程协助指导,帮助调试并解决后期项目运行问题,
文章底部获取博主联系方式
基于Java的客户关系管理系统开发与设计(附源码论文资料)-从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料-资料共享下
文章目录
1.绪论1.1.客户关系管理系统的开发背景1.2.设计目的与意义 2.系统需求分析2.1 可行性分析2.1.1 操作可行性2.1.2 经济可行性2.1.3 技术可行性 2.2方案的设计与比较2.2.1 C/S设计结构和B/S设计结构比较2.2.2 系统模式的设计2.2.3 系统设计的技术选择2.2.4系统的运行环境 2.3 系统基本功能需求2.3.1 系统结构2.3.2 系统业务流程图 2.4 数据库需求分析2.5 系统目标 3.系统概要设计3.1.总体设计3.1.1 处理流程3.1.2 系统的数据流图 3.2 系统结构图3.3 数据库设计3.4 逻辑结构设计3.5 数据库表的设计 4.系统的详细设计与实现4.1 用户登录功能实现4.1.1 登录功能实现 4.2 营销管理功能实现4.2.1 营销机会管理功能实现4.2.2 客户开发计划功能实现 4.3 客户管理实现4.3.1 客户信息管理实现4.3.2 客户流失管理功能实现 4.4 客户服务管理实现4.4.1 服务创建实现4.4.2 服务分配实现4.4.3 服务处理实现4.4.4 服务反馈实现4.4.5 服务归档实现4.4.6 客户服务关键代码实现 4.5 统计报表功能实现4.5.1 客户贡献分析实现4.5.2 客户构成分析实现4.5.3 客户服务分析实现4.5.4 客户流失分析实现 4.6 基础数据管理实现4.6.1 数据字典管理4.6.2 产品信息查询4.6.3 用户信息管理 4.7 系统管理4.7.1 修改密码4.7.2 安全退出 5.结论6.参考文献7.源码获取1.绪论
1.1.客户关系管理系统的开发背景
本系统是为了更好的让企业管理客户信息而设计的。由于企业的客户信息繁多,包含的信息量大且复杂,有必要建立一个客户关系管理系统,使客户信息管理工作规范化,系统化,程序化,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改客户相关信息,以及分析客户信息,最大限度的提高企业效益。
1.2.设计目的与意义
本系统可以能减少很多不必要的资源,不用像以前那样用冗余的纸张式的管理。大节省了企业能源。并且计算机的存储与快速查询功能大大提高了企业客户信息管理的效率,并且还提高了企业客户信息管理的精确度。 方便快速的操作,可减少客户信息管理的漏洞,又减少因工作的冗余出现的错误,并且操作非常简单,可减少许多不很必要的人员,这无论从物质上还是工作人员的工资上都为企业节约了开支。为企业增加了财富。
2.系统需求分析
2.1 可行性分析
2.1.1 操作可行性
本系统的开发是在四个月的时间内完成的。前期主要是以学习以及收集资料为主,接下来就是对系统的分析,设计数据库,界面,以及中间的连接。对于计算机专业作为毕业设计来说是可行的。
2.1.2 经济可行性
经济可行性主要是对项目的经济效益进行评价。目前具备了运行网络平台的MIS的硬件基础,而且本系统是我组成员自行开发,免费帮助设计并实施的。因此开发、设计这套系统的支出费用是学校可以承担的,即经济上是可行的。
2.1.3 技术可行性
技术上的可行性要考虑将来采用的硬件和软件技术能否满足用户提出的要求。基于当前的计算机网络技术和数据技术已成熟,而且管理信息系统(MIS)的各种开发技术也已经相当成熟,并且在各个领域都不乏成熟的案例。所以开发一套网络平台的多用户共享信息的学生信息系统在技术上是可行的。
2.2方案的设计与比较
2.2.1 C/S设计结构和B/S设计结构比较
目前网络应用软件运行的模式主要有两类:Client/Server模式,Browser/Server模式。前者的主要的缺点是维护、升级较为麻烦。且要同时开发服务器端和客户端;后者是近几年伴随Internet迅速发展起来的一种技术,B/S模式客户端是一个标准的浏览器,服务器端是web server,而Web server与数据库和应用服务器的紧密结合,使得这种模式的应用范围不断扩大,它已不仅仅用于网上查询,有很多企业部门的业务系统,企业的MIS系统纷纷采用这种模式,它的优点是便于扩展应用、升级维护简便、不需要开发专门的客户端、不需要对用户进行特殊的设置和软件安装,降低了维护成本,客户端只要有浏览器就可以了。
2.2.2 系统模式的设计
本系统的设计是只有一种用户,就是系统管理员
2.2.3 系统设计的技术选择
处于安全性,功能可扩展性。我们采用javaee。
数据库使用开源的Mysql;
服务器采用Tomcat;
2.2.4系统的运行环境
(1).系统:Windows XP及其以上版本
(2).Web服务器:Tomcat7及其以上版本
(3).数据库服务器:Mysql5
(4).浏览器:IE7,8,9、火狐、Chrome
2.3 系统基本功能需求
系统中涉及系统管理员一种权限;接下来针对这种权限说明下功能结构;
2.3.1 系统结构
主要功能有:
系统管理员:营销管理,客户管理,服务管理,报表管理,基础数据管理,系统管理;
2.3.2 系统业务流程图
系统管理员:
2.4 数据库需求分析
根据上面业务流程图所涉及到的内容,数据库要设计的表有:用户表,产品表,数据字典表,客户表,销售计划表,客户联系人细表,客户交互记录细表,客户流失表,客户产品订购表,客户产品订购详细表,客户流失暂缓细表,客户服务表
2.5 系统目标
本选题系统的设计主要将实现以下目标:
(1).人性化设计:系统界面友好,操作简单;
(2).实现对管理员的功能操作;
3.系统概要设计
3.1.总体设计
3.1.1 处理流程
一,用户
(1).打开系统,进入系统登录界面,
(2).通过验证后,进入系统管理主界面
(3).用户操作,执行相应的功能,
(4).退出系统。
3.1.2 系统的数据流图
3.2 系统结构图
针对本系统的需求,设计出如下面所示的数据项和数据结构:
用户表:编号,用户名,密码,真实姓名,邮箱,联系电话,角色名称;数据字典表:编号,数据字典名称,数据字典值;产品表:编号,产品名称,型号,单位,价格,库存,备注;客户表:编号,客户编号,客户名称,客户地区,客户经理,客户满意度,客户信用度,客户地址,邮政编码,联系电话,传真,网址,营业执照注册号,法人,注册资金,年营业额,开户银行,开户帐号,地税登记号,国税登记号,客户状态(正常,流失);客户流失表:编号,客户编号,客户名称,客户经理,上次下单日期,确认流失日期,状态(暂缓流失,确认流失),流失原因;客户暂缓表:编号,流失客户,暂缓措施;销售机会表:编号,机会来源,客户名称,成功几率,概要,联系人,联系电话,机会描述,创建人,创建时间,指派人,指派时间;客户开发计划表:编号,销售机会,计划项,计划时间,效果;客户服务表:编号,服务类型,概要,客户,状态,服务请求,创建人,创建日期,分配人,分配日期,服务处理,服务处理人,服务处理日期,客户满意度;客户交往记录细表:编号,客户名称,交往时间,地址,概要;客户联系人细表:编号,客户名称,联系人名称,性别,职位,办公室电话,手机;客户历史订单细表:编号,客户名称,订单号,订购日期,送货地址,状态;商品订购详情表:编号,订单号,商品名称,订购数量,单位,单价,数量;
3.3 数据库设计
(1).用户信息E-R图
(2). 数据字典信息E-R图
(3). 产品信息E-R图
(4). 客户信息E-R图
(5). 客户流失信息E-R图
(6). 客户暂缓信息E-R图
(7). 销售机会信息E-R图
(8). 客户开发计划信息E-R图
(9). 客服服务信息E-R图
(10). 客户交往记录信息E-R图
(11). 客户联系人信息E-R图
(12). 客户历史订单信息E-R图
(13). 商品订购详情信息E-R图
(14).实体之间的关系图
3.4 逻辑结构设计
1,客户联系方式和客户是多对一关系;
2,客户历史订单和客户是多对一关系;
3,客户联系人和客户是多对一关系;
4,客户开发计划和销售机会是多对一关系;
5,商品订购详情和客户历史订单是多对一关系;
6,客户暂缓和客户流失是多对一关系;
3.5 数据库表的设计
(1). 用户信息表
(2). 数据字典表
(3). 产品表
(4). 客户表
(5). 客户流失表
(6). 客户暂缓表
(7). 销售机会表
(8). 客户开发计划表
(9). 客户服务表
(10). 客户交往记录细表
(11). 客户联系人细表
(12). 客户历史订单细表
(13). 商品订购详情表
4.系统的详细设计与实现
4.1 用户登录功能实现
4.1.1 登录功能实现
请求http://localhost:8080/CRM/ 地址: 效果图:
相关说明:
用户进入登录界面,输入用户名,密码,选择用户类型,然后点击“登录”按钮,后台验证成功,则进入主界面,否则,提示错误信息;
用户登录成功,进入用户主界面;
关键代码实现:
/*** 用户登录* @param user* @param request* @return* @throws Exception*/@RequestMapping("/login")public String login(User user,HttpServletRequest request)throws Exception{User resultUser=userService.login(user);if(resultUser==null){request.setAttribute("user", user);request.setAttribute("errorMsg", "用户名或密码错误!");return "login";}else{HttpSession session=request.getSession();session.setAttribute("currentUser", resultUser);return "redirect:/main.jsp";}}
4.2 营销管理功能实现
4.2.1 营销机会管理功能实现
导航菜单,选择营销管理,点击营销机会管理菜单,效果如下:
这里显示了营销机会列表,可以通过“客户名称”,“概要”,“创建人”,分配状态(已分配,未分配)来查询数据。工具栏可以创建,修改,删除销售机会;
我们点击“创建”,效果如图:
我们填写销售机会信息,然后点击保存,即可完成销售机会的保存;
我们选择一行数据,然后点击修改,效果如图:
我们可以进行数据的修改,然后点击保存,即可完成销售机会的修改;
我们选择一条或者多条要删除的数据,然后点击“删除”按钮,效果如图:
我们点击“确定”,即可删除数据;
关键代码实现:
分页显示数据:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,SaleChance s_saleChance,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("customerName", StringUtil.formatLike(s_saleChance.getCustomerName()));map.put("overView", StringUtil.formatLike(s_saleChance.getOverView()));map.put("createMan", StringUtil.formatLike(s_saleChance.getCreateMan()));map.put("state", s_saleChance.getState());map.put("devResult", s_saleChance.getDevResult());map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<SaleChance> saleChanceList=saleChanceService.find(map);Long total=saleChanceService.getTotal(map);JSONObject result=new JSONObject();JsonConfig jsonConfig=new JsonConfig();jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm"));JSONArray jsonArray=JSONArray.fromObject(saleChanceList,jsonConfig);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
添加或者修改数据:
@RequestMapping("/save")public String save(SaleChance saleChance,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(StringUtil.isNotEmpty(saleChance.getAssignMan())){saleChance.setState(1);}else{saleChance.setState(0); // 默认未分配状态}if(saleChance.getId()==null){saleChance.setDevResult(0); // 添加的时候,默认是未开发状态resultTotal=saleChanceService.add(saleChance);}else{resultTotal=saleChanceService.update(saleChance);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
删除数据:
@RequestMapping("/delete")public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{String []idsStr=ids.split(",");for(int i=0;i<idsStr.length;i++){saleChanceService.delete(Integer.parseInt(idsStr[i]));}JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}
4.2.2 客户开发计划功能实现
导航菜单,选择营销管理,点击客户开发计划菜单,效果如下:
这里的话,主要显示了所有客户开发计划信息,可以通过 “客户名称”,“概要”,“客户开发状态”查询数据;还有一个操作列,假如是新的开发计划,可以点击 开发,效果如下:
上方显示的是销售机会信息,下方的话,就是开发计划项,主要是一些具体的执行情况;
可以通过“添加计划”,“删除计划”,“保存计划”等操作来实现;
这里,假如我们开户开发成功,点击“开发成功”,假如开发失败,就点击“终止开发”;
假如客户开发计划已经完成(成功或者失败),操作列会显示“查看详细信息”,我们点下,
仅仅是看下开发的过程信息,不带操作;
关键代码实现:
分页查询开发计划项数据:
@RequestMapping("/list")public String list(@RequestParam(value="saleChanceId",required=false)String saleChanceId,HttpServletResponse response)throws Exception{Map<String,Object> map=new HashMap<String,Object>();map.put("saleChanceId", saleChanceId);List<CusDevPlan> cusDevPlanList=cusDevPlanService.find(map);JSONObject result=new JSONObject();JsonConfig jsonConfig=new JsonConfig();jsonConfig.setExcludes(new String[]{"saleChance"});jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONArray jsonArray=JSONArray.fromObject(cusDevPlanList,jsonConfig);result.put("rows", jsonArray);ResponseUtil.write(response, result);return null;}
添加或者修改开发计划项:
@RequestMapping("/save")public String save(CusDevPlan cusDevPlan,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(cusDevPlan.getId()==null){SaleChance saleChance=new SaleChance();saleChance.setId(cusDevPlan.getSaleChance().getId());saleChance.setDevResult(1); // 状态修改成"开发中"saleChanceService.update(saleChance);resultTotal=cusDevPlanService.add(cusDevPlan);}else{resultTotal=cusDevPlanService.update(cusDevPlan);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;
删除开发计划项:
@RequestMapping("/delete")public String delete(@RequestParam(value="id")String id,HttpServletResponse response)throws Exception{cusDevPlanService.delete(Integer.parseInt(id));JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}
修改开发计划状态:
@RequestMapping("/updateSaleChanceDevResult")public String updateSaleChanceDevResult(@RequestParam(value="id")String id,@RequestParam(value="devResult")String devResult,HttpServletResponse response)throws Exception{SaleChance saleChance=new SaleChance();saleChance.setId(Integer.parseInt(id));saleChance.setDevResult(Integer.parseInt(devResult));int resultTotal=saleChanceService.update(saleChance);JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
4.3 客户管理实现
4.3.1 客户信息管理实现
导航菜单,选择客户管理,点击客户信息管理菜单,效果如下:
这里的话,主要显示了所有客户信息,可以通过 “客户编号”,“客户名称”查询数据;工具栏可以创建,修改,删除,联系人管理,交往记录管理,历史订单查看功能。
点击创建,效果如图:
填写好客户信息,点击保存即可;
我选择一条要修改的记录,然后点击修改,效果如下:
修改数据后,点击保存按钮,即可实现客户信息的修改;
我们选择需要删除的数据,然后点击“删除”按钮,效果如下图:
我们选择“确定”,即可完整数据的删除;
我们选择需要维护联系人的客户,然后点击“联系人管理”按钮,效果如下:
这里的话,会显示客户的基本信息,比如“客户编号”,“客户名称”。
联系人管理里面,我们可以编辑信息;可以添加,可以修改,可以删除;
和上面类似,我们选择需要维护交往记录的客户,然后点击“交往记录管理”按钮,效果如下:
这里的话,会显示客户的基本信息,比如“客户编号”,“客户名称”。
交往记录管理里面,我们可以编辑信息;可以添加,可以修改,可以删除;
和上面类似,我们选择需要维护历史订单的客户,然后点击“历史订单查看”按钮,效果如下:
这里的话,会显示客户的基本信息,比如“客户编号”,“客户名称”。
历史订单里面,可以看到“订单号”,“订购日期”,“送货地址”,“状态”;
我们可以点击“查看订单明细”,效果如下:
这里的话,先显示出订单的详细信息,包括详细的商品订购清单;
关键代码实现:
查询客户信息:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,Customer s_customer,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("khno", StringUtil.formatLike(s_customer.getKhno()));map.put("name", StringUtil.formatLike(s_customer.getName()));map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<Customer> customerList=customerService.find(map);Long total=customerService.getTotal(map);JSONObject result=new JSONObject();JSONArray jsonArray=JSONArray.fromObject(customerList);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
添加或者修改客户信息:
@RequestMapping("/save")public String save(Customer customer,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(customer.getId()==null){customer.setKhno("KH"+DateUtil.getCurrentDateStr()); // 动态生成客户编号resultTotal=customerService.add(customer);}else{resultTotal=customerService.update(customer);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}
删除客户信息:
@RequestMapping("/delete")public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{String []idsStr=ids.split(",");for(int i=0;i<idsStr.length;i++){customerService.delete(Integer.parseInt(idsStr[i]));}
联系人管理:
@RequestMapping("/list")public String list(@RequestParam(value="cusId",required=false)String cusId,HttpServletResponse response)throws Exception{Map<String,Object> map=new HashMap<String,Object>();map.put("cusId", cusId);List<LinkMan> linkManList=linkManService.find(map);JSONObject result=new JSONObject();JsonConfig jsonConfig=new JsonConfig();jsonConfig.setExcludes(new String[]{"customer"});JSONArray jsonArray=JSONArray.fromObject(linkManList,jsonConfig);result.put("rows", jsonArray);ResponseUtil.write(response, result);return null;}@RequestMapping("/delete")public String delete(@RequestParam(value="id")String id,HttpServletResponse response)throws Exception{linkManService.delete(Integer.parseInt(id));JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}
@RequestMapping("/save")public String save(LinkMan linkMan,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(linkMan.getId()==null){resultTotal=linkManService.add(linkMan);}else{resultTotal=linkManService.update(linkMan);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{
交往记录管理:
@RequestMapping("/list")public String list(@RequestParam(value="cusId",required=false)String cusId,HttpServletResponse response)throws Exception{Map<String,Object> map=new HashMap<String,Object>();map.put("cusId", cusId);List<Contact> contactList=contactService.find(map);JSONObject result=new JSONObject();JsonConfig jsonConfig=new JsonConfig();jsonConfig.setExcludes(new String[]{"customer"});jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONArray jsonArray=JSONArray.fromObject(contactList,jsonConfig);result.put("rows", jsonArray);ResponseUtil.write(response, result);return null;}
@RequestMapping("/save")public String save(Contact contact,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(contact.getId()==null){resultTotal=contactService.add(contact);}else{resultTotal=contactService.update(contact);}
历史订单:
@RequestMapping("/findById")public String findById(@RequestParam(value="id")String id,HttpServletResponse response)throws Exception{Order order=orderService.findById(Integer.parseInt(id));JsonConfig jsonConfig=new JsonConfig();jsonConfig.setExcludes(new String[]{"order"});jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONObject jsonObject=JSONObject.fromObject(order,jsonConfig);ResponseUtil.write(response, jsonObject);return null;}
4.3.2 客户流失管理功能实现
导航菜单,选择客户管理,点击客户流失管理菜单,效果如下:
说明:显示出客户流失信息,“客户名称”,“客户经理”,“上次下单时间”,“确认流失日期”,“客户状态”,“流失原因”,操作;假如客户确认已经流失,则显示“客户确认流失”,假如还没有流失流失,则显示“暂缓流失”,用户点击“暂缓流失”,显示:
弹出“客户流失暂缓措施管理”,界面显示客户流失基本信息,下方的话,可以编辑一些暂缓措施;
关键代码实现:
查询客户流失信息:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,CustomerLoss s_customerLoss,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("cusName", StringUtil.formatLike(s_customerLoss.getCusName()));map.put("cusManager", StringUtil.formatLike(s_customerLoss.getCusManager()));map.put("state", s_customerLoss.getState());map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<CustomerLoss> customerLossList=customerLossService.find(map);JsonConfig jsonConfig=new JsonConfig();jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONObject result=new JSONObject();Long total=customerLossService.getTotal(map);JSONArray jsonArray=JSONArray.fromObject(customerLossList,jsonConfig);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
查询某一个具体流失详细信息:
@RequestMapping("/findById")public String findById(@RequestParam(value="id")String id,HttpServletResponse response)throws Exception{CustomerLoss customerLoss=customerLossService.findById(Integer.parseInt(id));JsonConfig jsonConfig=new JsonConfig();jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONObject jsonObject=JSONObject.fromObject(customerLoss,jsonConfig);ResponseUtil.write(response, jsonObject);return null;}
查询暂缓措施:
@RequestMapping("/list")public String list(@RequestParam(value="lossId",required=false)String lossId,HttpServletResponse response)throws Exception{Map<String,Object> map=new HashMap<String,Object>();map.put("lossId", lossId);List<CustomerReprieve> customerReprieveList=customerReprieveService.find(map);JSONObject result=new JSONObject();JsonConfig jsonConfig=new JsonConfig();jsonConfig.setExcludes(new String[]{"customerLoss"});JSONArray jsonArray=JSONArray.fromObject(customerReprieveList,jsonConfig);result.put("rows", jsonArray);ResponseUtil.write(response, result);return null;}
修改暂缓措施:
@RequestMapping("/save")public String save(CustomerReprieve customerReprieve,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(customerReprieve.getId()==null){resultTotal=customerReprieveService.add(customerReprieve);}else{resultTotal=customerReprieveService.update(customerReprieve);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
删除暂缓措施:
@RequestMapping("/delete")public String delete(@RequestParam(value="id")String id,HttpServletResponse response)throws Exception{customerReprieveService.delete(Integer.parseInt(id));JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}
4.4 客户服务管理实现
4.4.1 服务创建实现
导航菜单,选择客户服务管理,点击服务创建菜单,效果如下:
我们可以输出必要创建服务的表单数据,然后点击“保存”,即可提交数据;
4.4.2 服务分配实现
导航菜单,选择客户服务管理,点击服务分配菜单,效果如下:
可以看到,会显示出所有未分配的服务信息,我们选择需要分配的服务,然后点击“分配按钮”,效果如下:
我们选择下 分配人,然后点击“保存”按钮,即可完成服务的分配;
4.4.3 服务处理实现
导航菜单,选择客户服务管理,点击服务处理菜单,效果如下:
我们会看到显示了所有的未处理的服务,我们选择需要处理的服务,然后点击“处理”按钮,
效果如下:
我们填写下 服务处理内容 然后点击“保存”按钮,即可完成服务处理;
4.4.4 服务反馈实现
导航菜单,选择客户服务管理,点击服务反馈菜单,效果如下:
我们看到所有已经处理的服务内容,我们选择需要查看的客户服务反馈记录,然后点击“客户服务反馈”按钮,如下:
我们填写下 处理结果,然后点击“保存”按钮,即可完成服务反馈;
4.4.5 服务归档实现
导航菜单,选择客户服务管理,点击服务归档菜单,效果如下:
我们看到这里显示了所有已经完成的客户服务信息,我们可以通过“客户名称”,“概要”,“服务类型”,“创建日期”来查询客户服务信息;我们选择需要查看的数据,然后点击“查看客户服务详情”按钮,效果如下:
4.4.6 客户服务关键代码实现
展示数据:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,String createTimefrom,String createTimeto,CustomerService s_customerService,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("customer", StringUtil.formatLike(s_customerService.getCustomer()));map.put("overview", StringUtil.formatLike(s_customerService.getOverview()));map.put("serveType", s_customerService.getServeType());map.put("state", s_customerService.getState());map.put("createTimefrom", createTimefrom);map.put("createTimeto", createTimeto);map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<CustomerService> customerServiceList=customerServiceService.find(map);Long total=customerServiceService.getTotal(map);JSONObject result=new JSONObject();JsonConfig jsonConfig=new JsonConfig();jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONArray jsonArray=JSONArray.fromObject(customerServiceList,jsonConfig);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
添加和修改客户服务信息:
/*** 添加或者修改客服服务* @param contact* @param response* @return* @throws Exception*/@RequestMapping("/save")public String save(CustomerService customerService,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(customerService.getId()==null){resultTotal=customerServiceService.add(customerService);}else{resultTotal=customerServiceService.update(customerService);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
4.5 统计报表功能实现
4.5.1 客户贡献分析实现
导航菜单,选择统计报表,点击客户贡献分析菜单,效果如下:
我们可以看到,界面显出了每个客户的订单总金额; 并且根据订单总金额 由高到底排序。我们可以通过“客户名称”进行查询;
关键代码实现:
<select id="findCustomerGx" parameterType="Map" resultMap="CustomerGxResult">SELECT t1.name,SUM(t3.sum) AS gx FROM t_customer t1 LEFT JOIN t_customer_order t2 ON t1.id=t2.cusId LEFT JOIN t_order_details t3 ON t2.id=t3.orderId <where><if test="name!=null and name!='' ">and t1.name like #{name}</if></where>GROUP BY t1.id<if test="start!=null and size!=null">limit #{start},#{size}</if></select>
4.5.2 客户构成分析实现
导航菜单,选择统计报表,点击客户构成分析菜单,效果如下:
我们可以看到,根据客户类型,分别用柱状图分析出了各种客户的个数;
关键代码实现:
<select id="findCustomerGc" resultMap="CustomerGcResult">SELECT LEVEL AS customerLevel ,COUNT(LEVEL) AS customerNum FROM t_customer GROUP BY LEVEL;</select>
4.5.3 客户服务分析实现
导航菜单,选择统计报表,点击客户服务分析菜单,效果如下:
我们可以看到,通过饼状图,我们可以很容易看到每种客户服务的比例,百分比,以及服务的个数;
关键代码实现:
/*** 查询客户服务分析* @param response* @return* @throws Exception*/@RequestMapping("/findCustomerFw")public String findCustomerFw(HttpServletResponse response)throws Exception{List<CustomerFw> customerFwList=customerService.findCustomerFw();JSONArray jsonArray=JSONArray.fromObject(customerFwList);ResponseUtil.write(response, jsonArray);return null;}
4.5.4 客户流失分析实现
导航菜单,选择统计报表,点击客户流失分析菜单,效果如下:
我们可以看到,可以查询所有已经流失的客户信息,我们还可以通过“客户名称”,“客户经理”来查询客户流失信息;
关键代码实现:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,CustomerLoss s_customerLoss,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("cusName", StringUtil.formatLike(s_customerLoss.getCusName()));map.put("cusManager", StringUtil.formatLike(s_customerLoss.getCusManager()));map.put("state", s_customerLoss.getState());map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<CustomerLoss> customerLossList=customerLossService.find(map);JsonConfig jsonConfig=new JsonConfig();jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONObject result=new JSONObject();Long total=customerLossService.getTotal(map);JSONArray jsonArray=JSONArray.fromObject(customerLossList,jsonConfig);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
4.6 基础数据管理实现
4.6.1 数据字典管理
导航菜单,选择基础数据管理,点击数据字典管理菜单,效果如下:
我们可以看到,会显示出所有的数据字典信息,我们还可以通过“数据字典名”,“数据字典值”来查询数据字典信息;
我们点击“添加”按钮:
我们填写字段,然后点击“保存”按钮,即可完成数据的保存功能;
我们选择要修改的记录,然后点击“修改”按钮,效果如下:
我们编辑数据,然后点击“保存”按钮,即可完成数据的修改功能;
我们选择需要删除的数据,然后点击“删除”按钮,效果如下:
我们点击“确定”按钮,即可完成数据的删除;
关键代码实现:
数据字典分页查询:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,DataDic s_dataDic,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("dataDicName", s_dataDic.getDataDicName());map.put("dataDicValue", StringUtil.formatLike(s_dataDic.getDataDicValue()));map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<DataDic> dataDicList=dataDicService.find(map);Long total=dataDicService.getTotal(map);JSONObject result=new JSONObject();JSONArray jsonArray=JSONArray.fromObject(dataDicList);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
数据字典保存和修改:
@RequestMapping("/save")public String save(DataDic dataDic,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(dataDic.getId()==null){resultTotal=dataDicService.add(dataDic);}else{resultTotal=dataDicService.update(dataDic);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
数据字典删除:
@RequestMapping("/save")public String save(DataDic dataDic,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(dataDic.getId()==null){resultTotal=dataDicService.add(dataDic);}else{resultTotal=dataDicService.update(dataDic);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
4.6.2 产品信息查询
导航菜单,选择基础数据管理,点击产品信息查询菜单,效果如下:
我们可以看到,数据表格显示出来所有产品信息相关的字段。我们还可以通过“产品名称”来搜索产品信息;
关键代码实现:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,Product s_product,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("productName", StringUtil.formatLike(s_product.getProductName()));map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<Product> productList=productService.find(map);Long total=productService.getTotal(map);JSONObject result=new JSONObject();JSONArray jsonArray=JSONArray.fromObject(productList);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
4.6.3 用户信息管理
导航菜单,选择基础数据管理,点击用户信息管理菜单,效果如下:
我们可以看到,数据表格里显示了所有的用户信息,我们还可以通过“用户名”来查询用户信息;
我们点击“添加”按钮,效果如下:
我们输入用户信息,然后点击“保存”按钮,即可完成用户信息的添加;
我们选择需要修改的数据,然后点击“修改”按钮,效果如下:
我们修改需要修改的数据,然后点击“保存”按钮,即可完成数据的修改功能;
我们选择需要删除的数据,然后点击“删除”功能,效果如下:
我们点击“确定”按钮,即可完成数据的删除;
关键代码实现:
用户信息分页查询:
@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,User s_user,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("userName", StringUtil.formatLike(s_user.getUserName()));map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<User> userList=userService.find(map);Long total=userService.getTotal(map);JSONObject result=new JSONObject();JSONArray jsonArray=JSONArray.fromObject(userList);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}
用户信息添加或者修改功能实现:
@RequestMapping("/save")public String save(User user,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(user.getId()==null){resultTotal=userService.add(user);}else{resultTotal=userService.update(user);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
用户信息删除功能实现:
@RequestMapping("/delete")public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{String []idsStr=ids.split(",");for(int i=0;i<idsStr.length;i++){userService.delete(Integer.parseInt(idsStr[i]));}JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}
4.7 系统管理
4.7.1 修改密码
导航菜单,选择系统管理,点击修改密码菜单,效果如下:
我们输入原密码,以及新密码,确认新密码,然后点击“保存”按钮,即可完成用户密码的修改;
关键代码实现:
@RequestMapping("/modifyPassword")public String modifyPassword(Integer id,String newPassword,HttpServletResponse response)throws Exception{User user=new User();user.setId(id);user.setPassword(newPassword);int resultTotal=userService.update(user);JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}
4.7.2 安全退出
导航菜单,选择系统管理,点击安全退出菜单,效果如下:
我们点击“确定”按钮,即可完成系统的安全退出;
关键代码实现:
@RequestMapping("/logout")public String logout(HttpSession session)throws Exception{session.invalidate();return "redirect:/login.jsp";}
5.结论
本文是关于客户关系管理系统的文稿设计,通过阅读本论文可以对本系统有一定的了解。本文介绍了系统开发所用到的技术,编程语言,卡法环境等。同时在做了分析调查后,对本系统做了详细的需求分析。然后对系统的概要设计以及详细设计也做了详细的说明,包括系统的前台设计,数据逻辑层设计以及后台数据库设计。
系统的主要特点有:人性化设计,界面友好,简洁,大方,操作简单方便,权限操作
虽然系统设计已经暂告一个段落,但由于本人的能力有限,再加上知识欠缺,以及对的业务不甚熟悉,所以在很多方面还存在着不足,如在系统需求分析方面还有很多方面没有考虑到,而且在具体实现各个功能的时候也存在一定的局限性。比如测试功能不完善,用户界面功能太简单、系统的界面不是太美观,系统安全性考虑不充分等等。所有本系统还有很多地方有待完善。
6.参考文献
[1]网星工作室,Dreamweaver MX,北京希望电子出版社,2002:10-70
[2]薛小龙,JSP典型系统实战与解析,电子工业出版社,:90-96
[3]管西京,JSP+MySql动态网站案例开发,电子工业出版社,:76-101
[4]程舒通,学校网站动态技术的开发.,《南宁职业技术学院学报》 1 :13-14
[5]Ralph R. Young 著,韩柯、耿民 等译,《有效需求实践》,机械工业出版社
[6]张海藩 ,软件工程导论学习辅导[M],清华大学出版社,-9-1
[7]李刚,疯狂Java讲义(第3版)电子工业出版社 ,-7-1
[8]李兴华,Java Web开发实战经典基础篇,清华大学出版社,-8-1
7.源码获取
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品项目源码大全
/bruceliu_code/category_9538286.html
欢迎大家点赞、收藏、关注、评论啦 、查看下方二维码👇🏻获取联系方式👇🏻