feat: 生产部署 + 会议全链路 (执行方分配/费用结算/签到脱敏/H5相机)
- 生产 nginx 三路径: ry-vue3 /hg/, ry-h5 /camera/, API /hg-api, .env 分环境 - 签约链接/摄像头 base-url 走 yml, 不再硬编码 /hg 与 localhost - 新增 biz_project_executor_assign (镜像 sponsor_assign) 执行方项目级分配 - 会议费用后台汇总 FeeCalcScheduler + 结算回写项目金额 + 状态流转调度 - 签到表拍照高斯模糊脱敏 extra_oss_url, 新增 PosterService/StageDeriver - 清理 biz_support_intent 旧表 (6 Java/XML 删除) - ry-h5 相机黑屏修复: 显式 video.play() + 动态 apiBase 上传 - 资源: simhei 字体 / logo.png / qrcode_1.png / favicon.ico Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,9 @@ public class RuoYiConfig
|
||||
/** OSS 配置 (可选) */
|
||||
private OssProperties oss = new OssProperties();
|
||||
|
||||
/** 扫码拍照相机网页配置 (可选) */
|
||||
private CameraProperties camera = new CameraProperties();
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
@@ -133,6 +136,28 @@ public class RuoYiConfig
|
||||
this.oss = oss;
|
||||
}
|
||||
|
||||
public CameraProperties getCamera()
|
||||
{
|
||||
return camera;
|
||||
}
|
||||
|
||||
public void setCamera(CameraProperties camera)
|
||||
{
|
||||
this.camera = camera;
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫码拍照相机网页配置 (前端二维码目标 URL)
|
||||
*/
|
||||
public static class CameraProperties
|
||||
{
|
||||
/** 相机 H5 网页基础地址, 例如 http://localhost:8090/camera/ */
|
||||
private String baseUrl;
|
||||
|
||||
public String getBaseUrl() { return baseUrl; }
|
||||
public void setBaseUrl(String baseUrl) { this.baseUrl = baseUrl; }
|
||||
}
|
||||
|
||||
/**
|
||||
* OSS 配置 (前端直传签名用)
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.ruoyi.common.enums;
|
||||
|
||||
/**
|
||||
* 会议 当前阶段 (biz_meeting.current_stage)
|
||||
* <p>
|
||||
* 10 值统一物理状态机 (单一可信源). 每个角色看到的是它的一个显示投影, 见前端 stageLabel(role, code):
|
||||
* <pre>
|
||||
* NOT_STARTED 未执行 会议开始时间前
|
||||
* ↓ (过 startTime, scheduler)
|
||||
* RUNNING 执行中 已开始, 执行方未提交材料
|
||||
* ↓ (执行方提交材料)
|
||||
* AWAITING_COMPLIANCE 待合规审核 执行方已提交, 等合规人员审核 (支持方此时只读, 不能审)
|
||||
* ↓ (合规审通过) ↘ (合规退回)
|
||||
* AWAITING_SUPERVISION 待支持方审核 合规审通过, 等支持方审核(填监管意见)
|
||||
* ↓ (支持方审通过) ↘ (支持方退回)
|
||||
* SUPERVISION_APPROVED 审核通过 支持方审通过, 等 1 自然日 → 待结算
|
||||
* ↓ (过 1 自然日, scheduler)
|
||||
* AWAITING_SETTLEMENT 待结算 支持方审通过 + 1 自然日, 等合规结算 + 上传付款凭证
|
||||
* ↓ (合规结算 + 上传凭证)
|
||||
* SETTLED 已结算 材料+凭证均通过, 已结算
|
||||
* ↓ (合规/管理员手动完结)
|
||||
* FINISHED 已完结 流程终止
|
||||
*
|
||||
* RECTIFYING 待整改 合规或支持方退回, 执行方整改后重新提交 → AWAITING_COMPLIANCE
|
||||
* FROZEN 冻结中 过期未提交, 不可再提交
|
||||
* </pre>
|
||||
*
|
||||
* <p>code 用英文单词而非数字, 原因:
|
||||
* <ol>
|
||||
* <li>B-tree 索引比较更快 (ASCII 7-19B vs UTF-8 中文 9B/字符)</li>
|
||||
* <li>日志/SQL 直接可读, 不需要 decode</li>
|
||||
* <li>URL 查询参数无需 URL-encode (解决 ?currentStage=执行中 编码乱问题)</li>
|
||||
* </ol>
|
||||
*
|
||||
* <p>前端 dropdown / KPI 卡 / 列表筛选: value 用 code, 显示用 info (中文 label).
|
||||
*
|
||||
* @author guoju
|
||||
*/
|
||||
public enum BizMeetingStageEnum
|
||||
{
|
||||
/** 会议开始时间前 */
|
||||
NOT_STARTED("NOT_STARTED", "未执行", "会议开始时间前"),
|
||||
|
||||
/** 已开始, 执行方未提交材料 */
|
||||
RUNNING("RUNNING", "执行中", "已开始, 执行方未提交"),
|
||||
|
||||
/** 执行方已提交, 等合规人员审核 (支持方此阶段只读, 不可审) */
|
||||
AWAITING_COMPLIANCE("AWAITING_COMPLIANCE", "待合规审核", "执行方提交, 等合规审"),
|
||||
|
||||
/** 合规审通过, 等支持方审核 (填监管意见) */
|
||||
AWAITING_SUPERVISION("AWAITING_SUPERVISION", "待支持方审核", "合规审通过, 等支持方审"),
|
||||
|
||||
/** 支持方审通过, 等 1 自然日 → 待结算 */
|
||||
SUPERVISION_APPROVED("SUPERVISION_APPROVED", "审核通过", "支持方审通过, 等结算"),
|
||||
|
||||
/** 合规或支持方退回, 执行方整改后重新提交 */
|
||||
RECTIFYING("RECTIFYING", "待整改", "审核退回, 执行方整改"),
|
||||
|
||||
/** 支持方审通过 + 1 自然日, 等合规结算 + 上传付款凭证 */
|
||||
AWAITING_SETTLEMENT("AWAITING_SETTLEMENT", "待结算", "支持方审通过, 等结算"),
|
||||
|
||||
/** 合规点击结算 + 上传付款凭证, 全部完成 */
|
||||
SETTLED("SETTLED", "已结算", "已结算 + 凭证已上传"),
|
||||
|
||||
/** 已结算后, 合规/管理员手动完结, 流程终止 */
|
||||
FINISHED("FINISHED", "已完结", "已结算后手动完结"),
|
||||
|
||||
/** 会议结束后逾期未提交, 冻结 (不可再提交) */
|
||||
FROZEN("FROZEN", "冻结中", "过期未提交, 不可再提交");
|
||||
|
||||
private final String code;
|
||||
private final String info;
|
||||
private final String description;
|
||||
|
||||
BizMeetingStageEnum(String code, String info, String description)
|
||||
{
|
||||
this.code = code;
|
||||
this.info = info;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getCode()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getInfo()
|
||||
{
|
||||
return info;
|
||||
}
|
||||
|
||||
public String getDescription()
|
||||
{
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据 code 解析枚举 (找不到返回 null, 调用方自行 fallback)
|
||||
*/
|
||||
public static BizMeetingStageEnum of(String code)
|
||||
{
|
||||
if (code == null) return null;
|
||||
for (BizMeetingStageEnum e : values())
|
||||
{
|
||||
if (e.code.equals(code)) return e;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.ruoyi.common.enums;
|
||||
|
||||
/**
|
||||
* 材料/凭证 审核阶段 (biz_meeting.material_audit_stage / voucher_audit_stage)
|
||||
* <p>
|
||||
* 4 值 (用户拍板「已提交/待审核」合并): 提交后进入 SUBMITTED, 两级审核(合规先-支持方后)
|
||||
* 用 material_compliance_approved / voucher_compliance_approved 布尔区分「合规审中 vs 支持方审中」.
|
||||
* <pre>
|
||||
* NOT_SUBMITTED 未提交 执行方还没交
|
||||
* ↓ (执行方提交)
|
||||
* SUBMITTED 已提交 已提交, 在审 (合规审中=compliance_approved=0, 支持方审中=1)
|
||||
* ↓ (支持方审通过)
|
||||
* APPROVED 审核通过 支持方已通过
|
||||
*
|
||||
* REJECTED 审核驳回 被合规/支持方退回 (执行方重提 → SUBMITTED)
|
||||
* </pre>
|
||||
*
|
||||
* @author guoju
|
||||
*/
|
||||
public enum MeetingAuditStageEnum
|
||||
{
|
||||
/** 未提交 */
|
||||
NOT_SUBMITTED("NOT_SUBMITTED", "未提交"),
|
||||
/** 已提交 (含两级审核中, 层级由 compliance_approved 区分) */
|
||||
SUBMITTED("SUBMITTED", "已提交"),
|
||||
/** 审核通过 (支持方已通过) */
|
||||
APPROVED("APPROVED", "审核通过"),
|
||||
/** 审核驳回 (退回) */
|
||||
REJECTED("REJECTED", "审核驳回");
|
||||
|
||||
private final String code;
|
||||
private final String info;
|
||||
|
||||
MeetingAuditStageEnum(String code, String info)
|
||||
{
|
||||
this.code = code;
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public String getCode()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getInfo()
|
||||
{
|
||||
return info;
|
||||
}
|
||||
|
||||
public static MeetingAuditStageEnum of(String code)
|
||||
{
|
||||
if (code == null) return null;
|
||||
for (MeetingAuditStageEnum e : values())
|
||||
{
|
||||
if (e.code.equals(code)) return e;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user