message.js 4.27 KB
Newer Older
崔佳豪's avatar
崔佳豪 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* eslint-disable */
import { formatTime } from './utils/format';
import { getMessageClasses, parseMessageToJSON } from './utils';
class Message {
  constructor({
    id,
    infoContent,
    infoLevel,
    time,
    infoType,
    dateTime,
    webConfig,
    webPath,
    messType,
15 16 17
    defaultContent,
    webIcon,
    title,
杨思琦's avatar
杨思琦 committed
18 19
    infoClasses,
    webVoice
崔佳豪's avatar
崔佳豪 committed
20 21 22 23 24 25 26 27 28 29
  } = 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; // 方案名称 -  大类型下细类型
30 31 32
    this.webIcon = webIcon; // 消息图标
    this.title = title; // 消息标题
    this.defaultContent = defaultContent;
崔佳豪's avatar
崔佳豪 committed
33
    this.infoClasses = infoClasses;
杨思琦's avatar
杨思琦 committed
34
    this.webVoice = webVoice;
崔佳豪's avatar
崔佳豪 committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
  }
}

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,
杨思琦's avatar
杨思琦 committed
73
    webVoice: hisMessage.webVoice,
崔佳豪's avatar
崔佳豪 committed
74 75
    webPath: hisMessage.web_path,
    messType: hisMessage.messType,
76 77 78
    defaultContent: (_.isString(hisMessage.defaultContent) && hisMessage.defaultContent.replace(new RegExp(/ /g), "").length > 0) ? hisMessage.defaultContent : null,
    webIcon: (_.isString(hisMessage.webIcon) && hisMessage.webIcon.replace(new RegExp(/ /g), "").length > 0) ? hisMessage.webIcon : null,
    title: (_.isString(hisMessage.title) && hisMessage.title.replace(new RegExp(/ /g), "").length > 0) ? hisMessage.title : null,
崔佳豪's avatar
崔佳豪 committed
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
    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 || '{}');
  }
杨思琦's avatar
杨思琦 committed
105

崔佳豪's avatar
崔佳豪 committed
106
  const template = {
杨思琦's avatar
杨思琦 committed
107
    id: realMesssage.infoId || realMesssage.ID,
崔佳豪's avatar
崔佳豪 committed
108 109 110 111 112 113 114
    infoContent,
    time,
    infoType: realMesssage.infoType,
    infoLevel: realMesssage.level,
    dateTime: realMesssage.createTime,
    webConfig: realMesssage.web_config,
    webPath: realMesssage.web_path,
杨思琦's avatar
杨思琦 committed
115
    webVoice: realMesssage.webVoice,
杨思琦's avatar
杨思琦 committed
116
    messType: realMesssage.messType || realMesssage.MessType,
117 118 119
    defaultContent: (_.isString(realMesssage.defaultContent) && realMesssage.defaultContent.replace(new RegExp(/ /g), "").length > 0) ? realMesssage.defaultContent : null,
    webIcon: (_.isString(realMesssage.webIcon) && realMesssage.webIcon.replace(new RegExp(/ /g), "").length > 0) ? realMesssage.webIcon : null,
    title: (_.isString(realMesssage.title) && realMesssage.title.replace(new RegExp(/ /g), "").length > 0) ? realMesssage.title : null,
崔佳豪's avatar
崔佳豪 committed
120 121 122 123 124 125 126 127
    infoClasses,
  }

  return createMessage(template);
}


export default createMessage;