123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /**
- * 心跳检测的JS
- * 系统下线 25 秒后,将无法提交文档到服务器
- * 检测到系统下线后,在关闭文档的时候会提醒,并自动开启重连
- * 添加自定义协议$reconnect 请求系统重连
- */
- ;(function () {
- const ACTIONS_WITHOUT_HEART = [
- 'printdocument',
- 'convertpdf',
- 'convertofd',
- 'saveAs',
- ]
- const HEAR_OPEN_DOCS = 'HEAR_OPENED_DOCS'
- const OA_SYSTEM_ONLINE = 'OA_SYSTEM_ONLINE'
- const HEART_INTERVAL = 2e3 //心跳频率 和OA系统一致
- let retrycount = 5
- let reconnectHandler
- /**
- * 设定已经打开的OA文档
- * @param {wps.Document} obj
- */
- function OpendOADocument(doc) {
- const fileinfo = GetDocParamsValue(doc, 'fileInfo')
- let uuid = getParamFormIndiDocxForm(fileinfo, 'file_unid')
- let name = getParamFormIndiDocxForm(fileinfo, 'file_name')
- let current = JSON.parse(wps.PluginStorage.getItem(HEAR_OPEN_DOCS) || '{}')
- var info = { uuid, name }
- current[GetUniqueId(doc)] = info
- wps.PluginStorage.setItem(HEAR_OPEN_DOCS, JSON.stringify(current))
- //反向重连
- Reconnect(info)
- }
- /**
- * 关闭OA文档
- * @param {*} uuid
- */
- function CloseOADocument(doc) {
- let current = JSON.parse(wps.PluginStorage.getItem(HEAR_OPEN_DOCS) || '{}')
- let info = current[GetUniqueId(doc)]
- delete current[GetUniqueId(doc)]
- wps.PluginStorage.setItem(HEAR_OPEN_DOCS, JSON.stringify(current))
- loginfo(`${doc.Name}下线`)
- if (!!info)
- OAWebNotice(
- JSON.stringify({
- cmd: '$disconnect',
- type: ClientType,
- uuid: info.uuid,
- name: info.name,
- })
- ) //发送重连信号
- }
- function GetCurrentDocs() {
- return JSON.parse(wps.PluginStorage.getItem(HEAR_OPEN_DOCS) || '{}')
- }
- function getDocHeart(doc) {
- return GetCurrentDocs()[GetUniqueId(doc)]
- }
- function OASystemOnLine(expried) {
- var next = expried || Date.now() + HEART_INTERVAL * 10
- wps.PluginStorage.setItem(OA_SYSTEM_ONLINE, next)
- wps.ribbonUI.Invalidate() //刷新Ribbon的状态
- //清理
- ClearReconnect()
- }
- /**
- * OA系统是否在线
- * @returns booleans
- */
- function IsOASystemOnline(tryReconnect = false) {
- //ClientType in util.js
- if (OACustomer.getCustomerHeart(ClientType) === false) return true
- var online =
- Number(wps.PluginStorage.getItem(OA_SYSTEM_ONLINE)) > Date.now()
- if (!online && tryReconnect) {
- //启动主动请求重
- loginfo('系统下线,启动自动重连')
- reconnectHandler = setTimeout(Reconnect, 500)
- }
- wps.ribbonUI.Invalidate() //刷新Ribbon的状态
- return online
- }
- function Reconnect(info) {
- if (OACustomer.getCustomerHeart(ClientType) === false) return
- if (retrycount-- > 0) {
- loginfo('请求心跳')
- OAWebNotice(
- JSON.stringify({
- cmd: '$reconnect',
- type: ClientType,
- uuid: info.uuid,
- name: info.name,
- })
- ) //发送重连信号
- reconnectHandler = setTimeout(function () {
- !IsOASystemOnline() && Reconnect(info)
- }, HEART_INTERVAL)
- } else {
- //请求5次后,重置
- retrycount = 5
- }
- }
- function ClearReconnect() {
- if (!!reconnectHandler) {
- loginfo('业务系统已重新连接')
- clearTimeout(reconnectHandler)
- reconnectHandler = null
- }
- retrycount = 5
- }
- window.Heart = {
- OpendOADocument,
- CloseOADocument,
- GetCurrentDocs,
- OASystemOnLine,
- IsOASystemOnline,
- getDocHeart,
- HEART_INTERVAL,
- ACTIONS_WITHOUT_HEART,
- }
- })(window)
- /**
- * 心跳
- * @returns
- */
- function heart() {
- Heart.OASystemOnLine()
- var data = Heart.GetCurrentDocs() || {}
- return {
- message: 'ok',
- app: ClientType,
- docs: Object.values(data),
- }
- }
|