作者主页:Java毕设网
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
一、项目介绍
本应用是一个客户关系管理系统,主要包括五大模块,分别是营销管理,客户管理,服务管理,统计报表和系统管理,为客户关系管理提供简单的数据管理与分析
共分为管理员、销售、技术经理等角色,各角色菜单可由管理员分配授权;
管理员主要功能有:
营销管理:营销机会管理、客户开发计划;
客户管理:客户信息管理、客户流失管理;
服务管理:服务创建、服务分配、服务处理、服务反馈、服务归档;
统计报表:客户贡献分析、客户构成分析、客户流失分析;
系统管理:用户管理、角色管理、资源管理、字典管理;
销售主要功能有:
营销管理:营销机会管理、客户开发计划;
客户管理:客户信息管理、客户流失管理;
服务管理:服务创建、服务分配、服务处理、服务反馈、服务归档;
统计报表:客户贡献分析、客户构成分析、客户流失分析;
技术选型方面,该项目是一个`SpringBoot`的单体应用,项目使用`SpringBoot2`框架快速开发,数据访问层使用`Mybatis`框架,页面渲染引擎使用`Freemarker`,页面样式使用`Layui`,日志方面选用的是`logback`,统计报表部分使用的是`ECharts`,数据库使用的Mysql 8.0版本;
二、环境需要
1. 在mysql(默认为mysql8)中创建名为`crm`的数据库,并执行源码根目录的`crm.sql`脚本生成数据库表以及数据
2. 将项目源码导入idea中,指定项目的jdk版本为jdk8或以上,并标记为maven项目,下载所需依赖
3. 修改`application.yml`中针对于数据库的配置(主要是数据库名和数据库密码)
4. 修改logback.xml中,第4行,日志文件的存储地址,改为自己的路径;
5. 启动项目测试是否正常,默认启动地址首页为http://localhost:1212/crm
三、技术栈
1.后端:springboot+Mybatis
2.前端:HTML+thymeleaf+Javascript+css
四、使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat;
3. 将项目中application-dev.yml配置文件中的数据库配置改为自己的配置
4. 运行项目,在浏览器中输入地址:http://localhost:8080/ 登录账号;
五、运行截图
六、相关代码
客户管理控制器
@Controller
@RequestMapping("/customer")
public class CustomerController extends BaseController {
@Autowired
private CustomerService customerService;
@Autowired
private ResultInfo resultInfo;
/**
* 跳转到客户信息管理首页
* @return
*/
@GetMapping("/customer")
public String customer() {
return "customer/customer";
}
/**
* 跳转到新增或修改页面
* @param id
* @param model
* @return
*/
@GetMapping("/toAddAndUpdatePage")
public String toAddAndUpdatePage(@Nullable Integer id, Model model) {
if (id != null) {
// 修改
// 获取客户信息
Customer customer = customerService.selectByPrimaryKey(id);
AssertUtil.isTrue(customer == null, "获取客户信息失败");
model.addAttribute("customer", customer);
}
return "customer/addAndUpdate";
}
/**
* 获取客户信息列表
* @param customerQuery
* @return
*/
@GetMapping("/customerList")
@ResponseBody
public Map<String, Object> findCustomers(@Nullable CustomerQuery customerQuery) {
return customerService.findCustomers(customerQuery);
}
/**
* 新增客户信息
* @param customer
* @return
*/
@PostMapping("/addCustomer")
@ResponseBody
public ResultInfo addCustomer(Customer customer) {
customerService.addCustomer(customer);
resultInfo.setAll(200, "添加客户信息成功", null);
return resultInfo;
}
/**
* 修改客户信息
* @param customer
* @return
*/
@PostMapping("/updateCustomer")
@ResponseBody
public ResultInfo updateCustomer(Customer customer) {
customerService.updateCustomer(customer);
resultInfo.setAll(200, "更新客户信息成功", null);
return resultInfo;
}
/**
* 批量删除客户信息
* @param ids
* @return
*/
@PostMapping("/deleteCustomer")
@ResponseBody
public ResultInfo deleteCustomer(@RequestParam("ids") Integer[] ids) {
customerService.deleteCustomerByIds(ids);
resultInfo.setAll(200, "删除客户信息成功", null);
return resultInfo;
}
/**
* 查询所有客户级别
* @return
*/
@GetMapping("/getLevels")
@ResponseBody
public List<String> findLevels() {
return customerService.findLevels();
}
/**
* 跳转到客户订单详情页面
* @param customerId
* @return
*/
@GetMapping("/toCustomerOrderPage")
public String toCustomerOrderPage(@RequestParam("customerId") Integer customerId,Model model) {
// 校验参数
AssertUtil.isTrue(customerId == null, "客户id不能为空");
// 封装客户信息
Customer customer = customerService.selectByPrimaryKey(customerId);
AssertUtil.isTrue(customer == null, "查询客户信息失败");
model.addAttribute("customer", customer);
return "customerOrder/customerOrder";
}
}
订单管理控制器
@Controller
@RequestMapping("/orderDetail")
public class OrderDetailController extends BaseController {
@Autowired
private OrderDetailService orderDetailService;
@Autowired
private CustomerOrderService customerOrderService;
/**
* 根据订单id查询订单详情
*
* @param orderDetailQuery
* @return
*/
@GetMapping("/orderDetailList")
@ResponseBody
public Map<String, Object> findOrderDetailByOrderId(OrderDetailQuery orderDetailQuery) {
return orderDetailService.findOrderDetailByOrderId(orderDetailQuery);
}
/**
* 跳转到订单详情页
* @param cusId
* @param model
* @return
*/
@GetMapping("/toOrderDetailPage")
public String toOrderDetailPage(@RequestParam("id") Integer id, Model model) {
// 查询订单信息
model.addAttribute("customer", customerOrderService.findCustomerOrderById(id));
model.addAttribute("sum", orderDetailService.findSum(id));
return "customerOrder/orderDetail";
}
}