feat: 提交流程中心后端代码
build / build-push (push) Successful in 28s

Spring Boot 流程引擎服务:流程定义/实例/任务、审批人解析、
回调分发、oapi 接口及单元测试。
保留远程 .gitea/workflows/build.yml 与 docker/Dockerfile,
新增 .gitignore 排除 target/ 构建产物。
This commit is contained in:
chenxing
2026-09-15 10:42:56 +08:00
parent 0296b2b5dd
commit c1103aeb29
65 changed files with 7119 additions and 0 deletions
@@ -0,0 +1,111 @@
package com.yunhai.flowcenter.entity;
import com.yunhai.flowcenter.enums.FlwEnums;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version;
import java.time.LocalDateTime;
/**
* 办件实例(概览 §4.3 + V2.0 Part D):托管模式下业务对象留在业务方,本表只存
* biz_title/biz_url/biz_snapshot 快照与关联键;uk(sch_id, biz_type, biz_id) 幂等——
* 同一业务对象一条办件,重复代发起返回原办件;驳回/撤回后重提复用同一行(R4 重启语义)。
*
* <p>version 是乐观锁(推进串行化)兼回调 payload 的 instanceVersion(业务方按它丢弃乱序旧事件),
* 由 JPA @Version 在 flush 时自增。
*/
@Getter
@Setter
@Entity
@Table(name = "flw_instance",
uniqueConstraints = @UniqueConstraint(name = "uk_flw_instance_biz",
columnNames = {"sch_id", "biz_type", "biz_id"}),
indexes = {
@Index(name = "idx_flw_inst_submitter", columnList = "sch_id, submitter_id, status"),
@Index(name = "idx_flw_inst_status_time", columnList = "sch_id, status, submit_time")})
public class FlwInstance extends BaseEntity {
/** 租户键 */
@Column(name = "sch_id", nullable = false)
private Long schId;
/** 定义快照(发布版本 id;重提重启时刷新为当前已发布版本) */
@Column(name = "def_id", nullable = false)
private Long defId;
/** 定义编码快照 */
@Column(name = "def_code", nullable = false, length = 64)
private String defCode;
/** 定义版本快照 */
@Column(name = "def_version", nullable = false)
private Integer defVersion;
/** 表单提交快照(无表单托管模式为 NULL,透传存业务方 formData) */
@Column(name = "form_data_json", columnDefinition = "LONGTEXT")
private String formDataJson;
/** CMS 事项快照(原生模式,M1 不启用恒 null) */
@Column(name = "item_code", length = 64)
private String itemCode;
@Column(name = "item_title", length = 200)
private String itemTitle;
/** 业务类型键(外部托管模式,如 svc_item) */
@Column(name = "biz_type", length = 32)
private String bizType;
/** 业务主键(如 svc-hall applyId) */
@Column(name = "biz_id", length = 64)
private String bizId;
/** 办件标题快照:待办列表/消息/回调 payload 统一携带 */
@Column(name = "biz_title", length = 200)
private String bizTitle;
/** 业务方详情页链接:办理页"查看业务详情"跳转入口 */
@Column(name = "biz_url", length = 500)
private String bizUrl;
/** 业务摘要 JSON 快照:办理页展示用(只收摘要,不收富文本正文,概览 §十边界) */
@Column(name = "biz_snapshot", columnDefinition = "LONGTEXT")
private String bizSnapshot;
/** 提交人 id(外部模式=业务方当前登录人快照,本校校验在入口做) */
@Column(name = "submitter_id", nullable = false)
private Integer submitterId;
/** 提交人姓名快照 */
@Column(name = "submitter_name", nullable = false, length = 128)
private String submitterName;
/** 10 审批中 / 20 已完成 / 30 已拒绝 / 40 已撤回 */
@Column(name = "status", nullable = false)
private Integer status = FlwEnums.InstanceStatus.APPROVING.getCode();
/** 当前活跃节点 id 集合(冗余逗号分隔,列表页免展开) */
@Column(name = "current_nodes", length = 200)
private String currentNodes;
@Column(name = "submit_time")
private LocalDateTime submitTime;
@Column(name = "finish_time")
private LocalDateTime finishTime;
/**
* 乐观锁版本:推进串行化 + 回调 instanceVersion 单调递增。
* 注意不可初始化(=0 会让 Spring Data 判定非新实体走 merge,id 不回填);
* insert 时由 Hibernate 写入 0。
*/
@Version
@Column(name = "version", nullable = false)
private Integer version;
}