以下是一个基于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: ''
      }));
    }
  });
});

合同签署流程

  1. 生成合同PDF后调用微信小程序签署API
  2. 记录签署状态到数据库
  3. 通过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(电子签名解决方案)

陈🔍

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐