插件
This commit is contained in:
BIN
docs/AI训练资料/2.pdf
Normal file
BIN
docs/AI训练资料/2.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/MTU机组操作说明.pdf
Normal file
BIN
docs/AI训练资料/MTU机组操作说明.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/MTU机组维护计划.pdf
Normal file
BIN
docs/AI训练资料/MTU机组维护计划.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/THL系列柴油发电机组 使用维护说明书-中文-终稿.pdf
Normal file
BIN
docs/AI训练资料/THL系列柴油发电机组 使用维护说明书-中文-终稿.pdf
Normal file
Binary file not shown.
Binary file not shown.
BIN
docs/AI训练资料/丹控控制器/agc-150-modbus-tables-4189341212-中文.xlsx
Normal file
BIN
docs/AI训练资料/丹控控制器/agc-150-modbus-tables-4189341212-中文.xlsx
Normal file
Binary file not shown.
BIN
docs/AI训练资料/丹控控制器/agc-4-modbus-tables-4189341215-中文.xlsx
Normal file
BIN
docs/AI训练资料/丹控控制器/agc-4-modbus-tables-4189341215-中文.xlsx
Normal file
Binary file not shown.
BIN
docs/AI训练资料/丹控控制器/agc-4-操作手册-4189340690-中文.pdf
Normal file
BIN
docs/AI训练资料/丹控控制器/agc-4-操作手册-4189340690-中文.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/丹控控制器/sgc_420_421_用户手册_4189341227_-中文.pdf
Normal file
BIN
docs/AI训练资料/丹控控制器/sgc_420_421_用户手册_4189341227_-中文.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/丹控控制器/sgc_420通讯协议.pdf
Normal file
BIN
docs/AI训练资料/丹控控制器/sgc_420通讯协议.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM6100N_HGM6100CAN_Protocol_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM6100N_HGM6100CAN_Protocol_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM6110CAN_6120CAN_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM6110CAN_6120CAN_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM6110N_6120N_6110NC_6120NC_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM6110N_6120N_6110NC_6120NC_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM9300MPU(CAN)_Protocol_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM9300MPU(CAN)_Protocol_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM9310MPU_9320MPU_9310CAN_9320CAN_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM9310MPU_9320MPU_9310CAN_9320CAN_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM9510N_HGM9520N_HGM9530N_Protocol_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM9510N_HGM9520N_HGM9530N_Protocol_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM9510N_HGM9530N_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM9510N_HGM9530N_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM9510_HGM9520_HGM9530_Protocol_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM9510_HGM9520_HGM9530_Protocol_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/众智控制器/HGM9510_cn.pdf
Normal file
BIN
docs/AI训练资料/众智控制器/HGM9510_cn.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/利莱森玛电机说明书.pdf
Normal file
BIN
docs/AI训练资料/利莱森玛电机说明书.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/深海控制器/DSE7320 MKII Modbus 通讯地址点表~20250326等文件.tar
Normal file
BIN
docs/AI训练资料/深海控制器/DSE7320 MKII Modbus 通讯地址点表~20250326等文件.tar
Normal file
Binary file not shown.
BIN
docs/AI训练资料/深海控制器/DSE7320 MKII.tar
Normal file
BIN
docs/AI训练资料/深海控制器/DSE7320 MKII.tar
Normal file
Binary file not shown.
BIN
docs/AI训练资料/深海控制器/DSE8610.tar
Normal file
BIN
docs/AI训练资料/深海控制器/DSE8610.tar
Normal file
Binary file not shown.
BIN
docs/AI训练资料/深海控制器/常见故障处理.tar
Normal file
BIN
docs/AI训练资料/深海控制器/常见故障处理.tar
Normal file
Binary file not shown.
BIN
docs/AI训练资料/深海控制器/浮充电器故障指示信息.xlsx
Normal file
BIN
docs/AI训练资料/深海控制器/浮充电器故障指示信息.xlsx
Normal file
Binary file not shown.
2147
docs/AI训练资料/科迈控制/IG200通讯点表.txt
Normal file
2147
docs/AI训练资料/科迈控制/IG200通讯点表.txt
Normal file
File diff suppressed because it is too large
Load Diff
1394
docs/AI训练资料/科迈控制/IG4-200通讯点表.txt
Normal file
1394
docs/AI训练资料/科迈控制/IG4-200通讯点表.txt
Normal file
File diff suppressed because it is too large
Load Diff
1491
docs/AI训练资料/科迈控制/IG500-G2通讯点表.txt
Normal file
1491
docs/AI训练资料/科迈控制/IG500-G2通讯点表.txt
Normal file
File diff suppressed because it is too large
Load Diff
960
docs/AI训练资料/科迈控制/IL4MRS16.txt
Normal file
960
docs/AI训练资料/科迈控制/IL4MRS16.txt
Normal file
@@ -0,0 +1,960 @@
|
||||
HEADER
|
||||
========================================================================================================================================================================================
|
||||
Format: 2.3
|
||||
LongNamesLength: 64 - Name, Name of State, Name of Value, Bit Name, Group
|
||||
ShortNamesLength: 10 - Dimension, Type
|
||||
========================================================================================================================================================================================
|
||||
========================================================================================================================================================================================
|
||||
Table: Binaries
|
||||
========================================================================================================================================================================================
|
||||
|
||||
Allowed MODBUS functions: 01, 02
|
||||
|
||||
Addresses Source
|
||||
Modbus Addr. = Value C.O.# Name of Value Bit # Bit Name Group / Subgroup
|
||||
Prot. Addr. = State State # Name of State Activated by protection(s):
|
||||
========================================================================================================================================================================================
|
||||
00000 Value 8235 开关量输入 1 遥控启动/停机 控制器I/O口
|
||||
00001 Value 8235 开关量输入 2 GC反饋 控制器I/O口
|
||||
00002 Not Used
|
||||
00003 Value 8235 开关量输入 4 存取锁 控制器I/O口
|
||||
00004 Value 8235 开关量输入 5 远程关 控制器I/O口
|
||||
00005 Not Used
|
||||
00006 Value 8235 开关量输入 7 禁止停机 控制器I/O口
|
||||
00007 Not Used
|
||||
00008 Value 8239 开关量输出 1 起动马达1 控制器I/O口
|
||||
00009 Value 8239 开关量输出 2 燃油阀 控制器I/O口
|
||||
00010 Value 8239 开关量输出 3 GCB合/分 控制器I/O口
|
||||
00011 Value 8239 开关量输出 4 预起动 控制器I/O口
|
||||
00012 Value 8239 开关量输出 5 可以加载 控制器I/O口
|
||||
00013 Value 8239 开关量输出 6 警告 控制器I/O口
|
||||
00014 Not Used
|
||||
00015 Not Used
|
||||
00016 Not Used
|
||||
00017 Value 9143 Log开关量输出1 2 起动马达1 开关量逻辑输出
|
||||
00018 Value 9143 Log开关量输出1 3 燃油阀 开关量逻辑输出
|
||||
00019 Value 9143 Log开关量输出1 4 停机阀 开关量逻辑输出
|
||||
00020 Value 9143 Log开关量输出1 5 停机脉冲 开关量逻辑输出
|
||||
00021 Value 9143 Log开关量输出1 6 点火 开关量逻辑输出
|
||||
00022 Value 9143 Log开关量输出1 7 预起动 开关量逻辑输出
|
||||
00023 Value 9143 Log开关量输出1 8 冷却泵 开关量逻辑输出
|
||||
00024 Value 9143 Log开关量输出1 9 怠速/额定 开关量逻辑输出
|
||||
00025 Value 9143 Log开关量输出1 10 空气阀 开关量逻辑输出
|
||||
00026 Value 9143 Log开关量输出1 11 警告 开关量逻辑输出
|
||||
00027 Value 9143 Log开关量输出1 12 蜂鸣 开关量逻辑输出
|
||||
00028 Value 9143 Log开关量输出1 13 GCB合/分 开关量逻辑输出
|
||||
00029 Value 9143 Log开关量输出1 14 GCB闭合线圈 开关量逻辑输出
|
||||
00030 Value 9143 Log开关量输出1 15 GCB断开线圈 开关量逻辑输出
|
||||
00031 Value 9143 Log开关量输出1 16 GCB失压线圈 开关量逻辑输出
|
||||
00032 Value 9144 Log开关量输出2 1 保留 开关量逻辑输出
|
||||
00033 Value 9144 Log开关量输出2 2 保留 开关量逻辑输出
|
||||
00034 Value 9144 Log开关量输出2 3 保留 开关量逻辑输出
|
||||
00035 Value 9144 Log开关量输出2 4 保留 开关量逻辑输出
|
||||
00036 Value 9144 Log开关量输出2 5 候命中 开关量逻辑输出
|
||||
00037 Value 9144 Log开关量输出2 6 保留 开关量逻辑输出
|
||||
00038 Value 9144 Log开关量输出2 7 可以加载 开关量逻辑输出
|
||||
00039 Value 9144 Log开关量输出2 8 不在自动 开关量逻辑输出
|
||||
00040 Value 9144 Log开关量输出2 9 运行中 开关量逻辑输出
|
||||
00041 Value 9144 Log开关量输出2 10 冷却中 开关量逻辑输出
|
||||
00042 Value 9144 Log开关量输出2 11 加载 开关量逻辑输出
|
||||
00043 Value 9144 Log开关量输出2 12 发电正常 开关量逻辑输出
|
||||
00044 Value 9144 Log开关量输出2 13 保留 开关量逻辑输出
|
||||
00045 Value 9144 Log开关量输出2 14 动作计时器1 开关量逻辑输出
|
||||
00046 Value 9144 Log开关量输出2 15 动作计时器2 开关量逻辑输出
|
||||
00047 Value 9144 Log开关量输出2 16 预热塞 开关量逻辑输出
|
||||
00048 Value 9145 Log开关量输出3 1 停止按鈕 开关量逻辑输出
|
||||
00049 Value 9145 Log开关量输出3 2 温度开关 开关量逻辑输出
|
||||
00050 Value 9145 Log开关量输出3 3 保留 开关量逻辑输出
|
||||
00051 Value 9145 Log开关量输出3 4 点火启动 开关量逻辑输出
|
||||
00052 Value 9145 Log开关量输出3 5 手动候命 开关量逻辑输出
|
||||
00053 Value 9145 Log开关量输出3 6 心跳 开关量逻辑输出
|
||||
00054 Value 9145 Log开关量输出3 7 关模式 开关量逻辑输出
|
||||
00055 Value 9145 Log开关量输出3 8 手动模式 开关量逻辑输出
|
||||
00056 Value 9145 Log开关量输出3 9 自动模式 开关量逻辑输出
|
||||
00057 Value 9145 Log开关量输出3 10 保留 开关量逻辑输出
|
||||
00058 Value 9145 Log开关量输出3 11 发电电压报警报警 开关量逻辑输出
|
||||
00059 Value 9145 Log开关量输出3 12 发电电压警告 开关量逻辑输出
|
||||
00060 Value 9145 Log开关量输出3 13 公共报警值1 开关量逻辑输出
|
||||
00061 Value 9145 Log开关量输出3 14 公共报警值2 开关量逻辑输出
|
||||
00062 Value 9145 Log开关量输出3 15 公共报警有效值1 开关量逻辑输出
|
||||
00063 Value 9145 Log开关量输出3 16 公共报警有效值2 开关量逻辑输出
|
||||
00064 Value 9146 Log开关量输出4 1 发电频率警告 开关量逻辑输出
|
||||
00065 Value 9146 Log开关量输出4 2 发电频率报警 开关量逻辑输出
|
||||
00066 Value 9146 Log开关量输出4 3 保留 开关量逻辑输出
|
||||
00067 Value 9146 Log开关量输出4 4 保留 开关量逻辑输出
|
||||
00068 Value 9146 Log开关量输出4 5 保留 开关量逻辑输出
|
||||
00069 Value 9146 Log开关量输出4 6 公共警告 开关量逻辑输出
|
||||
00070 Value 9146 Log开关量输出4 7 公共报警停机 开关量逻辑输出
|
||||
00071 Value 9146 Log开关量输出4 8 公共报警BOC 开关量逻辑输出
|
||||
00072 Value 9146 Log开关量输出4 9 传感器故障公共报警 开关量逻辑输出
|
||||
00073 Value 9146 Log开关量输出4 10 ECU供电 开关量逻辑输出
|
||||
00074 Value 9146 Log开关量输出4 11 ECU停止运行 开关量逻辑输出
|
||||
00075 Value 9146 Log开关量输出4 12 保留 开关量逻辑输出
|
||||
00076 Value 9146 Log开关量输出4 13 保留 开关量逻辑输出
|
||||
00077 Value 9146 Log开关量输出4 14 双备正常 开关量逻辑输出
|
||||
00078 Value 9146 Log开关量输出4 15 过流 开关量逻辑输出
|
||||
00079 Value 9146 Log开关量输出4 16 保留 开关量逻辑输出
|
||||
00080 Value 9147 Log开关量输出5 1 禁止停机 开关量逻辑输出
|
||||
00081 Value 9147 Log开关量输出5 2 静态逻辑0 开关量逻辑输出
|
||||
00082 Value 9147 Log开关量输出5 3 静态逻辑1 开关量逻辑输出
|
||||
00083 Value 9147 Log开关量输出5 4 需要再生regen 开关量逻辑输出
|
||||
00084 Value 9147 Log开关量输出5 5 后处理HEST 灯 开关量逻辑输出
|
||||
00085 Value 9147 Log开关量输出5 6 保留 开关量逻辑输出
|
||||
00086 Value 9147 Log开关量输出5 7 保留 开关量逻辑输出
|
||||
00087 Value 9147 Log开关量输出5 8 保留 开关量逻辑输出
|
||||
00088 Value 9147 Log开关量输出5 9 消音按钮 开关量逻辑输出
|
||||
00089 Value 9147 Log开关量输出5 10 起动按钮 开关量逻辑输出
|
||||
00090 Value 9147 Log开关量输出5 11 停止按钮 开关量逻辑输出
|
||||
00091 Value 9147 Log开关量输出5 12 保留 开关量逻辑输出
|
||||
00092 Value 9147 Log开关量输出5 13 GCB按钮 开关量逻辑输出
|
||||
00093 Value 9147 Log开关量输出5 14 故障复位按钮 开关量逻辑输出
|
||||
00094 Value 9147 Log开关量输出5 15 电力报警 开关量逻辑输出
|
||||
00095 Not Used
|
||||
00096 Value 9148 Log开关量输出6 1 ECU等待起动中 开关量逻辑输出
|
||||
00097 Value 9148 Log开关量输出6 2 AIN1开关 开关量逻辑输出
|
||||
00098 Value 9148 Log开关量输出6 3 AIN2开关 开关量逻辑输出
|
||||
00099 Value 9148 Log开关量输出6 4 AIN3开关 开关量逻辑输出
|
||||
00100 Value 9148 Log开关量输出6 5 AIN4开关 开关量逻辑输出
|
||||
00101 Value 9148 Log开关量输出6 6 保留 开关量逻辑输出
|
||||
00102 Value 9148 Log开关量输出6 7 保留 开关量逻辑输出
|
||||
00103 Value 9148 Log开关量输出6 8 保留 开关量逻辑输出
|
||||
00104 Value 9148 Log开关量输出6 9 保留 开关量逻辑输出
|
||||
00105 Value 9148 Log开关量输出6 10 保留 开关量逻辑输出
|
||||
00106 Value 9148 Log开关量输出6 11 保留 开关量逻辑输出
|
||||
00107 Value 9148 Log开关量输出6 12 保留 开关量逻辑输出
|
||||
00108 Value 9148 Log开关量输出6 13 保留 开关量逻辑输出
|
||||
00109 Value 9148 Log开关量输出6 14 保留 开关量逻辑输出
|
||||
00110 Value 9148 Log开关量输出6 15 保留 开关量逻辑输出
|
||||
00111 Value 9148 Log开关量输出6 16 保留 开关量逻辑输出
|
||||
00112 Value 9149 Log开关量输出7 1 保留 开关量逻辑输出
|
||||
00113 Value 9149 Log开关量输出7 2 保留 开关量逻辑输出
|
||||
00114 Value 9149 Log开关量输出7 3 保留 开关量逻辑输出
|
||||
00115 Value 9149 Log开关量输出7 4 保留 开关量逻辑输出
|
||||
00116 Value 9149 Log开关量输出7 5 保留 开关量逻辑输出
|
||||
00117 Value 9149 Log开关量输出7 6 ECU通讯故障 开关量逻辑输出
|
||||
00118 Value 9149 Log开关量输出7 7 ECU红灯 开关量逻辑输出
|
||||
00119 Value 9149 Log开关量输出7 8 ECU 黄灯 开关量逻辑输出
|
||||
00120 Value 9149 Log开关量输出7 9 后处理DEF值灯 开关量逻辑输出
|
||||
00121 Value 9149 Log开关量输出7 10 后处理阻止灯 开关量逻辑输出
|
||||
00122 Value 9149 Log开关量输出7 11 运用计时3 开关量逻辑输出
|
||||
00123 Value 9149 Log开关量输出7 12 运用计时4 开关量逻辑输出
|
||||
00124 Value 9149 Log开关量输出7 13 Exercise Timer 5 开关量逻辑输出
|
||||
00125 Value 9149 Log开关量输出7 14 Exercise Timer 6 开关量逻辑输出
|
||||
00126 Value 9149 Log开关量输出7 15 Exercise Timer 7 开关量逻辑输出
|
||||
00127 Value 9149 Log开关量输出7 16 Exercise Timer 8 开关量逻辑输出
|
||||
00128 Value 9150 Log开关量输出8 1 负载撤载阶段1 开关量逻辑输出
|
||||
00129 Value 9150 Log开关量输出8 2 负载撤载阶段2 开关量逻辑输出
|
||||
00130 Value 9150 Log开关量输出8 3 负载撤载阶段3 开关量逻辑输出
|
||||
00131 Value 9150 Log开关量输出8 4 卸载阶段4 开关量逻辑输出
|
||||
00132 Value 9150 Log开关量输出8 5 卸载阶段5 开关量逻辑输出
|
||||
00133 Value 9150 Log开关量输出8 6 频率选择 开关量逻辑输出
|
||||
00134 Value 9150 Log开关量输出8 7 保留 开关量逻辑输出
|
||||
00135 Value 9150 Log开关量输出8 8 ATT DPF Lamp 开关量逻辑输出
|
||||
00136 Value 9150 Log开关量输出8 9 后处理SCR故障灯 开关量逻辑输出
|
||||
00137 Value 9150 Log开关量输出8 10 排空 开关量逻辑输出
|
||||
00138 Value 9150 Log开关量输出8 11 排空通脉冲 开关量逻辑输出
|
||||
00139 Value 9150 Log开关量输出8 12 排空断脉冲 开关量逻辑输出
|
||||
00140 Value 9150 Log开关量输出8 13 阻风门 开关量逻辑输出
|
||||
00141 Value 9150 Log开关量输出8 14 起动马达2 开关量逻辑输出
|
||||
00142 Value 9150 Log开关量输出8 15 ATT连锁状态 开关量逻辑输出
|
||||
00143 Value 9150 Log开关量输出8 16 ECU 通信正常 开关量逻辑输出
|
||||
00144 Value 11896 Log开关量输出 1 ATT Regen ACK Lamp 开关量逻辑输出
|
||||
00145 Value 11896 Log开关量输出 2 ATT PCD 灯 开关量逻辑输出
|
||||
00146 Value 11896 Log开关量输出 3 维护时间1报警 开关量逻辑输出
|
||||
00147 Value 11896 Log开关量输出 4 维护时间2报警 开关量逻辑输出
|
||||
00148 Value 11896 Log开关量输出 5 维护时间3报警 开关量逻辑输出
|
||||
00149 Value 11896 Log开关量输出 6 MCB 状态 开关量逻辑输出
|
||||
00150 Value 11896 Log开关量输出 7 GCB 状态 开关量逻辑输出
|
||||
00151 Value 11896 Log开关量输出 8 Exercise Timer 9 开关量逻辑输出
|
||||
00152 Value 11896 Log开关量输出 9 Exercise Timer 10 开关量逻辑输出
|
||||
00153 Value 11896 Log开关量输出 10 Exercise Timer 11 开关量逻辑输出
|
||||
00154 Value 11896 Log开关量输出 11 Exercise Timer 12 开关量逻辑输出
|
||||
00155 Value 11896 Log开关量输出 12 Exercise Timer 13 开关量逻辑输出
|
||||
00156 Value 11896 Log开关量输出 13 Exercise Timer 14 开关量逻辑输出
|
||||
00157 Value 11896 Log开关量输出 14 Exercise Timer 15 开关量逻辑输出
|
||||
00158 Value 11896 Log开关量输出 15 Exercise Timer 16 开关量逻辑输出
|
||||
00159 Value 11896 Log开关量输出 16 Peripheral Module Comm Fail 开关量逻辑输出
|
||||
00160 Value 11897 Log开关量输出10 1 Initialized 开关量逻辑输出
|
||||
00161 Value 11897 Log开关量输出10 2 发电机有效 开关量逻辑输出
|
||||
00162 Not Used
|
||||
00163 Not Used
|
||||
00164 Not Used
|
||||
00165 Not Used
|
||||
00166 Not Used
|
||||
00167 Not Used
|
||||
00168 Not Used
|
||||
00169 Not Used
|
||||
00170 Not Used
|
||||
00171 Not Used
|
||||
00172 Value 20744 固定保护阶段 1 11 ECU 1通信故障警告 固定保护状态
|
||||
00173 Value 20744 固定保护阶段 1 12 ECU 1 通信故障停机 固定保护状态
|
||||
00174 Value 20744 固定保护阶段 1 13 ECU 黄灯 固定保护状态
|
||||
00175 Value 20744 固定保护阶段 1 14 ECU红灯 固定保护状态
|
||||
00176 Value 20744 固定保护阶段 1 15 ECU等待起动中 固定保护状态
|
||||
00177 Value 20744 固定保护阶段 1 16 ATT DPF Lamp 固定保护状态
|
||||
00178 Value 20744 固定保护阶段 1 17 后处理HEST 灯 固定保护状态
|
||||
00179 Value 20744 固定保护阶段 1 18 后处理SCR故障灯 固定保护状态
|
||||
00180 Value 20744 固定保护阶段 1 19 后处理DEF值灯 固定保护状态
|
||||
00181 Value 20744 固定保护阶段 1 20 后处理阻止灯 固定保护状态
|
||||
00182 Value 20744 固定保护阶段 1 21 紧急停机 固定保护状态
|
||||
00183 Value 20744 固定保护阶段 1 22 充电发电机故障警告 固定保护状态
|
||||
00184 Value 20744 固定保护阶段 1 23 充电机故障停机 固定保护状态
|
||||
00185 Value 20744 固定保护阶段 1 24 停机失败警告 固定保护状态
|
||||
00186 Value 20744 固定保护阶段 1 25 超速停机 固定保护状态
|
||||
00187 Value 20744 固定保护阶段 1 26 欠速停机 固定保护状态
|
||||
00188 Value 20744 固定保护阶段 1 27 转速测量故障停机 固定保护状态
|
||||
00189 Value 20744 固定保护阶段 1 28 电池耗尽停机 固定保护状态
|
||||
00190 Value 20744 固定保护阶段 1 29 维修时间1运行时间警告 固定保护状态
|
||||
00191 Value 20744 固定保护阶段 1 30 维修时间2运行时间警告 固定保护状态
|
||||
00192 Value 20744 固定保护阶段 1 31 维修时间3运行时间警告 固定保护状态
|
||||
00193 Value 20744 固定保护阶段 1 32 起动失败停机 固定保护状态
|
||||
00194 Not Used
|
||||
00195 Value 20745 固定保护阶段 2 2 GCB故障停机 固定保护状态
|
||||
00196 Value 20745 固定保护阶段 2 3 发电L1电压高警告 固定保护状态
|
||||
00197 Value 20745 固定保护阶段 2 4 发电L1 过电压停机 固定保护状态
|
||||
00198 Value 20745 固定保护阶段 2 5 发电L2电压高警告 固定保护状态
|
||||
00199 Value 20745 固定保护阶段 2 6 发电L2过电压 固定保护状态
|
||||
00200 Value 20745 固定保护阶段 2 7 发电L3电压高警告 固定保护状态
|
||||
00201 Value 20745 固定保护阶段 2 8 发电L3过电压 固定保护状态
|
||||
00202 Value 20745 固定保护阶段 2 9 发电L1L2电压高警告 固定保护状态
|
||||
00203 Value 20745 固定保护阶段 2 10 发电L1L2过电压停机 固定保护状态
|
||||
00204 Value 20745 固定保护阶段 2 11 发电L2L3电压高警告 固定保护状态
|
||||
00205 Value 20745 固定保护阶段 2 12 发电L2L3过电压 固定保护状态
|
||||
00206 Value 20745 固定保护阶段 2 13 发电L3L1电压高警告 固定保护状态
|
||||
00207 Value 20745 固定保护阶段 2 14 发电L3L1过电压 固定保护状态
|
||||
00208 Value 20745 固定保护阶段 2 15 发电L1电压低警告 固定保护状态
|
||||
00209 Value 20745 固定保护阶段 2 16 发电L1 低电压BOC 固定保护状态
|
||||
00210 Value 20745 固定保护阶段 2 17 发电L2电压低警告 固定保护状态
|
||||
00211 Value 20745 固定保护阶段 2 18 发电L2低电压BOC 固定保护状态
|
||||
00212 Value 20745 固定保护阶段 2 19 发电L3电压低警告 固定保护状态
|
||||
00213 Value 20745 固定保护阶段 2 20 发电L3低电压BOC 固定保护状态
|
||||
00214 Value 20745 固定保护阶段 2 21 发电L1L2电压低警告 固定保护状态
|
||||
00215 Value 20745 固定保护阶段 2 22 发电L1L2低电压BOC 固定保护状态
|
||||
00216 Value 20745 固定保护阶段 2 23 发电L2L3电压低警告 固定保护状态
|
||||
00217 Value 20745 固定保护阶段 2 24 发电L2L3低电压BOC 固定保护状态
|
||||
00218 Value 20745 固定保护阶段 2 25 发电L3L1电压低警告 固定保护状态
|
||||
00219 Value 20745 固定保护阶段 2 26 发电L3L1低电压BOC 固定保护状态
|
||||
00220 Value 20745 固定保护阶段 2 27 线电压不平衡BOC 固定保护状态
|
||||
00221 Value 20745 固定保护阶段 2 28 相电压不平衡BOC 固定保护状态
|
||||
00222 Value 20745 固定保护阶段 2 29 发电频率高警告 固定保护状态
|
||||
00223 Value 20745 固定保护阶段 2 30 发电频率高BOC 固定保护状态
|
||||
00224 Value 20745 固定保护阶段 2 31 发电频率低警告 固定保护状态
|
||||
00225 Value 20745 固定保护阶段 2 32 发电频率低BOC 固定保护状态
|
||||
00226 Value 20746 固定保护阶段 3 1 逆功率分闸 固定保护状态
|
||||
00227 Not Used
|
||||
00228 Value 20746 固定保护阶段 3 3 电流不平衡BOC 固定保护状态
|
||||
00229 Not Used
|
||||
00230 Not Used
|
||||
00231 Not Used
|
||||
00232 Not Used
|
||||
00233 Not Used
|
||||
00234 Not Used
|
||||
00235 Not Used
|
||||
00236 Not Used
|
||||
00237 Not Used
|
||||
00238 Not Used
|
||||
00239 Not Used
|
||||
00240 Not Used
|
||||
00241 Value 20746 固定保护阶段 3 16 封锁输入密码 固定保护状态
|
||||
00242 Value 20746 固定保护阶段 3 17 ATT 互锁有效 固定保护状态
|
||||
00243 Value 20746 固定保护阶段 3 18 ATT 强制再生有效 固定保护状态
|
||||
00244 Value 20746 固定保护阶段 3 19 ATT 禁止再生有效 固定保护状态
|
||||
00245 Value 20746 固定保护阶段 3 20 默认密码 固定保护状态
|
||||
00246 Value 20746 固定保护阶段 3 21 双运行故障 固定保护状态
|
||||
00247 Value 20746 固定保护阶段 3 22 双运行固件版本不同 固定保护状态
|
||||
00248 Value 20746 固定保护阶段 3 23 AHI 双运行主机故障 固定保护状态
|
||||
00249 Value 20746 固定保护阶段 3 24 双运行主故障警告 固定保护状态
|
||||
00250 Value 20746 固定保护阶段 3 25 AHI 双运行从机故障 固定保护状态
|
||||
00251 Value 20746 固定保护阶段 3 26 双运行从故障警告 固定保护状态
|
||||
00252 Value 20746 固定保护阶段 3 27 双运行市电不同 固定保护状态
|
||||
00253 Value 20746 固定保护阶段 3 28 ALI发电相序反 固定保护状态
|
||||
00254 Not Used
|
||||
00255 Not Used
|
||||
00256 Not Used
|
||||
00257 Not Used
|
||||
00258 Value 20747 固定保护阶段 4 1 过载警告 固定保护状态
|
||||
00259 Value 20747 固定保护阶段 4 2 过载BOC 固定保护状态
|
||||
00260 Value 20747 固定保护阶段 4 3 电流短路BOC 固定保护状态
|
||||
00261 Value 20747 固定保护阶段 4 4 IDMT 过流BOC 固定保护状态
|
||||
00262 Not Used
|
||||
00263 Value 20747 固定保护阶段 4 6 燃油传送 固定保护状态
|
||||
00264 Value 20747 固定保护阶段 4 7 燃油传输失败 固定保护状态
|
||||
00265 Value 20747 固定保护阶段 4 8 电池充电器故障警告 固定保护状态
|
||||
00266 Value 20747 固定保护阶段 4 9 越控所有停机警告 固定保护状态
|
||||
00267 Value 20747 固定保护阶段 4 10 租赁计时1警告 固定保护状态
|
||||
00268 Value 20747 固定保护阶段 4 11 租赁计时2警告 固定保护状态
|
||||
00269 Value 20747 固定保护阶段 4 12 租赁计时1时间到 固定保护状态
|
||||
00270 Value 20747 固定保护阶段 4 13 租赁计时2时间到 固定保护状态
|
||||
00271 Value 20747 固定保护阶段 4 14 租赁计时1超时停机 固定保护状态
|
||||
00272 Value 20747 固定保护阶段 4 15 租赁计时2超时停机 固定保护状态
|
||||
00273 Value 20747 固定保护阶段 4 16 租赁计时器封锁开始警告 固定保护状态
|
||||
00274 Not Used
|
||||
00275 Not Used
|
||||
00276 Value 20747 固定保护阶段 4 19 偷油警告 固定保护状态
|
||||
00277 Not Used
|
||||
00278 Value 20747 固定保护阶段 4 21 接地电流保护停机 固定保护状态
|
||||
00279 Not Used
|
||||
00280 Value 20747 固定保护阶段 4 23 围栏1报警警告 固定保护状态
|
||||
00281 Value 20747 固定保护阶段 4 24 围栏1报警停机 固定保护状态
|
||||
00282 Value 20747 固定保护阶段 4 25 围栏1报警BOC 固定保护状态
|
||||
00283 Value 20747 固定保护阶段 4 26 围栏1报警 固定保护状态
|
||||
00284 Value 20747 固定保护阶段 4 27 围栏2报警警告 固定保护状态
|
||||
00285 Value 20747 固定保护阶段 4 28 围栏2报警停机 固定保护状态
|
||||
00286 Value 20747 固定保护阶段 4 29 围栏2报警BOC 固定保护状态
|
||||
00287 Value 20747 固定保护阶段 4 30 围栏2报警 固定保护状态
|
||||
00288 Value 20747 固定保护阶段 4 31 维修时间1间隔警告 固定保护状态
|
||||
00289 Value 20747 固定保护阶段 4 32 维修时间2间隔警告 固定保护状态
|
||||
00290 Value 20748 固定保护阶段 5 1 维修时间3间隔警告 固定保护状态
|
||||
00291 Not Used
|
||||
00292 Value 20748 固定保护阶段 5 3 电池充电器低压警告 固定保护状态
|
||||
00293 Value 20748 固定保护阶段 5 4 电池充电器过压警告 固定保护状态
|
||||
00294 Value 20748 固定保护阶段 5 5 紧急停 固定保护状态
|
||||
00295 Value 20748 固定保护阶段 5 6 维修时间1运行时间BOC 固定保护状态
|
||||
00296 Value 20748 固定保护阶段 5 7 维修时间2运行时间BOC 固定保护状态
|
||||
00297 Value 20748 固定保护阶段 5 8 维修时间3运行时间BOC 固定保护状态
|
||||
00298 Value 20748 固定保护阶段 5 9 维修时间1间隔BOC 固定保护状态
|
||||
00299 Value 20748 固定保护阶段 5 10 维修时间2间隔BOC 固定保护状态
|
||||
00300 Value 20748 固定保护阶段 5 11 维修时间3间隔BOC 固定保护状态
|
||||
00301 Value 20748 固定保护阶段 5 12 Wrn MCB Fail To Open 固定保护状态
|
||||
00302 Value 20748 固定保护阶段 5 13 Wrn MCB Fail To Close 固定保护状态
|
||||
00303 Value 20748 固定保护阶段 5 14 Sd GCB Fail To Open 固定保护状态
|
||||
00304 Value 20748 固定保护阶段 5 15 Sd GCB Fail To Close 固定保护状态
|
||||
|
||||
|
||||
========================================================================================================================================================================================
|
||||
Table: Values
|
||||
========================================================================================================================================================================================
|
||||
|
||||
Allowed MODBUS functions: 03, 04
|
||||
|
||||
Register(s) Com.Obj. Name Dimension Type Len Dec Min Max Group / Subgroup
|
||||
========================================================================================================================================================================================
|
||||
01000 10123 转速 RPM Integer 2 0 0 3000 发动机
|
||||
01001 8202 Load P kW Integer 2 0 -32767 32767 负载
|
||||
01002 8524 Load P L1 kW Integer 2 0 -32767 32767 负载
|
||||
01003 8525 Load P L2 kW Integer 2 0 -32767 32767 负载
|
||||
01004 8526 Load P L3 kW Integer 2 0 -32767 32767 负载
|
||||
01005 8203 Load Q kVAr Integer 2 0 -32767 32767 负载
|
||||
01006 8527 Load Q L1 kVAr Integer 2 0 -32767 32767 负载
|
||||
01007 8528 Load Q L2 kVAr Integer 2 0 -32767 32767 负载
|
||||
01008 8529 Load Q L3 kVAr Integer 2 0 -32767 32767 负载
|
||||
01009 8565 Load S kVA Integer 2 0 0 32767 负载
|
||||
01010 8530 Load S L1 kVA Integer 2 0 0 32767 负载
|
||||
01011 8531 Load S L2 kVA Integer 2 0 0 32767 负载
|
||||
01012 8532 Load S L3 kVA Integer 2 0 0 32767 负载
|
||||
01013 8204 功率因数 Integer 1 2 -100 100 负载
|
||||
01014 8533 L1功率因数 Integer 1 2 -100 100 负载
|
||||
01015 8534 L2功率因数 Integer 1 2 -100 100 负载
|
||||
01016 8535 L3功率因数 Integer 1 2 -100 100 负载
|
||||
01017 8210 发电频率 Hz Unsigned 2 1 0 4000 发电机
|
||||
01018 8192 发电电压L1-N V Unsigned 2 0 0 65534 发电机
|
||||
01019 8193 发电电压L2-N V Unsigned 2 0 0 65534 发电机
|
||||
01020 8194 发电电压L3-N V Unsigned 2 0 0 65534 发电机
|
||||
01021 9628 发电电压L1-L2 V Unsigned 2 0 0 65534 发电机
|
||||
01022 9629 发电电压L2-L3 V Unsigned 2 0 0 65534 发电机
|
||||
01023 9630 发电电压L3-L1 V Unsigned 2 0 0 65534 发电机
|
||||
01024 8198 负载电流L1 A Unsigned 2 0 0 32767 负载
|
||||
01025 8199 负载电流L2 A Unsigned 2 0 0 32767 负载
|
||||
01026 8200 负载电流L3 A Unsigned 2 0 0 32767 负载
|
||||
01027 Not Used
|
||||
01028 Not Used
|
||||
01029 Not Used
|
||||
01030 Not Used
|
||||
01031 Not Used
|
||||
01032 Not Used
|
||||
01033 Not Used
|
||||
01034 Not Used
|
||||
01035 Not Used
|
||||
01036 8213 电池电压 V Integer 2 1 0 360 控制器I/O口
|
||||
01037 10603 D+ V Integer 2 1 0 360 控制器I/O口
|
||||
01038 9151 油压 Bar Integer 2 1 0 100 控制器I/O口
|
||||
01039 9152 水温 °C Integer 2 0 -16 120 控制器I/O口
|
||||
01040 9153 燃油位 % Integer 2 0 0 100 控制器I/O口
|
||||
01041 Not Used
|
||||
01042 8235 开关量输入 Binary#1 2 0 - - 控制器I/O口
|
||||
01043 15780 紧急停机 Binary#2 1 0 - - 控制器I/O口
|
||||
01044 8239 开关量输出 Binary#3 2 0 - - 控制器I/O口
|
||||
01045 23924 以太网界面状态 List#1 1 0 0 4 CM-ETHERNET
|
||||
01046-01053(8) 23931 IP地址 String 16 0 - - CM-ETHERNET
|
||||
01054-01061(8) 23930 当前子网掩码 String 16 0 - - CM-ETHERNET
|
||||
01062-01069(8) 23929 当前网关 String 16 0 - - CM-ETHERNET
|
||||
01070-01077(8) 23928 主DNS String 16 0 - - CM-ETHERNET
|
||||
01078-01085(8) 23927 次级DNS String 16 0 - - CM-ETHERNET
|
||||
01086 23925 最后E-mail结果 Unsigned 1 0 0 254 CM-ETHERNET
|
||||
01087-01102(16) 23932 MAC 地址 String 32 0 - - CM-ETHERNET
|
||||
01103 23916 以太网接线模式 List#2 1 0 0 3 CM-ETHERNET
|
||||
01104-01111(8) 23926 AirGate ID String 16 0 - - CM-ETHERNET
|
||||
01112 23910 AirGate 状态 List#3 1 0 0 8 CM-ETHERNET
|
||||
01113-01144(32) 23915 AirGate服务节点 String 64 0 - - CM-ETHERNET
|
||||
01145-01152(8) 24309 AirGate ID String 16 0 - - CM-4G-GPS
|
||||
01153 23967 AirGate 状态 List#3 1 0 0 8 CM-4G-GPS
|
||||
01154-01185(32) 23991 AirGate服务节点 String 64 0 - - CM-4G-GPS; CM-4G-GPS
|
||||
01186-01193(8) 23971 IP地址 String 16 0 - - CM-4G-GPS
|
||||
01194-01201(8) 23984 主DNS String 16 0 - - CM-4G-GPS
|
||||
01202-01209(8) 23983 次级DNS String 16 0 - - CM-4G-GPS
|
||||
01210 24307 最后E-mail结果 Unsigned 1 0 0 254 CM-4G-GPS
|
||||
01211 24302 讯号强度 % Unsigned 1 0 0 100 CM-4G-GPS
|
||||
01212 24288 数据机状态 List#4 1 0 0 29 CM-4G-GPS
|
||||
01213 23972 网络状态 List#5 1 0 0 2 CM-4G-GPS
|
||||
01214 23973 GPS 状态 List#6 1 0 0 2 CM-4G-GPS
|
||||
01215-01230(16) 24147 网络名称 String 32 0 - - CM-4G-GPS
|
||||
01231-01238(8) 24146 网络模式 String 16 0 - - CM-4G-GPS
|
||||
01239-01246(8) 24268 纬度 String 16 0 - - CM-4G-GPS
|
||||
01247-01254(8) 24267 经度 String 16 0 - - CM-4G-GPS
|
||||
01255 24265 有效卫星 Unsigned 1 0 0 15 CM-4G-GPS
|
||||
01256 24264 速度 km/h Unsigned 2 0 0 65535 CM-4G-GPS
|
||||
01257-01258(2) 8205 发电KWh kWh Integer 4 0 -32768000 32767000 统计值
|
||||
01259-01260(2) 8539 发电KVArh kVArh Integer 4 0 -32768000 32767000 统计值
|
||||
01261 Not Used
|
||||
01262 Not Used
|
||||
01263 Not Used
|
||||
01264 Not Used
|
||||
01265-01266(2) 8206 运行小时 h Integer 4 1 -32768000 32767000 统计值
|
||||
01267 8207 起动次数 Unsigned 2 0 0 65534 统计值
|
||||
01268 11616 维修时间1运行小时 h Integer 2 0 -10000 10000 统计值
|
||||
01269 11617 维修时间2运行小时 h Integer 2 0 -10000 10000 统计值
|
||||
01270 11618 维修时间3运行小时 h Integer 2 0 -10000 10000 统计值
|
||||
01271-01272(2) 14328 租赁1 h Integer 4 0 0 9000 统计值
|
||||
01273-01274(2) 14369 租赁2 天 Integer 4 0 0 32000 统计值
|
||||
01275-01276(2) 11195 急停次数 Unsigned 4 0 0 65535000 统计值
|
||||
01277-01278(2) 11196 停机 Unsigned 4 0 0 65535000 统计值
|
||||
01279-01280(2) 9040 总燃油消耗 l Unsigned 4 0 0 65535000 统计值
|
||||
01281 13772 时间到清空 天 Integer 2 0 0 32000 统计值
|
||||
01282 13771 时间到清空 hrs Integer 2 0 0 23 统计值
|
||||
01283 13770 时间到清空 min Integer 2 0 0 59 统计值
|
||||
01284 9887 控制器模式 List#7 1 0 0 2 信息
|
||||
01285 9591 负载撤载状态 List#8 1 0 0 5 信息
|
||||
01286 9244 发动机状态 List#9 1 0 0 17 信息
|
||||
01287 9245 断路器状态 List#10 1 0 0 12 信息
|
||||
01288 10040 计时文本 List#11 1 0 0 37 信息
|
||||
01289 12944 连接类型 List#12 1 0 0 7 信息
|
||||
01290-01305(16) 24501 ID 字串 String 32 0 - - 信息
|
||||
01306-01313(8) 24339 FW版本 String 16 0 - - 信息
|
||||
01314 8480 应用 List#13 1 0 0 10 信息
|
||||
01315 8707 FW分支 List#14 1 0 0 1 信息
|
||||
01316 9143 Log开关量输出1 Binary#4 2 0 - - 开关量逻辑输出
|
||||
01317 9144 Log开关量输出2 Binary#5 2 0 - - 开关量逻辑输出
|
||||
01318 9145 Log开关量输出3 Binary#6 2 0 - - 开关量逻辑输出
|
||||
01319 9146 Log开关量输出4 Binary#7 2 0 - - 开关量逻辑输出
|
||||
01320 9147 Log开关量输出5 Binary#8 2 0 - - 开关量逻辑输出
|
||||
01321 9148 Log开关量输出6 Binary#9 2 0 - - 开关量逻辑输出
|
||||
01322 9149 Log开关量输出7 Binary#10 2 0 - - 开关量逻辑输出
|
||||
01323 9150 Log开关量输出8 Binary#11 2 0 - - 开关量逻辑输出
|
||||
01324 11896 Log开关量输出 Binary#12 2 0 - - 开关量逻辑输出
|
||||
01325 11897 Log开关量输出10 Binary#13 2 0 - - 开关量逻辑输出
|
||||
01326-01327(2) 16387 维修时间1间隔 天 Integer 4 0 -10000 10000 统计值
|
||||
01328-01329(2) 16388 维修时间2间隔 天 Integer 4 0 -10000 10000 统计值
|
||||
01330-01331(2) 16389 维修时间3间隔 天 Integer 4 0 -10000 10000 统计值
|
||||
|
||||
|
||||
========================================================================================================================================================================================
|
||||
Table: Setpoints
|
||||
========================================================================================================================================================================================
|
||||
|
||||
Allowed MODBUS functions: 03, 04, 06, 16
|
||||
|
||||
Register(s) Com.Obj. Name Dimension Type Len Dec Min Max Group / Subgroup
|
||||
========================================================================================================================================================================================
|
||||
|
||||
|
||||
========================================================================================================================================================================================
|
||||
List# Types Meaning
|
||||
========================================================================================================================================================================================
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#1
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 未知
|
||||
1 已断开
|
||||
2 连接中
|
||||
3 已连接
|
||||
4 失败
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#2
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 10-HD
|
||||
1 10-FD
|
||||
2 100-HD
|
||||
3 100-FD
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#3
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 没有定义
|
||||
1 等待连线
|
||||
2 解析
|
||||
3 连接中
|
||||
4 产生第二通道
|
||||
5 注册中
|
||||
6 连线不互通
|
||||
7 连线互通
|
||||
8 Susp AGkeyEmpty
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#4
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0
|
||||
1 OK
|
||||
2 EO1
|
||||
3 EO2
|
||||
4 E SIM
|
||||
5 EO4
|
||||
6 E 注册
|
||||
7 E 注册
|
||||
8 E 注册
|
||||
9 E 内容
|
||||
10 E 连接
|
||||
11 E08
|
||||
12 E09
|
||||
13 E10
|
||||
14 E 注册
|
||||
15 E12
|
||||
16 E13
|
||||
17 E14
|
||||
18 E SMS 发送
|
||||
19 起始1错误
|
||||
20 起始2错误
|
||||
21 起始3错误
|
||||
22 E18
|
||||
23 E18
|
||||
24 E18
|
||||
25 E 失去连线
|
||||
26 E19
|
||||
27 E18
|
||||
28 重启-配置
|
||||
29 重启-app
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#5
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 无法使用
|
||||
1 可以使用
|
||||
2 附上
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#6
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 未定义
|
||||
1 寻找中
|
||||
2 固定
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#7
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 关
|
||||
1 手动
|
||||
2 自动
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#8
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 未卸载
|
||||
1 甩负载1
|
||||
2 甩负载2
|
||||
3 甩负载3
|
||||
4 甩负载S4
|
||||
5 甩负载S5
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#9
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 初始化
|
||||
1 候命中
|
||||
2 未预备
|
||||
3 预起动
|
||||
4 盘车中
|
||||
5 间歇
|
||||
6 起动中
|
||||
7 运行中
|
||||
8 已加载
|
||||
9 软卸载
|
||||
10 冷却中
|
||||
11 停机
|
||||
12 故障停机
|
||||
13 通风
|
||||
14 应急手动
|
||||
15 软加载
|
||||
16 等待停机
|
||||
17 故障停机通风
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#10
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 初始化
|
||||
1 断路器分
|
||||
2 孤岛运行
|
||||
3 市电运行
|
||||
4 并联操作
|
||||
5 反向同步
|
||||
6 同步中
|
||||
7 市电故障
|
||||
8 有效错误
|
||||
9 市电恢复
|
||||
10 多台岛运
|
||||
11 多台并运
|
||||
12 应急手动
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#11
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 无计时
|
||||
1 预起动
|
||||
2 盘车中
|
||||
3 怠速运行
|
||||
4 冷却中
|
||||
5 停机阀
|
||||
6 后冷却
|
||||
7 间歇
|
||||
8 燃气通风
|
||||
9 最短稳定到
|
||||
10 最大稳定至
|
||||
11 MCB合
|
||||
12 转换延时
|
||||
13 恢复延时
|
||||
14 启动延时
|
||||
15 电压侦测
|
||||
16 GCB延时
|
||||
17 GCB分闸
|
||||
18 同步超时
|
||||
19 GCB闭合
|
||||
20 MCB分闸
|
||||
21 等待停机
|
||||
22 系统起动
|
||||
23 系统停机
|
||||
24 下一台起动
|
||||
25 下一台停机
|
||||
26 甩负载改变
|
||||
27 重接载变换(无效)
|
||||
28 卸载停机
|
||||
29 警告
|
||||
30 RPM 窗口超时
|
||||
31 励磁延时
|
||||
32 发动机起动超时
|
||||
33 允许同步
|
||||
34 Fuel Sol Lead
|
||||
35 Deexcitation
|
||||
36 Dummy Load On
|
||||
37 Dummy Load Off
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#12
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 单相
|
||||
1 SplPhL1L2
|
||||
2 SplPhL1L3
|
||||
3 三角接电压
|
||||
4 3相3线
|
||||
5 3相4线
|
||||
6 3PH 黄低
|
||||
7 3相黄高
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#13
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 未用
|
||||
1 未用
|
||||
2 未用
|
||||
3 未用
|
||||
4 未用
|
||||
5 未用
|
||||
6 MRS16
|
||||
7 AMF8
|
||||
8 AMF9
|
||||
9 AMF20
|
||||
10 AMF25
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
List#14
|
||||
|
||||
Value Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 未用
|
||||
1 标准
|
||||
|
||||
|
||||
========================================================================================================================================================================================
|
||||
Binary# Types Meaning
|
||||
========================================================================================================================================================================================
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#1
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 遥控启动/停机
|
||||
1 GC反饋
|
||||
2 未用
|
||||
3 存取锁
|
||||
4 远程关
|
||||
5 未用
|
||||
6 禁止停机
|
||||
7 未用
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#2
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 紧急停机
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#3
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 起动马达1
|
||||
1 燃油阀
|
||||
2 GCB合/分
|
||||
3 预起动
|
||||
4 可以加载
|
||||
5 警告
|
||||
6 未用
|
||||
7 未用
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#4
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 未用
|
||||
1 起动马达1
|
||||
2 燃油阀
|
||||
3 停机阀
|
||||
4 停机脉冲
|
||||
5 点火
|
||||
6 预起动
|
||||
7 冷却泵
|
||||
8 怠速/额定
|
||||
9 空气阀
|
||||
10 警告
|
||||
11 蜂鸣
|
||||
12 GCB合/分
|
||||
13 GCB闭合线圈
|
||||
14 GCB断开线圈
|
||||
15 GCB失压线圈
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#5
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 保留
|
||||
1 保留
|
||||
2 保留
|
||||
3 保留
|
||||
4 候命中
|
||||
5 保留
|
||||
6 可以加载
|
||||
7 不在自动
|
||||
8 运行中
|
||||
9 冷却中
|
||||
10 加载
|
||||
11 发电正常
|
||||
12 保留
|
||||
13 动作计时器1
|
||||
14 动作计时器2
|
||||
15 预热塞
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#6
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 停止按鈕
|
||||
1 温度开关
|
||||
2 保留
|
||||
3 点火启动
|
||||
4 手动候命
|
||||
5 心跳
|
||||
6 关模式
|
||||
7 手动模式
|
||||
8 自动模式
|
||||
9 保留
|
||||
10 发电电压报警报警
|
||||
11 发电电压警告
|
||||
12 公共报警值1
|
||||
13 公共报警值2
|
||||
14 公共报警有效值1
|
||||
15 公共报警有效值2
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#7
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 发电频率警告
|
||||
1 发电频率报警
|
||||
2 保留
|
||||
3 保留
|
||||
4 保留
|
||||
5 公共警告
|
||||
6 公共报警停机
|
||||
7 公共报警BOC
|
||||
8 传感器故障公共报警
|
||||
9 ECU供电
|
||||
10 ECU停止运行
|
||||
11 保留
|
||||
12 保留
|
||||
13 双备正常
|
||||
14 过流
|
||||
15 保留
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#8
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 禁止停机
|
||||
1 静态逻辑0
|
||||
2 静态逻辑1
|
||||
3 需要再生regen
|
||||
4 后处理HEST 灯
|
||||
5 保留
|
||||
6 保留
|
||||
7 保留
|
||||
8 消音按钮
|
||||
9 起动按钮
|
||||
10 停止按钮
|
||||
11 保留
|
||||
12 GCB按钮
|
||||
13 故障复位按钮
|
||||
14 电力报警
|
||||
15 未用
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#9
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 ECU等待起动中
|
||||
1 AIN1开关
|
||||
2 AIN2开关
|
||||
3 AIN3开关
|
||||
4 AIN4开关
|
||||
5 保留
|
||||
6 保留
|
||||
7 保留
|
||||
8 保留
|
||||
9 保留
|
||||
10 保留
|
||||
11 保留
|
||||
12 保留
|
||||
13 保留
|
||||
14 保留
|
||||
15 保留
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#10
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 保留
|
||||
1 保留
|
||||
2 保留
|
||||
3 保留
|
||||
4 保留
|
||||
5 ECU通讯故障
|
||||
6 ECU红灯
|
||||
7 ECU 黄灯
|
||||
8 后处理DEF值灯
|
||||
9 后处理阻止灯
|
||||
10 运用计时3
|
||||
11 运用计时4
|
||||
12 Exercise Timer 5
|
||||
13 Exercise Timer 6
|
||||
14 Exercise Timer 7
|
||||
15 Exercise Timer 8
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#11
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 负载撤载阶段1
|
||||
1 负载撤载阶段2
|
||||
2 负载撤载阶段3
|
||||
3 卸载阶段4
|
||||
4 卸载阶段5
|
||||
5 频率选择
|
||||
6 保留
|
||||
7 ATT DPF Lamp
|
||||
8 后处理SCR故障灯
|
||||
9 排空
|
||||
10 排空通脉冲
|
||||
11 排空断脉冲
|
||||
12 阻风门
|
||||
13 起动马达2
|
||||
14 ATT连锁状态
|
||||
15 ECU 通信正常
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#12
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 ATT Regen ACK Lamp
|
||||
1 ATT PCD 灯
|
||||
2 维护时间1报警
|
||||
3 维护时间2报警
|
||||
4 维护时间3报警
|
||||
5 MCB 状态
|
||||
6 GCB 状态
|
||||
7 Exercise Timer 9
|
||||
8 Exercise Timer 10
|
||||
9 Exercise Timer 11
|
||||
10 Exercise Timer 12
|
||||
11 Exercise Timer 13
|
||||
12 Exercise Timer 14
|
||||
13 Exercise Timer 15
|
||||
14 Exercise Timer 16
|
||||
15 Peripheral Module Comm Fail
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Binary#13
|
||||
|
||||
Bit Name
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 Initialized
|
||||
1 发电机有效
|
||||
2 ECU1 通信故障
|
||||
3 ECU2 通信故障
|
||||
4 Dummy Load Stage 1
|
||||
5 Dummy Load Stage 2
|
||||
6 Dummy Load Stage 3
|
||||
7 Dummy Load Stage 4
|
||||
8 Dummy Load Stage 5
|
||||
9 Start Button State
|
||||
10 Stop Button State
|
||||
11 FltRes Button State
|
||||
12 HornRes Button State
|
||||
13 MCB Button State
|
||||
14 GCB Button State
|
||||
|
||||
|
||||
BIN
docs/AI训练资料/科迈控制/InteliGen 200 - Global Guide.pdf
Normal file
BIN
docs/AI训练资料/科迈控制/InteliGen 200 - Global Guide.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/科迈控制/InteliGen 500 G2 Global Guide.pdf
Normal file
BIN
docs/AI训练资料/科迈控制/InteliGen 500 G2 Global Guide.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/科迈控制/InteliGen4 200 Global Guide.pdf
Normal file
BIN
docs/AI训练资料/科迈控制/InteliGen4 200 Global Guide.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/科迈控制/InteliLite4 MRS16 Global Guide.pdf
Normal file
BIN
docs/AI训练资料/科迈控制/InteliLite4 MRS16 Global Guide.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/菱重S12R发动机说明书.pdf
Normal file
BIN
docs/AI训练资料/菱重S12R发动机说明书.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/菱重S16R,S16R2_说明书.pdf
Normal file
BIN
docs/AI训练资料/菱重S16R,S16R2_说明书.pdf
Normal file
Binary file not shown.
BIN
docs/AI训练资料/菱重发动机_S16RS16R2维修保养手册.pdf
Normal file
BIN
docs/AI训练资料/菱重发动机_S16RS16R2维修保养手册.pdf
Normal file
Binary file not shown.
@@ -1,393 +0,0 @@
|
||||
# 🎥 Jitsi Meet Docker 部署与使用指南
|
||||
|
||||
## 📋 架构说明
|
||||
|
||||
本项目已将Jitsi Meet完整集成到Docker Compose中,包含以下4个服务:
|
||||
|
||||
| 服务 | 容器名 | 端口 | 说明 |
|
||||
|------|--------|------|------|
|
||||
| **jitsi-web** | urban-lifeline-jitsi-web | 8280 (HTTP)<br>8443 (HTTPS) | Web前端服务 |
|
||||
| **jitsi-prosody** | urban-lifeline-jitsi-prosody | 5222/5347/5280 (内部) | XMPP信令服务器 |
|
||||
| **jitsi-jicofo** | urban-lifeline-jitsi-jicofo | 无需暴露 | 会议控制服务 |
|
||||
| **jitsi-jvb** | urban-lifeline-jitsi-jvb | 10000/udp<br>4443/tcp | 视频桥接服务 |
|
||||
|
||||
**数据持久化目录**:
|
||||
```
|
||||
F:\Project\urbanLifeline\.data\docker\jitsi\
|
||||
├── web/ # Web配置
|
||||
├── prosody/ # XMPP配置
|
||||
├── jicofo/ # Jicofo配置
|
||||
├── jvb/ # JVB配置
|
||||
└── transcripts/ # 转录文件
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 步骤1:启动Jitsi Meet服务
|
||||
|
||||
```bash
|
||||
# 进入Docker Compose目录
|
||||
cd F:\Project\urbanLifeline\urbanLifelineServ\.bin\docker\urbanlifeline
|
||||
|
||||
# 启动Jitsi Meet(仅启动jitsi相关服务)
|
||||
docker-compose up -d jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb
|
||||
|
||||
# 查看服务状态
|
||||
docker-compose ps
|
||||
|
||||
# 查看日志(排查问题用)
|
||||
docker-compose logs -f jitsi-web
|
||||
```
|
||||
|
||||
**预期输出**:
|
||||
```
|
||||
NAME STATUS PORTS
|
||||
urban-lifeline-jitsi-web Up (healthy) 0.0.0.0:8280->80/tcp, 0.0.0.0:8443->443/tcp
|
||||
urban-lifeline-jitsi-prosody Up (healthy) 5222/tcp, 5347/tcp, 5280/tcp
|
||||
urban-lifeline-jitsi-jicofo Up (healthy)
|
||||
urban-lifeline-jitsi-jvb Up (healthy) 0.0.0.0:10000->10000/udp, 0.0.0.0:4443->4443/tcp
|
||||
```
|
||||
|
||||
### 步骤2:验证Jitsi Meet运行
|
||||
|
||||
在浏览器打开:
|
||||
- **主页**: http://localhost:8280/
|
||||
- **测试房间**: http://localhost:8280/test-meeting
|
||||
|
||||
如果能看到Jitsi Meet界面,说明部署成功!
|
||||
|
||||
---
|
||||
|
||||
## 🔧 配置说明
|
||||
|
||||
### 1. JWT认证配置(已配置)
|
||||
|
||||
**Docker配置**(docker-compose.yml):
|
||||
```yaml
|
||||
jitsi-web:
|
||||
environment:
|
||||
JWT_APP_ID: urbanLifeline # 应用ID
|
||||
JWT_APP_SECRET: your-secret-key-change-in-production # JWT密钥
|
||||
```
|
||||
|
||||
**Java后端配置**(application-dev.yml):
|
||||
```yaml
|
||||
jitsi:
|
||||
app:
|
||||
id: urbanLifeline # 必须与Docker一致
|
||||
secret: your-secret-key-change-in-production # 必须与Docker一致
|
||||
server:
|
||||
url: http://localhost:8280 # Jitsi服务地址
|
||||
token:
|
||||
expiration: 7200000 # Token有效期2小时
|
||||
```
|
||||
|
||||
⚠️ **重要**:
|
||||
- `JWT_APP_ID` 和 `JWT_APP_SECRET` 在Docker和Java后端**必须完全一致**
|
||||
- 生产环境请修改 `JWT_APP_SECRET` 为强随机字符串
|
||||
- 建议使用密钥管理工具(如Vault)管理密钥
|
||||
|
||||
### 2. 修改JWT密钥(生产环境必须)
|
||||
|
||||
#### 方法A:修改Docker配置
|
||||
```bash
|
||||
# 1. 编辑 docker-compose.yml
|
||||
# 将所有 JWT_APP_SECRET 改为你的密钥
|
||||
JWT_APP_SECRET: "A8sF9dK2mP5nX7qW3tY6uZ1vB4cE0hG"
|
||||
|
||||
# 2. 同步修改 application-dev.yml
|
||||
jitsi:
|
||||
app:
|
||||
secret: "A8sF9dK2mP5nX7qW3tY6uZ1vB4cE0hG"
|
||||
|
||||
# 3. 重启服务
|
||||
docker-compose restart jitsi-web jitsi-prosody
|
||||
```
|
||||
|
||||
#### 方法B:使用环境变量(推荐生产环境)
|
||||
```bash
|
||||
# 创建 .env 文件
|
||||
echo "JITSI_JWT_SECRET=your-strong-secret-key" > .env
|
||||
|
||||
# 修改 docker-compose.yml 使用环境变量
|
||||
JWT_APP_SECRET: ${JITSI_JWT_SECRET}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试JWT验证
|
||||
|
||||
### 1. 测试无Token访问(应被拒绝)
|
||||
|
||||
在浏览器打开:http://localhost:8280/test-room
|
||||
|
||||
**预期结果**:显示"会议需要密码"或"需要登录"
|
||||
|
||||
### 2. 测试带JWT Token访问(应成功)
|
||||
|
||||
使用你的Java后端创建会议,后端会自动生成JWT Token并返回iframe URL:
|
||||
|
||||
```bash
|
||||
# 调用创建会议接口
|
||||
POST http://localhost:8180/urban-lifeline/workcase/chat/meeting/create
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"roomId": "test-room-123",
|
||||
"workcaseId": "WC001",
|
||||
"meetingName": "测试会议",
|
||||
"maxParticipants": 10
|
||||
}
|
||||
|
||||
# 响应包含带JWT的URL
|
||||
{
|
||||
"code": 0,
|
||||
"data": {
|
||||
"meetingId": "xxx",
|
||||
"iframeUrl": "http://localhost:8280/workcase_WC001_1234567890?jwt=eyJhbGc..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
在浏览器打开响应中的 `iframeUrl`,应该能正常进入会议。
|
||||
|
||||
---
|
||||
|
||||
## 📊 服务管理命令
|
||||
|
||||
```bash
|
||||
# 查看服务状态
|
||||
docker-compose ps
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f jitsi-web # Web服务日志
|
||||
docker-compose logs -f jitsi-prosody # XMPP日志
|
||||
docker-compose logs -f jitsi-jicofo # Jicofo日志
|
||||
docker-compose logs -f jitsi-jvb # JVB日志
|
||||
|
||||
# 重启服务
|
||||
docker-compose restart jitsi-web
|
||||
|
||||
# 停止服务
|
||||
docker-compose stop jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb
|
||||
|
||||
# 删除服务(保留数据)
|
||||
docker-compose down
|
||||
|
||||
# 删除服务和数据
|
||||
docker-compose down -v
|
||||
rm -rf F:\Project\urbanLifeline\.data\docker\jitsi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 常见问题排查
|
||||
|
||||
### 问题1:服务启动失败
|
||||
|
||||
**症状**:
|
||||
```bash
|
||||
docker-compose ps
|
||||
# 显示 Exit (1) 或 Restarting
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 查看详细日志
|
||||
docker-compose logs jitsi-web
|
||||
|
||||
# 检查端口占用
|
||||
netstat -ano | findstr "8280"
|
||||
|
||||
# 删除容器重新启动
|
||||
docker-compose down
|
||||
docker-compose up -d jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb
|
||||
```
|
||||
|
||||
### 问题2:JWT验证失败
|
||||
|
||||
**症状**:进入会议后立即被踢出,或显示"认证失败"
|
||||
|
||||
**原因**:JWT密钥不匹配
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 1. 检查Docker配置
|
||||
docker-compose exec jitsi-prosody cat /config/prosody.cfg.lua | grep jwt
|
||||
|
||||
# 2. 检查Java配置
|
||||
# 确保 application-dev.yml 中的 jitsi.app.secret 与Docker一致
|
||||
|
||||
# 3. 重启服务
|
||||
docker-compose restart jitsi-prosody
|
||||
```
|
||||
|
||||
### 问题3:视频无法连接
|
||||
|
||||
**症状**:音频正常,但视频黑屏或连接失败
|
||||
|
||||
**原因**:UDP端口10000被防火墙阻止
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# Windows防火墙添加规则
|
||||
netsh advfirewall firewall add rule name="Jitsi JVB UDP" dir=in action=allow protocol=UDP localport=10000
|
||||
|
||||
# 或关闭防火墙测试(不推荐生产环境)
|
||||
```
|
||||
|
||||
### 问题4:健康检查失败
|
||||
|
||||
**症状**:
|
||||
```bash
|
||||
docker-compose ps
|
||||
# 显示 (unhealthy)
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 检查健康检查端点
|
||||
curl http://localhost:8280/
|
||||
curl http://localhost:8888/about/health # Jicofo
|
||||
curl http://localhost:8080/about/health # JVB
|
||||
|
||||
# 增加启动等待时间
|
||||
# 编辑 docker-compose.yml,修改 start_period: 120s
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🌐 公网部署(可选)
|
||||
|
||||
如果需要从公网访问,需要额外配置:
|
||||
|
||||
### 1. 配置域名和SSL
|
||||
|
||||
```yaml
|
||||
jitsi-web:
|
||||
environment:
|
||||
PUBLIC_URL: https://your-domain.com
|
||||
ENABLE_LETSENCRYPT: 1
|
||||
LETSENCRYPT_DOMAIN: your-domain.com
|
||||
LETSENCRYPT_EMAIL: your-email@example.com
|
||||
DISABLE_HTTPS: 0
|
||||
```
|
||||
|
||||
### 2. 配置JVB公网IP
|
||||
|
||||
```yaml
|
||||
jitsi-jvb:
|
||||
environment:
|
||||
DOCKER_HOST_ADDRESS: your-public-ip
|
||||
```
|
||||
|
||||
### 3. 开放防火墙端口
|
||||
|
||||
- **TCP 443**: HTTPS访问
|
||||
- **UDP 10000**: WebRTC媒体流
|
||||
- **TCP 4443**: WebRTC Fallback(可选)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 集成到项目
|
||||
|
||||
你的Java后端已经完全配置好,可以直接使用:
|
||||
|
||||
### 前端Vue调用示例
|
||||
|
||||
```typescript
|
||||
import { createVideoMeeting } from '@/api/workcase/meeting'
|
||||
|
||||
// 创建会议
|
||||
const res = await createVideoMeeting({
|
||||
roomId: 'room-123',
|
||||
workcaseId: 'WC001',
|
||||
meetingName: '技术支持会议',
|
||||
maxParticipants: 10
|
||||
})
|
||||
|
||||
// 在iframe中显示
|
||||
const iframeUrl = res.data.iframeUrl
|
||||
```
|
||||
|
||||
### 前端UniApp调用示例
|
||||
|
||||
```typescript
|
||||
import { workcaseChatAPI } from '@/api/workcase'
|
||||
|
||||
// 创建会议
|
||||
const res = await workcaseChatAPI.createVideoMeeting({
|
||||
roomId: roomId.value,
|
||||
workcaseId: workcaseId.value,
|
||||
meetingName: '工单技术支持',
|
||||
maxParticipants: 10
|
||||
})
|
||||
|
||||
// 跳转到会议页面
|
||||
uni.navigateTo({
|
||||
url: `/pages/meeting/MeetingView/MeetingView?meetingUrl=${encodeURIComponent(res.data.iframeUrl)}`
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 性能优化(可选)
|
||||
|
||||
### 1. 限制CPU和内存
|
||||
|
||||
```yaml
|
||||
jitsi-jvb:
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '2'
|
||||
memory: 2G
|
||||
reservations:
|
||||
cpus: '1'
|
||||
memory: 1G
|
||||
```
|
||||
|
||||
### 2. 配置视频质量
|
||||
|
||||
编辑 `.data/docker/jitsi/web/config/config.js`:
|
||||
|
||||
```javascript
|
||||
var config = {
|
||||
resolution: 720,
|
||||
constraints: {
|
||||
video: {
|
||||
height: { ideal: 720, max: 720, min: 180 }
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 检查清单
|
||||
|
||||
启动前确认:
|
||||
- [x] Docker Desktop已安装并运行
|
||||
- [x] 端口8280、8443、10000未被占用
|
||||
- [x] application-dev.yml配置正确
|
||||
- [x] JWT密钥在Docker和Java后端一致
|
||||
|
||||
启动后确认:
|
||||
- [ ] 4个容器都是Up状态
|
||||
- [ ] 访问http://localhost:8280能看到Jitsi界面
|
||||
- [ ] Java后端能成功创建会议并生成JWT
|
||||
- [ ] 前端能正常嵌入iframe并进入会议
|
||||
|
||||
---
|
||||
|
||||
## 🆘 获取帮助
|
||||
|
||||
如遇问题,收集以下信息:
|
||||
1. Docker服务状态:`docker-compose ps`
|
||||
2. 服务日志:`docker-compose logs jitsi-web`
|
||||
3. 健康检查:`curl http://localhost:8280/`
|
||||
4. Java后端日志中的JWT Token生成情况
|
||||
|
||||
**祝部署顺利!** 🚀
|
||||
BIN
docs/qrcode.jpg
BIN
docs/qrcode.jpg
Binary file not shown.
|
Before Width: | Height: | Size: 440 KiB |
BIN
docs/qrcode.png
BIN
docs/qrcode.png
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB |
@@ -1,177 +0,0 @@
|
||||
# 代码重构:视频会议 API 规范化
|
||||
|
||||
## 重构日期
|
||||
2025-12-26
|
||||
|
||||
## 重构原因
|
||||
原代码将类型定义和 API 调用混在一个独立的 `meeting.ts` 文件中,不符合项目规范。需要按照以下规范重构:
|
||||
|
||||
1. **类型定义规范**:所有 DTO/VO 类型应放在 `types/workcase/` 目录下
|
||||
2. **API 调用规范**:使用 `shared/api` 的 `api` 对象发送请求
|
||||
3. **API 组织规范**:按业务模块组织成对象形式(如 `workcaseAPI`、`workcaseChatAPI`)
|
||||
4. **代码复用规范**:避免重复定义,视频会议属于聊天室模块
|
||||
|
||||
## 重构内容
|
||||
|
||||
### 1. 类型定义迁移
|
||||
|
||||
**原位置**:`api/workcase/meeting.ts`(已删除)
|
||||
|
||||
**新位置**:`types/workcase/chatRoom.ts`
|
||||
|
||||
类型定义已经存在于 `chatRoom.ts` 中,无需创建新文件:
|
||||
- `TbVideoMeetingDTO` (line 68-88)
|
||||
- `VideoMeetingVO` (line 220-241)
|
||||
- `CreateMeetingParam` (line 279-285)
|
||||
|
||||
### 2. API 方法整合
|
||||
|
||||
**原文件**:`api/workcase/meeting.ts`(已删除)
|
||||
- 独立的函数式 API 调用
|
||||
- 使用 `http.post/get` 发送请求
|
||||
- 类型定义和 API 混在一起
|
||||
|
||||
**新文件**:`api/workcase/workcaseChat.ts`(已更新)
|
||||
|
||||
新增 6 个视频会议方法到 `workcaseChatAPI` 对象(line 227-276):
|
||||
|
||||
```typescript
|
||||
// ====================== 视频会议管理(Jitsi Meet) ======================
|
||||
|
||||
async createVideoMeeting(meeting: TbVideoMeetingDTO): Promise<ResultDomain<VideoMeetingVO>>
|
||||
async getVideoMeetingInfo(meetingId: string): Promise<ResultDomain<VideoMeetingVO>>
|
||||
async getActiveMeeting(roomId: string): Promise<ResultDomain<VideoMeetingVO>>
|
||||
async joinVideoMeeting(meetingId: string): Promise<ResultDomain<VideoMeetingVO>>
|
||||
async startVideoMeeting(meetingId: string): Promise<ResultDomain<boolean>>
|
||||
async endVideoMeeting(meetingId: string): Promise<ResultDomain<VideoMeetingVO>>
|
||||
```
|
||||
|
||||
### 3. 导入语句更新
|
||||
|
||||
**文件**:`api/workcase/workcaseChat.ts` (line 3-15)
|
||||
|
||||
新增导入:
|
||||
```typescript
|
||||
import type {
|
||||
// ... 现有导入
|
||||
TbVideoMeetingDTO, // 新增
|
||||
VideoMeetingVO // 新增
|
||||
} from '@/types/workcase'
|
||||
```
|
||||
|
||||
### 4. 导出配置更新
|
||||
|
||||
**文件**:`api/workcase/index.ts`
|
||||
|
||||
```typescript
|
||||
// 移除
|
||||
- export * from './meeting'
|
||||
|
||||
// 保留
|
||||
export * from './workcase'
|
||||
export * from './workcaseChat'
|
||||
```
|
||||
|
||||
### 5. Vue 组件引用更新
|
||||
|
||||
**文件**:`components/chatRoom/chatRoom/ChatRoom.vue`
|
||||
|
||||
**修改前**:
|
||||
```typescript
|
||||
import { createVideoMeeting, getActiveMeeting, endVideoMeeting } from '@/api/workcase/meeting'
|
||||
|
||||
// 使用
|
||||
await createVideoMeeting({ ... })
|
||||
await getActiveMeeting(props.roomId)
|
||||
await endVideoMeeting(currentMeetingId.value)
|
||||
```
|
||||
|
||||
**修改后**:
|
||||
```typescript
|
||||
import { workcaseChatAPI } from '@/api/workcase'
|
||||
|
||||
// 使用
|
||||
await workcaseChatAPI.createVideoMeeting({ ... })
|
||||
await workcaseChatAPI.getActiveMeeting(props.roomId)
|
||||
await workcaseChatAPI.endVideoMeeting(currentMeetingId.value)
|
||||
```
|
||||
|
||||
## 重构优势
|
||||
|
||||
### 1. 符合项目规范
|
||||
- ✅ 类型定义集中在 `types/` 目录
|
||||
- ✅ API 调用使用 `shared/api`
|
||||
- ✅ API 按业务模块组织
|
||||
|
||||
### 2. 避免代码重复
|
||||
- ✅ 复用已有的类型定义
|
||||
- ✅ 统一的 API 调用风格
|
||||
|
||||
### 3. 更好的可维护性
|
||||
- ✅ 代码组织清晰,职责分明
|
||||
- ✅ 类型定义和 API 调用分离
|
||||
- ✅ 按业务模块聚合,易于查找
|
||||
|
||||
### 4. 统一的开发体验
|
||||
- ✅ 与其他 API 调用方式一致
|
||||
- ✅ 自动类型推断
|
||||
- ✅ 统一的错误处理
|
||||
|
||||
## 受影响的文件
|
||||
|
||||
### 删除的文件
|
||||
- `packages/workcase/src/api/workcase/meeting.ts`
|
||||
|
||||
### 修改的文件
|
||||
1. `packages/workcase/src/api/workcase/workcaseChat.ts` - 新增 6 个视频会议方法
|
||||
2. `packages/workcase/src/api/workcase/index.ts` - 移除 meeting 导出
|
||||
3. `packages/workcase/src/components/chatRoom/chatRoom/ChatRoom.vue` - 更新 API 调用
|
||||
|
||||
### 保持不变的文件
|
||||
- `packages/workcase/src/types/workcase/chatRoom.ts` - 类型定义已存在
|
||||
- `packages/workcase_wechat/api/workcase/workcaseChat.ts` - UniApp 端已符合规范
|
||||
|
||||
## 测试建议
|
||||
|
||||
1. **Vue Web 端测试**
|
||||
- 测试创建视频会议功能
|
||||
- 测试加入已有会议功能
|
||||
- 测试结束会议功能
|
||||
- 测试自动检测活跃会议
|
||||
|
||||
2. **UniApp 端测试**
|
||||
- 测试 MeetingView 页面导航
|
||||
- 测试视频会议页面显示
|
||||
- 测试结束会议返回聊天室
|
||||
|
||||
3. **类型检查**
|
||||
```bash
|
||||
# 运行 TypeScript 类型检查
|
||||
npm run type-check
|
||||
```
|
||||
|
||||
## 后续优化建议
|
||||
|
||||
1. **错误处理增强**
|
||||
- 添加统一的错误提示
|
||||
- 添加会议状态校验
|
||||
|
||||
2. **用户体验优化**
|
||||
- 添加会议加载状态提示
|
||||
- 添加会议连接失败重试
|
||||
|
||||
3. **性能优化**
|
||||
- 会议状态使用 WebSocket 实时同步
|
||||
- 离开页面自动结束会议
|
||||
|
||||
## 参考文档
|
||||
|
||||
- 项目 API 规范:参考 `workcase.ts` 和 `workcaseChat.ts`
|
||||
- 类型定义规范:参考 `types/workcase/` 目录
|
||||
- Vue 组件规范:参考现有聊天室组件
|
||||
|
||||
---
|
||||
|
||||
**重构人员**:Claude Code
|
||||
**审核状态**:待审核
|
||||
**版本**:v1.0
|
||||
563
docs/前端完整指南.md
563
docs/前端完整指南.md
@@ -1,563 +0,0 @@
|
||||
# 泰豪电源 AI 数智化平台 - 前端完整指南
|
||||
|
||||
## 📖 目录
|
||||
|
||||
1. [技术架构](#1-技术架构)
|
||||
2. [共享组件方案](#2-共享组件方案)
|
||||
3. [快速开始](#3-快速开始)
|
||||
4. [开发指南](#4-开发指南)
|
||||
5. [构建部署](#5-构建部署)
|
||||
6. [常见问题](#6-常见问题)
|
||||
|
||||
---
|
||||
|
||||
## 1. 技术架构
|
||||
|
||||
### 1.1 技术栈
|
||||
|
||||
**前端框架**
|
||||
- Vue 3.5+ (`<script setup>`)
|
||||
- TypeScript 5.7+
|
||||
- Vite 6.0+
|
||||
- Pinia 2.2+
|
||||
- Element Plus 2.9+
|
||||
|
||||
**工程化**
|
||||
- pnpm 9.0+ Monorepo
|
||||
- Turborepo 2.0+ 构建加速
|
||||
- unplugin-auto-import 自动导入
|
||||
- ESLint 9 + Prettier
|
||||
|
||||
**通信层**
|
||||
- ofetch (替代 Axios)
|
||||
- @vueuse/core
|
||||
|
||||
### 1.2 项目结构
|
||||
|
||||
```
|
||||
urbanLifelineWeb/
|
||||
├── packages/
|
||||
│ ├── shared/ # 共享包 ⭐核心
|
||||
│ │ ├── components/ # UI组件
|
||||
│ │ ├── utils/ # 工具函数
|
||||
│ │ ├── api/ # API封装
|
||||
│ │ └── composables/ # 组合函数
|
||||
│ ├── portal/ # 主应用
|
||||
│ ├── app-bidding/ # 招投标应用
|
||||
│ ├── app-customer-service/ # 智能客服应用
|
||||
│ └── app-knowledge/ # 知识协同应用
|
||||
├── pnpm-workspace.yaml
|
||||
└── turbo.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 共享组件方案
|
||||
|
||||
### 2.1 核心理念
|
||||
|
||||
**业务应用只需关心 `@shared/*` 导入,无需关心底层依赖(Vue、Element Plus 等)**
|
||||
|
||||
```
|
||||
业务应用: import { UlTable } from '@shared/components'
|
||||
↓
|
||||
浏览器: GET /shared/components.js
|
||||
↓
|
||||
共享服务: 返回包含 Vue + Element Plus 的 ES Module
|
||||
↓
|
||||
✅ 所有应用共用,浏览器缓存
|
||||
```
|
||||
|
||||
### 2.2 配置方式
|
||||
|
||||
**业务应用配置(极简)**
|
||||
|
||||
```html
|
||||
<!-- index.html -->
|
||||
<script type="importmap">
|
||||
{
|
||||
"imports": {
|
||||
"@shared/components": "/shared/components.js",
|
||||
"@shared/utils": "/shared/utils.js",
|
||||
"@shared/api": "/shared/api.js"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
**Vue 组件使用**
|
||||
|
||||
```vue
|
||||
<script setup lang="ts">
|
||||
// ✅ 直接从 HTTP URL 加载
|
||||
import { UlTable } from '@shared/components'
|
||||
import { http } from '@shared/utils'
|
||||
import { authApi } from '@shared/api'
|
||||
import { useTable } from '@shared/composables'
|
||||
|
||||
const { loading, tableData } = useTable({
|
||||
fetchData: authApi.getUserList
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<UlTable :data="tableData" :loading="loading" />
|
||||
</template>
|
||||
```
|
||||
|
||||
### 2.3 优势
|
||||
|
||||
| 特性 | 传统方式 | Import Maps 方案 |
|
||||
|------|---------|-----------------|
|
||||
| 代码共享 | ❌ 每个应用打包一份 | ✅ 所有应用共用一份 |
|
||||
| 构建体积 | ❌ 重复打包 | ✅ 减少 30-50% |
|
||||
| 依赖管理 | ❌ 每个应用配置 | ✅ 共享服务统一管理 |
|
||||
| 版本升级 | ❌ 所有应用改 | ✅ 只改共享服务 |
|
||||
| 浏览器缓存 | ⚠️ 独立缓存 | ✅ 统一缓存 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 快速开始
|
||||
|
||||
### 3.1 Docker 环境(推荐)
|
||||
|
||||
```bash
|
||||
# 1. 启动所有服务
|
||||
make up
|
||||
|
||||
# 2. 查看状态
|
||||
make ps
|
||||
|
||||
# 3. 访问应用
|
||||
open http://localhost
|
||||
```
|
||||
|
||||
**访问地址**
|
||||
- 主应用: http://localhost/
|
||||
- 招投标: http://localhost/bidding
|
||||
- 智能客服: http://localhost/customer-service
|
||||
- 共享组件: http://localhost/shared/components.js
|
||||
- API网关: http://localhost/api
|
||||
- Nacos: http://localhost/nacos
|
||||
|
||||
### 3.2 本地开发
|
||||
|
||||
```bash
|
||||
# 1. 安装依赖
|
||||
pnpm install
|
||||
|
||||
# 2. 启动所有应用
|
||||
pnpm dev
|
||||
|
||||
# 或启动单个应用
|
||||
pnpm --filter portal dev
|
||||
pnpm --filter app-bidding dev
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 开发指南
|
||||
|
||||
### 4.1 创建页面
|
||||
|
||||
```vue
|
||||
<!-- packages/portal/src/views/UserList.vue -->
|
||||
<script setup lang="ts">
|
||||
import { UlTable } from '@shared/components'
|
||||
import { authApi } from '@shared/api'
|
||||
import { useTable } from '@shared/composables'
|
||||
|
||||
interface User {
|
||||
id: string
|
||||
username: string
|
||||
email: string
|
||||
}
|
||||
|
||||
const { loading, tableData, pagination, handlePageChange } = useTable<User>({
|
||||
fetchData: authApi.getUserList
|
||||
})
|
||||
|
||||
const columns = [
|
||||
{ prop: 'username', label: '用户名', minWidth: 150 },
|
||||
{ prop: 'email', label: '邮箱', minWidth: 200 }
|
||||
]
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="user-list">
|
||||
<UlTable
|
||||
:data="tableData"
|
||||
:columns="columns"
|
||||
:loading="loading"
|
||||
:pagination="pagination"
|
||||
@page-change="handlePageChange"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
```
|
||||
|
||||
### 4.2 API 调用
|
||||
|
||||
```typescript
|
||||
// 使用封装的 API
|
||||
import { authApi, systemApi } from '@shared/api'
|
||||
|
||||
// GET 请求
|
||||
const users = await authApi.getUserList({ page: 1, size: 10 })
|
||||
|
||||
// POST 请求
|
||||
await authApi.createUser({ username: 'test', email: 'test@example.com' })
|
||||
|
||||
// 直接使用 http
|
||||
import { http } from '@shared/utils'
|
||||
const data = await http.get('/custom/endpoint')
|
||||
```
|
||||
|
||||
### 4.3 状态管理
|
||||
|
||||
```typescript
|
||||
// store/user.ts
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
import { authApi } from '@shared/api'
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
// State
|
||||
const userInfo = ref(null)
|
||||
const permissions = ref([])
|
||||
|
||||
// Getters
|
||||
const isLoggedIn = computed(() => !!userInfo.value)
|
||||
|
||||
// Actions
|
||||
const login = async (loginData) => {
|
||||
const res = await authApi.login(loginData)
|
||||
userInfo.value = res.userInfo
|
||||
permissions.value = res.permissions
|
||||
}
|
||||
|
||||
return { userInfo, permissions, isLoggedIn, login }
|
||||
})
|
||||
```
|
||||
|
||||
### 4.4 路由配置
|
||||
|
||||
```typescript
|
||||
// router/index.ts
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: '/',
|
||||
component: () => import('@/layouts/MainLayout.vue'),
|
||||
children: [
|
||||
{
|
||||
path: 'home',
|
||||
component: () => import('@/views/home/index.vue'),
|
||||
meta: { title: '首页' }
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes
|
||||
})
|
||||
|
||||
export default router
|
||||
```
|
||||
|
||||
### 4.5 常用命令
|
||||
|
||||
```bash
|
||||
# 查看日志
|
||||
make logs-portal # 主应用日志
|
||||
make logs-gateway # 网关日志
|
||||
make logs-shared # 共享包日志
|
||||
|
||||
# 重启服务
|
||||
make restart-portal # 重启主应用
|
||||
make restart # 重启所有服务
|
||||
|
||||
# 进入容器
|
||||
make shell-portal # 进入容器调试
|
||||
|
||||
# 数据库
|
||||
make db # 连接数据库
|
||||
make db-init # 初始化数据
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 构建部署
|
||||
|
||||
### 5.1 本地构建
|
||||
|
||||
```bash
|
||||
# 构建所有应用
|
||||
pnpm build
|
||||
|
||||
# 构建单个应用
|
||||
pnpm --filter portal build
|
||||
pnpm --filter shared build
|
||||
|
||||
# 预览
|
||||
pnpm preview
|
||||
```
|
||||
|
||||
### 5.2 部署到生产
|
||||
|
||||
**方式1: Docker 部署**
|
||||
|
||||
```bash
|
||||
# 构建生产镜像
|
||||
docker build -t urban-lifeline-web .
|
||||
|
||||
# 运行
|
||||
docker run -p 80:80 urban-lifeline-web
|
||||
```
|
||||
|
||||
**方式2: CDN 部署**
|
||||
|
||||
```bash
|
||||
# 部署共享包到 CDN
|
||||
cd packages/shared
|
||||
pnpm build
|
||||
ossutil cp -r dist/esm/ oss://cdn/shared/v1.0.0/
|
||||
|
||||
# 部署业务应用
|
||||
cd packages/portal
|
||||
pnpm build
|
||||
ossutil cp -r dist/ oss://cdn/portal/
|
||||
```
|
||||
|
||||
**方式3: Nginx 静态部署**
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name taihao.com;
|
||||
|
||||
# 主应用
|
||||
location / {
|
||||
root /var/www/portal/dist;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# 共享包
|
||||
location /shared/ {
|
||||
root /var/www/shared/dist;
|
||||
add_header Access-Control-Allow-Origin "*";
|
||||
expires 1y;
|
||||
}
|
||||
|
||||
# API 代理
|
||||
location /api/ {
|
||||
proxy_pass http://gateway:8080/;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5.3 环境变量
|
||||
|
||||
```bash
|
||||
# .env.development
|
||||
VITE_API_BASE_URL=http://localhost/api
|
||||
VITE_SHARED_URL=http://localhost/shared
|
||||
|
||||
# .env.production
|
||||
VITE_API_BASE_URL=https://api.taihao.com/api
|
||||
VITE_SHARED_URL=https://cdn.taihao.com/shared/v1.0.0
|
||||
```
|
||||
|
||||
### 5.4 CI/CD
|
||||
|
||||
```yaml
|
||||
# .github/workflows/deploy.yml
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
|
||||
- name: Build
|
||||
run: pnpm install && pnpm build
|
||||
|
||||
- name: Deploy
|
||||
run: ./scripts/deploy-production.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 常见问题
|
||||
|
||||
### 6.1 为什么使用 Import Maps?
|
||||
|
||||
**优势**:
|
||||
- ✅ 浏览器原生支持,无需额外库
|
||||
- ✅ 真正的运行时共享
|
||||
- ✅ 开发体验好(支持 HMR)
|
||||
- ✅ 减小构建体积
|
||||
|
||||
**对比 Module Federation**:
|
||||
- Import Maps 更简单,配置少
|
||||
- Module Federation 功能更强大,但复杂
|
||||
- 两者可以结合使用
|
||||
|
||||
### 6.2 如何处理 TypeScript 类型?
|
||||
|
||||
```typescript
|
||||
// packages/portal/src/types/shared.d.ts
|
||||
declare module '@shared/components' {
|
||||
export * from '../../../shared/src/components'
|
||||
}
|
||||
|
||||
declare module '@shared/utils' {
|
||||
export * from '../../../shared/src/utils'
|
||||
}
|
||||
```
|
||||
|
||||
### 6.3 如何更新共享组件?
|
||||
|
||||
```bash
|
||||
# 1. 修改共享组件代码
|
||||
vim packages/shared/src/components/UlTable/index.vue
|
||||
|
||||
# 2. 重启共享服务(HMR 自动生效)
|
||||
make restart-shared
|
||||
|
||||
# 3. 浏览器刷新,所有应用自动获得最新版本
|
||||
```
|
||||
|
||||
### 6.4 生产环境如何缓存?
|
||||
|
||||
```nginx
|
||||
# Nginx 配置
|
||||
location /shared/ {
|
||||
# 基于版本号的长期缓存
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
# HTML 不缓存
|
||||
location ~* \.html$ {
|
||||
add_header Cache-Control "no-cache";
|
||||
}
|
||||
```
|
||||
|
||||
### 6.5 如何调试共享组件?
|
||||
|
||||
```bash
|
||||
# 方式1: 查看网络请求
|
||||
浏览器 F12 → Network → 筛选 JS → 查看 /shared/components.js
|
||||
|
||||
# 方式2: 查看日志
|
||||
make logs-shared
|
||||
|
||||
# 方式3: 进入容器
|
||||
make shell-shared
|
||||
```
|
||||
|
||||
### 6.6 为什么不用 Webpack?
|
||||
|
||||
Vite 优势:
|
||||
- ⚡ 开发启动快(秒级)
|
||||
- 🔥 HMR 更快
|
||||
- 📦 生产构建基于 Rollup(体积更小)
|
||||
- 🎯 原生 ES Module 支持
|
||||
|
||||
### 6.7 如何处理样式?
|
||||
|
||||
```vue
|
||||
<!-- 组件级样式 -->
|
||||
<style scoped>
|
||||
.ul-table {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- 全局样式 -->
|
||||
<style>
|
||||
@import '@shared/styles/variables.scss';
|
||||
</style>
|
||||
```
|
||||
|
||||
共享包会自动处理 CSS 提取和分割。
|
||||
|
||||
### 6.8 如何添加新的业务应用?
|
||||
|
||||
```bash
|
||||
# 1. 复制现有应用作为模板
|
||||
cp -r packages/portal packages/app-newapp
|
||||
|
||||
# 2. 修改 package.json
|
||||
{
|
||||
"name": "@apps/newapp",
|
||||
"scripts": {
|
||||
"dev": "vite --port 3003"
|
||||
}
|
||||
}
|
||||
|
||||
# 3. 添加到 pnpm-workspace.yaml(已自动包含)
|
||||
|
||||
# 4. 启动
|
||||
pnpm --filter app-newapp dev
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### A. 常用脚本
|
||||
|
||||
```bash
|
||||
# Makefile 命令
|
||||
make up # 启动
|
||||
make down # 停止
|
||||
make logs # 日志
|
||||
make ps # 状态
|
||||
make restart # 重启
|
||||
make clean # 清理
|
||||
|
||||
# pnpm 命令
|
||||
pnpm dev # 开发
|
||||
pnpm build # 构建
|
||||
pnpm preview # 预览
|
||||
pnpm lint # 检查
|
||||
pnpm format # 格式化
|
||||
```
|
||||
|
||||
### B. 目录说明
|
||||
|
||||
```
|
||||
urbanLifeline/
|
||||
├── urbanLifelineServ/ # 后端(Java Spring Boot)
|
||||
├── urbanLifelineWeb/ # 前端(Vue 3 Monorepo)
|
||||
├── docker-compose.dev.yml # Docker 开发环境
|
||||
├── Makefile # 快捷命令
|
||||
└── docs/ # 文档
|
||||
└── 前端完整指南.md # 📖 本文档
|
||||
```
|
||||
|
||||
### C. 技术支持
|
||||
|
||||
- 项目文档:`/docs`
|
||||
- 问题反馈:GitHub Issues
|
||||
- 开发规范:ESLint + Prettier
|
||||
- 提交规范:Conventional Commits
|
||||
|
||||
---
|
||||
|
||||
**Happy Coding! 🚀**
|
||||
|
||||
*最后更新:2025-12-02*
|
||||
@@ -1,310 +0,0 @@
|
||||
# 功能实现:视频会议预约模式(Reservation Model)
|
||||
|
||||
## 实现日期
|
||||
2025-12-26
|
||||
|
||||
## 功能概述
|
||||
实现视频会议"预约+按需创建"架构:用户创建会议预约时不立即创建Jitsi会议室,仅在首个用户在允许入会时间窗口内加入时,通过Redis双检锁机制创建Jitsi会议室。
|
||||
|
||||
## 架构模型
|
||||
|
||||
### 预约模式 (Reservation Model)
|
||||
```
|
||||
用户创建会议 → 保存预约信息(scheduled)→ 发送会议通知消息(meetingId)
|
||||
↓
|
||||
首个用户加入 → 时间窗口校验 → Redis分布式锁 → 创建Jitsi会议室 → 更新状态(ongoing)
|
||||
↓
|
||||
后续用户加入 → 直接获取已创建的会议室URL
|
||||
```
|
||||
|
||||
### 时间窗口规则
|
||||
- **提前入会时间**: `start_time - advance` 分钟
|
||||
- **允许入会窗口**: `[提前入会时间, end_time]`
|
||||
- **默认advance**: 5分钟
|
||||
|
||||
## 实现文件
|
||||
|
||||
### 后端修改
|
||||
|
||||
**VideoMeetingServiceImpl.java**
|
||||
- 位置:`urbanLifelineServ/workcase/src/main/java/org/xyzh/workcase/service/`
|
||||
- 修改内容:
|
||||
1. 新增导入:`TbChatRoomMessageDTO`、`ChatRoomService`、`JSONObject`
|
||||
2. 注入依赖:`ChatRoomService`
|
||||
3. 修改 `createMeeting()` 方法:插入数据库成功后调用 `sendMeetingNotification()`
|
||||
4. 新增私有方法:`sendMeetingNotification()`
|
||||
|
||||
## 详细实现
|
||||
|
||||
### 1. 依赖注入
|
||||
|
||||
```java
|
||||
@Autowired
|
||||
private ChatRoomService chatRoomService;
|
||||
```
|
||||
|
||||
### 2. 调用时机
|
||||
|
||||
在 `createMeeting()` 方法中,会议记录插入数据库成功后:
|
||||
|
||||
```java
|
||||
// 8. 插入数据库
|
||||
int rows = videoMeetingMapper.insertVideoMeeting(meetingDTO);
|
||||
if (rows > 0) {
|
||||
logger.info("视频会议创建成功: meetingId={}, jitsiRoomName={}",
|
||||
meetingId, jitsiRoomName);
|
||||
|
||||
// 9. 发送会议通知消息到聊天室
|
||||
sendMeetingNotification(meetingDTO, userName);
|
||||
|
||||
// 10. 返回VO
|
||||
VideoMeetingVO meetingVO = new VideoMeetingVO();
|
||||
BeanUtils.copyProperties(meetingDTO, meetingVO);
|
||||
return ResultDomain.success("创建会议成功", meetingVO);
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 消息发送实现
|
||||
|
||||
**sendMeetingNotification() 方法 (VideoMeetingServiceImpl.java:396-442)**
|
||||
|
||||
```java
|
||||
/**
|
||||
* 发送会议通知消息到聊天室
|
||||
* @param meetingDTO 会议信息
|
||||
* @param creatorName 创建者名称
|
||||
*/
|
||||
private void sendMeetingNotification(TbVideoMeetingDTO meetingDTO, String creatorName) {
|
||||
try {
|
||||
logger.info("发送会议通知消息: roomId={}, meetingId={}",
|
||||
meetingDTO.getRoomId(), meetingDTO.getMeetingId());
|
||||
|
||||
// 构建消息内容
|
||||
TbChatRoomMessageDTO message = new TbChatRoomMessageDTO();
|
||||
message.setMessageId(IdUtil.generateUUID());
|
||||
message.setRoomId(meetingDTO.getRoomId());
|
||||
message.setSenderId(meetingDTO.getCreator());
|
||||
message.setSenderType(meetingDTO.getCreatorType());
|
||||
message.setSenderName(creatorName);
|
||||
message.setMessageType("meet"); // 会议类型消息
|
||||
message.setContent(meetingDTO.getIframeUrl()); // 会议URL作为内容
|
||||
message.setStatus("sent");
|
||||
message.setReadCount(0);
|
||||
message.setSendTime(new Date());
|
||||
|
||||
// 构建扩展信息(会议详情)
|
||||
JSONObject contentExtra = new JSONObject();
|
||||
contentExtra.put("meetingId", meetingDTO.getMeetingId());
|
||||
contentExtra.put("meetingName", meetingDTO.getMeetingName());
|
||||
contentExtra.put("jitsiRoomName", meetingDTO.getJitsiRoomName());
|
||||
contentExtra.put("iframeUrl", meetingDTO.getIframeUrl());
|
||||
contentExtra.put("maxParticipants", meetingDTO.getMaxParticipants());
|
||||
contentExtra.put("creatorName", creatorName);
|
||||
contentExtra.put("workcaseId", meetingDTO.getWorkcaseId());
|
||||
message.setContentExtra(contentExtra);
|
||||
|
||||
// 发送消息
|
||||
ResultDomain<TbChatRoomMessageDTO> sendResult = chatRoomService.sendMessage(message);
|
||||
if (sendResult.getSuccess()) {
|
||||
logger.info("会议通知消息发送成功: messageId={}", message.getMessageId());
|
||||
} else {
|
||||
logger.warn("会议通知消息发送失败: {}", sendResult.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 消息发送失败不影响会议创建
|
||||
logger.error("发送会议通知消息异常: roomId={}, error={}",
|
||||
meetingDTO.getRoomId(), e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 消息数据结构
|
||||
|
||||
### 消息字段
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|-----|------|------|
|
||||
| messageId | String | 消息ID(UUID) |
|
||||
| roomId | String | 聊天室ID |
|
||||
| senderId | String | 发送者ID(会议创建者) |
|
||||
| senderType | String | 发送者类型(guest/agent) |
|
||||
| senderName | String | 发送者名称 |
|
||||
| **messageType** | **String** | **"meet"(会议消息类型)** |
|
||||
| **content** | **String** | **会议iframe URL** |
|
||||
| contentExtra | JSONObject | 会议详细信息(见下表) |
|
||||
| status | String | "sent" |
|
||||
| readCount | Integer | 0 |
|
||||
| sendTime | Date | 发送时间 |
|
||||
|
||||
### contentExtra 详细信息
|
||||
|
||||
```json
|
||||
{
|
||||
"meetingId": "会议ID",
|
||||
"meetingName": "会议名称",
|
||||
"jitsiRoomName": "Jitsi房间名",
|
||||
"iframeUrl": "会议URL",
|
||||
"maxParticipants": 10,
|
||||
"creatorName": "创建者名称",
|
||||
"workcaseId": "工单ID"
|
||||
}
|
||||
```
|
||||
|
||||
## 前端渲染建议
|
||||
|
||||
### Vue Web 端
|
||||
|
||||
在 `ChatRoom.vue` 中添加会议消息卡片渲染:
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<div v-if="message.messageType === 'meet'" class="meeting-card">
|
||||
<div class="meeting-card-header">
|
||||
<Video :size="20" />
|
||||
<span>{{ message.contentExtra.meetingName }}</span>
|
||||
</div>
|
||||
<div class="meeting-card-body">
|
||||
<p>发起人:{{ message.contentExtra.creatorName }}</p>
|
||||
<p>最多参与人数:{{ message.contentExtra.maxParticipants }}</p>
|
||||
</div>
|
||||
<div class="meeting-card-footer">
|
||||
<button @click="joinMeeting(message.contentExtra.meetingId)">
|
||||
加入会议
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Video } from 'lucide-vue-next'
|
||||
|
||||
const joinMeeting = async (meetingId) => {
|
||||
// 调用加入会议API
|
||||
const res = await workcaseChatAPI.joinVideoMeeting(meetingId)
|
||||
if (res.code === 0) {
|
||||
// 打开会议iframe
|
||||
meetingUrl.value = res.data.iframeUrl
|
||||
showMeeting.value = true
|
||||
}
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
### UniApp 小程序端
|
||||
|
||||
在 `chatRoom.uvue` 中添加会议消息卡片:
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<view v-if="message.messageType === 'meet'" class="meeting-card">
|
||||
<view class="meeting-card-header">
|
||||
<text class="icon-video">📹</text>
|
||||
<text>{{ message.contentExtra.meetingName }}</text>
|
||||
</view>
|
||||
<view class="meeting-card-body">
|
||||
<text>发起人:{{ message.contentExtra.creatorName }}</text>
|
||||
<text>最多 {{ message.contentExtra.maxParticipants }} 人</text>
|
||||
</view>
|
||||
<button @tap="joinMeeting(message.contentExtra.meetingId)" class="join-btn">
|
||||
加入会议
|
||||
</button>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
function joinMeeting(meetingId: string) {
|
||||
// 调用加入会议API
|
||||
workcaseChatAPI.joinVideoMeeting(meetingId).then(res => {
|
||||
if (res.success && res.data) {
|
||||
// 跳转到会议页面
|
||||
uni.navigateTo({
|
||||
url: `/pages/meeting/Meeting?meetingUrl=${encodeURIComponent(res.data.iframeUrl)}&meetingId=${meetingId}`
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
## 设计考虑
|
||||
|
||||
### 1. 异步发送
|
||||
消息发送在独立的 try-catch 块中,失败不影响会议创建流程
|
||||
|
||||
### 2. 完整信息
|
||||
contentExtra 包含会议所有关键信息,前端可灵活使用
|
||||
|
||||
### 3. 类型明确
|
||||
messageType 使用 "meet" 标识会议消息,方便前端过滤和渲染
|
||||
|
||||
### 4. URL 即内容
|
||||
content 字段直接存储会议URL,方便快速访问
|
||||
|
||||
### 5. 日志追踪
|
||||
完整的日志记录,便于问题排查
|
||||
|
||||
## 测试要点
|
||||
|
||||
### 1. 会议创建测试
|
||||
```bash
|
||||
POST /urban-lifeline/workcase/chat/meeting/create
|
||||
{
|
||||
"roomId": "test-room-123",
|
||||
"workcaseId": "WC001",
|
||||
"meetingName": "技术支持会议",
|
||||
"maxParticipants": 10
|
||||
}
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- ✅ 返回会议创建成功
|
||||
- ✅ 数据库 tb_video_meeting 表插入会议记录
|
||||
- ✅ 数据库 tb_chat_room_message 表插入类型为 "meet" 的消息
|
||||
- ✅ 消息的 content 字段包含会议URL
|
||||
- ✅ 消息的 contentExtra 包含会议详细信息
|
||||
|
||||
### 2. 前端卡片渲染测试
|
||||
- ✅ 聊天消息列表中显示会议卡片
|
||||
- ✅ 卡片展示会议名称、发起人、参与人数等信息
|
||||
- ✅ 点击"加入会议"按钮能正确跳转
|
||||
|
||||
### 3. 多人加入测试
|
||||
- ✅ 创建者加入会议(主持人权限)
|
||||
- ✅ 其他成员通过卡片加入会议(普通权限)
|
||||
- ✅ 非聊天室成员无法加入
|
||||
|
||||
### 4. 异常情况测试
|
||||
- ✅ 消息发送失败不影响会议创建
|
||||
- ✅ 会议创建失败不会发送消息
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **消息类型**:messageType 为 "meet",而非 "meeting"(根据用户需求)
|
||||
|
||||
2. **权限控制**:
|
||||
- 只有聊天室成员才能创建会议
|
||||
- 只有聊天室成员才能加入会议
|
||||
|
||||
3. **事务处理**:
|
||||
- 会议创建在事务中(@Transactional)
|
||||
- 消息发送在独立的 try-catch,失败不回滚会议创建
|
||||
|
||||
4. **前端适配**:
|
||||
- Web端和小程序端需分别实现会议卡片渲染
|
||||
- 建议使用统一的样式和交互
|
||||
|
||||
5. **扩展性**:
|
||||
- contentExtra 可根据需要添加更多字段
|
||||
- 建议前端做好字段缺失的容错处理
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [Jitsi Meet 视频会议集成总结](./项目总结-Jitsi-Meet视频会议功能.md)
|
||||
- [Docker 部署指南](./Jitsi-Meet-Docker部署指南.md)
|
||||
- [代码重构 - 视频会议API规范化](./代码重构-视频会议API规范化.md)
|
||||
|
||||
---
|
||||
|
||||
**实现人员**:Claude Code
|
||||
**审核状态**:待审核
|
||||
**版本**:v1.0
|
||||
774
docs/数据库完整指南.md
774
docs/数据库完整指南.md
@@ -1,774 +0,0 @@
|
||||
# 泰豪电源 AI 数智化平台 - 数据库完整指南
|
||||
|
||||
> **更新日期**: 2025-12-02
|
||||
> **数据库**: PostgreSQL 16
|
||||
> **总表数**: 50张核心业务表
|
||||
|
||||
---
|
||||
|
||||
## 📖 目录
|
||||
|
||||
1. [系统概述](#1-系统概述)
|
||||
2. [Schema架构](#2-schema架构)
|
||||
3. [核心模块设计](#3-核心模块设计)
|
||||
4. [表结构速查](#4-表结构速查)
|
||||
5. [优化方案](#5-优化方案)
|
||||
6. [部署与维护](#6-部署与维护)
|
||||
7. [常用查询示例](#7-常用查询示例)
|
||||
|
||||
---
|
||||
|
||||
## 1. 系统概述
|
||||
|
||||
### 1.1 设计理念
|
||||
|
||||
基于`功能结构.xml`的系统架构,遵循 **"一个底座、多种智能体"** 核心理念,支持四大业务模块:
|
||||
|
||||
1. **资料管理智能化**
|
||||
2. **招投标自动化**
|
||||
3. **售后客服智能化**
|
||||
4. **企业内部知识协同**
|
||||
|
||||
### 1.2 技术选型
|
||||
|
||||
- **数据库**: PostgreSQL 16
|
||||
- **连接池**: HikariCP
|
||||
- **ORM**: MyBatis-Plus 3.5
|
||||
- **迁移工具**: Flyway (可选)
|
||||
|
||||
### 1.3 设计原则
|
||||
|
||||
- ✅ **模块化**: 按业务模块划分 Schema
|
||||
- ✅ **规范化**: 统一命名规范和字段设计
|
||||
- ✅ **可扩展**: 预留扩展字段和软删除
|
||||
- ✅ **高性能**: 合理索引和分区设计
|
||||
- ✅ **安全性**: 行级安全和审计日志
|
||||
|
||||
---
|
||||
|
||||
## 2. Schema架构
|
||||
|
||||
### 2.1 Schema划分
|
||||
|
||||
采用多Schema架构,按业务模块逻辑隔离:
|
||||
|
||||
| Schema | 说明 | 核心表数量 | 用途 |
|
||||
|--------|------|-----------|------|
|
||||
| `sys` | 系统基础模块 | 11 | 用户、角色、权限、部门 |
|
||||
| `file` | 文件管理模块 | 1 | 文件存储与管理 |
|
||||
| `message` | 消息通知模块 | 4 | 站内信、系统通知 |
|
||||
| `log` | 日志审计模块 | 1 | 操作日志、审计 |
|
||||
| `config` | 系统配置模块 | 1 | 系统参数配置 |
|
||||
| `knowledge` | 知识库管理模块 | 4 | 文档、分段、问答对 |
|
||||
| `bidding` | 招投标智能体 | 8 | 招投标业务流程 |
|
||||
| `customer_service` | 智能客服系统 | 9 | 客服、工单、对话 |
|
||||
| `agent` | 智能体管理 | 11 | 智能体、API、监控 |
|
||||
|
||||
**总计: 50张核心业务表**
|
||||
|
||||
### 2.2 命名规范
|
||||
|
||||
```sql
|
||||
-- Schema 命名: 小写字母
|
||||
CREATE SCHEMA IF NOT EXISTS sys;
|
||||
|
||||
-- 表命名: tb_{schema}_{表名}
|
||||
CREATE TABLE sys.tb_sys_user (...);
|
||||
CREATE TABLE knowledge.tb_knowledge_document (...);
|
||||
|
||||
-- 字段命名: 小写字母 + 下划线
|
||||
user_id, create_time, full_name
|
||||
|
||||
-- 索引命名: idx_{表名}_{字段名}
|
||||
CREATE INDEX idx_user_email ON sys.tb_sys_user(email);
|
||||
|
||||
-- 外键命名: fk_{表名}_{关联表名}
|
||||
CONSTRAINT fk_user_dept FOREIGN KEY (dept_id) ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 核心模块设计
|
||||
|
||||
### 3.1 系统基础模块 (sys)
|
||||
|
||||
#### 权限体系设计
|
||||
|
||||
采用 **RBAC (基于角色的访问控制) + ACL (访问控制列表)** 混合模型
|
||||
|
||||
**核心表**:
|
||||
- `tb_sys_user` - 用户表
|
||||
- `tb_sys_role` - 角色表
|
||||
- `tb_sys_permission` - 权限表
|
||||
- `tb_sys_dept` - 部门表
|
||||
- `tb_sys_acl` - 对象级权限表
|
||||
- `tb_sys_user_role` - 用户角色关联表
|
||||
|
||||
**权限模型**:
|
||||
```
|
||||
用户 (User)
|
||||
├─ 部门 (Dept) - 数据隔离
|
||||
├─ 角色 (Role)
|
||||
│ ├─ 权限 (Permission) - 功能权限
|
||||
│ └─ 视图 (View) - 菜单权限
|
||||
└─ ACL - 对象级权限(细粒度)
|
||||
```
|
||||
|
||||
**设计亮点**:
|
||||
1. 多租户支持: `dept_path` 字段实现部门级数据隔离
|
||||
2. 角色作用域: `scope` 字段区分全局/部门角色
|
||||
3. 对象权限: ACL表支持任意对象的细粒度权限
|
||||
|
||||
#### 核心表结构
|
||||
|
||||
```sql
|
||||
-- 用户表
|
||||
CREATE TABLE sys.tb_sys_user (
|
||||
user_id VARCHAR(50) PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(100) UNIQUE,
|
||||
phone VARCHAR(20),
|
||||
wechat_id VARCHAR(100),
|
||||
status VARCHAR(20) DEFAULT 'active',
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted BOOLEAN DEFAULT false
|
||||
);
|
||||
|
||||
-- 部门表(树形结构)
|
||||
CREATE TABLE sys.tb_sys_dept (
|
||||
dept_id VARCHAR(50) PRIMARY KEY,
|
||||
dept_name VARCHAR(100) NOT NULL,
|
||||
parent_id VARCHAR(50),
|
||||
dept_path TEXT, -- 路径:/1/2/3/
|
||||
sort_order INTEGER DEFAULT 0,
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted BOOLEAN DEFAULT false,
|
||||
CONSTRAINT fk_dept_parent FOREIGN KEY (parent_id)
|
||||
REFERENCES sys.tb_sys_dept(dept_id)
|
||||
);
|
||||
|
||||
-- 角色表
|
||||
CREATE TABLE sys.tb_sys_role (
|
||||
role_id VARCHAR(50) PRIMARY KEY,
|
||||
role_name VARCHAR(100) NOT NULL,
|
||||
role_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
scope VARCHAR(20) DEFAULT 'global', -- global/dept
|
||||
owner_dept_id VARCHAR(50),
|
||||
description TEXT,
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted BOOLEAN DEFAULT false
|
||||
);
|
||||
|
||||
-- ACL权限表
|
||||
CREATE TABLE sys.tb_sys_acl (
|
||||
acl_id VARCHAR(50) PRIMARY KEY,
|
||||
object_type VARCHAR(50) NOT NULL, -- user/dept/document等
|
||||
object_id VARCHAR(50) NOT NULL,
|
||||
principal_type VARCHAR(20) NOT NULL, -- user/role/dept
|
||||
principal_id VARCHAR(50) NOT NULL,
|
||||
permission VARCHAR(50) NOT NULL, -- view/edit/delete/admin
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX idx_user_status ON sys.tb_sys_user(status) WHERE deleted = false;
|
||||
CREATE INDEX idx_dept_path ON sys.tb_sys_dept USING GIN(dept_path gin_trgm_ops);
|
||||
CREATE INDEX idx_acl_object ON sys.tb_sys_acl(object_type, object_id);
|
||||
```
|
||||
|
||||
### 3.2 知识库管理模块 (knowledge)
|
||||
|
||||
#### 模块概述
|
||||
|
||||
支持文档管理、向量检索、RAG问答,版本控制。
|
||||
|
||||
**核心表**:
|
||||
- `tb_knowledge_document` - 文档主表
|
||||
- `tb_knowledge_chunk` - 文档分段表(向量检索)
|
||||
- `tb_knowledge_qa_pair` - 问答对表
|
||||
- `tb_knowledge_file_relation` - 文档文件关联表
|
||||
|
||||
#### 版本管理设计
|
||||
|
||||
采用 **简化版本管理** 方案:
|
||||
|
||||
```sql
|
||||
-- 文档表(新增版本字段)
|
||||
CREATE TABLE knowledge.tb_knowledge_document (
|
||||
doc_id VARCHAR(50) PRIMARY KEY,
|
||||
root_doc_id VARCHAR(50), -- ✨ 根文档ID(版本组标识)
|
||||
version INTEGER DEFAULT 1, -- ✨ 版本号
|
||||
is_current BOOLEAN DEFAULT true, -- ✨ 是否当前版本
|
||||
title VARCHAR(500) NOT NULL,
|
||||
content TEXT,
|
||||
knowledge_base_id VARCHAR(50),
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted BOOLEAN DEFAULT false
|
||||
);
|
||||
|
||||
-- 分段表(向量检索)
|
||||
CREATE TABLE knowledge.tb_knowledge_chunk (
|
||||
chunk_id VARCHAR(50) PRIMARY KEY,
|
||||
doc_id VARCHAR(50) NOT NULL,
|
||||
chunk_index INTEGER NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
embedding VECTOR(1536), -- ✨ 向量字段(pgvector扩展)
|
||||
version INTEGER DEFAULT 1, -- ✨ 乐观锁版本
|
||||
tokens INTEGER,
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_chunk_doc FOREIGN KEY (doc_id)
|
||||
REFERENCES knowledge.tb_knowledge_document(doc_id)
|
||||
);
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX idx_doc_root_current
|
||||
ON knowledge.tb_knowledge_document(root_doc_id, is_current)
|
||||
WHERE deleted = false;
|
||||
|
||||
CREATE INDEX idx_chunk_embedding
|
||||
ON knowledge.tb_knowledge_chunk
|
||||
USING ivfflat (embedding vector_cosine_ops) -- ✨ 向量索引
|
||||
WITH (lists = 100);
|
||||
```
|
||||
|
||||
**版本管理示例**:
|
||||
|
||||
```sql
|
||||
-- 创建新版本
|
||||
BEGIN;
|
||||
|
||||
-- 1. 标记旧版本为非当前
|
||||
UPDATE knowledge.tb_knowledge_document
|
||||
SET is_current = false
|
||||
WHERE root_doc_id = 'root_xxx';
|
||||
|
||||
-- 2. 插入新版本
|
||||
INSERT INTO knowledge.tb_knowledge_document (
|
||||
doc_id, root_doc_id, version, is_current, title, content
|
||||
) VALUES (
|
||||
'new_doc_id', 'root_xxx', 2, true, '新版本标题', '内容'
|
||||
);
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- 查询当前版本
|
||||
SELECT * FROM knowledge.tb_knowledge_document
|
||||
WHERE root_doc_id = 'root_xxx' AND is_current = true;
|
||||
|
||||
-- 查询所有版本
|
||||
SELECT version, title, create_time
|
||||
FROM knowledge.tb_knowledge_document
|
||||
WHERE root_doc_id = 'root_xxx'
|
||||
ORDER BY version DESC;
|
||||
```
|
||||
|
||||
### 3.3 招投标智能体模块 (bidding)
|
||||
|
||||
#### 核心表
|
||||
|
||||
```sql
|
||||
-- 招标项目表
|
||||
CREATE TABLE bidding.tb_bidding_project (
|
||||
project_id VARCHAR(50) PRIMARY KEY,
|
||||
project_name VARCHAR(500) NOT NULL,
|
||||
project_code VARCHAR(100),
|
||||
bidding_org VARCHAR(200), -- 招标单位
|
||||
project_type VARCHAR(50), -- 项目类型
|
||||
status VARCHAR(50) DEFAULT 'draft',
|
||||
budget DECIMAL(18,2),
|
||||
bid_deadline TIMESTAMP,
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted BOOLEAN DEFAULT false
|
||||
);
|
||||
|
||||
-- 招标文件表
|
||||
CREATE TABLE bidding.tb_bidding_document (
|
||||
doc_id VARCHAR(50) PRIMARY KEY,
|
||||
project_id VARCHAR(50) NOT NULL,
|
||||
doc_type VARCHAR(50), -- tender/technical/commercial
|
||||
file_id VARCHAR(50),
|
||||
parsed_content JSONB, -- ✨ 智能解析结果
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_bdoc_project FOREIGN KEY (project_id)
|
||||
REFERENCES bidding.tb_bidding_project(project_id)
|
||||
);
|
||||
|
||||
-- 标书模板表
|
||||
CREATE TABLE bidding.tb_bidding_template (
|
||||
template_id VARCHAR(50) PRIMARY KEY,
|
||||
template_name VARCHAR(200) NOT NULL,
|
||||
template_type VARCHAR(50),
|
||||
content JSONB, -- 模板结构化内容
|
||||
variables JSONB, -- 可替换变量
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
### 3.4 智能客服系统模块 (customer_service)
|
||||
|
||||
#### 核心表
|
||||
|
||||
```sql
|
||||
-- 对话会话表
|
||||
CREATE TABLE customer_service.tb_cs_conversation (
|
||||
conv_id VARCHAR(50) PRIMARY KEY,
|
||||
customer_user_id VARCHAR(50),
|
||||
customer_name VARCHAR(100),
|
||||
channel VARCHAR(50), -- wechat/web/phone
|
||||
source VARCHAR(50), -- miniprogram/h5/app
|
||||
status VARCHAR(50) DEFAULT 'active',
|
||||
start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
end_time TIMESTAMP,
|
||||
satisfaction_score INTEGER -- 满意度评分
|
||||
);
|
||||
|
||||
-- 对话消息表
|
||||
CREATE TABLE customer_service.tb_cs_message (
|
||||
message_id VARCHAR(50) PRIMARY KEY,
|
||||
conv_id VARCHAR(50) NOT NULL,
|
||||
sender_type VARCHAR(20), -- customer/agent/bot
|
||||
sender_id VARCHAR(50),
|
||||
content TEXT,
|
||||
message_type VARCHAR(50), -- text/image/file
|
||||
ai_response JSONB, -- AI响应详情
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_msg_conv FOREIGN KEY (conv_id)
|
||||
REFERENCES customer_service.tb_cs_conversation(conv_id)
|
||||
);
|
||||
|
||||
-- 工单表
|
||||
CREATE TABLE customer_service.tb_cs_work_order (
|
||||
order_id VARCHAR(50) PRIMARY KEY,
|
||||
order_code VARCHAR(100) UNIQUE NOT NULL,
|
||||
conv_id VARCHAR(50),
|
||||
customer_user_id VARCHAR(50),
|
||||
title VARCHAR(500) NOT NULL,
|
||||
description TEXT,
|
||||
category VARCHAR(100),
|
||||
priority VARCHAR(20) DEFAULT 'medium',
|
||||
status VARCHAR(50) DEFAULT 'pending',
|
||||
assigned_to VARCHAR(50),
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
resolve_time TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
### 3.5 智能体管理模块 (agent)
|
||||
|
||||
#### 核心表
|
||||
|
||||
```sql
|
||||
-- 智能体定义表
|
||||
CREATE TABLE agent.tb_agent_definition (
|
||||
agent_id VARCHAR(50) PRIMARY KEY,
|
||||
agent_name VARCHAR(100) NOT NULL,
|
||||
agent_type VARCHAR(50), -- bidding/cs/knowledge等
|
||||
description TEXT,
|
||||
config JSONB, -- 配置(模型、参数等)
|
||||
status VARCHAR(20) DEFAULT 'active',
|
||||
version VARCHAR(20),
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- API调用日志表
|
||||
CREATE TABLE agent.tb_agent_api_log (
|
||||
log_id VARCHAR(50) PRIMARY KEY,
|
||||
agent_id VARCHAR(50),
|
||||
api_endpoint VARCHAR(200),
|
||||
request_params JSONB,
|
||||
response_data JSONB,
|
||||
status_code INTEGER,
|
||||
duration_ms INTEGER,
|
||||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 智能体监控表(按月分区)
|
||||
CREATE TABLE agent.tb_agent_monitor (
|
||||
monitor_id VARCHAR(50) NOT NULL,
|
||||
agent_id VARCHAR(50) NOT NULL,
|
||||
metric_name VARCHAR(100),
|
||||
metric_value NUMERIC,
|
||||
timestamp TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (monitor_id, timestamp)
|
||||
) PARTITION BY RANGE (timestamp);
|
||||
|
||||
-- 创建分区
|
||||
CREATE TABLE agent.tb_agent_monitor_2025_12
|
||||
PARTITION OF agent.tb_agent_monitor
|
||||
FOR VALUES FROM ('2025-12-01') TO ('2026-01-01');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 表结构速查
|
||||
|
||||
### 4.1 系统基础模块 (sys)
|
||||
|
||||
| 表名 | 主键 | 核心字段 | 说明 |
|
||||
|------|------|----------|------|
|
||||
| `tb_sys_user` | user_id | username, email, phone | 用户表 |
|
||||
| `tb_sys_user_info` | user_id | avatar, full_name, level | 用户信息表 |
|
||||
| `tb_sys_dept` | dept_id | name, parent_id, dept_path | 部门表 |
|
||||
| `tb_sys_role` | role_id | name, scope, owner_dept_id | 角色表 |
|
||||
| `tb_sys_permission` | permission_id | name, code, module_id | 权限表 |
|
||||
| `tb_sys_acl` | acl_id | object_type, principal_type | 对象权限表 |
|
||||
|
||||
### 4.2 知识库管理 (knowledge)
|
||||
|
||||
| 表名 | 主键 | 核心字段 | 说明 |
|
||||
|------|------|----------|------|
|
||||
| `tb_knowledge_document` | doc_id | title, root_doc_id, version | 文档表 |
|
||||
| `tb_knowledge_chunk` | chunk_id | doc_id, content, embedding | 分段表 |
|
||||
| `tb_knowledge_qa_pair` | qa_pair_id | question, answer | 问答对表 |
|
||||
|
||||
### 4.3 招投标 (bidding)
|
||||
|
||||
| 表名 | 主键 | 核心字段 | 说明 |
|
||||
|------|------|----------|------|
|
||||
| `tb_bidding_project` | project_id | project_name, status | 招标项目表 |
|
||||
| `tb_bidding_document` | doc_id | project_id, parsed_content | 招标文件表 |
|
||||
| `tb_bidding_template` | template_id | template_name, content | 标书模板表 |
|
||||
|
||||
### 4.4 智能客服 (customer_service)
|
||||
|
||||
| 表名 | 主键 | 核心字段 | 说明 |
|
||||
|------|------|----------|------|
|
||||
| `tb_cs_conversation` | conv_id | customer_user_id, status | 对话会话表 |
|
||||
| `tb_cs_message` | message_id | conv_id, content | 对话消息表 |
|
||||
| `tb_cs_work_order` | order_id | title, status, assigned_to | 工单表 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 优化方案
|
||||
|
||||
### 5.1 索引优化
|
||||
|
||||
```sql
|
||||
-- 1. 复合索引(状态 + 时间查询)
|
||||
CREATE INDEX idx_project_status_time
|
||||
ON bidding.tb_bidding_project(status, create_time DESC)
|
||||
WHERE deleted = false;
|
||||
|
||||
-- 2. 部分索引(只索引活跃数据)
|
||||
CREATE INDEX idx_user_active
|
||||
ON sys.tb_sys_user(user_id)
|
||||
WHERE status = 'active' AND deleted = false;
|
||||
|
||||
-- 3. GIN索引(全文检索)
|
||||
CREATE INDEX idx_doc_content_gin
|
||||
ON knowledge.tb_knowledge_document
|
||||
USING GIN(to_tsvector('chinese', title || ' ' || content));
|
||||
|
||||
-- 4. BRIN索引(时间序列)
|
||||
CREATE INDEX idx_log_time_brin
|
||||
ON log.tb_operation_log
|
||||
USING BRIN(create_time);
|
||||
```
|
||||
|
||||
### 5.2 分区策略
|
||||
|
||||
```sql
|
||||
-- 按月分区(监控数据)
|
||||
CREATE TABLE agent.tb_agent_monitor (
|
||||
monitor_id VARCHAR(50) NOT NULL,
|
||||
timestamp TIMESTAMP NOT NULL,
|
||||
...
|
||||
PRIMARY KEY (monitor_id, timestamp)
|
||||
) PARTITION BY RANGE (timestamp);
|
||||
|
||||
-- 自动创建分区脚本
|
||||
CREATE OR REPLACE FUNCTION create_monthly_partition()
|
||||
RETURNS void AS $$
|
||||
DECLARE
|
||||
start_date DATE;
|
||||
end_date DATE;
|
||||
partition_name TEXT;
|
||||
BEGIN
|
||||
start_date := DATE_TRUNC('month', CURRENT_DATE + INTERVAL '1 month');
|
||||
end_date := start_date + INTERVAL '1 month';
|
||||
partition_name := 'tb_agent_monitor_' || TO_CHAR(start_date, 'YYYY_MM');
|
||||
|
||||
EXECUTE format(
|
||||
'CREATE TABLE IF NOT EXISTS agent.%I PARTITION OF agent.tb_agent_monitor
|
||||
FOR VALUES FROM (%L) TO (%L)',
|
||||
partition_name, start_date, end_date
|
||||
);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
```
|
||||
|
||||
### 5.3 查询优化
|
||||
|
||||
```sql
|
||||
-- 使用CTE优化复杂查询
|
||||
WITH user_roles AS (
|
||||
SELECT ur.user_id, r.role_id, r.role_code
|
||||
FROM sys.tb_sys_user_role ur
|
||||
JOIN sys.tb_sys_role r ON ur.role_id = r.role_id
|
||||
WHERE r.deleted = false
|
||||
),
|
||||
user_permissions AS (
|
||||
SELECT ur.user_id, p.permission_code
|
||||
FROM user_roles ur
|
||||
JOIN sys.tb_sys_role_permission rp ON ur.role_id = rp.role_id
|
||||
JOIN sys.tb_sys_permission p ON rp.permission_id = p.permission_id
|
||||
)
|
||||
SELECT u.username, array_agg(DISTINCT up.permission_code) as permissions
|
||||
FROM sys.tb_sys_user u
|
||||
JOIN user_permissions up ON u.user_id = up.user_id
|
||||
WHERE u.deleted = false
|
||||
GROUP BY u.user_id, u.username;
|
||||
```
|
||||
|
||||
### 5.4 并发控制
|
||||
|
||||
```sql
|
||||
-- 乐观锁(版本号)
|
||||
UPDATE knowledge.tb_knowledge_chunk
|
||||
SET content = '新内容',
|
||||
version = version + 1
|
||||
WHERE chunk_id = 'xxx'
|
||||
AND version = 1; -- 版本匹配才更新
|
||||
|
||||
-- 悲观锁
|
||||
BEGIN;
|
||||
SELECT * FROM bidding.tb_bidding_project
|
||||
WHERE project_id = 'xxx'
|
||||
FOR UPDATE; -- 锁定记录
|
||||
|
||||
-- 更新...
|
||||
COMMIT;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 部署与维护
|
||||
|
||||
### 6.1 初始化脚本
|
||||
|
||||
```bash
|
||||
# 位置: urbanLifelineServ/.bin/database/postgres/sql/
|
||||
|
||||
# 完整初始化
|
||||
psql -U postgres -d urban_lifeline -f createTableAll.sql
|
||||
|
||||
# 分模块初始化
|
||||
psql -U postgres -d urban_lifeline -f createTablePermission.sql
|
||||
psql -U postgres -d urban_lifeline -f createTableKnowledge.sql
|
||||
psql -U postgres -d urban_lifeline -f createTableBidding.sql
|
||||
|
||||
# 优化补丁
|
||||
psql -U postgres -d urban_lifeline -f optimizations.sql
|
||||
```
|
||||
|
||||
### 6.2 备份策略
|
||||
|
||||
```bash
|
||||
# 全量备份
|
||||
pg_dump -U postgres -d urban_lifeline -F c -f backup_$(date +%Y%m%d).dump
|
||||
|
||||
# 仅备份 Schema
|
||||
pg_dump -U postgres -d urban_lifeline -s -f schema_backup.sql
|
||||
|
||||
# 仅备份数据
|
||||
pg_dump -U postgres -d urban_lifeline -a -f data_backup.sql
|
||||
|
||||
# 还原
|
||||
pg_restore -U postgres -d urban_lifeline backup_20251202.dump
|
||||
```
|
||||
|
||||
### 6.3 监控指标
|
||||
|
||||
```sql
|
||||
-- 表大小
|
||||
SELECT
|
||||
schemaname,
|
||||
tablename,
|
||||
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size
|
||||
FROM pg_tables
|
||||
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
|
||||
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
|
||||
|
||||
-- 索引使用情况
|
||||
SELECT
|
||||
schemaname, tablename, indexname,
|
||||
idx_scan as index_scans,
|
||||
idx_tup_read as tuples_read
|
||||
FROM pg_stat_user_indexes
|
||||
WHERE idx_scan = 0
|
||||
ORDER BY schemaname, tablename;
|
||||
|
||||
-- 慢查询
|
||||
SELECT
|
||||
query,
|
||||
calls,
|
||||
total_time,
|
||||
mean_time,
|
||||
max_time
|
||||
FROM pg_stat_statements
|
||||
WHERE mean_time > 1000 -- 超过1秒
|
||||
ORDER BY mean_time DESC
|
||||
LIMIT 10;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 常用查询示例
|
||||
|
||||
### 7.1 用户权限查询
|
||||
|
||||
```sql
|
||||
-- 查询用户的所有权限
|
||||
SELECT DISTINCT p.permission_code, p.permission_name
|
||||
FROM sys.tb_sys_user u
|
||||
JOIN sys.tb_sys_user_role ur ON u.user_id = ur.user_id
|
||||
JOIN sys.tb_sys_role_permission rp ON ur.role_id = rp.role_id
|
||||
JOIN sys.tb_sys_permission p ON rp.permission_id = p.permission_id
|
||||
WHERE u.username = 'admin'
|
||||
AND u.deleted = false;
|
||||
|
||||
-- 查询部门下所有用户
|
||||
WITH RECURSIVE dept_tree AS (
|
||||
SELECT dept_id FROM sys.tb_sys_dept WHERE dept_id = 'target_dept_id'
|
||||
UNION ALL
|
||||
SELECT d.dept_id
|
||||
FROM sys.tb_sys_dept d
|
||||
JOIN dept_tree dt ON d.parent_id = dt.dept_id
|
||||
)
|
||||
SELECT u.*
|
||||
FROM sys.tb_sys_user u
|
||||
JOIN sys.tb_sys_user_dept ud ON u.user_id = ud.user_id
|
||||
WHERE ud.dept_id IN (SELECT dept_id FROM dept_tree);
|
||||
```
|
||||
|
||||
### 7.2 知识库查询
|
||||
|
||||
```sql
|
||||
-- 向量相似度检索(Top 5)
|
||||
SELECT
|
||||
chunk_id,
|
||||
content,
|
||||
1 - (embedding <=> '[0.1, 0.2, ...]'::vector) as similarity
|
||||
FROM knowledge.tb_knowledge_chunk
|
||||
WHERE deleted = false
|
||||
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
|
||||
LIMIT 5;
|
||||
|
||||
-- 查询文档的所有版本
|
||||
SELECT
|
||||
version,
|
||||
title,
|
||||
create_time,
|
||||
is_current
|
||||
FROM knowledge.tb_knowledge_document
|
||||
WHERE root_doc_id = 'root_xxx'
|
||||
ORDER BY version DESC;
|
||||
```
|
||||
|
||||
### 7.3 招投标查询
|
||||
|
||||
```sql
|
||||
-- 统计项目状态分布
|
||||
SELECT
|
||||
status,
|
||||
COUNT(*) as count,
|
||||
SUM(budget) as total_budget
|
||||
FROM bidding.tb_bidding_project
|
||||
WHERE deleted = false
|
||||
GROUP BY status;
|
||||
|
||||
-- 查询即将截止的项目
|
||||
SELECT
|
||||
project_name,
|
||||
bid_deadline,
|
||||
EXTRACT(DAY FROM (bid_deadline - NOW())) as days_left
|
||||
FROM bidding.tb_bidding_project
|
||||
WHERE status = 'active'
|
||||
AND bid_deadline > NOW()
|
||||
AND deleted = false
|
||||
ORDER BY bid_deadline ASC;
|
||||
```
|
||||
|
||||
### 7.4 智能客服查询
|
||||
|
||||
```sql
|
||||
-- 查询工单处理效率
|
||||
SELECT
|
||||
assigned_to,
|
||||
COUNT(*) as total_orders,
|
||||
AVG(EXTRACT(EPOCH FROM (resolve_time - create_time))/3600) as avg_hours,
|
||||
COUNT(CASE WHEN status = 'resolved' THEN 1 END) as resolved_count
|
||||
FROM customer_service.tb_cs_work_order
|
||||
WHERE create_time > NOW() - INTERVAL '30 days'
|
||||
GROUP BY assigned_to;
|
||||
|
||||
-- 查询满意度统计
|
||||
SELECT
|
||||
DATE(start_time) as date,
|
||||
AVG(satisfaction_score) as avg_satisfaction,
|
||||
COUNT(*) as total_conversations
|
||||
FROM customer_service.tb_cs_conversation
|
||||
WHERE satisfaction_score IS NOT NULL
|
||||
AND start_time > NOW() - INTERVAL '7 days'
|
||||
GROUP BY DATE(start_time)
|
||||
ORDER BY date DESC;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### A. SQL文件清单
|
||||
|
||||
```
|
||||
urbanLifelineServ/.bin/database/postgres/sql/
|
||||
├── createTableAll.sql # 完整初始化
|
||||
├── createTablePermission.sql # 权限模块
|
||||
├── createTableUser.sql # 用户模块
|
||||
├── createTableFile.sql # 文件模块
|
||||
├── createTableMessage.sql # 消息模块
|
||||
├── createTableLog.sql # 日志模块
|
||||
├── createTableConfig.sql # 配置模块
|
||||
├── createTableKnowledge.sql # 知识库模块 ✨
|
||||
├── createTableBidding.sql # 招投标模块 ✨
|
||||
├── createTableCustomerService.sql # 智能客服模块 ✨
|
||||
├── createTableAgent.sql # 智能体管理模块 ✨
|
||||
├── optimizations.sql # 优化补丁 ✨
|
||||
├── initDataPermission.sql # 权限初始数据
|
||||
├── initDataUser.sql # 用户初始数据
|
||||
└── initAll.sql # 完整初始化(表+数据)
|
||||
```
|
||||
|
||||
### B. 扩展插件
|
||||
|
||||
```sql
|
||||
-- 向量检索
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
-- 全文检索(中文)
|
||||
CREATE EXTENSION IF NOT EXISTS zhparser;
|
||||
CREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
|
||||
|
||||
-- 模糊匹配
|
||||
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
||||
|
||||
-- UUID生成
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||
```
|
||||
|
||||
### C. 性能基准
|
||||
|
||||
| 指标 | 目标值 | 说明 |
|
||||
|------|--------|------|
|
||||
| 单表查询 | < 100ms | 主键/索引查询 |
|
||||
| 复杂查询 | < 500ms | 多表JOIN |
|
||||
| 向量检索 | < 200ms | Top-K检索 |
|
||||
| 写入TPS | > 1000 | 批量插入 |
|
||||
| 并发连接 | 200+ | HikariCP连接池 |
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2025-12-02
|
||||
**维护者**: Urban Lifeline Team
|
||||
396
docs/网关认证方案.md
396
docs/网关认证方案.md
@@ -1,396 +0,0 @@
|
||||
# Gateway 认证方案说明
|
||||
|
||||
## 问题背景
|
||||
|
||||
在微服务架构中,如果同时使用 Gateway 和 common-auth 模块,会出现**重复认证**的问题:
|
||||
|
||||
```
|
||||
浏览器 → Gateway (AuthGlobalFilter 验证 JWT)
|
||||
→ 微服务 (JwtAuthenticationFilter 再次验证 JWT) ❌ 重复!
|
||||
```
|
||||
|
||||
## 解决方案
|
||||
|
||||
提供两种认证模式,通过配置选择:
|
||||
|
||||
### **模式一:Gateway 统一认证(推荐)**
|
||||
|
||||
Gateway 负责认证,微服务信任 Gateway 传递的用户信息。
|
||||
|
||||
#### 架构流程
|
||||
|
||||
```
|
||||
浏览器
|
||||
↓ (带 JWT Token)
|
||||
Nginx (80端口)
|
||||
↓
|
||||
Gateway (8080端口)
|
||||
├─ AuthGlobalFilter: 验证 JWT ✓
|
||||
├─ 提取用户信息 (userId, username)
|
||||
├─ 添加到请求头传递给下游
|
||||
└─ 路由到微服务
|
||||
↓
|
||||
微服务
|
||||
└─ GatewayTrustFilter: 从请求头获取用户信息 ✓
|
||||
```
|
||||
|
||||
#### 配置方式
|
||||
|
||||
**1. Gateway 服务配置** (`gateway/application.yml`)
|
||||
```yaml
|
||||
auth:
|
||||
enabled: true
|
||||
token-header: Authorization
|
||||
token-prefix: "Bearer "
|
||||
auth-paths:
|
||||
- /auth/login
|
||||
- /auth/logout
|
||||
whitelist:
|
||||
- /actuator/**
|
||||
- /v3/api-docs/**
|
||||
```
|
||||
|
||||
**2. 微服务配置** (`system/application.yml`, `log/application.yml` 等)
|
||||
```yaml
|
||||
auth:
|
||||
enabled: true
|
||||
gateway-mode: true # 关键:启用 Gateway 模式
|
||||
```
|
||||
|
||||
#### 优点
|
||||
- ✅ 避免重复认证,性能更好
|
||||
- ✅ 统一认证逻辑,易维护
|
||||
- ✅ 微服务之间调用不需要传递 JWT
|
||||
|
||||
---
|
||||
|
||||
### **模式二:微服务独立认证**
|
||||
|
||||
每个微服务独立验证 JWT,Gateway 不做认证。
|
||||
|
||||
#### 架构流程
|
||||
|
||||
```
|
||||
浏览器
|
||||
↓ (带 JWT Token)
|
||||
Nginx
|
||||
↓
|
||||
Gateway
|
||||
└─ 直接路由(不验证)
|
||||
↓
|
||||
微服务
|
||||
└─ JwtAuthenticationFilter: 验证 JWT ✓
|
||||
```
|
||||
|
||||
#### 配置方式
|
||||
|
||||
**1. Gateway 服务配置**
|
||||
```yaml
|
||||
auth:
|
||||
enabled: false # 关键:关闭 Gateway 认证
|
||||
```
|
||||
|
||||
**2. 微服务配置**
|
||||
```yaml
|
||||
auth:
|
||||
enabled: true
|
||||
gateway-mode: false # 或不配置(默认 false)
|
||||
token-header: Authorization
|
||||
token-prefix: "Bearer "
|
||||
```
|
||||
|
||||
#### 适用场景
|
||||
- 微服务需要直接对外暴露(不经过 Gateway)
|
||||
- 对安全性要求极高,需要每层都验证
|
||||
|
||||
---
|
||||
|
||||
## 配置文件对比
|
||||
|
||||
### Gateway 服务 (`gateway/application.yml`)
|
||||
|
||||
```yaml
|
||||
server:
|
||||
port: 8080
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: gateway-service
|
||||
|
||||
cloud:
|
||||
gateway:
|
||||
routes:
|
||||
- id: auth-service
|
||||
uri: lb://auth-service
|
||||
predicates:
|
||||
- Path=/auth/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
|
||||
- id: system-service
|
||||
uri: lb://system-service
|
||||
predicates:
|
||||
- Path=/system/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
|
||||
# 认证配置
|
||||
auth:
|
||||
enabled: true # 是否启用认证
|
||||
gateway-mode: false # Gateway 本身不需要此配置
|
||||
token-header: Authorization
|
||||
token-prefix: "Bearer "
|
||||
auth-paths:
|
||||
- /auth/login
|
||||
- /auth/logout
|
||||
- /auth/captcha
|
||||
- /auth/refresh
|
||||
whitelist:
|
||||
- /actuator/**
|
||||
- /v3/api-docs/**
|
||||
```
|
||||
|
||||
### 微服务配置 (Gateway 模式)
|
||||
|
||||
**auth-service/application.yml**
|
||||
```yaml
|
||||
server:
|
||||
port: 8081
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: auth-service
|
||||
|
||||
# 认证配置
|
||||
auth:
|
||||
enabled: true
|
||||
gateway-mode: true # 关键:信任 Gateway
|
||||
token-header: Authorization
|
||||
token-prefix: "Bearer "
|
||||
whitelist:
|
||||
- /v3/api-docs/**
|
||||
- /actuator/**
|
||||
```
|
||||
|
||||
**system-service/application.yml**
|
||||
```yaml
|
||||
server:
|
||||
port: 8082
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: system-service
|
||||
|
||||
auth:
|
||||
enabled: true
|
||||
gateway-mode: true # 关键:信任 Gateway
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 工作原理
|
||||
|
||||
### Gateway 认证流程
|
||||
|
||||
**AuthGlobalFilter (Gateway 层)**
|
||||
```java
|
||||
1. 检查请求路径是否在白名单
|
||||
2. 提取 Authorization 请求头中的 JWT Token
|
||||
3. 验证 Token 是否过期
|
||||
4. 验证 Token 签名是否有效
|
||||
5. 提取用户信息 (userId, username)
|
||||
6. 将用户信息添加到请求头:
|
||||
- X-User-Id: {userId}
|
||||
- X-Username: {username}
|
||||
7. 路由到下游微服务
|
||||
```
|
||||
|
||||
### 微服务信任流程
|
||||
|
||||
**GatewayTrustFilter (微服务层)**
|
||||
```java
|
||||
1. 从请求头获取 Gateway 传递的用户信息:
|
||||
- X-User-Id
|
||||
- X-Username
|
||||
2. 构造 Spring Security 认证对象
|
||||
3. 设置到 SecurityContext
|
||||
4. 设置到 request attributes(供业务代码使用)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 安全考虑
|
||||
|
||||
### 内网安全
|
||||
|
||||
采用 Gateway 模式时,需确保:
|
||||
|
||||
1. **微服务不对外暴露**
|
||||
- 只能通过 Gateway 访问
|
||||
- 使用 Kubernetes Network Policy 或防火墙隔离
|
||||
|
||||
2. **请求头保护**
|
||||
- Gateway 在转发前清除任何客户端传递的 `X-User-Id` 等头
|
||||
- 防止伪造用户身份
|
||||
|
||||
3. **Gateway 过滤器增强**(可选)
|
||||
```java
|
||||
// 在 Gateway 中清除客户端可能伪造的请求头
|
||||
ServerHttpRequest mutatedRequest = request.mutate()
|
||||
.headers(headers -> {
|
||||
headers.remove("X-User-Id");
|
||||
headers.remove("X-Username");
|
||||
})
|
||||
.header(AuthContants.USER_ID_ATTRIBUTE, userId)
|
||||
.header(AuthContants.TOKEN_ATTRIBUTE, token)
|
||||
.build();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 测试验证
|
||||
|
||||
### 测试 Gateway 模式
|
||||
|
||||
**1. 登录获取 Token**
|
||||
```bash
|
||||
curl -X POST http://localhost/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"123456"}'
|
||||
|
||||
# 响应
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
"userId": "1001"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**2. 使用 Token 访问受保护接口**
|
||||
```bash
|
||||
curl -X GET http://localhost/api/system/user/profile \
|
||||
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
```
|
||||
|
||||
**3. 查看日志验证单次认证**
|
||||
```
|
||||
Gateway 日志:
|
||||
[Gateway] Token 验证成功: userId=1001, path=/system/user/profile
|
||||
|
||||
System-Service 日志:
|
||||
[GatewayTrustFilter] 从 Gateway 获取用户信息: userId=1001, username=admin
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 迁移指南
|
||||
|
||||
### 从独立认证迁移到 Gateway 统一认证
|
||||
|
||||
**步骤 1**: 更新所有微服务配置
|
||||
```yaml
|
||||
auth:
|
||||
gateway-mode: true # 添加这一行
|
||||
```
|
||||
|
||||
**步骤 2**: 重启服务(先重启微服务,后重启 Gateway)
|
||||
```bash
|
||||
# 重启微服务
|
||||
docker-compose restart auth-service system-service log-service
|
||||
|
||||
# 重启 Gateway
|
||||
docker-compose restart gateway
|
||||
```
|
||||
|
||||
**步骤 3**: 验证功能
|
||||
- 测试登录
|
||||
- 测试受保护接口访问
|
||||
- 检查日志确认只认证一次
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: Gateway 模式下,微服务之间如何调用?
|
||||
|
||||
**A**: 微服务间调用不需要传递 JWT Token,直接调用即可。Gateway已经验证过身份。
|
||||
|
||||
```java
|
||||
// 微服务 A 调用微服务 B
|
||||
@Autowired
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
public void callServiceB() {
|
||||
// 直接调用,不需要添加 Authorization 头
|
||||
String result = restTemplate.getForObject(
|
||||
"http://service-b/api/xxx",
|
||||
String.class
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Q2: 如何获取当前登录用户信息?
|
||||
|
||||
**A**: 使用 `@HttpLogin` 注解或从 SecurityContext 获取。
|
||||
|
||||
```java
|
||||
// 方式一:使用注解(推荐)
|
||||
@GetMapping("/profile")
|
||||
public ResultDomain<UserDTO> getProfile(@HttpLogin LoginDomain loginDomain) {
|
||||
String userId = loginDomain.getUser().getUserId();
|
||||
// ...
|
||||
}
|
||||
|
||||
// 方式二:从 SecurityContext 获取
|
||||
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
|
||||
String userId = (String) auth.getPrincipal();
|
||||
```
|
||||
|
||||
### Q3: Gateway 模式更安全还是独立认证更安全?
|
||||
|
||||
**A**: 取决于网络拓扑:
|
||||
- **内网隔离良好**: Gateway 模式更优(性能好,维护简单)
|
||||
- **微服务直接对外**: 独立认证更安全(每层验证)
|
||||
|
||||
---
|
||||
|
||||
## 推荐配置
|
||||
|
||||
### 生产环境推荐
|
||||
|
||||
```yaml
|
||||
# Gateway
|
||||
auth:
|
||||
enabled: true
|
||||
gateway-mode: false
|
||||
|
||||
# 所有微服务
|
||||
auth:
|
||||
enabled: true
|
||||
gateway-mode: true
|
||||
```
|
||||
|
||||
### 开发环境(快速调试)
|
||||
|
||||
可以临时关闭认证:
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
| 对比项 | Gateway 统一认证 | 微服务独立认证 |
|
||||
|--------|-----------------|---------------|
|
||||
| 认证次数 | 1次(仅 Gateway) | N次(每个服务) |
|
||||
| 性能 | ⭐⭐⭐⭐⭐ 最优 | ⭐⭐⭐ 一般 |
|
||||
| 维护性 | ⭐⭐⭐⭐⭐ 统一管理 | ⭐⭐⭐ 分散管理 |
|
||||
| 安全性 | ⭐⭐⭐⭐ 需内网隔离 | ⭐⭐⭐⭐⭐ 多层防护 |
|
||||
| 推荐场景 | 内网微服务架构 | 微服务对外暴露 |
|
||||
|
||||
**推荐使用 Gateway 统一认证模式!**
|
||||
@@ -1,475 +0,0 @@
|
||||
# 🎉 Jitsi Meet 视频会议功能 - 完整实现总结
|
||||
|
||||
## ✅ 已完成的工作
|
||||
|
||||
### 一、后端开发(Java Spring Boot)
|
||||
|
||||
#### 1. Service接口层(2个接口)
|
||||
- ✅ `VideoMeetingService.java` - 视频会议业务接口
|
||||
- ✅ `JitsiTokenService.java` - JWT Token服务接口
|
||||
|
||||
#### 2. Service实现层(2个实现)
|
||||
- ✅ `VideoMeetingServiceImpl.java` - 核心业务逻辑(约400行)
|
||||
- 会议创建(验证权限、生成JWT、构建iframe URL)
|
||||
- 会议权限验证(检查聊天室成员身份)
|
||||
- 用户专属URL生成(每个用户独立JWT Token)
|
||||
- 会议状态管理(开始/结束)
|
||||
- 活跃会议检测
|
||||
|
||||
- ✅ `JitsiTokenServiceImpl.java` - JWT Token生成服务
|
||||
- 符合Jitsi Meet标准的JWT生成
|
||||
- iframe URL构建(带配置参数)
|
||||
- 房间名生成规则
|
||||
|
||||
#### 3. Controller层(6个REST API)
|
||||
```
|
||||
POST /workcase/chat/meeting/create - 创建会议
|
||||
GET /workcase/chat/meeting/{meetingId} - 获取会议信息
|
||||
POST /workcase/chat/meeting/{meetingId}/join - 加入会议
|
||||
POST /workcase/chat/meeting/{meetingId}/start - 开始会议
|
||||
POST /workcase/chat/meeting/{meetingId}/end - 结束会议
|
||||
GET /workcase/chat/meeting/room/{roomId}/active - 获取活跃会议
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 二、前端Vue开发
|
||||
|
||||
#### 1. API封装
|
||||
- ✅ `meeting.ts` - 完整的会议API封装(6个方法)
|
||||
|
||||
#### 2. ChatRoom.vue组件增强
|
||||
- ✅ 添加roomId、workcaseId Props
|
||||
- ✅ 实现会议创建逻辑(handleStartMeeting)
|
||||
- ✅ 实现会议结束逻辑(handleEndMeeting)
|
||||
- ✅ 实现活跃会议检测(checkActiveMeeting)
|
||||
- ✅ 会议iframe显示(带头部控制栏)
|
||||
- ✅ 按钮状态管理(loading、disabled)
|
||||
|
||||
#### 3. 样式优化
|
||||
- ✅ 会议容器样式(渐变头部)
|
||||
- ✅ 关闭按钮样式(半透明效果)
|
||||
- ✅ 按钮禁用状态
|
||||
|
||||
---
|
||||
|
||||
### 三、前端UniApp开发
|
||||
|
||||
#### 1. MeetingView.uvue页面
|
||||
- ✅ 自定义导航栏
|
||||
- ✅ web-view全屏显示
|
||||
- ✅ 结束会议功能
|
||||
- ✅ 退出确认弹窗
|
||||
|
||||
#### 2. chatRoom.uvue修改
|
||||
- ✅ 更新startMeeting函数(调用API创建会议)
|
||||
- ✅ 跳转到MeetingView页面
|
||||
|
||||
#### 3. workcaseChat.ts API
|
||||
- ✅ 添加6个会议相关API方法
|
||||
|
||||
---
|
||||
|
||||
### 四、Docker部署配置
|
||||
|
||||
#### 1. docker-compose.yml
|
||||
- ✅ 添加4个Jitsi服务(web、prosody、jicofo、jvb)
|
||||
- ✅ 配置JWT认证
|
||||
- ✅ 端口映射(8280、8443、10000/udp)
|
||||
- ✅ 数据持久化(.data/docker/jitsi)
|
||||
- ✅ 健康检查配置
|
||||
- ✅ 服务依赖关系
|
||||
|
||||
#### 2. application-dev.yml
|
||||
- ✅ 添加jitsi配置节
|
||||
- ✅ JWT密钥配置
|
||||
- ✅ 服务器地址配置
|
||||
- ✅ Token有效期配置
|
||||
|
||||
---
|
||||
|
||||
### 五、文档和脚本
|
||||
|
||||
#### 1. 文档
|
||||
- ✅ `Jitsi-Meet本地部署指南.md` - npm start方式(开发测试)
|
||||
- ✅ `Jitsi-Meet-Docker部署指南.md` - Docker方式(生产推荐)
|
||||
- ✅ `项目总结.md` - 本文档
|
||||
|
||||
#### 2. 启动脚本
|
||||
- ✅ `启动Jitsi视频会议服务.bat` - 一键启动
|
||||
- ✅ `停止Jitsi视频会议服务.bat` - 一键停止
|
||||
|
||||
---
|
||||
|
||||
## 📂 修改的文件清单
|
||||
|
||||
### 后端(6个文件)
|
||||
```
|
||||
✅ VideoMeetingService.java (新建)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\apis\api-workcase\src\main\java\org\xyzh\api\workcase\service\
|
||||
|
||||
✅ JitsiTokenService.java (新建)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\apis\api-workcase\src\main\java\org\xyzh\api\workcase\service\
|
||||
|
||||
✅ VideoMeetingServiceImpl.java (新建)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\workcase\src\main\java\org\xyzh\workcase\service\
|
||||
|
||||
✅ JitsiTokenServiceImpl.java (新建)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\workcase\src\main\java\org\xyzh\workcase\service\
|
||||
|
||||
✅ WorkcaseChatContorller.java (修改:添加会议接口)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\workcase\src\main\java\org\xyzh\workcase\controller\
|
||||
|
||||
✅ application-dev.yml (修改:添加jitsi配置)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\workcase\src\main\resources\
|
||||
```
|
||||
|
||||
### 前端Vue(3个文件)
|
||||
```
|
||||
✅ meeting.ts (新建)
|
||||
F:\Project\urbanLifeline\urbanLifelineWeb\packages\workcase\src\api\workcase\
|
||||
|
||||
✅ ChatRoom.vue (修改:添加会议功能)
|
||||
F:\Project\urbanLifeline\urbanLifelineWeb\packages\workcase\src\components\chatRoom\chatRoom\
|
||||
|
||||
✅ ChatRoom.scss (修改:添加会议样式)
|
||||
F:\Project\urbanLifeline\urbanLifelineWeb\packages\workcase\src\components\chatRoom\chatRoom\
|
||||
```
|
||||
|
||||
### 前端UniApp(3个文件)
|
||||
```
|
||||
✅ MeetingView.uvue (新建)
|
||||
F:\Project\urbanLifeline\urbanLifelineWeb\packages\workcase_wechat\pages\meeting\MeetingView\
|
||||
|
||||
✅ chatRoom.uvue (修改:更新startMeeting)
|
||||
F:\Project\urbanLifeline\urbanLifelineWeb\packages\workcase_wechat\pages\chatRoom\chatRoom\
|
||||
|
||||
✅ workcaseChat.ts (修改:添加会议API)
|
||||
F:\Project\urbanLifeline\urbanLifelineWeb\packages\workcase_wechat\api\workcase\
|
||||
```
|
||||
|
||||
### Docker配置(2个文件)
|
||||
```
|
||||
✅ docker-compose.yml (修改:添加4个Jitsi服务)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\.bin\docker\urbanlifeline\
|
||||
|
||||
✅ application-dev.yml (修改:添加jitsi配置)
|
||||
F:\Project\urbanLifeline\urbanLifelineServ\workcase\src\main\resources\
|
||||
```
|
||||
|
||||
### 文档和脚本(5个文件)
|
||||
```
|
||||
✅ Jitsi-Meet本地部署指南.md
|
||||
✅ Jitsi-Meet-Docker部署指南.md
|
||||
✅ 项目总结.md
|
||||
✅ 启动Jitsi视频会议服务.bat
|
||||
✅ 停止Jitsi视频会议服务.bat
|
||||
```
|
||||
|
||||
**总计:19个文件(12个新建,7个修改)**
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速开始(3步搞定)
|
||||
|
||||
### 步骤1:启动Jitsi Meet服务
|
||||
|
||||
**方法A:使用启动脚本(推荐)**
|
||||
```bash
|
||||
# 双击运行
|
||||
F:\Project\urbanLifeline\启动Jitsi视频会议服务.bat
|
||||
```
|
||||
|
||||
**方法B:手动启动**
|
||||
```bash
|
||||
cd F:\Project\urbanLifeline\urbanLifelineServ\.bin\docker\urbanlifeline
|
||||
docker-compose up -d jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb
|
||||
```
|
||||
|
||||
**验证**:浏览器打开 http://localhost:8280/
|
||||
|
||||
---
|
||||
|
||||
### 步骤2:启动Java后端
|
||||
|
||||
```bash
|
||||
# 确保配置正确
|
||||
# application-dev.yml 中的 jitsi 配置已自动添加
|
||||
|
||||
# 启动后端服务
|
||||
# 使用你的IDE或命令行启动 workcase-service
|
||||
```
|
||||
|
||||
**验证**:访问 http://localhost:8180/swagger-ui.html 查看会议接口
|
||||
|
||||
---
|
||||
|
||||
### 步骤3:启动前端并测试
|
||||
|
||||
#### Vue前端测试
|
||||
```bash
|
||||
# 启动Vue前端
|
||||
npm run dev
|
||||
|
||||
# 在聊天室页面点击"发起会议"按钮
|
||||
# 应该能看到Jitsi Meet会议界面
|
||||
```
|
||||
|
||||
#### UniApp测试
|
||||
```bash
|
||||
# 使用HBuilderX打开项目
|
||||
# 运行到小程序/App
|
||||
# 在聊天室点击"发起会议"
|
||||
# 跳转到全屏会议页面
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔑 核心特性
|
||||
|
||||
### 1. 安全性
|
||||
- ✅ JWT Token身份验证(每个用户独立Token)
|
||||
- ✅ 聊天室成员权限校验
|
||||
- ✅ Token有效期控制(2小时)
|
||||
- ✅ 主持人权限区分(客服=主持人)
|
||||
|
||||
### 2. 用户体验
|
||||
- ✅ 页面刷新后会议不丢失(活跃会议检测)
|
||||
- ✅ 会议创建loading状态
|
||||
- ✅ 按钮禁用状态(会议进行中不可重复创建)
|
||||
- ✅ 会议头部控制栏(显示状态+关闭按钮)
|
||||
- ✅ UniApp独立会议页面(可切换聊天/会议)
|
||||
|
||||
### 3. 扩展性
|
||||
- ✅ 支持主持人权限
|
||||
- ✅ 支持Jitsi配置项扩展
|
||||
- ✅ 预留会议参与者记录功能
|
||||
- ✅ Docker部署,易于扩展
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 重要配置说明
|
||||
|
||||
### JWT密钥配置
|
||||
|
||||
**Docker配置**(docker-compose.yml):
|
||||
```yaml
|
||||
JWT_APP_ID: urbanLifeline
|
||||
JWT_APP_SECRET: your-secret-key-change-in-production
|
||||
```
|
||||
|
||||
**Java后端配置**(application-dev.yml):
|
||||
```yaml
|
||||
jitsi:
|
||||
app:
|
||||
id: urbanLifeline # 必须与Docker一致
|
||||
secret: your-secret-key-change-in-production # 必须与Docker一致
|
||||
```
|
||||
|
||||
⚠️ **生产环境必须修改密钥**:
|
||||
1. 生成强随机字符串(至少32位)
|
||||
2. 同时修改Docker和Java配置
|
||||
3. 重启Jitsi服务和Java后端
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试步骤
|
||||
|
||||
### 1. 测试Jitsi服务
|
||||
```bash
|
||||
# 访问Jitsi主页
|
||||
http://localhost:8280/
|
||||
|
||||
# 测试创建房间(应被拦截,需要JWT)
|
||||
http://localhost:8280/test-room
|
||||
```
|
||||
|
||||
### 2. 测试后端接口
|
||||
```bash
|
||||
# 使用Postman或curl测试
|
||||
POST http://localhost:8180/urban-lifeline/workcase/chat/meeting/create
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer <your-token>
|
||||
|
||||
{
|
||||
"roomId": "test-room-123",
|
||||
"workcaseId": "WC001",
|
||||
"meetingName": "测试会议",
|
||||
"maxParticipants": 10
|
||||
}
|
||||
|
||||
# 响应应包含带JWT的iframeUrl
|
||||
{
|
||||
"code": 0,
|
||||
"data": {
|
||||
"meetingId": "xxx",
|
||||
"iframeUrl": "http://localhost:8280/workcase_WC001_xxx?jwt=eyJhbGc..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 测试前端集成
|
||||
- Vue: 在聊天室点击"发起会议"
|
||||
- UniApp: 在聊天室点击"发起会议"
|
||||
- 验证会议iframe能正常显示
|
||||
- 验证多人能同时加入会议
|
||||
|
||||
---
|
||||
|
||||
## 🔧 常见问题
|
||||
|
||||
### Q1: Docker启动失败?
|
||||
**A**: 检查端口占用和Docker状态
|
||||
```bash
|
||||
# 检查Docker
|
||||
docker info
|
||||
|
||||
# 检查端口
|
||||
netstat -ano | findstr "8280"
|
||||
netstat -ano | findstr "10000"
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs jitsi-web
|
||||
```
|
||||
|
||||
### Q2: JWT验证失败?
|
||||
**A**: 确保密钥一致
|
||||
```bash
|
||||
# 检查Docker配置
|
||||
docker-compose exec jitsi-prosody cat /config/prosody.cfg.lua | grep jwt
|
||||
|
||||
# 检查Java配置
|
||||
cat application-dev.yml | grep -A 5 "jitsi:"
|
||||
|
||||
# 密钥必须完全一致
|
||||
```
|
||||
|
||||
### Q3: 视频连接不上?
|
||||
**A**: 检查UDP端口10000
|
||||
```bash
|
||||
# Windows防火墙
|
||||
netsh advfirewall firewall add rule name="Jitsi JVB" dir=in action=allow protocol=UDP localport=10000
|
||||
|
||||
# 或临时关闭防火墙测试
|
||||
```
|
||||
|
||||
### Q4: 前端iframe显示空白?
|
||||
**A**: 检查跨域和URL
|
||||
```bash
|
||||
# 浏览器控制台查看错误
|
||||
# 确保iframeUrl是http://localhost:8280开头
|
||||
# 检查JWT Token是否正确生成
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 项目结构
|
||||
|
||||
```
|
||||
urbanLifeline/
|
||||
├── .data/docker/jitsi/ # Jitsi数据目录
|
||||
│ ├── web/
|
||||
│ ├── prosody/
|
||||
│ ├── jicofo/
|
||||
│ └── jvb/
|
||||
├── docs/ # 文档目录
|
||||
│ ├── Jitsi-Meet本地部署指南.md
|
||||
│ ├── Jitsi-Meet-Docker部署指南.md
|
||||
│ └── 项目总结.md
|
||||
├── urbanLifelineServ/
|
||||
│ ├── .bin/docker/urbanlifeline/
|
||||
│ │ └── docker-compose.yml # 包含Jitsi配置
|
||||
│ ├── apis/api-workcase/
|
||||
│ │ └── src/main/java/org/xyzh/api/workcase/
|
||||
│ │ └── service/
|
||||
│ │ ├── VideoMeetingService.java
|
||||
│ │ └── JitsiTokenService.java
|
||||
│ └── workcase/
|
||||
│ ├── src/main/java/org/xyzh/workcase/
|
||||
│ │ ├── controller/WorkcaseChatContorller.java
|
||||
│ │ └── service/
|
||||
│ │ ├── VideoMeetingServiceImpl.java
|
||||
│ │ └── JitsiTokenServiceImpl.java
|
||||
│ └── src/main/resources/
|
||||
│ └── application-dev.yml
|
||||
├── urbanLifelineWeb/
|
||||
│ └── packages/
|
||||
│ ├── workcase/
|
||||
│ │ └── src/
|
||||
│ │ ├── api/workcase/meeting.ts
|
||||
│ │ └── components/chatRoom/chatRoom/
|
||||
│ │ ├── ChatRoom.vue
|
||||
│ │ └── ChatRoom.scss
|
||||
│ └── workcase_wechat/
|
||||
│ ├── api/workcase/workcaseChat.ts
|
||||
│ └── pages/
|
||||
│ ├── chatRoom/chatRoom/chatRoom.uvue
|
||||
│ └── meeting/MeetingView/MeetingView.uvue
|
||||
├── 启动Jitsi视频会议服务.bat
|
||||
└── 停止Jitsi视频会议服务.bat
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 下一步建议
|
||||
|
||||
### 短期优化
|
||||
1. **会议录制功能**
|
||||
- 配置Jibri录制组件
|
||||
- 存储录制文件到MinIO
|
||||
- 提供录制回放功能
|
||||
|
||||
2. **会议统计**
|
||||
- 记录参与者加入/离开时间
|
||||
- 生成会议时长报告
|
||||
- 导出会议数据
|
||||
|
||||
3. **界面优化**
|
||||
- 自定义Jitsi Meet界面主题
|
||||
- 添加品牌Logo
|
||||
- 优化移动端体验
|
||||
|
||||
### 长期规划
|
||||
1. **生产部署**
|
||||
- 配置域名和SSL证书
|
||||
- 配置公网IP和防火墙
|
||||
- 负载均衡和高可用
|
||||
|
||||
2. **功能增强**
|
||||
- 屏幕共享优化
|
||||
- 虚拟背景
|
||||
- 会议白板功能
|
||||
- AI转录字幕
|
||||
|
||||
3. **监控告警**
|
||||
- Prometheus监控
|
||||
- Grafana仪表板
|
||||
- 告警通知
|
||||
|
||||
---
|
||||
|
||||
## ✨ 总结
|
||||
|
||||
### 已实现功能
|
||||
✅ 完整的Jitsi Meet视频会议功能
|
||||
✅ JWT认证和权限控制
|
||||
✅ Docker一键部署
|
||||
✅ 前后端完整集成
|
||||
✅ Vue和UniApp双端支持
|
||||
✅ 详细的文档和脚本
|
||||
|
||||
### 技术亮点
|
||||
🌟 每个用户独立JWT Token(安全性高)
|
||||
🌟 活跃会议检测(用户体验好)
|
||||
🌟 Docker部署(易于维护)
|
||||
🌟 微服务架构(易于扩展)
|
||||
|
||||
### 项目价值
|
||||
💡 真正的企业级视频会议解决方案
|
||||
💡 完全自主可控,无第三方依赖
|
||||
💡 可扩展性强,支持二次开发
|
||||
💡 开发效率高,5分钟即可部署
|
||||
|
||||
---
|
||||
|
||||
**开发完成!祝使用愉快!** 🎉
|
||||
Reference in New Issue
Block a user