import { APP_TYPE, Category, AlarmType } from '../types'; import { NoticeTypes, Ranges, Conditions } from '../services/notice-rules/type'; // appType 对应 数据统计key export const appTypeToCategory = { [APP_TYPE.AIR_SWITCH_CONTROL_APP]: Category.AIR_BREAKER, [APP_TYPE.SMOKE_FIRE_PERCEPTION_APP]: Category.SMOKE, [APP_TYPE.ELECTRICAL_FIRE_PERCEPTION_APP]: Category.ELEC_FIRE, [APP_TYPE.FIRE_WATER_PERCEPTION_APP]: Category.WATER, [APP_TYPE.GAS_FIRE_PERCEPTION_APP]: Category.GAS, [APP_TYPE.DEVICE_MAINTENANCE_APP]: Category.MAINTENANCE, [APP_TYPE.FIRE_HOST_PERCEPTION_APP]: Category.FIRE_HOST, [APP_TYPE.FOREST_FIRE_PREVENTION_APP]: Category.CAMERA_CAPTURE_GB_THERMAL_CAMERA, [APP_TYPE.OWNER_REPORT_APP]: Category.JIN_SHU_JU, [APP_TYPE.ENVIRONMENTAL_PERCEPTION_APP]: Category.ENVIRONMENT, [APP_TYPE.ENVIRONMENTAL_MONITORING_APP]: Category.METEOROLOGY, // 车辆布控 [APP_TYPE.VEHICLE_CONTROL_APP]: Category.CAMERA_TASK_VEHICLE, // 电动车识别 [APP_TYPE.ELECTRIC_BICYCLE_APP]: Category.CAMERA_CAPTURE_E_MOTORCYCLE, // 群防群治 [APP_TYPE.GROUP_DEFENSE_AND_GOVERNANCE_APP]: Category.GROUP_DEFENSE, // 未戴口罩识别 [APP_TYPE.NO_MASK_RECOGNITION_APP]: Category.CAMERA_CAPTURE_NO_MASK, // 老人关爱 [APP_TYPE.CARING_FOR_THE_ELDERLY_APP]: Category.ELDER_CARE, // 水质监测 [APP_TYPE.WATER_QUALITY_MONITORING_APP]: Category.WATER_QUALITY, // 路灯 [APP_TYPE.LIGHTING_STREET_LAMP_CONTROL_APP]: Category.LAMP_POLE, // 违建管控 [APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP]: Category.ILLEGAL_CONSTRUCTION, // 江域非法作业 [APP_TYPE.RIVER_ILLEGAL_JOB_APP]: Category.ILLEGAL_WORK_ON_RIVER, // 气象灾害 [APP_TYPE.WEATHER_DISASTER_APP]: Category.WEATHER_DISASTER, // 健康感知 [APP_TYPE.MATTRESS_APP]: Category.MATTRESS, }; export const appTypeToVehicleConfig = { [APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP]: { label: '违建辅助管控', path: 'structure-illegal-control', alarmTypeParams: { taskType: '28', }, alarmThresholdTips: '相似度小于告警阈值则发生告警', }, }; // appType 对应 数据统计key export const appTypeToActionType = { [APP_TYPE.SECURITY_APP]: '', [APP_TYPE.CAMPUS_APP]: '', // 重点人员库 [APP_TYPE.KEY_PERSONNEL_CONTROL_APP]: 'keyPerson.capture', // 人员离岗 [APP_TYPE.STAFF_LEAVE_APP]: 'offDuty.alarm', // 区域入侵 [APP_TYPE.AREA_INVASION_APP]: 'areaIrrupt.alarm', // 未戴口罩识别 [APP_TYPE.NO_MASK_RECOGNITION_APP]: 'noMask.alarm', // 消防通道占用 [APP_TYPE.FIRE_CHANNEL_OCCUPATION_APP]: 'fireControlPassagewayBlock.alarm', [APP_TYPE.STAFF_AGGREGATION_APP]: 'peopleGather.alarm', // 外来人员布控 [APP_TYPE.OUTSIDE_PERSONNEL_CONTROL_APP]: 'foreignPerson.capture', // 违建管控 [APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP]: 'illegalConstruction.alarm', // 气象灾害 [APP_TYPE.WEATHER_DISASTER_APP]: 'weatherDisaster.alarm', }; // 使用 categories 的 appType export const appTypeWithCategories = [ APP_TYPE.AIR_SWITCH_CONTROL_APP, APP_TYPE.SMOKE_FIRE_PERCEPTION_APP, APP_TYPE.ELECTRICAL_FIRE_PERCEPTION_APP, APP_TYPE.FIRE_WATER_PERCEPTION_APP, APP_TYPE.GAS_FIRE_PERCEPTION_APP, APP_TYPE.DEVICE_MAINTENANCE_APP, APP_TYPE.FIRE_HOST_PERCEPTION_APP, APP_TYPE.FOREST_FIRE_PREVENTION_APP, APP_TYPE.OWNER_REPORT_APP, APP_TYPE.ENVIRONMENTAL_PERCEPTION_APP, APP_TYPE.ENVIRONMENTAL_MONITORING_APP, APP_TYPE.VEHICLE_CONTROL_APP, APP_TYPE.ELECTRIC_BICYCLE_APP, APP_TYPE.CARING_FOR_THE_ELDERLY_APP, APP_TYPE.WATER_QUALITY_MONITORING_APP, APP_TYPE.LIGHTING_STREET_LAMP_CONTROL_APP, APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP, APP_TYPE.RIVER_ILLEGAL_JOB_APP, APP_TYPE.WEATHER_DISASTER_APP, APP_TYPE.MATTRESS_APP, ]; export const SPECIAL_VEHICLE_TYPE_ARRAY = { '1': [1], '2': [2], '3': [1, 2], '4': [4], '5': [1, 4], '6': [2, 4], '7': [1, 2, 4], '8': [8], '9': [1, 8], '10': [2, 8], '11': [1, 2, 8], '12': [4, 8], '13': [1, 4, 8], '14': [2, 4, 8], '15': [1, 2, 4, 8], }; export const SPECIAL_VEHICLE_TYPE = [ { value: 1, label: '消防车', }, { value: 2, label: '警车', }, { value: 4, label: '救护车', }, { value: 8, label: '工程抢险车', }, ]; export const VEHICLE_CONTROL_TYPE_DIC = [ { label: '重点车辆', value: AlarmType.KEY_VEHICLE, iconColor: '#e52c3e', }, { label: '外来车辆', value: AlarmType.FOREIGN_VEHICLE, iconColor: '#1dccbb', }, { label: '特殊车辆', value: AlarmType.SPECIAL_VEHICLE, iconColor: '#f2a516', }, ]; export const VEHICLE_CONTROL_TYPE_MAP = VEHICLE_CONTROL_TYPE_DIC?.reduce( (prev, next) => { prev[next?.value] = next; return prev; }, {}, ); export const systemAppType = { // 安全防护 SECURITY_APP: 'security_app', // 校园人员管理 CAMPUS_APP: 'campus_app', }; // 预警返回统计数据 解析配置 const defaultStatisticsDic = [ { label: '未处理告警', value: 'unprocessed', type: 'danger', }, { label: '有效告警', value: 'real', }, { label: '无效告警', value: 'useless', }, { label: '历史告警', value: 'total', }, ]; // 事件处理状态 export const EVENT_STATUS = [ { value: 'unaccept', label: '待受理', color: 'red' }, { value: 'unprocessed', label: '待处理', color: 'orange', }, { value: 'processing', label: '处理中', color: 'blue' }, { value: 'finished', label: '已完结', color: 'gray' }, ]; export const formatResult = (result: any, appType: APP_TYPE) => { const statistics = result?.data; // 通过APP_TYPE 对应不同解析字段 if (appType === APP_TYPE.TICKET_APP) { return [ { name: '待处理工单', count: statistics?.assignedCount || 0, type: 'danger', }, { name: '逾期未处理工单', count: statistics?.expiredCount || 0, }, { name: '已完结工单', count: statistics.closedCount || 0, }, { name: '历史工单', count: statistics.totalCount || 0, }, ]; } else if (appType === APP_TYPE.WEATHER_DISASTER_APP) { const statisticsDic = [ { label: '未处理告警', value: 'unprocessed', type: 'danger', }, { label: '历史告警', value: 'total', }, ]; return statisticsDic?.map(item => ({ name: item.label, count: statistics?.[item?.value] || 0, type: item?.type, })); } else { return defaultStatisticsDic?.map(item => ({ name: item.label, count: statistics?.[item?.value] || 0, type: item?.type, })); } }; export const getStatisticsConfig = (appType: APP_TYPE) => { return ( statisticsConfig?.[appType] || { // 统计的地址 url: '/statistics/v1/statistics/alarms/counts', // 统计的参数 params: { categories: appTypeToCategory[appType], }, // 数据格式化方法 formatResult, } ); }; // 应用市场 hooks banner 统计配置 export const statisticsConfig = { // 路灯 [APP_TYPE.LIGHTING_STREET_LAMP_CONTROL_APP]: { // 统计的地址 url: '/statistics/v1/statistics/alarms/counts', // 统计的参数 params: { categories: appTypeToCategory[APP_TYPE.LIGHTING_STREET_LAMP_CONTROL_APP], }, // 数据格式化方法 formatResult, }, // 气象灾害 [APP_TYPE.WEATHER_DISASTER_APP]: { // 统计的地址 url: '/statistics/v1/statistics/alarms/counts', // 统计的参数 params: { categories: appTypeToCategory[APP_TYPE.WEATHER_DISASTER_APP], }, // 数据格式化方法 formatResult, }, // 江域非法作业 [APP_TYPE.RIVER_ILLEGAL_JOB_APP]: { // 统计的地址 url: '/statistics/v1/statistics/alarms/counts', // 统计的参数 params: { categories: appTypeToCategory[APP_TYPE.RIVER_ILLEGAL_JOB_APP], }, // 数据格式化方法 formatResult, }, // 违建管控 [APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP]: { // 统计的地址 url: '/statistics/v1/statistics/alarms/counts', // 统计的参数 params: { categories: appTypeToCategory[APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP], }, // 数据格式化方法 formatResult, }, // 水质监测 [APP_TYPE.WATER_QUALITY_MONITORING_APP]: { // 统计的地址 url: '/statistics/v1/statistics/alarms/counts', // 统计的参数 params: { categories: appTypeToCategory[APP_TYPE.WATER_QUALITY_MONITORING_APP], }, // 数据格式化方法 formatResult, }, // 群防群治 [APP_TYPE.GROUP_DEFENSE_AND_GOVERNANCE_APP]: { url: '/statistics/v1/statistics/alarms/counts', params: { categories: appTypeToCategory[APP_TYPE.GROUP_DEFENSE_AND_GOVERNANCE_APP], }, formatResult, }, // 工单统计 [APP_TYPE.TICKET_APP]: { url: '/ticket/v1/statistics/internalTickets/summary', params: { categories: appTypeToCategory[APP_TYPE.GROUP_DEFENSE_AND_GOVERNANCE_APP], }, formatResult, }, }; export const getNoticeRulesAPIConfig = (appType: APP_TYPE) => { return ( noticeRulesAPIConfig?.[appType] || { // 列表请求参数 fetchParams: { category: appTypeToCategory[appType], }, } ); }; // 通知规则配置 hooks 配置 export const noticeRulesAPIConfig = { // 空气开关 [APP_TYPE.AIR_SWITCH_CONTROL_APP]: { // 列表请求参数 fetchParams: { category: appTypeToCategory[APP_TYPE.AIR_SWITCH_CONTROL_APP], }, }, // 群防群治 [APP_TYPE.GROUP_DEFENSE_AND_GOVERNANCE_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.GROUP_DEFENSE_AND_GOVERNANCE_APP], }, }, // 未戴口罩识别 [APP_TYPE.NO_MASK_RECOGNITION_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.NO_MASK_RECOGNITION_APP], }, }, [APP_TYPE.CARING_FOR_THE_ELDERLY_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.CARING_FOR_THE_ELDERLY_APP], }, }, // 水质监测 [APP_TYPE.WATER_QUALITY_MONITORING_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.WATER_QUALITY_MONITORING_APP], }, }, // 路灯控制 [APP_TYPE.LIGHTING_STREET_LAMP_CONTROL_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.LIGHTING_STREET_LAMP_CONTROL_APP], }, }, // 违建管控 [APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.STRUCTURE_ILLEGAL_CONTROL_APP], }, }, // 江域作业控制 [APP_TYPE.RIVER_ILLEGAL_JOB_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.RIVER_ILLEGAL_JOB_APP], }, }, // 气象灾害 [APP_TYPE.WEATHER_DISASTER_APP]: { fetchParams: { category: appTypeToCategory[APP_TYPE.WEATHER_DISASTER_APP], }, }, }; // 多级预警配置开始 // 多级预警 // 通知方式 export const NOTICE_TYPES_ARRAY = [ { key: '1', value: NoticeTypes.APP, label: 'APP推送', icon: 'icon-shouji', }, { key: '2', value: NoticeTypes.SMS, label: '短信', icon: 'icon-notification', }, { key: '3', value: NoticeTypes.VOICE, label: '电话', icon: 'icon-phone', }, ]; export const NOTICE_TYPES_ARRAY1 = [ { key: '1', value: NoticeTypes.APP, label: 'APP', }, { key: '2', value: NoticeTypes.SMS, label: '短信', }, { key: '3', value: NoticeTypes.VOICE, label: '电话', }, ]; // 通知方式 export const NOTICE_TYPES_MAP = NOTICE_TYPES_ARRAY.reduce((prev, next) => { prev[next['value']] = next; return prev; }, {}); // 通知对象 export const RANGES = [ { key: '1', value: Ranges.DEVICE_CONTACTS, label: '设备联系人', }, { key: '2', value: Ranges.MERCHANT_CONTACTS, label: '项目负责人', }, { key: '3', value: Ranges.CUSTOM_CONTACTS, label: '自定义联系人', }, { key: '4', value: Ranges.GROUP_CONTACTS, label: '分组联系人', }, { key: '5', value: Ranges.ROOM_CONTACTS, label: '设备同房屋的人员', }, // { // key: '6', // value: Ranges.ROOM_PRINCIPAL_CONTACTS, // label: '房间负责人' // }, // { // key: '7', // value: Ranges.FLOOR_PRINCIPAL_CONTACTS, // label: '楼层负责人' // }, { key: '8', value: Ranges.BUILDING_PRINCIPAL_CONTACTS, label: '建筑负责人', }, { key: '9', value: Ranges.AREA_PRINCIPAL_CONTACTS, label: '区域负责人', }, { key: '10', value: Ranges.ON_DUTY_OFFICER_CONTACTS, label: '在岗执勤人员', }, { key: '11', value: Ranges.ALL_OFFICER_CONTACTS, label: '全部执勤人员', }, { key: '12', value: Ranges.DEPLOY_CONTACTS, label: '部署人员', }, { key: '13', value: Ranges.EVENT_CONTACTS, label: '事件联系人', }, { key: '14', value: Ranges.TASK_CONTACTS, label: '任务联系人', }, { key: '15', value: Ranges.MERCHANT_ROLE_CONTACTS, label: '角色联系人', }, ]; export const RANGES_MAP = RANGES.reduce((prev, next) => { prev[next['value']] = next; return prev; }, {}); // 通知条件 export const CONDITIONS = [ { value: Conditions.DEVICE_NOT_RECOVERY, label: '设备仍未恢复', }, { value: Conditions.EVENT_NOT_ON_PROCESS, label: '预警还未处理', }, { value: Conditions.DEVICE_ALARM_CREATE, label: '预警开始', }, ]; export const CONDITIONS_MAP = CONDITIONS.reduce((prev, next) => { prev[next['value']] = next; return prev; }, {}); // 预警级别 export const MULTI_LEVEL_ARRAY = [ { value: 1, label: '一级通知规则', }, { value: 2, label: '二级通知规则', }, { value: 3, label: '三级通知规则', }, { value: 4, label: '四级通知规则', }, ]; export const MULTI_LEVEL_MAP = MULTI_LEVEL_ARRAY.reduce((prev, next) => { prev[next['value']] = next; return prev; }); // 根据分类获取 通知范围默认值 export const getInitialValueRangesByCategory = (category: Category) => { if ([Category.GROUP_DEFENSE, Category.ELDER_CARE]?.includes(category)) { return [Ranges.ON_DUTY_OFFICER_CONTACTS, Ranges.EVENT_CONTACTS]; } else if ( [ Category.CAMERA_CAPTURE_AREA_IRRUPT, Category.CAMERA_CAPTURE_FIRE_CONTROL_PASSAGEWAY_BLOCK, Category.CAMERA_CAPTURE_E_MOTORCYCLE, Category.CAMERA_CAPTURE_PEOPLE_GATHER, Category.CAMERA_TASK_FOREIGN_PERSON, Category.CAMERA_TASK_KEY_PERSON, Category.CAMERA_TASK_VEHICLE, Category.CAMERA_CAPTURE_OFF_DUTY, Category.CAMERA_CAPTURE_GB_THERMAL_CAMERA, Category.JIN_SHU_JU, Category.CAMERA_CAPTURE_NO_MASK, Category.ILLEGAL_CONSTRUCTION, ].includes(category) ) { return [Ranges.TASK_CONTACTS]; } else { return [Ranges.MERCHANT_CONTACTS]; } }; // 根据分类获取 通知范围 字典 export const getRangesByCategory = (category: Category) => { if ([Category.GROUP_DEFENSE, Category.ELDER_CARE]?.includes(category)) { // 只有群防群治有事件联系人 return RANGES?.filter(item => item?.value !== Ranges.CUSTOM_CONTACTS); } else { return RANGES?.filter( item => ![Ranges.EVENT_CONTACTS, Ranges.CUSTOM_CONTACTS]?.includes(item?.value), ); } }; // 根据分类获取 通知条件 export const getInitialValueConditionsByCategory = (category: Category) => { if ( [ Category.CAMERA_CAPTURE_AREA_IRRUPT, Category.CAMERA_CAPTURE_FIRE_CONTROL_PASSAGEWAY_BLOCK, Category.CAMERA_CAPTURE_E_MOTORCYCLE, Category.CAMERA_CAPTURE_PEOPLE_GATHER, Category.CAMERA_TASK_FOREIGN_PERSON, Category.CAMERA_TASK_KEY_PERSON, Category.CAMERA_TASK_VEHICLE, Category.CAMERA_CAPTURE_OFF_DUTY, Category.CAMERA_CAPTURE_GB_THERMAL_CAMERA, Category.JIN_SHU_JU, Category.CAMERA_CAPTURE_NO_MASK, Category.ILLEGAL_CONSTRUCTION, Category.WEATHER_DISASTER, ].includes(category) ) { return [Conditions.EVENT_NOT_ON_PROCESS]; } else { return [Conditions.DEVICE_NOT_RECOVERY, Conditions.EVENT_NOT_ON_PROCESS]; } }; // 多级预警配置结束 // 项目类型 export const MERCHANT_TYPE = [ { label: '小区', value: 1, }, { label: '酒店', value: 2, }, { label: '医院', value: 3, }, { label: '学校', value: 4, }, { label: '乡镇农村', value: 5, }, { label: '社会单位', value: 6, }, { label: '商圈', value: 7, }, { label: '网吧', value: 8, }, { label: '车站', value: 9, }, { label: '商铺', value: 10, }, { label: '工地', value: 11, }, { label: '娱乐场所', value: 12, }, { label: '加油站', value: 13, }, { label: '旅社', value: 14, }, { label: '政府单位', value: 15, }, { label: '广场', value: 16, }, { label: '机场景区', value: 17, }, ];