基于Java+SpringBoot+Vue前后端分离贸易行业crm系统设计和实现

news2024/11/16 7:43:05

博主介绍全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

 

系统介绍:

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于springboot的贸易行业crm系统的开发全过程。通过分析基于springboot的贸易行业crm系统管理的不足,创建了一个计算机管理基于springboot的贸易行业crm系统的方案。文章介绍了基于springboot的贸易行业crm系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。

本基于springboot的贸易行业crm系统有管理员和员工两个角色。管理员功能有个人中心,部门管理,员工管理,产品分类管理,产品信息管理,客户信息管理,市场活动管理,销售订单管理,配送订单管理。员工可以操作自己的个人中心,客户信息,产品信息,销售订单,配送订单,售后回访等。因而具有一定的实用性。

本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于springboot的贸易行业crm系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高基于springboot的贸易行业crm系统管理效率。

本系统是基于B/S架构的网站系统,设计的功能结构图如下图所示:

 程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。

程序操作流程图

功能截图:

5.1 管理员模块的实现

5.1.1 员工信息管理

基于springboot的贸易行业crm系统的系统管理员可以对员工信息进行添加修改删除以及查询操作。具体界面的展示如图5.1所示。

 图5.1 员工信息管理界面

5.1.2 部门信息管理

系统管理员可以查看对部门信息进行添加,修改,删除以及查询操作。具体界面如图5.2所示。

 图5.2 部门信息管理界面

5.1.3 产品信息管理

系统管理员可以对产品信息信息进行修改,删除以及查询操作。界面如下图所示:

 图5.3 产品信息信息管理界面

5.1.4 销售订单管理

系统管理员可以对销售订单进行添加修改删除操作。界面如下图所示:

 图5.4 销售订单管理界面

5.2 用户模块的实现

5.2.1 前台首页

普通员工都可以在前台首页查看相关信息,首页上面有导航栏。界面如下图所示:

 图5.5 前台首页界面

5.2.2 企业公告

用户可以查看和搜索企业公告。界面如下图所示:

 

图5.6 企业公告界面

5.2.3 售后回访管理

用户登录后可以在后台查看售后回访信息。界面如下图所示:

 

图5.7 售后回访界面

代码实现:

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private TokenService tokenService;

    /**
     * 登录
     */
    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String role, HttpServletRequest request) {
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user != null){
            if(!user.getRole().equals(role)){
                return R.error("权限不正常");
            }
            if(user==null || !user.getPassword().equals(password)) {
                return R.error("账号或密码不正确");
            }
            String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
            return R.ok().put("token", token);
        }else{
            return R.error("账号或密码或权限不对");
        }

    }
    
    /**
     * 注册
     */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 退出
     */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user==null) {
            return R.error("账号不存在");
        }
        user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
    
    /**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
        PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

论文参考:

源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

 精彩专栏推荐订阅下方专栏👇🏻

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(七)

Java语言是最为流行的面向对象编程语言之一&#xff0c; Java运行时环境&#xff08;JRE&#xff09;拥有着非常大的用户群&#xff0c;其安全问题十分重要。近年来&#xff0c;由JRE漏洞引发的JVM逃逸攻击事件不断增多&#xff0c;对个人计算机安全造成了极大的威胁。研究JRE安…

小研究 - Java虚拟机内存管理分析

讨论了&#xff2a;&#xff41;&#xff56;&#xff41;关键技术组成&#xff0c;深入介绍了&#xff2a;&#xff41;&#xff56;&#xff41;虚拟机的体系结构&#xff0c;分析了虚拟机中内存管理的垃圾回收机制。同时&#xff0c;对现有的一些流行垃圾回收算法进行了深入…

5年经验之谈 —— APP和WEB的测试区别

在功能测试时&#xff0c;要考虑手机应用的特性&#xff1a; 1&#xff09;手机屏幕尺寸偏小&#xff0c;所以手机应用一般就占满了全屏&#xff0c;因此要考虑手机在前后端切换时被测试应用在资源使用时的优先级变化情况&#xff1b;还要考虑手机横竖屏切换时的测试 2&#xf…

yolov5中添加ShuffleAttention注意力机制

ShuffleAttention注意力机制简介 关于ShuffleAttention注意力机制的原理这里不再详细解释.论文参考如下链接here   yolov5中添加注意力机制 注意力机制分为接收通道数和不接受通道数两种。这次属于接受通道数注意力机制,这种注意力机制由于有通道数要求,所示我们添加的时候…

引导滤波(guided filter)与快速引导滤波(fast guided filter)理解

最近在学习图片的滤波和去噪的相关知识&#xff0c;查阅了一些资料参考了一些博客&#xff0c;这里做一个整合&#xff0b;理解。参考的博客资料在文末。 引入普通滤波的概念 假设输入图像为p&#xff0c;滤波窗口为wk,经过滤波后的输出图像为q,那么q图的第i个像素是由输入图p中…

Vue2向Vue3过度核心技术声明式导航

目录 1 声明式导航-导航链接1.需求2.解决方案3.通过router-link自带的两个样式进行高亮4.总结 2 声明式导航-两个类名1.router-link-active2.router-link-exact-active3.在地址栏中输入二级路由查看类名的添加4.总结 3 声明式导航-自定义类名1.问题2.解决方案3.代码演示4.总结 …

OpenSIPS 通话中 UPDATE 请求导致没有声音问题

文章目录 1. 问题现象2. 抓包排查3. 问题分析及解决方案 1. 问题现象 在 SIP 应用的开发中&#xff0c;通话一端听不到声音是比较常见的问题。一般来说&#xff0c;没有声音意味着 RTP 传输存在障碍&#xff0c;追根究底就是网络不通或者端口未开放等原因。但在实践中&#xf…

射频滤波器分析报告(声表面波滤波器/BAW/超声)

目录 一、射频芯片技术与产品概述二、5G时代滤波器需求潜力巨大三、全球滤波器市场现状3.1 基站3.2 手机端 四、射频芯片国内发展情况4.1 国内射频芯片概况4.2 国内射频滤波器发展情况4.3 BAW的重重困难4.4 终端厂商的参与 五 机会分析5.1 5G通信5.2 卫星通信5.3 雷达行业5.4 新…

Cinema 4D软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Cinema 4D&#xff08;简称C4D&#xff09;是由德国Maxon Computer公司开发的一款三维动画渲染和建模软件&#xff0c;广泛应用于影视、广告、工业设计等领域。C4D因其高效率、易用性和强大的功能而受到广大设计师和艺术家的青睐…

第四章文件管理

0.初识文件管理 一个文件有哪些属性?文件名:由创建文件的用户决定文件名&#xff0c;主要是为了方便用户找到文件&#xff0c;同一目录下不允许有重名文件。 标识符:一个系统内的各文件标识符唯一&#xff0c;对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一…

pandas-03-组合连接数据

采集的数据存储后通常会分为多个文件或数据库&#xff0c;如何将这些文件按需拼接&#xff0c;或按键进行连接十分重要。这节将介绍数据索引的复杂操作如分层索引&#xff0c;stack,unstack,seet_index,reset_index等帮助重构数据&#xff0c;数据的拼接如merge,join,concat,co…

pandas数据分析——groupby得到分组后的数据

groupbyagg分组聚合对数据字段进行合并拼接 Pandas怎样实现groupby聚合后字符串列的合并&#xff08;四十&#xff09; groupby得到分组后的数据 pandas—groupby如何得到分组里的数据 date_range补齐缺失日期 在处理时间序列的数据中&#xff0c;有时候会遇到有些日期的数…

python编程环境使用技巧3-程序打包pyinstaller

前言 在Python中&#xff0c;打包指的是将Python代码和相关资源&#xff08;如配置文件、图像等&#xff09;整合到一个可执行的文件或安装包中&#xff0c;以便于在其他环境中使用。 下面是使用pyinstaller进行打包的简要步骤&#xff1a; 1-安装pyinstaller&#xff1a;在命…

python之OCR文字识别

将图片翻译成文字一般被称为光学文字识别&#xff08;Optical Character Recognition&#xff0c;OCR&#xff09;。可以实现OCR 的底层库并不多&#xff0c;目前很多库都是使用共同的几个底层OCR 库&#xff0c;或者是在上面进行定制。 方法一&#xff1a; 使用easyocr模块 …

Redis三种特殊数据类型

Redis三种特殊数据类型 geospatial 地理位置 Redis 地理空间数据类型简介 Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。 基本命令 GEOADD 将位置添加到给定的地理空间索引&#xff08;请注意&#xff0c;使用此命令&a…

为什么物联网和端点安全需要细化

组织和个人越来越关心&#xff1a;物联网 ( IoT ) 的激增以及这些设备创建的无数端点。预计到 2025 年将有 750 亿个物联网设备投入使用&#xff0c;确保这些设备的安全已经至关重要。 2019 年生产的设备预期寿命只有五年&#xff0c;现在存在大量制造商在生产过程中无法预见的…

ChatGPT在高等教育中的应用利弊探讨

​人工智能在教育领域的应用日益广泛。2022年11月OpenAI开发的聊天机器人ChatGPT在全球范围内流传开来&#xff0c;其中用户数量最多的国家是美国(15.22%)。由于ChatGPT应用广泛&#xff0c;具有类似人类回答问题的能力&#xff0c;它正在成为许多学生和教育工作者的可信赖伙伴…

python编程环境使用技巧-任务1-pip包管理工具

概要 任务1-pip包管理工具 pip是Python的包管理工具&#xff0c;它用于安装、升级和管理Python的第三方库以及它们的依赖关系。 在命令提示符或终端窗口中&#xff0c;可以使用以下常用的pip命令&#xff1a; 安装包&#xff1a;pip install package_name。它会自动下载并安…

开源在大数据和分析中的角色

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

STM32开发 | 移远4G-Cat.1模组EC200N-CN开发

一、硬件说明 1、引脚分配图 文章来源地址https://www.yii666.com/blog/326636.html文章来源地址:https://www.yii666.com/blog/326636.html 2、常用引脚说明 模块输入电源 引脚名描述VBAT_BB模块基带电源&#xff08;Vnom 3.8 V&#xff09;VBAT_RF模块射频电源&#xff0…