技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、Nodejs、Python、区块链等设计与开发。
主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。
🍅文末获取源码联系🍅
🍅文末获取源码联系🍅
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
《区块链开发专栏》
《区块链系统学习案例专栏》
⛺️心若有所向往,何惧道阻且长
一、技术范围与主要内容
本系统是基于区块链技术的电子签署系统,依托 FISCO BCOS 区块链平台开发,具备个人签署、多人签署、签署验证等功能,保证签署记录不可篡改、可追溯。主要实现文件签署、签署记录管理、文档验证等功能。
二、运行环境与开发工具
运行环境
- 操作系统:Windows 7/8/10 或 Mac OS
- 内存:建议 4G 及以上
- 区块链节点:需提前部署 FISCO BCOS 节点
- 数据库:支持 MySQL 等数据库
开发工具
- 前端:WebStorm、VSCode 等,基于 Vue.js 开发
- 后端:IDEA,基于 Spring Boot 开发
- 智能合约:Solidity 语言,部署在 FISCO BCOS 平台
三、系统功能详解
个人签署功能
- 注册与登录:用户使用区块链账户进行注册登录。
- 文件签署:用户上传文件,生成唯一编码,将签署信息上链。
- 签署记录查询:可查看个人所有签署记录,包含文件名、类型、编码和时间等信息。
多人签署功能
- 发起人注册:指定账户可注册为签署发起人。
- 发起多人签署:发起人指定文件和签署人,发起多人签署流程。
- 多人签署状态跟踪:可查看签署进度和状态。
文档验证功能
- 文档上传:用户上传待验证文档。
- 验证签署:系统验证文档签署的真实性和有效性,展示签署人信息、时间等。
四、环境要求
依赖管理
- 后端:使用 Maven 管理依赖。
- 前端:使用 npm 或 yarn 管理依赖。
区块链节点配置
需提前按照 FISCO BCOS 官方文档完成节点搭建。
五、技术栈
后端
- 框架:Spring Boot
- 数据库操作:MyBatis-Plus
- 区块链交互:FISCO BCOS Java SDK
前端
- 框架:Vue.js
- UI 组件库:ElementUI 等
智能合约
- 语言:Solidity
- 平台:FISCO BCOS
存储
- 本地文件/数据库:存储用户信息、签署记录等。
- 区块链:存储签署信息,保证数据不可篡改。
六、使用说明
智能合约部署
将 code\contracts-me
目录下的 Solidity 合约(ElectronicSeal.sol
、MultiSeal.sol
、Seal.sol
)部署到 FISCO BCOS 链上。
后端配置与启动
- 修改后端配置文件,配置区块链节点、数据库等参数。
- 使用 Maven 构建并启动后端服务。
前端配置与启动
- 进入
code\front-me
目录。 - 安装依赖:
npm install
或yarn
。 - 启动前端服务:
npm run serve
或yarn serve
。
系统访问
浏览器访问前端地址,进行注册、登录、签署、验证等操作。
七、功能页面展示
八、部分代码展示
智能合约示例(Solidity - ElectronicSeal.sol)
function signature(
address _account,
string _hash,
string _code,
string _datetime
) public onlyOwner {
require(address(sealMap[_account]) != address(0),"SealAccount address can not be 0 ");
sealMap[_account].signature(
_hash,
_code,
_datetime
);
}
后端服务示例(Java - SealServiceImpl.java)
@Override // 对已经叠加到一起的签章图片,进行信息上传。
public Result<String> signature(ContractBean contractBean, HttpServletRequest request)
{
// 查询用户,获得账户地址
User userOne = userUtil.getUser(request);
String chainAccount = userOne.getChainAccount();
// 用uuid 生成code编码
String code = UUID.randomUUID().toString();
Seal seal = new Seal();
BeanUtils.copyProperties(contractBean, seal);
String[] str = contractBean.getFilename().split("\\.");
seal.setCode(code);
seal.setFilename(str[0]); // 图片名
seal.setType(str[1]); // 图片后缀
seal.setUsername(userOne.getUsername()); // 签章用户名
//签章记录上链
MD5 md5 = new MD5();
String hash = md5.digestHex16(contractBean.getImgBase64());
ArrayList<String> funParams = new ArrayList<>();
funParams.add(chainAccount);
funParams.add(hash);
funParams.add(code);
funParams.add(String.valueOf(System.currentTimeMillis()));
String errorMes = HttpUtils.writeContract("sealSignature", funParams);
if (StrUtil.isNotEmpty(errorMes))
{
return Result.error(errorMes);
}
// 插入数据库
sealMapper.insert(seal);
return Result.success("签章信息上传成功");
}
前端页面示例(Vue - Records.vue)
<template>
<div class="seal-container">
<div class="seal-card">
<div class="card-header">
<h3 class="card-title">我的印章</h3>
<p class="card-subtitle">查看您的个人电子印章</p>
</div>
<div class="seal-content">
<b-overlay :show="sealImg === ''" rounded="sm" class="seal-overlay">
<template #overlay>
<div class="loading-content">
<b-spinner variant="primary" label="加载中..."></b-spinner>
<p class="mt-2">正在加载印章...</p>
</div>
</template>
<div class="seal-image-container">
<img :src="sealImg" alt="我的印章" class="seal-image" />
</div>
</b-overlay>
</div>
</div>
</div>
</template>