message.js 3.09 KB
/* eslint-disable */
import { formatTime } from './utils/format';
import { getMessageClasses, parseMessageToJSON } from './utils';
class Message {
  constructor({
    id,
    infoContent,
    infoLevel,
    time,
    infoType,
    dateTime,
    webConfig,
    webPath,
    messType,
    infoClasses
  } = message) {
    this.id = id;
    this.infoContent = infoContent;
    this.infoLevel = infoLevel;
    this.time = time;
    this.infoType = infoType; // 方案类型 - 工单 报警 公告 定时推送
    this.dateTime = dateTime;
    this.webConfig = webConfig;
    this.webPath = webPath;
    this.messType = messType; // 方案名称 -  大类型下细类型
    this.infoClasses = infoClasses;
  }
}

function createMessage(message) {
  return new Message(message);
}


/**
 * 解析历史消息成统一消息对象
 *  "历史消息" 和 "实时推送" 的消息之间有些差距,所以统一处理成一样的 Message
 * @param {*} hisMessage 历史消息: 通过接口查询到的 "历史消息"
 * @param {object} options 扩展参数
 * @returns {Message} 
 * 返回处理后的统一 Message 对象
 */
export const createMessageFromHis = (hisMessage, options = {}) => {
  const { version } = options;

  const time = formatTime(hisMessage.hisCreateTime);
  const infoClasses = getMessageClasses(hisMessage.infoType);

  let infoContent = {};
  if (!version || version === '1.0') {
    infoContent = parseMessageToJSON(infoClasses, hisMessage); // 1.0消息解析成统一格式
  } else {
    // 2.0 消息
    infoContent = JSON.parse(hisMessage.infoContent || '{}');
  }
  
  const template = {
    id: hisMessage.hisID,
    infoContent,
    time,
    infoType: hisMessage.infoType,
    dateTime: hisMessage.hisCreateTime,
    infoLevel: hisMessage.infoLevel,
    webConfig: hisMessage.web_config,
    webPath: hisMessage.web_path,
    messType: hisMessage.messType,
    infoClasses,
  };
  return createMessage(template);
}


/**
 * 解析实时消息成统一消息对象
 *  "历史消息" 和 "实时推送" 的消息之间有些差距,所以统一处理成一样的 Message
 * @param {*} hisMessage 历史消息: 通过接口查询到的 "历史消息"
 * @param {object} options 扩展参数
 * @returns {Message} 
 * 返回处理后的统一 Message 对象
 */
export const createMessageFromReal = (realMesssage, options = {}) => {
  const { version } = options;
  const infoClasses = getMessageClasses(realMesssage.infoType);
  const time = formatTime(realMesssage.createTime);

  let infoContent = {};
  if (!version || version === '1.0') {
    infoContent = parseMessageToJSON(infoClasses, realMesssage); // 1.0消息解析成统一格式
  } else {
    // 2.0 消息
    infoContent = JSON.parse(realMesssage.content || '{}');
  }
  
  const template = {
    id: realMesssage.infoId,
    infoContent,
    time,
    infoType: realMesssage.infoType,
    infoLevel: realMesssage.level,
    dateTime: realMesssage.createTime,
    webConfig: realMesssage.web_config,
    webPath: realMesssage.web_path,
    messType: realMesssage.messType,
    infoClasses,
  }

  return createMessage(template);
}


export default createMessage;