网站首页/ 信息中心/ 档案百科/

档案软件按功能付费模式落地实操指南 零门槛可直接复用操作流程

发布时间:2026年08月19日 04:20:26 浏览量:0

一、前置环境准备

1. 基础系统部署

基于开源档案管理系统做二次开发,无需从零搭建,直接执行以下命令完成部署:

``` 克隆开源档案系统代码 git clone https://gitee.com/lanru/archives_manage.git 后端启动 cd archives_manage/backend mvn clean install java -jar target/archives-manage.jar --server.port=8080 前端启动 cd ../frontend npm install npm run dev ```

启动后访问 http://localhost:9528 即可进入系统默认后台,默认账号密码为admin/123456。

2. 支付环境配置

统一使用微信支付V3接口,按以下步骤完成配置:

二、功能模块拆分与定价配置

1. 功能拆分规则

档案软件通用功能拆分标准,可直接复用:

2. 数据库表配置

以下SQL可直接复制执行,无需修改

```sql -- 功能付费配置表 CREATE TABLE `pay_function_config` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `function_code` varchar(64) NOT NULL COMMENT '功能编码', `function_name` varchar(128) NOT NULL COMMENT '功能名称', `charge_type` tinyint NOT NULL COMMENT '收费类型:1按次 2包月 3包年', `price` decimal(10,2) NOT NULL COMMENT '价格(单位:元)', `valid_days` int DEFAULT NULL COMMENT '有效期(天,包年填365)', `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1启用 0禁用', PRIMARY KEY (`id`), UNIQUE KEY `uk_function_code` (`function_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='功能付费配置表'; -- 插入默认定价配置 INSERT INTO `pay_function_config` (`function_code`, `function_name`, `charge_type`, `price`, `valid_days`, `status`) VALUES ('ocr_search', 'OCR识别+全文检索', 1, 0.02, NULL, 1), ('ocr_search_month', 'OCR识别+全文检索包月', 2, 19.90, 30, 1), ('export_print', '档案导出+批量打印', 1, 0.10, NULL, 1), ('export_print_month', '档案导出+批量打印包月', 2, 29.90, 30, 1), ('cross_org_share', '跨馆共享+权限分级', 3, 399.00, 365, 1); -- 用户功能权限表 CREATE TABLE `user_function_permission` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint NOT NULL COMMENT '用户ID', `function_code` varchar(64) NOT NULL COMMENT '功能编码', `remaining_times` int DEFAULT NULL COMMENT '剩余使用次数(按次收费用)', `expire_time` datetime DEFAULT NULL COMMENT '过期时间(周期收费用)', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户功能权限表'; ```

三、付费触发逻辑开发

1. 前端触发逻辑

档案软件按功能付费模式落地实操指南 零门槛可直接复用操作流程

在对应功能按钮的点击事件中增加付费判断,Vue代码可直接复用:

```vue OCR识别档案内容 ```

2. 后端下单与回调逻辑

必须校验微信支付签名,避免伪造回调开通权限,核心代码如下:

```java // 下单接口核心逻辑 @PostMapping("/api/pay/createOrder") public R createOrder(@RequestBody PayOrderDTO dto) { PayFunctionConfig config = payFunctionConfigMapper.selectOne(Wrappers.lambdaQuery(PayFunctionConfig::getFunctionCode, dto.getFunctionCode())); // 生成订单 PayOrder order = new PayOrder(); order.setOrderNo(IdUtil.getSnowflakeNextIdStr()); order.setUserId(SecurityUtils.getUserId()); order.setFunctionCode(dto.getFunctionCode()); order.setAmount(config.getPrice()); order.setStatus(0); payOrderMapper.insert(order); // 调用微信支付统一下单 WxPayService wxPayService = WxPayConfiguration.getWxPayService(); WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request(); request.setOutTradeNo(order.getOrderNo()); request.setAmount(new WxPayUnifiedOrderV3Request.Amount().setTotal(order.getAmount().multiply(new BigDecimal(100)).intValue())); request.setDescription(config.getFunctionName()); request.setNotifyUrl("https://你的域名/api/pay/notify"); WxPayUnifiedOrderV3Result result = wxPayService.createOrderV3(request); return R.ok(result.getJsapi()); } // 支付回调核心逻辑 @PostMapping("/api/pay/notify") public String notify(@RequestBody String notifyData, HttpServletRequest request) { WxPayService wxPayService = WxPayConfiguration.getWxPayService(); // 校验官方签名 WxPayOrderNotifyV3Result notifyResult = wxPayService.parseOrderNotifyV3Result(notifyData, request); if ("SUCCESS".equals(notifyResult.getResult().getTradeState())) { String orderNo = notifyResult.getResult().getOutTradeNo(); PayOrder order = payOrderMapper.selectOne(Wrappers.lambdaQuery(PayOrder::getOrderNo, orderNo)); order.setStatus(1); payOrderMapper.updateById(order); // 给用户开通对应权限 PayFunctionConfig config = payFunctionConfigMapper.selectOne(Wrappers.lambdaQuery(PayFunctionConfig::getFunctionCode, order.getFunctionCode())); UserFunctionPermission permission = new UserFunctionPermission(); permission.setUserId(order.getUserId()); permission.setFunctionCode(order.getFunctionCode()); if (config.getChargeType() == 1) permission.setRemainingTimes(1); else permission.setExpireTime(LocalDateTime.now().plusDays(config.getValidDays())); userFunctionPermissionMapper.insert(permission); } return "success"; } ```

四、全局权限校验配置

1. 拦截器配置

通过SpringBoot拦截器统一校验功能权限,无需在每个业务代码中重复判断:

```java // 自定义功能付费注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface FunctionPay { String value() default ""; } // 拦截器核心逻辑 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) return true; FunctionPay annotation = ((HandlerMethod) handler).getMethodAnnotation(FunctionPay.class); if (annotation == null) return true; String functionCode = annotation.value(); Long userId = SecurityUtils.getUserId(); UserFunctionPermission permission = userFunctionPermissionMapper.selectOne(Wrappers.lambdaQuery(UserFunctionPermission::getUserId, userId).eq(UserFunctionPermission::getFunctionCode, functionCode)); boolean hasPermission = false; if (permission != null) { // 按次付费校验剩余次数 if (permission.getRemainingTimes() != null && permission.getRemainingTimes() > 0) { hasPermission = true; permission.setRemainingTimes(permission.getRemainingTimes() - 1); userFunctionPermissionMapper.updateById(permission); } // 周期付费校验过期时间 if (permission.getExpireTime() != null && permission.getExpireTime().isAfter(LocalDateTime.now())) hasPermission = true; } if (!hasPermission) { response.setContentType("application/json;charset=utf-8"); response.getWriter().write(JSONUtil.toJsonStr(R.error(403, "该功能需要付费后使用"))); return false; } return true; } ```

配置完成后,只需要在需要付费的接口上添加`@FunctionPay("功能编码")`注解即可自动校验权限。

2. 线上部署配置

Nginx配置可直接复制,仅需替换域名和证书路径:

```nginx server { listen 80; server_name 你的域名; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name 你的域名; ssl_certificate /data/ssl/你的证书.pem; ssl_certificate_key /data/ssl/你的证书.key; location / { root /data/archives/frontend/dist; index index.html; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```

五、测试验收流程

以上所有代码均可直接复制使用,仅需替换域名、商户号、证书路径等私有配置即可完成落地。

太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务通常包含需求分析、方案制定、现场整理、扫描加工、数据挂接、验收交付等核心流程,费用根据档案数量、纸张状况、数字化标准等因素综合计算,2026年市场价格范围大致在每页0.5元至2元之间...
2026年08月19日 04:20:26
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818