JAVA电子合同签章小程序开源代码
·
以下是一个基于Uniapp和Java的合同生成小程序开源代码片段及实现思路,涵盖前后端关键模块,内容经过精简整合:
技术选型
- 前端:Uniapp + Vue3 + uView UI
- 后端:Spring Boot + MyBatis Plus
- 数据库:MySQL
- 合同模板引擎:Freemarker
前端核心代码
// pages/contract/create.vue
<template>
<u-form :model="formData" ref="formRef">
<u-form-item label="合同类型" prop="templateId">
<u-select v-model="formData.templateId" :options="templates" />
</u-form-item>
<u-form-item v-for="(field,index) in dynamicFields" :key="index" :label="field.label">
<u-input v-model="field.value" :placeholder="`请输入${field.label}`" />
</u-form-item>
<u-button @click="generate">生成合同</u-button>
</u-form>
</template>
<script setup>
const formData = reactive({
templateId: null,
parties: []
});
const loadTemplates = async () => {
const res = await uni.request({
url: '/api/template/list',
method: 'GET'
});
templates.value = res.data.map(item => ({
label: item.name,
value: item.id
}));
};
</script>
后端核心逻辑
// ContractController.java
@RestController
@RequestMapping("/api/contract")
public class ContractController {
@Autowired
private TemplateService templateService;
@PostMapping("/generate")
public Result generate(@RequestBody ContractDTO dto) {
// 1. 获取模板内容
String templateContent = templateService.getById(dto.getTemplateId()).getContent();
// 2. 填充模板变量
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
StringWriter writer = new StringWriter();
new Template("contract", new StringReader(templateContent), cfg)
.process(dto.getVariables(), writer);
// 3. 生成PDF
byte[] pdfBytes = PdfGenerator.generate(writer.toString());
return Result.success().data("pdf", Base64.getEncoder().encodeToString(pdfBytes));
}
}
数据库设计
CREATE TABLE `contract_template` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL COMMENT '模板名称',
`content` text COMMENT 'Freemarker模板内容',
`variables` json DEFAULT NULL COMMENT '变量定义',
PRIMARY KEY (`id`)
);
CREATE TABLE `contract_record` (
`id` int NOT NULL AUTO_INCREMENT,
`template_id` int DEFAULT NULL,
`parties` json DEFAULT NULL COMMENT '签约方信息',
`content` text COMMENT '最终合同内容',
`pdf_url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
PDF生成工具类
// PdfGenerator.java
public class PdfGenerator {
private static final Logger log = LoggerFactory.getLogger(PdfGenerator.class);
public static byte[] generate(String html) throws IOException {
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.withHtmlContent(html, null);
builder.toStream(os);
builder.run();
return os.toByteArray();
}
}
}
关键功能实现
动态表单渲染 根据模板配置的variables字段动态生成输入表单:
watch(() => formData.templateId, (newVal) => {
if (!newVal) return;
uni.request({
url: `/api/template/detail?id=${newVal}`,
success(res) {
dynamicFields.value = JSON.parse(res.data.variables).map(item => ({
...item,
value: ''
}));
}
});
});
合同签署流程
- 生成合同PDF后调用微信小程序签署API
- 记录签署状态到数据库
- 通过WebSocket实时通知签署进度
部署方案
- 前端:发布到微信小程序平台
- 后端:Docker容器化部署
FROM openjdk:17
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
扩展功能建议
区块链存证 将合同哈希值上链实现不可篡改:
public class BlockchainService {
public String storeHash(String hash) {
// 调用以太坊智能合约
Web3j web3 = Web3j.build(new HttpService());
EthSendTransaction transaction = web3.ethSendTransaction(...);
return transaction.getTransactionHash();
}
}
OCR身份识别 集成百度AI实现身份证识别:
public class IdCardOCR {
public IdCardInfo recognize(byte[] imageData) {
AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
JSONObject res = client.idcard(imageData, true);
return parseResult(res);
}
}
完整项目需要包含用户认证、权限控制、合同管理等模块,建议参考GitHub上成熟的开源项目如:
- uni-admin(Uniapp后台模板)
- renren-fast(Spring Boot快速开发框架)
- document-signature(电子签名解决方案)
陈🔍
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)