作者主页:Designer 小郑 作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,阿里云社区专家博主,蓝桥云课讲师。
一、摘要
1.1 项目介绍
基于JAVA Vue SpringBoot MySQL的CRM客户管理系统,包含了客户管理、客户分析、商品管理、客户跟踪、客户消费模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,CRM客户管理系统基于角色的访问控制,给客户管理员、工作人员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
1.2 项目录屏
二、功能模块
CRM客户管理系统的系统设计是一个基于系统分析结果的过程,使用科学的系统理念和方法来设计一个新系统,该系统可以最大限度地实现所需的目的。系统设计主要是功能设计,创建理想系统并制定设计计划;将系统划分为若干子系统;子系统和整个系统的详细设计和评估;演示系统方案并预测性能效果,本系统主要从五个功能模块分析。
- 首先是客户管理模块,主要实现用户的增删改查,对客户信息进行快速、准确的记录和查询操作,标记客户信息并对它进行分类,每个客户都具有唯一的编号,姓名,联系方式等基本信息,同时还有客户类型,客户状态等附加信息,能够导出客户信息。
- 第二是客户跟踪模块,该模块主要就是对潜在客户进行跟踪,记录跟踪内容和对跟踪信息增删改查,每个客户的跟踪记录包括跟踪日期、跟踪人、跟进内容等信息。
- 第三是客户消费模块,记录客户的消费情况,对客户的消费记录进行增删改查,同时也能导出客户消费记录信息到本地。
- 第四是商品管理模块,包括商品信息的增删改查、商品分类、商品库存管理等功能。
- 第五是系统基础模块,该模块包含若干子功能,但是该功能模块只有管理员角色可以操作。
三、系统设计
3.1 用例设计
3.2 E-R 图设计
3.3 数据库设计
3.3.1 客户表
3.3.2 商品表
3.3.3 客户跟踪表
3.3.4 客户消费表
3.3.5 系统角色表
四、系统展示
五、核心代码
5.1 查询客户
代码语言:javascript复制@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.getType())) {
qw.eq("type",customer.getType());
}
if(!ZwzNullUtils.isNull(customer.getTitle())) {
qw.like("title",customer.getTitle());
}
IPage<Customer> data = iCustomerService.page(PageUtil.initMpPage(page),qw);
return new ResultUtil<IPage<Customer>>().setData(data);
}
5.2 新增客户跟踪记录
代码语言:javascript复制@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增客户跟踪")
public Result<CustomerItem> insert(CustomerItem customerItem){
Customer customer = iCustomerService.getById(customerItem.getCustomerId());
if(customer == null) {
return ResultUtil.error("客户不存在");
}
User currUser = securityUtil.getCurrUser();
customerItem.setCustomerName(customer.getTitle());
customerItem.setDate(DateUtil.now());
customerItem.setUserId(currUser.getId());
customerItem.setUserName(currUser.getNickname());
iCustomerItemService.saveOrUpdate(customerItem);
return new ResultUtil<CustomerItem>().setData(customerItem);
}
5.3 新增客户消费订单
代码语言:javascript复制@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增客户消费")
public Result<CustomerOrder> insert(CustomerOrder customerOrder){
Customer customer = iCustomerService.getById(customerOrder.getUserId());
if(customer == null) {
return ResultUtil.error("客户不存在");
}
customerOrder.setUserName(customer.getTitle());
Commodity commodity = iCommodityService.getById(customerOrder.getCommodityId());
if(commodity == null) {
return ResultUtil.error("商品不存在");
}
if(commodity.getNumber() == null) {
commodity.setNumber(BigDecimal.ZERO);
}
if(customerOrder.getNumber().compareTo(commodity.getNumber()) > 0) {
return ResultUtil.error("库存不足");
}
commodity.setNumber(commodity.getNumber().subtract(customerOrder.getNumber()));
iCommodityService.saveOrUpdate(commodity);
customerOrder.setTitle(commodity.getTitle());
customerOrder.setType(commodity.getType());
customerOrder.setPrice(commodity.getPrice());
customerOrder.setImage(commodity.getImage());
customerOrder.setUserId(customer.getId());
customerOrder.setUserName(customer.getTitle());
customerOrder.setDate(DateUtil.now());
iCustomerOrderService.saveOrUpdate(customerOrder);
return new ResultUtil<CustomerOrder>().setData(customerOrder);
}
5.4 查询商品
代码语言:javascript复制@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询商品")
public Result<IPage<Commodity>> getByPage(@ModelAttribute Commodity commodity ,@ModelAttribute PageVo page){
QueryWrapper<Commodity> qw = new QueryWrapper<>();
if(!ZwzNullUtils.isNull(commodity.getTitle())) {
qw.like("title",commodity.getTitle());
}
if(!ZwzNullUtils.isNull(commodity.getType())) {
qw.eq("type",commodity.getType());
}
IPage<Commodity> data = iCommodityService.page(PageUtil.initMpPage(page),qw);
return new ResultUtil<IPage<Commodity>>().setData(data);
}
5.5 商品购买
代码语言:javascript复制@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增商品购买")
public Result<CommodityBuy> insert(CommodityBuy commodityBuy){
Commodity commodity = iCommodityService.getById(commodityBuy.getCommodityId());
if(commodity == null) {
return ResultUtil.error("商品不存在");
}
User currUser = securityUtil.getCurrUser();
commodityBuy.setTitle(commodity.getTitle());
commodityBuy.setType(commodity.getType());
commodityBuy.setPrice(commodity.getPrice());
commodityBuy.setImage(commodity.getImage());
commodityBuy.setUserId(currUser.getId());
commodityBuy.setUserName(currUser.getNickname());
commodityBuy.setDate(DateUtil.now());
iCommodityBuyService.saveOrUpdate(commodityBuy);
if(commodity.getNumber() == null) {
commodity.setNumber(BigDecimal.ZERO);
}
commodity.setNumber(commodity.getNumber().add(commodityBuy.getNumber()));
iCommodityService.saveOrUpdate(commodity);
return new ResultUtil<CommodityBuy>().setData(commodityBuy);
}
六、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。