Skyeye v4.1.4:用 AI 与零代码串联 ERP、MES 和企业流程

2026-09-14 12 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

Skyeye 云企业级 AI+零代码智能制造系统发布 v4.1.4。它采用 Spring Boot、UNI-APP 和 Ant Design Vue 构建零代码平台,覆盖 CRM、PM、ERP、MES、OA、EHR、财务、考勤、招聘、售后、工作流、报表、SaaS 等业务,并提供 100 多种电子流程。对制造企业来说,这类平台的价值不只是“模块多”,而是让销售、采购、生产、库存、财务和人事使用同一套流程语言。

需要注意的是,现有发布摘要没有列出 v4.1.4 的逐项变更、兼容性说明和数据库迁移内容。因此,升级前仍应结合项目发布记录核对具体差异,不宜仅凭版本号直接覆盖生产环境。

从功能集合走向业务闭环

制造系统最常见的问题,是每个部门都有软件,但数据仍靠 Excel、聊天消息和人工录入传递。Skyeye 覆盖的模块足以组成一条典型业务链路:

  1. CRM 接收客户与商机,订单确认后进入 ERP。
  2. ERP 根据订单、库存和物料需求组织采购与生产。
  3. MES 承接工单、工序、报工和质量记录。
  4. 项目管理与工作流处理跨部门任务、审批和异常。
  5. 财务模块接收应收、应付与成本数据。
  6. EHR、考勤和薪资模块管理生产班次及人员成本。
  7. 报表与 AI 应用基于统一数据辅助查询、汇总和决策。

这里真正需要设计的是模块间的状态转换。例如,“销售订单已审核”不应只是页面上的一个标签,它还可能触发库存检查、生产计划、采购申请和应收单据。零代码配置降低了表单和审批的开发成本,但订单、工单、库存等核心对象仍要有明确的状态机、责任人和失败补偿机制。

技术栈适合怎样分工

Spring Boot 适合承载权限、业务规则、事务、接口集成和任务调度;Ant Design Vue 可以承担后台管理端的表格、表单和审批界面;UNI-APP 则适合覆盖移动报工、现场巡检、售后签到等跨端场景。

可以将系统分成三类扩展边界:

  • 页面与表单扩展:字段、校验、布局、列表和基础审批优先使用零代码能力。
  • 领域规则扩展:库存扣减、成本计算、工单拆分等逻辑放在 Spring Boot 服务中,并由自动化测试保护。
  • 外部系统集成:设备平台、企业微信、短信、电子发票或既有财务系统通过 API、消息队列或适配器连接。

这种分工可以避免把复杂规则塞进大量不可追踪的页面脚本。零代码负责高频变化,代码负责强一致性、复杂计算和外部协议。

一个可改造的工单事件接入示例

下面是一个独立、可运行的 Spring Boot 示例,用于演示外围系统如何接收“工单完工”事件。它不是 Skyeye 已公开接口的声明;实际接入时,需要将 URL、字段和鉴权方式替换为项目提供的接口定义。

创建一个 Maven 项目,并使用下面的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>manufacturing-adapter</artifactId>
  <version>1.0.0</version>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.5</version>
    <relativePath/>
  </parent>
  <properties>
    <java.version>17</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

然后创建 src/main/java/com/example/adapter/AdapterApplication.java

package com.example.adapter;

import java.time.Instant;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
@RestController
@RequestMapping("/integration/work-orders")
public class AdapterApplication {
    private final Map<String, WorkOrderEvent> processed = new ConcurrentHashMap<>();

    public static void main(String[] args) {
        SpringApplication.run(AdapterApplication.class, args);
    }

    @PostMapping("/completed")
    public ResponseEntity<?> complete(
            @RequestHeader("X-Integration-Token") String token,
            @RequestBody WorkOrderEvent event) {

        if (!"change-me".equals(token)) {
            return ResponseEntity.status(401).body(Map.of("error", "invalid token"));
        }
        if (event.eventId() == null || event.workOrderNo() == null || event.quantity() <= 0) {
            return ResponseEntity.badRequest().body(Map.of("error", "invalid event"));
        }

        boolean firstDelivery = processed.putIfAbsent(event.eventId(), event) == null;
        return ResponseEntity.ok(Map.of(
                "accepted", true,
                "duplicate", !firstDelivery,
                "receivedAt", Instant.now().toString()));
    }

    public record WorkOrderEvent(
            String eventId,
            String workOrderNo,
            String productCode,
            int quantity,
            String completedAt) {}
}

运行并发送测试事件:

mvn spring-boot:run

curl -i http://localhost:8080/integration/work-orders/completed \
  -H 'Content-Type: application/json' \
  -H 'X-Integration-Token: change-me' \
  -d '{
    "eventId": "evt-20250308-001",
    "workOrderNo": "WO-2025-00018",
    "productCode": "MOTOR-A01",
    "quantity": 120,
    "completedAt": "2025-03-08T10:30:00Z"
  }'

示例通过 eventId 做了进程内幂等判断,重复提交会返回 duplicate: true。生产环境应改用数据库唯一索引或 Redis,并补充签名校验、重试队列、审计日志和指标监控。涉及库存与财务时,不要依赖单次 HTTP 调用实现跨系统强事务,更稳妥的方式是记录本地事件,再通过消息或定时补偿完成最终一致性。

AI 能力要建立在权限和数据边界之上

AI 可以用于自然语言查报表、工单摘要、售后记录归纳、知识检索和流程建议,但不能绕过原有权限体系。一个“查询本月客户欠款”的智能助手,应先把用户身份、组织范围和字段权限转换为后端查询条件,而不是把整张财务表交给模型过滤。

落地时至少要控制四件事:

  • 模型只能调用白名单工具,不能直接拼接并执行任意 SQL。
  • 提示词、模型输入和输出应脱敏,特别是薪资、客户联系方式与财务信息。
  • AI 生成的采购、排产或付款建议必须保留人工确认环节。
  • 每次工具调用都记录用户、参数、数据范围、结果摘要和耗时,便于审计。

升级 v4.1.4 前的检查清单

面对覆盖面较广的一体化系统,版本升级的风险通常集中在数据结构、流程定义、权限和二次开发接口。建议按以下顺序处理:

  • 在测试环境恢复一份脱敏后的生产数据库,验证升级脚本和回滚过程。
  • 盘点自定义表单、工作流、报表、定时任务以及 Spring Boot 扩展代码。
  • 回归订单到生产、生产到入库、采购到付款等关键业务链路。
  • 分别测试 Ant Design Vue 管理端和 UNI-APP 移动端的登录、权限与表单提交。
  • 检查多班次考勤、薪资计算、库存扣减等日期或事务敏感功能。
  • 对 AI 功能执行越权、提示词注入、敏感数据泄露和错误工具调用测试。
  • 先灰度给少量组织或账号使用,再根据错误率和业务对账结果扩大范围。

Skyeye v4.1.4 展示的是一种完整的企业数字化路线:用零代码快速承接多变流程,用 Spring Boot 固化关键规则,再让 Web、移动端和 AI 共享业务数据。真正决定系统效果的,不是一次上线多少模块,而是主数据是否统一、流程是否可追踪、权限是否严格,以及跨模块失败后能否可靠恢复。


相关推荐