@ray-js/lamp-schedule-core 1.0.4-beta-2 → 1.0.4-beta-4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -38,5 +38,5 @@ export declare class Conflict {
38
38
  * 当进入面板后,初始化需要冲突判断的计划数据,便于后续增删改冲突判断
39
39
  * @param scheduleList - 需要冲突判断的计划数据
40
40
  */
41
- static init(scheduleList: TFoldScheduleList): void;
41
+ static init(scheduleList: TFoldScheduleList, forceInit?: boolean): void;
42
42
  }
@@ -1,4 +1,5 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import "core-js/modules/es.json.stringify.js";
2
3
  import "core-js/modules/esnext.iterator.constructor.js";
3
4
  import "core-js/modules/esnext.iterator.find.js";
4
5
  import { scheduleLogger } from '../utils/ScheduleLogger';
@@ -112,12 +113,18 @@ export class Conflict {
112
113
  * @param scheduleList - 需要冲突判断的计划数据
113
114
  */
114
115
  static init(scheduleList) {
116
+ let forceInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
115
117
  if (!Array.isArray(scheduleList)) {
116
118
  return;
117
119
  }
118
120
  const instance = ScheduleDataManager.getInstance();
119
121
  const _scheduleList = transScheduleListToConflictList(scheduleList);
120
122
  scheduleLogger.debug('Conflict.init scheduleList, _scheduleList:', scheduleList, _scheduleList);
121
- instance.setData(_scheduleList);
123
+ if (forceInit) {
124
+ instance.setDataWithClear(_scheduleList);
125
+ } else {
126
+ instance.setData(_scheduleList);
127
+ }
128
+ scheduleLogger.debug('Conflict.init instance.getData()', JSON.stringify(instance.getData()));
122
129
  }
123
130
  }
@@ -1,9 +1,11 @@
1
1
  import { Schedule } from './type';
2
2
  export declare class ScheduleDataManager {
3
+ private constructor();
3
4
  static instance: ScheduleDataManager;
4
5
  static list: Record<string, any>[];
5
6
  static getInstance(): ScheduleDataManager;
6
7
  getData(): Record<string, any>[];
8
+ setDataWithClear(value: Record<string, any>[] | Record<string, any>): void;
7
9
  setData(value: Record<string, any>[] | Record<string, any>): void;
8
10
  clearData(): void;
9
11
  deleteData(current: Schedule): void;
@@ -1,8 +1,12 @@
1
1
  import "core-js/modules/esnext.iterator.constructor.js";
2
2
  import "core-js/modules/esnext.iterator.filter.js";
3
3
  import "core-js/modules/esnext.iterator.for-each.js";
4
+ import { scheduleLogger } from '../utils/ScheduleLogger';
4
5
  // 统一管理 计划 数据列表,用来判断是否存在冲突
5
6
  export class ScheduleDataManager {
7
+ // 私有构造函数,防止外部直接实例化
8
+ // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
9
+ constructor() {}
6
10
  static list = [];
7
11
  static getInstance() {
8
12
  if (!ScheduleDataManager.instance) {
@@ -11,9 +15,20 @@ export class ScheduleDataManager {
11
15
  return ScheduleDataManager.instance;
12
16
  }
13
17
  getData() {
18
+ scheduleLogger.debug('ScheduleDataManager.getData', ScheduleDataManager.list);
14
19
  return ScheduleDataManager.list;
15
20
  }
21
+ setDataWithClear(value) {
22
+ scheduleLogger.debug('ScheduleDataManager.setDataWithClear pre', value);
23
+ if (!value) {
24
+ return;
25
+ }
26
+ ScheduleDataManager.list = [];
27
+ this.setData(value);
28
+ scheduleLogger.debug('ScheduleDataManager.setDataWithClear post', ScheduleDataManager.list);
29
+ }
16
30
  setData(value) {
31
+ scheduleLogger.debug('ScheduleDataManager.setData pre', value);
17
32
  if (!value) {
18
33
  return;
19
34
  }
@@ -49,26 +64,32 @@ export class ScheduleDataManager {
49
64
  const idsToAdd = new Set(itemsMap.keys());
50
65
  const filteredList = ScheduleDataManager.list.filter(item => !idsToAdd.has(item.id));
51
66
  ScheduleDataManager.list = [...filteredList, ...itemsMap.values()];
67
+ scheduleLogger.debug('ScheduleDataManager.setData post', ScheduleDataManager.list);
52
68
  }
53
69
  clearData() {
70
+ scheduleLogger.debug('ScheduleDataManager.clearData pre', ScheduleDataManager.list);
54
71
  ScheduleDataManager.list = [];
55
72
  }
56
73
  deleteData(current) {
57
74
  if (!current) {
58
75
  return;
59
76
  }
77
+ scheduleLogger.debug('ScheduleDataManager.deleteData pre', current);
60
78
  const index = ScheduleDataManager.list.findIndex(item => item.id === current.id);
61
79
  if (index !== -1) {
62
80
  ScheduleDataManager.list.splice(index, 1);
63
81
  }
82
+ scheduleLogger.debug('ScheduleDataManager.deleteData post', ScheduleDataManager.list);
64
83
  }
65
84
 
66
85
  // 添加remove方法作为deleteData的别名,用于测试
67
86
  remove(id) {
68
87
  const index = ScheduleDataManager.list.findIndex(item => item.id === id);
88
+ scheduleLogger.debug('ScheduleDataManager.remove pre', id, index);
69
89
  if (index !== -1) {
70
90
  ScheduleDataManager.list.splice(index, 1);
71
91
  }
92
+ scheduleLogger.debug('ScheduleDataManager.remove post', ScheduleDataManager.list);
72
93
  }
73
94
  }
74
95
  export default ScheduleDataManager;
@@ -1,15 +1,13 @@
1
1
  import "core-js/modules/esnext.iterator.constructor.js";
2
+ import "core-js/modules/esnext.iterator.filter.js";
2
3
  import "core-js/modules/esnext.iterator.for-each.js";
3
4
  import "core-js/modules/esnext.iterator.map.js";
4
5
  import dayjs from 'dayjs';
5
6
  import { cloneDeep } from 'lodash-es';
6
7
  import { objectToId } from '../utils/objectToId';
7
- import { getBackwardOffsetTimeByHourMins, getPreOffsetTimeByHourMins, getTimerStrByMinutes } from '../utils/time';
8
+ import { getBackwardOffsetTimeByHourMins, getPreOffsetTimeByHourMins, getTimerStrByMinutes, getTimeFormatStrByHourMins } from '../utils/time';
8
9
  import { EScheduleFunctionType } from '../types';
9
10
  import { scheduleLogger } from '../utils/ScheduleLogger';
10
- const numAddZero = num => {
11
- return +num < 10 ? `0${+num}` : +num;
12
- };
13
11
 
14
12
  /**
15
13
  * TTimerDataAdd => Schedule
@@ -91,12 +89,12 @@ export const wakeUpDataToScheduleList = data => {
91
89
  */
92
90
  export const sleepNodeToSchedule = data => {
93
91
  const startTime = getPreOffsetTimeByHourMins(data.hour, data.minute, data.step * 5);
94
- scheduleLogger.debug('sleepNodeToSchedule:', data, startTime);
92
+ const endTime = data.time || getTimeFormatStrByHourMins(data.hour, data.minute);
95
93
  const _data = {
96
94
  status: data.onOff,
97
95
  weeks: data.loops.split('').map(item => Number(item)),
98
96
  startTime,
99
- endTime: data.time
97
+ endTime
100
98
  };
101
99
  return {
102
100
  id: objectToId(_data, `${EScheduleFunctionType.SLEEP}_`),
@@ -259,5 +257,11 @@ export const transScheduleListToConflictList = foldScheduleList => {
259
257
  } catch (error) {
260
258
  scheduleLogger.error('transScheduleListToConflictList', error);
261
259
  }
262
- return arr;
260
+ return arr.filter(item => {
261
+ var _item$data, _item$data2;
262
+ if ((item === null || item === void 0 || (_item$data = item.data) === null || _item$data === void 0 ? void 0 : _item$data.status) === undefined) {
263
+ scheduleLogger.error('transScheduleListToConflictList', item, 'status 为 undefined');
264
+ }
265
+ return (item === null || item === void 0 || (_item$data2 = item.data) === null || _item$data2 === void 0 ? void 0 : _item$data2.status) === true;
266
+ });
263
267
  };
@@ -18,13 +18,13 @@ class CycleTimerParser {
18
18
  }))();
19
19
  parser(dpValue) {
20
20
  try {
21
- ScheduleLogger.debug(`CycleTimerParser dpValue: ${dpValue}`);
21
+ ScheduleLogger.debug(`dpParser ===> CycleTimerParser dpValue: ${dpValue}`);
22
22
  if (!dpValue) {
23
- ScheduleLogger.warn(`无法解析数据, 请检查数据是否合规1【${CYCLE_TIMING}】: ${dpValue}`);
23
+ ScheduleLogger.warn(`dpParser ===> 无法解析数据, 请检查数据是否合规1【${CYCLE_TIMING}】: ${dpValue}`);
24
24
  return this.defaultValue;
25
25
  }
26
26
  if (dpValue.length <= 4 || (dpValue.length - 4) % 32 !== 0) {
27
- ScheduleLogger.warn(`节点数量不匹配, 请检查数据是否合规【${CYCLE_TIMING}】: ${dpValue}`);
27
+ ScheduleLogger.warn(`dpParser ===> 节点数量不匹配, 请检查数据是否合规【${CYCLE_TIMING}】: ${dpValue}`);
28
28
  return {
29
29
  version: 0,
30
30
  length: LENGTH,
@@ -92,6 +92,7 @@ class CycleTimerParser {
92
92
  }
93
93
  }
94
94
  formatter(data) {
95
+ ScheduleLogger.debug('dpParser ===> CycleTimerParser formatter data: ', data);
95
96
  const {
96
97
  version,
97
98
  nodes
@@ -19,9 +19,9 @@ class RandomTimerParser {
19
19
  };
20
20
  parser(dpValue) {
21
21
  try {
22
- ScheduleLogger.debug(`RandomTimerParser dpValue: ${dpValue}`);
22
+ ScheduleLogger.debug(`dpParser ===> RandomTimerParser dpValue: ${dpValue}`);
23
23
  if (!dpValue) {
24
- ScheduleLogger.warn(`无法解析数据, 请检查数据是否合规1【${RANDOM_TIMING}】: ${dpValue}`);
24
+ ScheduleLogger.warn(`dpParser ===> 无法解析数据, 请检查数据是否合规1【${RANDOM_TIMING}】: ${dpValue}`);
25
25
  return {
26
26
  version: 0,
27
27
  length: LENGTH,
@@ -32,7 +32,7 @@ class RandomTimerParser {
32
32
  const version = step().value;
33
33
  const length = step().value;
34
34
  if (!dpValue || (dpValue.length - 4) % 24 !== 0) {
35
- console.log('decodeRandomTask 数据有问题,无法解析');
35
+ console.log('dpParser ===> decodeRandomTask 数据有问题,无法解析');
36
36
  // 返回默认值
37
37
  return this.defaultValue;
38
38
  }
@@ -84,11 +84,12 @@ class RandomTimerParser {
84
84
  nodes
85
85
  };
86
86
  } catch (error) {
87
- ScheduleLogger.error('RandomTimerParser parser error', error);
87
+ ScheduleLogger.error('dpParser ===> RandomTimerParser parser error', error);
88
88
  return this.defaultValue;
89
89
  }
90
90
  }
91
91
  formatter(data) {
92
+ ScheduleLogger.debug('dpParser ===> RandomTimerParser formatter data: ', data);
92
93
  try {
93
94
  const {
94
95
  version,
@@ -128,7 +129,7 @@ class RandomTimerParser {
128
129
  }).join('');
129
130
  return `${versionStr}${lengthStr}${nodesStr}`;
130
131
  } catch (error) {
131
- ScheduleLogger.error('RandomTimerParser formatter error', error);
132
+ ScheduleLogger.error('dpParser ===> RandomTimerParser formatter error', error);
132
133
  return '';
133
134
  }
134
135
  }
@@ -50,7 +50,7 @@ export class RtcTimerFormatter {
50
50
  parser() {
51
51
  let val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
52
52
  if (!val) {
53
- ScheduleLogger.warn('RtcTimerFormatter parser,value is empty, return defaultValue', this.defaultValue);
53
+ ScheduleLogger.warn('dpParser ===> RtcTimerFormatter parser,value is empty, return defaultValue', this.defaultValue);
54
54
  return this.defaultValue;
55
55
  }
56
56
  try {
@@ -66,7 +66,7 @@ export class RtcTimerFormatter {
66
66
 
67
67
  if (length !== 4 && length !== powerLen && length !== brightLightLen && length !== colourLightLen && length !== mixLightLen) {
68
68
  // 数据位数不定, 可能是14位或18位22位26位, 删除定时指令为4位
69
- ScheduleLogger.warn('RtcTimerFormatter parser fail:', RTC_TIMER, '=>', val);
69
+ ScheduleLogger.warn('dpParser ===> RtcTimerFormatter parser fail:', RTC_TIMER, '=>', val);
70
70
  return this.defaultValue;
71
71
  }
72
72
  const step = generateDpStrStep(val);
@@ -178,7 +178,7 @@ export class RtcTimerFormatter {
178
178
  status
179
179
  };
180
180
  } catch (err) {
181
- ScheduleLogger.error('RtcTimerFormatter parser fail:', RTC_TIMER, '=>', val, err);
181
+ ScheduleLogger.error('dpParser ===> RtcTimerFormatter parser fail:', RTC_TIMER, '=>', val, err);
182
182
  return this.defaultValue;
183
183
  }
184
184
  }
@@ -202,7 +202,7 @@ export class RtcTimerFormatter {
202
202
  time,
203
203
  dps
204
204
  } = data;
205
- ScheduleLogger.debug('rtcTimer formatter data:', data);
205
+ ScheduleLogger.debug('dpParser ===> rtcTimer formatter data:', data);
206
206
  if (loops) {
207
207
  const _dps = {};
208
208
  Object.keys(dps).forEach(key => {
@@ -289,18 +289,18 @@ export class RtcTimerFormatter {
289
289
  dpDataStr = `${powerStr}`;
290
290
  }
291
291
  const _res = `${idStr}${typeStr}${repeatStr}${startTimeTypeStr}${startTimeStr}${dpDataStr}`;
292
- ScheduleLogger.debug('rtcTimer formatter dpStr1:', dpDataStr);
293
- ScheduleLogger.debug('rtcTimer formatter dpStr2:', _res);
292
+ ScheduleLogger.debug('dpParser ===> rtcTimer formatter dpStr1:', dpDataStr);
293
+ ScheduleLogger.debug('dpParser ===> rtcTimer formatter dpStr2:', _res);
294
294
  return _res;
295
295
  }
296
296
  const statusStr = status ? '1' : '0';
297
297
  const timerIdStr = padStart(Number(timerId).toString(2), 7, '0');
298
298
  const idStr = this.to16(parseInt(`${statusStr}${timerIdStr}`, 2), 2);
299
299
  const _res = `${idStr}00`;
300
- ScheduleLogger.debug('rtcTimer remove formatter2 data:', _res);
300
+ ScheduleLogger.debug('dpParser ===> rtcTimer remove formatter2 data:', _res);
301
301
  return _res;
302
302
  } catch (error) {
303
- ScheduleLogger.error('rtcTimer formatter error', error);
303
+ ScheduleLogger.error('dpParser ===> rtcTimer formatter error', error);
304
304
  return '';
305
305
  }
306
306
  }
@@ -18,13 +18,13 @@ export class Sleep {
18
18
  };
19
19
  parser(dpStr) {
20
20
  try {
21
- scheduleLogger.debug('Sleep parser dpStr: ', dpStr);
21
+ scheduleLogger.debug('dpParser ===> Sleep parser dpStr: ', dpStr);
22
22
  if (!dpStr) {
23
23
  return this.defaultValue;
24
24
  }
25
25
  const dpLength = dpStr.length;
26
26
  if (!dpLength || (dpLength - 4) % 22 !== 0) {
27
- scheduleLogger.error('数据有问题,无法解析');
27
+ scheduleLogger.error('dpParser ===> 数据有问题,无法解析');
28
28
  return this.defaultValue;
29
29
  }
30
30
  const step = generateDpStrStep(dpStr);
@@ -73,7 +73,7 @@ export class Sleep {
73
73
  nodes
74
74
  };
75
75
  } catch (error) {
76
- scheduleLogger.error('Sleep parser error', error);
76
+ scheduleLogger.error('dpParser ===> Sleep parser error', error);
77
77
  return this.defaultValue;
78
78
  }
79
79
  }
@@ -81,7 +81,7 @@ export class Sleep {
81
81
  try {
82
82
  var _data$nodes, _data$nodes2;
83
83
  const result = [numToHexString(data.version), numToHexString((_data$nodes = data.nodes) === null || _data$nodes === void 0 ? void 0 : _data$nodes.length)];
84
- scheduleLogger.debug('sleep formatter data', data);
84
+ scheduleLogger.debug('dpParser ===> sleep formatter data', data);
85
85
  data === null || data === void 0 || (_data$nodes2 = data.nodes) === null || _data$nodes2 === void 0 || _data$nodes2.forEach(node => {
86
86
  // 拆分色相值为百位和十个位
87
87
  const hueHundreds = Math.floor(node.hue / 100);
@@ -106,7 +106,7 @@ export class Sleep {
106
106
  });
107
107
  return result.join('');
108
108
  } catch (error) {
109
- scheduleLogger.error('sleep formatter error', error);
109
+ scheduleLogger.error('dpParser ===> sleep formatter error', error);
110
110
  return '';
111
111
  }
112
112
  }
@@ -32,7 +32,7 @@ export class TimerReportFormatter {
32
32
  });
33
33
  return arr;
34
34
  } catch (error) {
35
- ScheduleLogger.error('TimerReportFormatter parser error', error);
35
+ ScheduleLogger.error('dpParser ===> TimerReportFormatter parser error', error);
36
36
  return this.defaultValue;
37
37
  }
38
38
  }
@@ -47,7 +47,7 @@ export class TimerReportFormatter {
47
47
  return hexStr;
48
48
  }).join('');
49
49
  } catch (error) {
50
- ScheduleLogger.error('TimerReportFormatter formatter error', error);
50
+ ScheduleLogger.error('dpParser ===> TimerReportFormatter formatter error', error);
51
51
  return '';
52
52
  }
53
53
  }
@@ -17,7 +17,7 @@ export class WakeUp {
17
17
  nodes: []
18
18
  };
19
19
  parser(dpStr) {
20
- scheduleLogger.debug('WakeUp parser dpStr: ', dpStr);
20
+ scheduleLogger.debug('dpParser ===> WakeUp parser dpStr: ', dpStr);
21
21
  if (!dpStr) {
22
22
  return this.defaultValue;
23
23
  }
@@ -28,7 +28,7 @@ export class WakeUp {
28
28
  let number = step(2).value;
29
29
  const nodeLen = (_dpStr$slice = dpStr.slice(4)) === null || _dpStr$slice === void 0 ? void 0 : _dpStr$slice.length;
30
30
  if (nodeLen % 24 !== 0) {
31
- scheduleLogger.error('wakeup dpStr error nodeLen:', nodeLen);
31
+ scheduleLogger.error('dpParser ===> wakeup dpStr error nodeLen:', nodeLen);
32
32
  }
33
33
  const nodes = [];
34
34
  number = Math.min(number, 4);
@@ -75,7 +75,7 @@ export class WakeUp {
75
75
  nodes
76
76
  };
77
77
  } catch (error) {
78
- scheduleLogger.error('wakeup parser error', error);
78
+ scheduleLogger.error('dpParser ===> wakeup parser error', error);
79
79
  return this.defaultValue;
80
80
  }
81
81
  }
@@ -83,7 +83,7 @@ export class WakeUp {
83
83
  try {
84
84
  var _data$nodes, _data$nodes2;
85
85
  const result = [numToHexString(data.version), numToHexString((_data$nodes = data.nodes) === null || _data$nodes === void 0 ? void 0 : _data$nodes.length)];
86
- scheduleLogger.debug('wakeup formatter data', data);
86
+ scheduleLogger.debug('dpParser ===> wakeup formatter data', data);
87
87
  data === null || data === void 0 || (_data$nodes2 = data.nodes) === null || _data$nodes2 === void 0 || _data$nodes2.forEach(node => {
88
88
  // 拆分色相值为百位和十个位
89
89
  const hueHundreds = Math.floor(node.hue / 100);
@@ -108,7 +108,7 @@ export class WakeUp {
108
108
  });
109
109
  return result.join('');
110
110
  } catch (error) {
111
- scheduleLogger.error('wakeup formatter error', error);
111
+ scheduleLogger.error('dpParser ===> wakeup formatter error', error);
112
112
  return '';
113
113
  }
114
114
  }
@@ -87,20 +87,6 @@ export const getAll = () => {
87
87
  groupId
88
88
  } = devIdOrGroupIdCache.get();
89
89
  return new Promise((resolve, reject) => {
90
- // 对外使用
91
- // getGroupProperty({
92
- // groupId,
93
- // success(res) {
94
- // console.warn('getGroupProperty res:', res);
95
- // resolve({
96
- // properties: res?.result || res || {},
97
- // });
98
- // },
99
- // fail(err) {
100
- // console.warn('getGroupProperty err:', err);
101
- // reject(err);
102
- // },
103
- // });
104
90
  if (!groupId) {
105
91
  getDeviceProperty({
106
92
  deviceId: devId,
@@ -18,7 +18,7 @@ var ELevelColor = /*#__PURE__*/function (ELevelColor) {
18
18
  return ELevelColor;
19
19
  }(ELevelColor || {});
20
20
  export class ScheduleLogger {
21
- logLevel = (() => LogLevel.DEBUG)();
21
+ logLevel = (() => LogLevel.WARN)();
22
22
  logPrefix = (() => LOG_PREFIX)();
23
23
  setLogLevel(level) {
24
24
  this.logLevel = level;
@@ -68,5 +68,4 @@ export class ScheduleLogger {
68
68
  console.error(...this.formatMessage(LogLevel.ERROR, message, data));
69
69
  }
70
70
  }
71
- export const scheduleLogger = new ScheduleLogger();
72
- scheduleLogger.setLogLevel(LogLevel.WARN);
71
+ export const scheduleLogger = new ScheduleLogger();
@@ -22,6 +22,6 @@ export const getAllDpState = () => {
22
22
  };
23
23
  export const initDpState = function () {
24
24
  let dpState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
25
- Object.assign(+new Date(), __dpState, dpState);
25
+ Object.assign(__dpState, dpState);
26
26
  scheduleLogger.debug('initDpState', __dpState);
27
27
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ray-js/lamp-schedule-core",
3
- "version": "1.0.4-beta-2",
3
+ "version": "1.0.4-beta-4",
4
4
  "description": "照明计划模块核心能力",
5
5
  "main": "./lib/index.js",
6
6
  "files": [