【开源】JAVA+Vue.js实现企业项目合同信息系统

在这里插入图片描述


目录

  • 一、摘要
    • 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 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[CSAWQual 2019]Web_Unagi ---不会编程的崽

不知道刷了多少天了&#xff0c;又是一题关于xxe漏洞的。 web的习惯性操作。 1.功能点&cms 2.源代码 3.敏感文件泄露 当然这是我个人的习惯。这里进入界面后又upload功能&#xff0c;不会是传马吧。但是旁边给了上传文件格式。仅仅只看界面似乎没什么区别&#xff0c;源…

985硕的4家大厂实习与校招经历专题分享(part2)

我的个人经历&#xff1a; 985硕士24届毕业生&#xff0c;实验室方向:CV深度学习 就业&#xff1a;工程-java后端 关注大模型相关技术发展 校招offer: 阿里巴巴 字节跳动 等10 研究生期间独立发了一篇二区SCI 实习经历:字节 阿里 京东 B站 &#xff08;只看大厂&#xff0c;面试…

Leetcode刷题(二十)

一、45. 跳跃游戏 II 代码&#xff1a; class Solution:def jump(self, nums: List[int]) -> int:start step 0end 1n len(nums)while end < n:max_num 0for i in range(start,end):max_num max(max_num, inums[i])start,end,step end,max_num 1,step1return st…

水库大坝安全评价导则:大坝运行管理评价

一、一般规定 1、大坝运行管理评价的目的是&#xff0c;为安全鉴定提供大坝的运行、管理及性状等基础资料&#xff0c;作为大坝安全综合评价及分类的依据之一。 2、大坝运行管理评价的内容包括大坝运行、维修和监测。 3、大坝运行管理的各项工作应按相应的规范&#xff0c;结合…

卢晶:智能座舱中的音频交互技术 | 演讲嘉宾公布

一、智能车载音频 I 分论坛 智能车载音频 I 分论坛将于3月27日同期举办&#xff01; 我们正站在一个前所未有的科技革新的交汇点上&#xff0c;重塑我们出行体验的变革正在悄然发生。当人工智能的磅礴力量与车载音频相交融&#xff0c;智慧、便捷与未来的探索之旅正式扬帆起航…

Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用!

今天&#xff0c;我们宣布一个激动人心的里程碑&#xff1a;Anthropic 的 Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用。 下一代 Claude (Claude 3) 的三个模型 Claude 3 Opus、Claude 3 Sonnet 和 Claude 3 Haiku 将陆续登陆 Amazon Bedrock。Amazon …

猛攻生态,鸿蒙单挑安卓

文&#xff5c;刘俊宏 编&#xff5c;王一粟 这回轮到鸿蒙禁用安卓了。 1月18日&#xff0c;鸿蒙生态千帆仪式上&#xff0c;华为正式宣布了HarmonyOS NEXT&#xff08;下简称鸿蒙星河版或纯血鸿蒙&#xff09;开发者预览已向开发者开放申请&#xff0c;纯血鸿蒙开始走向普及…

Kap - macOS 开源录屏工具

文章目录 关于 Kap 关于 Kap Kap 是一个使用web技术的开源的屏幕录制工具 官网&#xff1a;https://getkap.cogithub : https://github.com/wulkano/Kap 目前只支持 macOS 12 以上&#xff0c;支持 Intel 和 Apple silicon 你可以前往官网&#xff0c;右上方下载 你也可以使…

Node.js 最佳实践:改善你的应用程序设计 | 开源日报 No.191

goldbergyoni/nodebestpractices Stars: 92.4k License: CC-BY-SA-4.0 Node.js Best Practices 是一个关于 Node.js 最佳实践的开源项目。该项目汇总了许多顶级内容&#xff0c;包括 80 多个最佳实践、样式指南和架构技巧。以下是该项目的核心优势和主要功能&#xff1a; 提供…

因果学习篇(2)-Causal Attention for Vision-Language Tasks(文献阅读)

Causal Attention for Vision-Language Tasks 引言 这篇论文是南洋理工大学和澳大利亚莫纳什大学联合发表自2021年的CVPR顶会上的一篇文献&#xff0c;在当前流行的注意力机制中增加了因果推理算法&#xff0c;提出了一种新的注意力机制&#xff1a;因果注意力(CATT)&#xff…

【kubernetes】关于k8s集群的pod控制器

目录 一、deployment控制器 二、statefulset控制器 1、验证数据可以持久化 2、验证删除后名称不会改变&#xff0c;数据还会一直存在 3、验证扩容的创建过程是升序串行执行&#xff0c;并且自动创建pv 4、验证滚动更新的时候也是升序执行&#xff0c;数据持久化还在 5、验…

9、Linux驱动开发:驱动-控制接口的实现(ioctl)

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

DailyNotes个人笔记管理工具

DailyNotes 是记录笔记和跟踪任务的应用程序&#xff0c;使用markdown进行编辑 部署 下载镜像 docker pull m0ngr31/dailynotes创建目录并授权 mkdir -p /data/dailynotes/config_dir chmod -R 777 /data/dailynotes启动容器 docker run -d --restart always --name mynot…

ruoyi-vue框架密码加密传输

先看一下改造后的样子&#xff0c;输入的密码不会再以明文展示。 下面我主要把前后端改造的代码贴出来。 1.后端代码 RsaUtils类 在com.ruoyi.common.utils包下新建RsaUtils类&#xff0c;RsaUtils添加了Component注解 generateKeyPair()构建密钥对添加了Bean注解 在项目启动…

【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱

1 基本定义 卷积滑动平均滤波算法是一种基于卷积操作的滤波方法&#xff0c;它通过对信号进行卷积运算来计算移动平均值&#xff0c;以消除噪声。该算法的主要思想是将滤波窗口的加权系数定义为一个卷积核&#xff0c;对信号进行卷积运算来得到平滑后的信号。这样可以有效地去…

【论文精读】【Yolov1】You Only Look Once Unified, Real-Time Object Detection

0.论文摘要 我们提出了YOLO&#xff0c;一种新的目标检测方法。先前关于目标检测的工作重新利用分类器来执行检测。相反&#xff0c;我们将目标检测框架确定为空间分离的边界框和相关类别概率的回归问题。单个神经网络在一次评估中直接从完整图像预测边界框和类别概率。由于整…

mybatis单表curd笔记(尚硅谷

Mybatis 11111ibatis和mybatis不同 查询文档mybatis的日志输出id赋值输入&#xff08;向sql语句传入数据单个简单类型单个实体对象多个简单类型map类型 输出数据的指定单个简单类型单个实体类型输出map类型输出list输出类型主键回显&#xff08;自增长类型主键回显&#xff08;…

R语言中定义函数、调用函数及常用编程技巧

R语言中定义函数、调用函数及常用编程技巧 介绍定义函数调用函数常用编程循环结构apply 函数族apply()案例&#xff1a; lapply()案例&#xff1a; sapply()案例&#xff1a; vapply()案例&#xff1a; mapply()案例&#xff1a; 介绍 R语言是一种功能强大的统计分析编程语言&a…

构建阶段的软件供应链威胁

随着软件供应链生命周期从源代码发展到可执行组件&#xff0c;构建阶段是一个关键时刻。然而&#xff0c;这一变革阶段也容易受到一系列威胁的影响&#xff0c;这些威胁可能会危及软件的完整性和构建安全性。 这些威胁可以通过各种方法渗透构建过程&#xff0c;包括规避已建立…

LVS----DR模式

一、LVS-DR工作原理 1、LVS-DR数据包流向分析 客户端发送请求到Director Server (负载均衡器)&#xff0c;请求的数据报文&#xff08;源IP是CIP&#xff0c;目标IP是VIP&#xff09;到达内核空间。Director Server 和Real Server 在同一个网络中&#xff0c;数据通过二层数据…