build / build-push (push) Successful in 1m21s
含10-22精修: 对账有限重试(retry_count/指数退避/work_version防旧覆盖)+接缝身份(source-app-key空拒收)+应急对账闸让位FlowApplyRecoveryService+同attempt指令不重开终态。SQL未执行。
218 lines
8.7 KiB
Java
218 lines
8.7 KiB
Java
package com.yunhai.svchall.entity;
|
||
|
||
import com.yunhai.svchall.enums.ServiceItemStatusEnum;
|
||
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 java.time.LocalDateTime;
|
||
|
||
/**
|
||
* 事项主表(承袭 CMS cms_service_item 全字段,V2.0 Part B.2.1)。
|
||
* 变化点:site_id → site_code(跨应用后 CMS 自增 id 无意义,sch_id 定租户);
|
||
* 新增 form_code(绑定自定义表单)/ flow_guid(绑定流程中心流程,NULL=纯指南事项);
|
||
* apply_url 由 ext_json 提升为独立列。
|
||
*
|
||
* <p>主键 id 语义(V2.0 C.2"id 语义"):CMS 迁移时**原值 identity insert**——CMS 门户指南页
|
||
* 路由 /sv/{itemId} 直接携带本表主键;本应用自增起点须大于迁移 max(id)。
|
||
*
|
||
* <p>索引声明口径:带排序方向的门户列表索引(sch_id, site_code, status, sort_no ASC,
|
||
* publish_time DESC, id DESC)含 DESC 列,Hibernate {@code @Index} 无法表达,由 sql/ 升级脚本补建。
|
||
*/
|
||
@Getter
|
||
@Setter
|
||
@Entity
|
||
@Table(name = "service_item",
|
||
uniqueConstraints = @UniqueConstraint(name = "uk_svc_item_code",
|
||
columnNames = {"sch_id", "site_code", "item_code"}),
|
||
indexes = {
|
||
@Index(name = "idx_svc_item_list", columnList = "sch_id, site_code, status, online_flag, sort_no"),
|
||
@Index(name = "idx_svc_item_obj", columnList = "sch_id, site_code, status, object_key"),
|
||
@Index(name = "idx_svc_item_cat", columnList = "sch_id, site_code, status, category_key"),
|
||
@Index(name = "idx_svc_item_dept", columnList = "sch_id, site_code, status, dept_group_id"),
|
||
@Index(name = "idx_svc_item_flow", columnList = "flow_guid"),
|
||
@Index(name = "idx_svc_item_form", columnList = "form_code")})
|
||
public class ServiceItem extends BaseEntity {
|
||
|
||
/** 租户键(= UserBase 学校 id,承袭 CMS site.sch_id 口径) */
|
||
@Column(name = "sch_id", nullable = false)
|
||
private Long schId;
|
||
|
||
/** 站点编码(CMS cms_site.code 引用;办事大厅不建 site 表,站点目录经 CMS oapi 解析) */
|
||
@Column(name = "site_code", nullable = false, length = 64)
|
||
private String siteCode;
|
||
|
||
/** 事项编码,站点内唯一;跨服务键的一半(另一半是 siteCode) */
|
||
@Column(name = "item_code", nullable = false, length = 64)
|
||
private String itemCode;
|
||
|
||
/** 事项名称 */
|
||
@Column(name = "title", nullable = false, length = 200)
|
||
private String title;
|
||
|
||
/** 一句话简介(列表卡片副标题、办件 biz_snapshot 摘要) */
|
||
@Column(name = "summary", length = 500)
|
||
private String summary;
|
||
|
||
/** 服务对象,指向 service_dict(dict_type=object) 的 dict_key */
|
||
@Column(name = "object_key", length = 64)
|
||
private String objectKey;
|
||
|
||
/** 事项类别,指向 service_dict(dict_type=category) 的 dict_key */
|
||
@Column(name = "category_key", length = 64)
|
||
private String categoryKey;
|
||
|
||
/** 服务部门 = UserBase 组树节点 id 快照(不建字典表) */
|
||
@Column(name = "dept_group_id")
|
||
private Integer deptGroupId;
|
||
|
||
/** 部门名快照(列表/指南免跨服务查名;改名不自动同步,靠 syncDeptName) */
|
||
@Column(name = "dept_name", length = 128)
|
||
private String deptName;
|
||
|
||
/** 办理方式:1 线上 / 2 线下 / 3 线上线上线下(HandleModeEnum) */
|
||
@Column(name = "handle_mode", nullable = false)
|
||
private Integer handleMode = 1;
|
||
|
||
/** 是否可在线办理:1 是 / 0 否。一致性校验:=1 时 flowGuid 必须非空(V2.0 B.2.1) */
|
||
@Column(name = "online_flag", nullable = false)
|
||
private Integer onlineFlag = 1;
|
||
|
||
/** 办理地点 */
|
||
@Column(name = "handle_place", length = 200)
|
||
private String handlePlace;
|
||
|
||
/** 办理时限(文本,如"3 个工作日") */
|
||
@Column(name = "handle_time_limit", length = 64)
|
||
private String handleTimeLimit;
|
||
|
||
/** 承诺时限(文本) */
|
||
@Column(name = "promise_time_limit", length = 64)
|
||
private String promiseTimeLimit;
|
||
|
||
/** 咨询电话 */
|
||
@Column(name = "contact_phone", length = 64)
|
||
private String contactPhone;
|
||
|
||
/** 监督投诉电话 */
|
||
@Column(name = "supervise_phone", length = 64)
|
||
private String supervisePhone;
|
||
|
||
/** 办理流程(保存时 jsoup 白名单清洗;库内相对 /upload/ 路径,oapi 出参绝对化) */
|
||
@Column(name = "process_html", columnDefinition = "LONGTEXT")
|
||
private String processHtml;
|
||
|
||
/** 所需材料(同上) */
|
||
@Column(name = "material_html", columnDefinition = "LONGTEXT")
|
||
private String materialHtml;
|
||
|
||
/** 注意事项(同上) */
|
||
@Column(name = "notice_html", columnDefinition = "LONGTEXT")
|
||
private String noticeHtml;
|
||
|
||
/**
|
||
* 关联 CMS 栏目:常见问题(**不透明引用** → cms_category.id,本应用不校验存在性,
|
||
* CMS detail 转调时解析为 URL;V2.0 Part C.2/R2)
|
||
*/
|
||
@Column(name = "faq_category_id")
|
||
private Integer faqCategoryId;
|
||
|
||
/** 关联 CMS 栏目:公告信息 */
|
||
@Column(name = "notice_category_id")
|
||
private Integer noticeCategoryId;
|
||
|
||
/** 关联 CMS 栏目:文件规定 */
|
||
@Column(name = "rule_category_id")
|
||
private Integer ruleCategoryId;
|
||
|
||
/** 事项封面(库内相对 /upload/ 路径,出参绝对化) */
|
||
@Column(name = "cover_image", length = 500)
|
||
private String coverImage;
|
||
|
||
/**
|
||
* 绑定自定义表单 code(service_form.code;NULL=发起无需表单);发起时取最新已发布版本。
|
||
*
|
||
* <p><b>本列已停止新写入</b>(v3/TASK_1):表单定义归表单中心,事项只能绑 {@code fcFormUuid}
|
||
* 那组服务器验证过的坐标。存量行为双轨期的历史数据保留读路径(办件回显与 {@code effectiveFlowGuid}
|
||
* 仍认它),保存链路遇到"写一个不一样的 code"直接拒。</p>
|
||
*/
|
||
@Column(name = "form_code", length = 64)
|
||
private String formCode;
|
||
|
||
/** 绑定表单中心表单 uuid(form-center 对外身份,32 位;NULL=未绑远端表单) */
|
||
@Column(name = "fc_form_uuid", length = 32)
|
||
private String fcFormUuid;
|
||
|
||
/**
|
||
* 绑定表单中心的<b>确切版本</b>(与 {@link #fcFormUuid} 成对,单传一个即拒)。
|
||
* 存的是服务器侧校验过的版本号,不是前端自由输入的字符串。
|
||
*/
|
||
@Column(name = "fc_form_version")
|
||
private Integer fcFormVersion;
|
||
|
||
/** 绑定流程中心流程(flw_def.flow_guid;NULL=纯指南事项不可在线办理) */
|
||
@Column(name = "flow_guid", length = 32)
|
||
private String flowGuid;
|
||
|
||
/** "我要办理"手填外链(http(s)://;三态优先级最高,承袭 CMS ext_json.apply_url 语义) */
|
||
@Column(name = "apply_url", length = 500)
|
||
private String applyUrl;
|
||
|
||
// 服务承诺字段(P1-1):政务服务化度量口径,空=未维护
|
||
/** 收费标准 */
|
||
@Column(name = "fee_desc", length = 200)
|
||
private String feeDesc;
|
||
|
||
/** 收费依据 */
|
||
@Column(name = "fee_basis", length = 200)
|
||
private String feeBasis;
|
||
|
||
/** 协办部门(顿号分隔文本快照,不做部门树外键) */
|
||
@Column(name = "coop_depts", length = 500)
|
||
private String coopDepts;
|
||
|
||
/** 经办人员 */
|
||
@Column(name = "handler_name", length = 64)
|
||
private String handlerName;
|
||
|
||
/** 办理时间(办公时段,区别于 handle_time_limit 办理时限) */
|
||
@Column(name = "handle_time_desc", length = 200)
|
||
private String handleTimeDesc;
|
||
|
||
/** 跑现场次数(0=零跑动) */
|
||
@Column(name = "run_count")
|
||
private Integer runCount;
|
||
|
||
/** 是否快递送达:0 否 / 1 是(到付)/ 2 是(学校承担) */
|
||
@Column(name = "express_flag")
|
||
private Integer expressFlag;
|
||
|
||
/** 管理端自定义排序(列表默认排序第一优先级,升序) */
|
||
@Column(name = "sort_no", nullable = false)
|
||
private Integer sortNo = 0;
|
||
|
||
/** 状态:0 草稿 / 1 已发布 / 2 已下架(ServiceItemStatusEnum) */
|
||
@Column(name = "status", nullable = false)
|
||
private Integer status = ServiceItemStatusEnum.DRAFT.getCode();
|
||
|
||
/** 发布时间 */
|
||
@Column(name = "publish_time")
|
||
private LocalDateTime publishTime;
|
||
|
||
/** 下架时间 */
|
||
@Column(name = "offline_time")
|
||
private LocalDateTime offlineTime;
|
||
|
||
/** 指南页浏览量(CMS 经 /oapi/svc/item/view 异步累加,不承诺精确) */
|
||
@Column(name = "view_count", nullable = false)
|
||
private Integer viewCount = 0;
|
||
|
||
/** 扩展字段 JSON(预留,一期不写) */
|
||
@Column(name = "ext_json", columnDefinition = "JSON")
|
||
private String extJson;
|
||
}
|