数据同步方案
一、相关数据表都需要增加分控端标识、是否同步标识,同步时间。涉及的表如下:
| 表名 | 分控段标识 | 同步标识 | 同步时间 | 备注 |
|---|---|---|---|---|
| stp_ks_exam | ctl_code | sync_flag | sync_time | |
| stp_ks_exam_answer_bak_del | ctl_code | sync_flag | sync_time | |
| stp_ks_exam_details | ctl_code | sync_flag | sync_time | |
| stp_ks_exam_marking | ctl_code | sync_flag | sync_time | |
| stp_ks_exam_marking_state | ctl_code | sync_flag | sync_time | |
| stp_ks_exam_obj | ctl_code | sync_flag | sync_time | |
| stp_ks_my_course | ctl_code | sync_flag | sync_time | |
| stp_ks_my_courseware_study | ctl_code | sync_flag | sync_time | |
| stp_ks_my_exam | ctl_code | sync_flag | sync_time | |
| stp_ks_my_exam_answer | ctl_code | sync_flag | sync_time | |
| stp_ks_my_exam_result | ctl_code | sync_flag | sync_time | |
| stp_ks_my_exam_result_item | ctl_code | sync_flag | sync_time | |
| stp_ks_my_exam_result_opt | ctl_code | sync_flag | sync_time | |
| stp_ks_operate_detail | ctl_code | sync_flag | sync_time | |
| stp_ks_operate_record | ctl_code | sync_flag | sync_time | |
| stp_ks_operate_step_score | ctl_code | sync_flag | sync_time | |
| stp_ks_paper | ctl_code | sync_flag | sync_time | |
| stp_ks_paper_question | ctl_code | sync_flag | sync_time | |
| stp_ks_user_course | ctl_code | sync_flag | sync_time | 确认服务是否使用,不适用及时删除 |
| stp_ks_user_remind | ctl_code | sync_flag | sync_time | |
| stp_ks_work_manage | ctl_code | sync_flag | sync_time | |
| stp_log | ctl_code | sync_flag | sync_time | |
| stp_ks_exam_answer_bak_del | ctl_code | sync_flag | sync_time | |
| stp_operation_seat | ctl_code | sync_flag | sync_time | |
| stp_scheme_manage | ctl_code | sync_flag | sync_time | |
| stp_training_data | ctl_code | sync_flag | sync_time | 确认服务是否使用,不适用及时删除 |
| stp_user_register | ctl_code | sync_flag | sync_time | 确认服务是否使用,不适用及时删除 |
| stp_virtual_classrooms | ctl_code | sync_flag | sync_time | |
| stp_virtual_classrooms_add | ctl_code | sync_flag | sync_time | |
| stp_virtual_classrooms_scheme | ctl_code | sync_flag | sync_time | |
| stp_zy_my_exam | ctl_code | sync_flag | sync_time | |
| stp_zy_my_exam_answer | ctl_code | sync_flag | sync_time | |
| stp_zy_my_exam_result | ctl_code | sync_flag | sync_time | |
| stp_zy_my_exam_result_item | ctl_code | sync_flag | sync_time | |
| stp_grades | ctl_code | sync_flag | sync_time | |
| stp_user_extend | sync_flag | sync_time | 确认服务是否使用,不适用及时删除 | |
| stp_user_register | sync_flag | sync_time |
二、创建同步记录服务,显示同步记录。集控端和分控端都需要有
- 分控端显示自己同步的记录,另外有打包按钮,用于离线同步使用,导入按钮,用于导入集控端的数据。 分控端的同步记录主要包含两种,一种是导入的集控端数据记录,一种是集控端主动同步的记录。主控端在线同步的时候会在分控端这里生成一条记录。
- 集控端显示所有分控端同步的记录,以及集控端主动同步分控端的记录。
三、增加分控列表服务。
用于显示分控列表,服务属性酌情添加,但是确保有字段标识分控系统是否在线,可以是自定义字段,因为在线状态是实时的。增加行级别按钮“同步”。用于主动同步在线的分控数据。增加表格的按钮“导入”,导入分控同步数据。
四、同步
只有集控端有同步功能,同步又分为上行同步和下行同步。上行同步是把分控系统的数同步到集控中,下行同步,是把集控的设置数据同步到分控端。同步都是在线时可用,分控端离线不可用。
1、分控与集控互通时,分控的数据实时上传到集控。
2、上行同步
把分控端未同步的数据同步到集控端,同步成功后把数据设置为已同步,下次同步时忽略掉已同步的数据。同步的数据主要为(一)中包含的服务。前端需要有个同步清单,点击同步时每一个服务同步完成要实时显示已经完成。我们设计的时候会在每个一个对应的服务创建一个同步方法,前端顺序调用同步方法,同步成功后根据后端返回的消息来显示是否统计成功,然后顺次往下调用。---- 每个服务对应的扩展类都会增加一个方法:syncData,调用这个syncData就会把对应的数据同步到集控端。
3、下行同步
下行同步主要是把集控的设置数据下发给分控端(不包括文件,文件不能通过在线形式同步,只能通过打包离线的方式同步)。集控下发给分控的服务包含以下:
| 服务 | 服务说明 | 说明 |
|---|---|---|
| stp_ankg_csb | 按钮开关参数子表 | |
| stp_asnt_stad | 操作步骤 | 确认是否使用,不使用即时删除服务和表 |
| stp_bdkg_csj | 拨动开关参数子表 | |
| stp_cable | 接线管理 | |
| stp_cable_box | 线缆箱 | |
| stp_cable_box_sub | 线缆箱子表 | |
| stp_check_csb | 检查类参数表 | |
| stp_dg_csjxx | 灯光参数集 | |
| stp_drive_obj_link | 业务驱动连接线 | |
| stp_drive_object | 驱动关联对象库 | |
| stp_drive_param_link | 连接线参数映射 | |
| stp_equip | 装备 | |
| stp_equip_gjcdlb | 触点列表 | |
| stp_equip_role | 装备角色 | |
| stp_equip_structure_tree | 装备结构树 | |
| stp_freely_object | 自由对象表 | |
| stp_freely_object_disable | 自由对象禁用 | |
| stp_gear_lcxzs_list | 连续旋转式旋钮开关参数 | |
| stp_gear_list | 分档式旋钮开关档位列表 | |
| stp_gjx_manage | 工具箱 | |
| stp_gjx_manage_csb | 工具箱管理参数 | |
| stp_jxbz_csj | 机械表针参数集 | |
| stp_ks_knowledge | 知识点清单管理 | |
| stp_ks_question | 题库 | |
| stp_ks_question_knowledge | 题库关联知识点 | |
| stp_ks_tags | 标签管理 | |
| stp_led_csb | led屏幕子表 | |
| stp_mct_csj | 门抽屉参数 | |
| stp_monitor_led | LED屏幕 | |
| stp_monitor_pt | 显示屏普通屏幕 | |
| stp_node_jbxx | 节点基本信息 | |
| stp_node_qtxx | 节点额外信息 | |
| stp_node_tsxx | 节点提示信息 | |
| stp_obj_drive_dhcs | 动画类型参数表 | |
| stp_obj_type_library | 对象类型库 | |
| stp_obj_type_manage | 对象类型管理 | |
| stp_obj_type_name | 对象类型名称表 | |
| stp_obj_zzztzxz | 对象、最终状态值 | |
| stp_operat_monit | 操作监控 | 确认是否使用,不使用即时删除服务和表 |
| stp_operation_seat | 操作席位 | |
| stp_port | 端口表 | |
| stp_port_jk | 接线接头表 | |
| stp_regulate_sub | 调节按钮参数子表 | |
| stp_roam_object | 漫游对象表 | |
| stp_scheme_manage | 训练方案 | |
| stp_sound_manage | 声音信息管理 | |
| stp_state_list | 状态列表 | |
| stp_subject | 训练科目管理 | 这个服务确认是否在用,不用的及时删除 |
| stp_subject_list | 科目管理 | |
| stp_subject_node_link | stp_subject_node_link | |
| stp_syonggj_csj | 所选工具端口参数表 | |
| stp_template_list | 模版文件管理 | |
| stp_terminal | 端子表 | |
| stp_training_data | 训练数据表 | |
| stp_ui_csb | ui确认参数表 | |
| stp_ui_obj | ui对象 | |
| stp_uics_ywobj | ui界面参数表业务对象库 | |
| stp_wiring | 接线表 | |
| stp_ywquk | 业务驱动库 | |
| sy_comm_file | 文件表 | |
| sy_serv_dict | 字典表 | |
| sy_serv_dict_item | 字典内部详细信息表 | |
| sy_serv | 服务定义相关表 | |
| sy_serv_act | 服务定义相关表 | |
| sy_serv_act_acl | 服务定义相关表 | |
| sy_serv_act_param | 服务定义相关表 | |
| sy_serv_flow | 服务定义相关表 | |
| sy_serv_item | 服务定义相关表 | |
| sy_serv_link | 服务定义相关表 | |
| sy_serv_link_item | 服务定义相关表 | |
| sy_serv_listener | 服务监听 | |
| sy_serv_query | 查询策略表 | |
| sy_serv_where | 服务过滤规则 |
五、关于用户数据的同步问题说明及同步思路
分控系统可以注册,学员信息有单独的保存,所以同步学员的数据目前应该不存在问题。在分控系统中创建的学员信息可以在集控端统一删除后,把分控的学员信息都导入。但是对于其他的账号教员管理员这些账号可能在集控或者其他分控系统中存在,同步的时候会把其他账号重置,所以目前的一个思路是,各个分控系统的用户账号之间不重叠。都只有自己的,不能互相登录,并且分控系统中不能有"admin"账号,或者要排除admin账号的同步。如果账号通用,那么可能就会出现一个分控系统修改密码 会被其他分控未修改的同步后给重置,也会把修改后的同步到其他分控。
六、关于集控下行同步的说明
集控下行同步时,会把分控中对应的表的数据清空,然后把数据全部插入到分控系统中,所以在同步时,要有个通知,同步过程中对应的分控系统不能做任何操作。集控系统在同步时可以给分控系统发送ws消息,分控系统是否可以根据收到的ws消息,给所有的登录用户做出禁止操作的提示以及功能,这个需要前端确认下。
七、关于离线同步的一些说明
离线同步主要分为数据库的同步和文件同步,数据库数据同步可以把同步的数据存储成sql文件,打包后在分控端或者在集控端执行。集控端打包的文件可能比较大,会超过几十G大小,打包过程很慢,中间可能因为长时间在打包,系统线程一直在等待,有可能会超时。解压过程也会很慢。所以关于文件的同步,建议不通过系统,人工打包解压到指定地方。
八、关于虚拟教室在集控中控制分控的说明
目前控制虚拟教室的操作都是在虚拟教室的服务里控制完成,需要登录权限,如果在及空中控制分控的虚拟教室操作则要公开对应的操作到公用的Controller中,或者创建一个不需要权限的服务中,来调用对应的方法。同时要在调用前验证是集控端发送的命令,除了集控端的命令,其他调用的命令都直接拒绝。
九、配置文件修改
1、集控系统配置文件增加配置
stp:
ctrl:
type: main
2、分控系统配置文件增加配置
stp:
ctrl:
type: sub
code: 分控标识
main-address: http://{集控ip}:{port}/{集控相对路径}
花括号是变量填写实际值即可。如果分控系统的ip不变,那在集控那里维护分控列表要把ip填上 这样能区分分控,如果分控ip不固定,则需要给分控生成一个固定的标识符,保存在集控的分控服务里,这样在分控连接主控的时候把标识带入就可以区分是那个分控系统了。同时分控的配置文件上也要增加这个标识。