【开源】SpringBoot框架开发企业项目合同信息系统

目录
- 一、摘要
- 1.1 项目介绍
- 1.2 项目录屏
- 二、功能模块
- 2.1 数据中心模块
- 2.2 合同审批模块
- 2.3 合同签订模块
- 2.4 合同预警模块
- 2.5 数据可视化模块
- 三、系统设计
- 3.1 用例设计
- 3.2 数据库设计
- 3.2.1 合同审批表
- 3.2.2 合同签订表
- 3.2.3 合同预警表
- 四、系统展示
- 五、核心代码
- 5.1 查询合同
- 5.2 新增合同
- 5.3 审批合同
- 5.4 驳回合同
- 5.5 签订合同
- 六、免责说明
一、摘要
1.1 项目介绍
基于JAVA+Vue+SpringBoot+MySQL的企业项目合同信息系统,包含了合同审批模块、合同签订模块、合同预定模块和合同数据可视化模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,企业项目合同信息系统基于角色的访问控制,给企业管理员、合同专员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
1.2 项目录屏
二、功能模块
在现代企业中,企业之间沟通往来主要以各式各样的合同形式进行,因此,企业应该高度重视合同管理。设计主要包括企业合同管理系统的搭建,基于系统的搭建,可以通过网络进行签订、履行、变更、解除合同等,以及获得与合同相关正确的各种统计分析。
企业项目合同信息管理系统基于Java语言开发,采用前后端分离的技术架构,前端采用Vue.js,后端采用SpringBoot框架,采用MySQL数据库。
企业项目合同信息管理系统的功能性需求主要包含数据中心模块、合同审批模块、合同签订模块、合同预警模块、数据可视化模块这五大模块,其中数据可视化模块不建立数据表,系统是基于浏览器运行的web管理后端,其中各个模块详细说明如下:
2.1 数据中心模块
数据中心模块包含了企业项目合同信息管理系统的系统基础配置,如登录用户的管理、运营公司组织架构的管理、用户菜单权限的管理、系统日志的管理、公用文件云盘的管理。
其中登录用户管理模块,由管理员负责运维工作,管理员可以对登录用户进行增加、删除、修改、查询操作。
组织架构,指的是运营公司的组织架构,该模块适用于管理这些组织架构的部门层级和员工的部门归属情况。
用户菜单权限管理模块,用于管理不同权限的用户,拥有哪些具体的菜单权限。
系统日志的管理,用于维护用户登入系统的记录,方便定位追踪用户的操作情况。
公用云盘管理模块,用于统一化维护企业项目合同信息管理系统中的图片,如合同签订文件、合同照片等等。
2.2 合同审批模块
合同审批模块用于对合同的审批数据进行管理,员工如果要发起合同签署,首先需要发起合同审批,当领导审批通过后才可以进行合同签订,其中合同审批包括合同标题、甲方、乙方、合同源文件、审批状态、审批人、审批时间、创建人等,员工可以在合同审批模块中发起合同审批,管理员可以对员工发起的审批进行审核操作。
2.3 合同签订模块
当员工发起的合同审批完成后,员工就可以在合同签订模块中进行签订,上传签订后的PDF文件,合同签订模块包括合同标题、甲方、乙方、合同文件、签订状态、签订人、签订时间、创建人等,员工可以在合同签订模块中发起签订,管理员可以查询所有员工进行的合同签订情况,下载合同文件。
2.4 合同预警模块
合同预警模块用于对合同的有效期限数据进行管理,合同一般会指定有效期间,过了有效期限就不在生效,如果未及时发现可能会对企业造成损失,所以设计了合同预警模块,其中包括合同标题、甲方、乙方、合同文件、剩余天数、签订人、签订时间、创建人等,管员工可以查看自己发起的合同预警数据,管理员可以查看所有的合同预警数据。
2.5 数据可视化模块
数据可视化模块用于可视化的对合同情况进行预览,主要是对自己名下的合同进行数据分析,分为已签订、已审批和未审批,采用饼图的方式进行展示。
三、系统设计
3.1 用例设计

3.2 数据库设计
3.2.1 合同审批表

3.2.2 合同签订表

3.2.3 合同预警表

四、系统展示








五、核心代码
5.1 查询合同
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询合同")
public Result<IPage<Agreement>> getByPage(@ModelAttribute Agreement agreement ,@ModelAttribute PageVo page){QueryWrapper<Agreement> qw = new QueryWrapper<>();User currUser = securityUtil.getCurrUser();QueryWrapper<User> userQw = new QueryWrapper<>();userQw.eq("id",currUser.getId());userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 AND role_id = '1536606659751841799'");if(iUserService.count(userQw) < 1L) {qw.eq("sign_id",currUser.getId());}if(!ZwzNullUtils.isNull(agreement.getTitle())) {qw.like("title",agreement.getTitle());}if(!ZwzNullUtils.isNull(agreement.getFirstParty())) {qw.like("first_party",agreement.getFirstParty());}if(!ZwzNullUtils.isNull(agreement.getSecondParty())) {qw.like("second_party",agreement.getSecondParty());}if(!ZwzNullUtils.isNull(agreement.getAuditStatus())) {qw.eq("audit_status",agreement.getAuditStatus());}if(!ZwzNullUtils.isNull(agreement.getSignStatus())) {qw.eq("sign_status",agreement.getSignStatus());}long zwzNowCuo = System.currentTimeMillis() / 1000;IPage<Agreement> data = iAgreementService.page(PageUtil.initMpPage(page),qw);for (Agreement vo : data.getRecords()) {long cuo = zwzDateToCuo(vo.getDate());vo.setDateTemp((cuo - zwzNowCuo) / DAY_CUO);}return new ResultUtil<IPage<Agreement>>().setData(data);
}
5.2 新增合同
@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增合同")
public Result<Agreement> insert(Agreement agreement){User currUser = securityUtil.getCurrUser();agreement.setAuditStatus("未审批");agreement.setAuditUser("");agreement.setAuditTime("");agreement.setSignStatus("未签订");agreement.setFile2("");agreement.setSignTime("");agreement.setSignId(currUser.getId());agreement.setSignUser(currUser.getNickname());iAgreementService.saveOrUpdate(agreement);return new ResultUtil<Agreement>().setData(agreement);
}
5.3 审批合同
@RequestMapping(value = "/audit", method = RequestMethod.POST)
@ApiOperation(value = "审批合同")
public Result<Object> audit(@RequestParam String id){Agreement as = iAgreementService.getById(id);if(as == null) {return ResultUtil.error("合同不存在");}User currUser = securityUtil.getCurrUser();as.setAuditStatus("已审批");as.setAuditTime(DateUtil.now());as.setAuditUser(currUser.getNickname());iAgreementService.saveOrUpdate(as);return ResultUtil.success();
}
5.4 驳回合同
@RequestMapping(value = "/notAudit", method = RequestMethod.POST)
@ApiOperation(value = "驳回合同")
public Result<Object> notAudit(@RequestParam String id){Agreement as = iAgreementService.getById(id);if(as == null) {return ResultUtil.error("合同不存在");}User currUser = securityUtil.getCurrUser();as.setAuditStatus("已驳回");as.setAuditTime(DateUtil.now());as.setAuditUser(currUser.getNickname());iAgreementService.saveOrUpdate(as);return ResultUtil.success();
}
5.5 签订合同
@RequestMapping(value = "/sign", method = RequestMethod.POST)
@ApiOperation(value = "签订合同")
public Result<Object> sign(@RequestParam String id,@RequestParam String fileUrl){Agreement as = iAgreementService.getById(id);if(as == null) {return ResultUtil.error("合同不存在");}as.setSignStatus("已签订");as.setFile2(fileUrl);as.setSignTime(DateUtil.now());iAgreementService.saveOrUpdate(as);return ResultUtil.success();
}
六、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

相关文章:
【开源】SpringBoot框架开发企业项目合同信息系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…...
高斯伪谱C++封装库开源!
Windows x64/86 C无依赖运行高斯伪谱法求解最优控制问题,你只需要ElegantGP! Author: Y. F. Zhang His Github: https://github.com/ZYunfeii 写在前面 这个库在你下载它的那一时刻起不再依赖任何其他代码,直接可用来构建C的最优控制问题并进行求解。…...
Spring + Tomcat项目中nacos配置中文乱码问题解决
实际工作的时候碰到了nacos中文乱码的问题,一顿排查最终还是调源码解决了。下面为具体的源码流程,有碰到的可以参考下。 对于nacos配置来说,初始主要源码就在NacosConfigService类中。里面有初始化获取配置content以及设置对应监听器的操作。…...
Unity SRP 管线【第十讲:SRP/URP 图形API】
Unity 封装的图形API 文章目录 Unity 封装的图形API一、 CommandBuffer 要执行的图形命令列表1. CommandBuffer 属性2. CommandBuffer 常用图形API(方法)(1)设置(2)获取临时纹理 GetTemporaryRT以及释放(3)设置纹理为渲染目标 SetRenderTarget(4)Command…...
使用playwright进行自动化端到端测试
项目希望能接入自动化端到端测试提高可靠性,发现微软的 playwright 还挺好用的,推荐一下,顺便说下遇到的一些难点以及最佳实践。 难点 登录 项目不能帐号密码登录,只能扫二维码 临时方案是先自己扫码保存 cookie 用于测试&#…...
ES实战-相关性搜索
ES打分机制 1.TF-IDF 词频-逆文档频率 2.Okapi BM25 3.随机性分歧- DFR相似度 4.基于信息 - IB相似度 5.LM Dirichlet 相似度 6.LM Jelinek Mercer相似度 解释一个查询的结果集 curl -XPOST localhost:9200/get-together/_search?pretty -H Content-Type: application/json -…...
MQTT的学习与应用
文章目录 一、什么是MQTT二、MQTT协议特点三、MQTT应用领域四、安装Mosquitto五、如何学习 MQTT 一、什么是MQTT MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,设计用于在低带宽、不稳定的网络环境中进行高效的通信…...
编译原理实验1——词法分析(python实现)
文章目录 实验目的实现定义单词对应的种别码定义输出形式:三元式python代码实现运行结果检错处理 总结 实验目的 输入一个C语言代码串,输出单词流,识别对象包含关键字、标识符、整型浮点型字符串型常数、科学计数法、操作符和标点、注释等等。…...
C语言——oj刷题——模拟实现库函数strlen
目录 方法一:迭代法 方法二:递归法 方法三:指针算术法 方法四:汇编指令法 当我们使用C语言进行字符串操作时,经常会用到库函数strlen来获取字符串的长度。strlen函数的作用是计算一个以null字符结尾的字符串的长度…...
对进程与线程的理解
目录 1、进程/任务(Process/Task) 2、进程控制块抽象(PCB Process Control Block) 2.1、PCB重要属性 2.2、PCB中支持进程调度的一些属性 3、 内存分配 —— 内存管理(Memory Manage) 4、线程(Thread)…...
「数据结构」线性表
定义和基本操作 定义:相同数据类型的 n ( n ≥ 0 ) n(n \ge 0) n(n≥0)个数据元素的有限序列,其中n为表长,当n0时线性表是一个空表一般表示: L ( a 1 , a 2 , … … , a i , a i 1 , a n ) L(a_1,a_2,……,a_i,a_{i1},a_n) L(a…...
GEE:关于在GEE平台上进行回归计算的若干问题
作者:CSDN _养乐多_ 记录一些在Google Earth Engine (GEE)平台上进行机器学习回归计算的问题和解释。 文章目录 一、回归1.1 问:GEE平台上可以进行哪些机器学习回归算法?1.2 问:为什么只有这四种…...
Vivado -RAM
ip_ram 定义了一个名为ip_ram的模块,该模块具有以下端口: sys_clk:系统时钟输入。 sys_rst_n:系统复位输入。 module ip_ram( input sys_clk, input sys_rst_n);wire ram_en ; wire ram_wea …...
备战蓝桥杯---图论之最短路dijkstra算法
目录 先分个类吧: 1.对于有向无环图,我们直接拓扑排序,和AOE网类似,把取max改成min即可。 2.边权全部相等,直接BFS即可 3.单源点最短路 从一个点出发,到达其他顶点的最短路长度。 Dijkstra算法&#x…...
C#系列-C#实现秒杀功能(14)
在C#中实现商品秒杀功能,通常需要考虑并发控制、数据库事务、缓存策略、限流措施等多个方面。下面是一个简单的示例,演示了如何使用C#和数据库来实现一个基本的商品秒杀功能。 首先,假设你有一个商品表(Product)和一个…...
Java ‘Elasticsearch‘ 操作
依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</ar…...
【AI视野·今日NLP 自然语言处理论文速览 第七十八期】Wed, 17 Jan 2024
AI视野今日CS.NLP 自然语言处理论文速览 Wed, 17 Jan 2024 (showing first 100 of 163 entries) Totally 100 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Deductive Closure Training of Language Models for Coherence, Accur…...
实验5-4 使用函数计算两点间的距离
本题要求实现一个函数,对给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离。 函数接口定义: double dist( double x1, double y1, double x2, double y2 );其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2)&…...
【JavaEE】_JavaScript(Web API)
目录 1. DOM 1.1 DOM基本概念 1.2 DOM树 2. 选中页面元素 2.1 querySelector 2.2 querySelectorAll 3. 事件 3.1 基本概念 3.2 事件的三要素 3.3 示例 4.操作元素 4.1 获取/修改元素内容 4.2 获取/修改元素属性 4.3 获取/修改表单元素属性 4.3.1 value…...
ARM交叉编译搭建SSH
首先搭建好arm-linux交叉编译环境,开发板和主机可以ping通。 一、下载需要的源码 下载zlib: zlib-1.2.3.tar.gz 下载ssl: openssl-0.9.8d.tar.gz 下载ssh: openssh-4.6p1.tar.gz 二、交叉编译 新建目录/home/leo/ssh,并且将三个源码复制到该目录下。…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
