mingpan 0.1.2 → 0.1.3

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.
Files changed (108) hide show
  1. package/README.md +72 -44
  2. package/dist/core/qimen/FlyingRule.d.ts +60 -0
  3. package/dist/core/qimen/FlyingRule.d.ts.map +1 -0
  4. package/dist/core/qimen/FlyingRule.js +94 -0
  5. package/dist/core/qimen/FlyingRule.js.map +1 -0
  6. package/dist/core/qimen/GongMapping.d.ts +29 -0
  7. package/dist/core/qimen/GongMapping.d.ts.map +1 -0
  8. package/dist/core/qimen/GongMapping.js +83 -0
  9. package/dist/core/qimen/GongMapping.js.map +1 -0
  10. package/dist/core/qimen/RotatingRule.d.ts +76 -0
  11. package/dist/core/qimen/RotatingRule.d.ts.map +1 -0
  12. package/dist/core/qimen/RotatingRule.js +126 -0
  13. package/dist/core/qimen/RotatingRule.js.map +1 -0
  14. package/dist/core/qimen/YinYangDunCalculator.d.ts +28 -0
  15. package/dist/core/qimen/YinYangDunCalculator.d.ts.map +1 -0
  16. package/dist/core/qimen/YinYangDunCalculator.js +79 -0
  17. package/dist/core/qimen/YinYangDunCalculator.js.map +1 -0
  18. package/dist/core/qimen/index.d.ts +10 -0
  19. package/dist/core/qimen/index.d.ts.map +1 -0
  20. package/dist/core/qimen/index.js +58 -0
  21. package/dist/core/qimen/index.js.map +1 -0
  22. package/dist/core/qimen/types.d.ts +19 -0
  23. package/dist/core/qimen/types.d.ts.map +1 -0
  24. package/dist/core/qimen/types.js +7 -0
  25. package/dist/core/qimen/types.js.map +1 -0
  26. package/dist/index.js +269 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/output/qimenTextRenderer.d.ts +40 -0
  29. package/dist/output/qimenTextRenderer.d.ts.map +1 -0
  30. package/dist/output/qimenTextRenderer.js +363 -0
  31. package/dist/output/qimenTextRenderer.js.map +1 -0
  32. package/dist/services/qimen/QimenService.d.ts +93 -0
  33. package/dist/services/qimen/QimenService.d.ts.map +1 -0
  34. package/dist/services/qimen/QimenService.js +427 -0
  35. package/dist/services/qimen/QimenService.js.map +1 -0
  36. package/dist/services/qimen/calculators/BaMenCalculator.d.ts +53 -0
  37. package/dist/services/qimen/calculators/BaMenCalculator.d.ts.map +1 -0
  38. package/dist/services/qimen/calculators/BaMenCalculator.js +105 -0
  39. package/dist/services/qimen/calculators/BaMenCalculator.js.map +1 -0
  40. package/dist/services/qimen/calculators/BaShenCalculator.d.ts +34 -0
  41. package/dist/services/qimen/calculators/BaShenCalculator.d.ts.map +1 -0
  42. package/dist/services/qimen/calculators/BaShenCalculator.js +57 -0
  43. package/dist/services/qimen/calculators/BaShenCalculator.js.map +1 -0
  44. package/dist/services/qimen/calculators/GeJuCalculator.d.ts +141 -0
  45. package/dist/services/qimen/calculators/GeJuCalculator.d.ts.map +1 -0
  46. package/dist/services/qimen/calculators/GeJuCalculator.js +711 -0
  47. package/dist/services/qimen/calculators/GeJuCalculator.js.map +1 -0
  48. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts +56 -0
  49. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts.map +1 -0
  50. package/dist/services/qimen/calculators/JiuGongCalculator.js +98 -0
  51. package/dist/services/qimen/calculators/JiuGongCalculator.js.map +1 -0
  52. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts +54 -0
  53. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts.map +1 -0
  54. package/dist/services/qimen/calculators/JiuXingCalculator.js +117 -0
  55. package/dist/services/qimen/calculators/JiuXingCalculator.js.map +1 -0
  56. package/dist/services/qimen/calculators/JuShuCalculator.d.ts +57 -0
  57. package/dist/services/qimen/calculators/JuShuCalculator.d.ts.map +1 -0
  58. package/dist/services/qimen/calculators/JuShuCalculator.js +115 -0
  59. package/dist/services/qimen/calculators/JuShuCalculator.js.map +1 -0
  60. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts +117 -0
  61. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts.map +1 -0
  62. package/dist/services/qimen/calculators/PanTypeCalculator.js +237 -0
  63. package/dist/services/qimen/calculators/PanTypeCalculator.js.map +1 -0
  64. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts +50 -0
  65. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts.map +1 -0
  66. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js +86 -0
  67. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js.map +1 -0
  68. package/dist/services/qimen/calculators/ShenShaCalculator.d.ts +80 -0
  69. package/dist/services/qimen/calculators/ShenShaCalculator.d.ts.map +1 -0
  70. package/dist/services/qimen/calculators/ShenShaCalculator.js +300 -0
  71. package/dist/services/qimen/calculators/ShenShaCalculator.js.map +1 -0
  72. package/dist/services/qimen/calculators/YongShenCalculator.d.ts +78 -0
  73. package/dist/services/qimen/calculators/YongShenCalculator.d.ts.map +1 -0
  74. package/dist/services/qimen/calculators/YongShenCalculator.js +497 -0
  75. package/dist/services/qimen/calculators/YongShenCalculator.js.map +1 -0
  76. package/dist/services/qimen/calculators/ZeRiCalculator.d.ts +78 -0
  77. package/dist/services/qimen/calculators/ZeRiCalculator.d.ts.map +1 -0
  78. package/dist/services/qimen/calculators/ZeRiCalculator.js +431 -0
  79. package/dist/services/qimen/calculators/ZeRiCalculator.js.map +1 -0
  80. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts +118 -0
  81. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts.map +1 -0
  82. package/dist/services/qimen/calculators/ZhuanPanCalculator.js +260 -0
  83. package/dist/services/qimen/calculators/ZhuanPanCalculator.js.map +1 -0
  84. package/dist/services/qimen/data/constants.d.ts +105 -0
  85. package/dist/services/qimen/data/constants.d.ts.map +1 -0
  86. package/dist/services/qimen/data/constants.js +295 -0
  87. package/dist/services/qimen/data/constants.js.map +1 -0
  88. package/dist/services/qimen/data/shensha-rules.d.ts +177 -0
  89. package/dist/services/qimen/data/shensha-rules.d.ts.map +1 -0
  90. package/dist/services/qimen/data/shensha-rules.js +397 -0
  91. package/dist/services/qimen/data/shensha-rules.js.map +1 -0
  92. package/dist/services/qimen/data/yongshen-rules.d.ts +115 -0
  93. package/dist/services/qimen/data/yongshen-rules.d.ts.map +1 -0
  94. package/dist/services/qimen/data/yongshen-rules.js +365 -0
  95. package/dist/services/qimen/data/yongshen-rules.js.map +1 -0
  96. package/dist/services/qimen/index.d.ts +20 -0
  97. package/dist/services/qimen/index.d.ts.map +1 -0
  98. package/dist/services/qimen/index.js +43 -0
  99. package/dist/services/qimen/index.js.map +1 -0
  100. package/dist/services/qimen/types.d.ts +390 -0
  101. package/dist/services/qimen/types.d.ts.map +1 -0
  102. package/dist/services/qimen/types.js +20 -0
  103. package/dist/services/qimen/types.js.map +1 -0
  104. package/dist/services/qimen/utils/gongUtils.d.ts +80 -0
  105. package/dist/services/qimen/utils/gongUtils.d.ts.map +1 -0
  106. package/dist/services/qimen/utils/gongUtils.js +164 -0
  107. package/dist/services/qimen/utils/gongUtils.js.map +1 -0
  108. package/package.json +1 -1
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ /**
3
+ * 用神计算器
4
+ *
5
+ * 负责根据事类选取用神并分析用神状态
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.YongShenCalculator = void 0;
9
+ const yongshen_rules_1 = require("../data/yongshen-rules");
10
+ const constants_1 = require("../data/constants");
11
+ const gongUtils_1 = require("../utils/gongUtils");
12
+ // ============= 用神计算器 =============
13
+ class YongShenCalculator {
14
+ /**
15
+ * 分析用神
16
+ *
17
+ * @param result 奇门盘结果
18
+ * @param shiLei 事类
19
+ * @param nianGan 可选年干(用于年命分析)
20
+ * @returns 用神分析信息
21
+ */
22
+ static analyze(result, shiLei, nianGan) {
23
+ const config = yongshen_rules_1.YONGSHEN_RULES[shiLei];
24
+ const siZhu = result.timeInfo.siZhu;
25
+ // 构建上下文
26
+ const context = {
27
+ result,
28
+ monthZhi: siZhu.monthGanZhi.charAt(1),
29
+ dayGan: siZhu.dayGan,
30
+ dayZhi: siZhu.dayZhi,
31
+ hourGan: siZhu.hourGan,
32
+ nianGan,
33
+ };
34
+ // 解析主用神
35
+ const zhuyong = this.resolveYongShenItems(config.zhuyong, context);
36
+ // 解析辅用神
37
+ const fuyong = this.resolveYongShenItems(config.fuyong, context);
38
+ // 分析每个用神
39
+ const analysis = this.analyzeYongShenItems([...zhuyong, ...fuyong], context);
40
+ // 主客分析(如果需要)
41
+ let zhuKe;
42
+ if (config.needZhuKe) {
43
+ zhuKe = this.analyzeZhuKe(context);
44
+ }
45
+ // 年命分析(如果提供了年干)
46
+ let nianMingInfo;
47
+ if (nianGan) {
48
+ nianMingInfo = this.analyzeNianMing(nianGan, context);
49
+ }
50
+ return {
51
+ shiLei,
52
+ zhuyong,
53
+ fuyong,
54
+ analysis,
55
+ zhuKe,
56
+ nianMing: nianMingInfo,
57
+ };
58
+ }
59
+ /**
60
+ * 解析用神项列表
61
+ */
62
+ static resolveYongShenItems(rules, context) {
63
+ const items = [];
64
+ for (const rule of rules) {
65
+ const resolved = this.resolveYongShenRule(rule, context);
66
+ if (resolved) {
67
+ items.push(resolved);
68
+ }
69
+ }
70
+ return items;
71
+ }
72
+ /**
73
+ * 解析单个用神规则
74
+ */
75
+ static resolveYongShenRule(rule, context) {
76
+ const { result } = context;
77
+ switch (rule.type) {
78
+ case '门': {
79
+ // 使用安全的门名解析
80
+ const men = (0, gongUtils_1.parseMenName)(rule.name);
81
+ if (!men)
82
+ return null;
83
+ const gong = (0, gongUtils_1.findMenGong)(result, men);
84
+ if (!gong)
85
+ return null;
86
+ return {
87
+ type: '门',
88
+ name: rule.name,
89
+ gong,
90
+ state: this.getGongWangXiang(gong, context),
91
+ };
92
+ }
93
+ case '星': {
94
+ // 使用安全的星名解析
95
+ const xing = (0, gongUtils_1.parseXingName)(rule.name);
96
+ if (!xing)
97
+ return null;
98
+ const gong = (0, gongUtils_1.findXingGong)(result, xing);
99
+ if (!gong)
100
+ return null;
101
+ return {
102
+ type: '星',
103
+ name: rule.name,
104
+ gong,
105
+ state: this.getGongWangXiang(gong, context),
106
+ };
107
+ }
108
+ case '神': {
109
+ const gong = (0, gongUtils_1.findShenGong)(result, rule.name);
110
+ if (!gong)
111
+ return null;
112
+ return {
113
+ type: '神',
114
+ name: rule.name,
115
+ gong,
116
+ state: this.getGongWangXiang(gong, context),
117
+ };
118
+ }
119
+ case '奇': {
120
+ // 日干、时干、马星等特殊用神
121
+ if (rule.name === '日干') {
122
+ return {
123
+ type: '奇',
124
+ name: `日干(${context.dayGan})`,
125
+ gong: result.dayGanGong,
126
+ state: this.getGongWangXiang(result.dayGanGong, context),
127
+ };
128
+ }
129
+ if (rule.name === '时干') {
130
+ return {
131
+ type: '奇',
132
+ name: `时干(${context.hourGan})`,
133
+ gong: result.hourGanGong,
134
+ state: this.getGongWangXiang(result.hourGanGong, context),
135
+ };
136
+ }
137
+ if (rule.name === '马星') {
138
+ const maGong = this.findMaXingGong(result, context.dayZhi);
139
+ if (!maGong)
140
+ return null;
141
+ return {
142
+ type: '奇',
143
+ name: '马星',
144
+ gong: maGong,
145
+ state: this.getGongWangXiang(maGong, context),
146
+ };
147
+ }
148
+ // 三奇(乙丙丁)
149
+ if (['乙', '丙', '丁'].includes(rule.name)) {
150
+ const gan = rule.name;
151
+ const gong = (0, gongUtils_1.findGanGong)(result, gan);
152
+ if (!gong)
153
+ return null;
154
+ return {
155
+ type: '奇',
156
+ name: `${gan}奇`,
157
+ gong,
158
+ state: this.getGongWangXiang(gong, context),
159
+ };
160
+ }
161
+ return null;
162
+ }
163
+ case '仪': {
164
+ // 六仪(戊己庚辛壬癸)
165
+ if (rule.name === '六仪') {
166
+ // 特殊处理:返回戊仪作为代表
167
+ const gong = (0, gongUtils_1.findGanGong)(result, '戊');
168
+ if (!gong)
169
+ return null;
170
+ return {
171
+ type: '仪',
172
+ name: '戊仪',
173
+ gong,
174
+ state: this.getGongWangXiang(gong, context),
175
+ };
176
+ }
177
+ if (rule.name === '天盘戊') {
178
+ // 天盘戊的位置
179
+ const gong = (0, gongUtils_1.findTianPanGanGong)(result, '戊');
180
+ if (!gong)
181
+ return null;
182
+ return {
183
+ type: '仪',
184
+ name: '天盘戊',
185
+ gong,
186
+ state: this.getGongWangXiang(gong, context),
187
+ };
188
+ }
189
+ // 具体六仪
190
+ const gan = rule.name;
191
+ if (['戊', '己', '庚', '辛', '壬', '癸'].includes(gan)) {
192
+ const gong = (0, gongUtils_1.findGanGong)(result, gan);
193
+ if (!gong)
194
+ return null;
195
+ return {
196
+ type: '仪',
197
+ name: `${gan}仪`,
198
+ gong,
199
+ state: this.getGongWangXiang(gong, context),
200
+ };
201
+ }
202
+ return null;
203
+ }
204
+ default:
205
+ return null;
206
+ }
207
+ }
208
+ /**
209
+ * 分析用神项列表
210
+ */
211
+ static analyzeYongShenItems(items, context) {
212
+ return items.map(item => this.analyzeYongShenItem(item, context));
213
+ }
214
+ /**
215
+ * 分析单个用神
216
+ */
217
+ static analyzeYongShenItem(item, context) {
218
+ const { result } = context;
219
+ const gong = item.gong;
220
+ const gongInfo = result.gongs[gong];
221
+ // 检测空亡
222
+ const isKong = gongInfo.isKong;
223
+ // 检测入墓
224
+ const isRuMu = this.checkRuMu(item, gong, context);
225
+ // 检测击刑
226
+ const isJiXing = this.checkJiXing(gong, context);
227
+ // 与日干关系
228
+ const relationToDay = this.calcDayGanRelation(item, context);
229
+ // 受格局影响
230
+ const geJuEffects = this.getGeJuEffects(gong, result);
231
+ // 计算评分
232
+ const score = this.calcYongShenScore(item.state, isKong, isRuMu, isJiXing, relationToDay, geJuEffects);
233
+ return {
234
+ yongshen: item.name,
235
+ gong,
236
+ isKong,
237
+ isRuMu,
238
+ isJiXing,
239
+ relationToDay,
240
+ geJuEffects,
241
+ score,
242
+ };
243
+ }
244
+ /**
245
+ * 主客分析
246
+ */
247
+ static analyzeZhuKe(context) {
248
+ const { result, dayGan, hourGan } = context;
249
+ const zhuGong = result.dayGanGong;
250
+ const keGong = result.hourGanGong;
251
+ const zhuState = this.getGongWangXiang(zhuGong, context);
252
+ const keState = this.getGongWangXiang(keGong, context);
253
+ // 计算主客关系
254
+ const zhuWuXing = yongshen_rules_1.GAN_WUXING[dayGan];
255
+ const keWuXing = yongshen_rules_1.GAN_WUXING[hourGan];
256
+ const relation = this.calcZhuKeRelation(zhuWuXing, keWuXing);
257
+ // 生成简要结论
258
+ const summary = this.generateZhuKeSummary(zhuState, keState, relation);
259
+ return {
260
+ zhu: { gong: zhuGong, state: zhuState },
261
+ ke: { gong: keGong, state: keState },
262
+ relation,
263
+ summary,
264
+ };
265
+ }
266
+ /**
267
+ * 年命分析
268
+ */
269
+ static analyzeNianMing(nianGan, context) {
270
+ const { result } = context;
271
+ // 找年干落宫
272
+ const gong = (0, gongUtils_1.findGanGong)(result, nianGan);
273
+ const actualGong = gong || result.dayGanGong; // 如果找不到,默认日干落宫
274
+ return {
275
+ nianGan,
276
+ gong: actualGong,
277
+ state: this.getGongWangXiang(actualGong, context),
278
+ };
279
+ }
280
+ // ============= 辅助方法 =============
281
+ /**
282
+ * 找马星落宫
283
+ */
284
+ static findMaXingGong(result, dayZhi) {
285
+ // 马星地支
286
+ const MA_XING = {
287
+ '申': '寅', '子': '寅', '辰': '寅',
288
+ '寅': '申', '午': '申', '戌': '申',
289
+ '亥': '巳', '卯': '巳', '未': '巳',
290
+ '巳': '亥', '酉': '亥', '丑': '亥',
291
+ };
292
+ const maZhi = MA_XING[dayZhi];
293
+ if (!maZhi)
294
+ return null;
295
+ const maGong = constants_1.DI_ZHI_GONG[maZhi];
296
+ return maGong || null;
297
+ }
298
+ /**
299
+ * 获取宫位旺相休囚死状态
300
+ */
301
+ static getGongWangXiang(gong, context) {
302
+ const gongWuXing = constants_1.GONG_WUXING[gong];
303
+ const table = yongshen_rules_1.WANGXIANG_TABLE[context.monthZhi];
304
+ return table ? table[gongWuXing] : '休';
305
+ }
306
+ /**
307
+ * 检测入墓
308
+ */
309
+ static checkRuMu(item, gong, context) {
310
+ // 获取用神五行
311
+ let wuXing = null;
312
+ if (item.type === '奇' || item.type === '仪') {
313
+ // 从名称提取天干
314
+ const ganMatch = item.name.match(/([甲乙丙丁戊己庚辛壬癸])/);
315
+ if (ganMatch) {
316
+ wuXing = yongshen_rules_1.GAN_WUXING[ganMatch[1]];
317
+ }
318
+ }
319
+ else if (item.type === '门') {
320
+ const men = (0, gongUtils_1.parseMenName)(item.name);
321
+ if (men)
322
+ wuXing = yongshen_rules_1.MEN_WUXING[men];
323
+ }
324
+ else if (item.type === '星') {
325
+ const xing = (0, gongUtils_1.parseXingName)(item.name);
326
+ if (xing)
327
+ wuXing = yongshen_rules_1.XING_WUXING[xing];
328
+ }
329
+ else if (item.type === '神') {
330
+ // 使用共享的 SHEN_NAME_MAP
331
+ const shen = gongUtils_1.SHEN_NAME_MAP[item.name];
332
+ if (shen) {
333
+ wuXing = yongshen_rules_1.SHEN_WUXING[shen];
334
+ }
335
+ }
336
+ if (!wuXing)
337
+ return false;
338
+ // 获取宫位对应地支
339
+ const gongZhi = (0, gongUtils_1.getGongDiZhi)(gong);
340
+ // 检查是否落入墓库
341
+ return yongshen_rules_1.RUMU_TABLE[wuXing] === gongZhi;
342
+ }
343
+ /**
344
+ * 检测击刑
345
+ */
346
+ static checkJiXing(gong, context) {
347
+ const gongZhi = (0, gongUtils_1.getGongDiZhi)(gong);
348
+ const xingList = yongshen_rules_1.XING_TABLE[context.dayZhi] || [];
349
+ return xingList.includes(gongZhi);
350
+ }
351
+ /**
352
+ * 计算与日干关系
353
+ */
354
+ static calcDayGanRelation(item, context) {
355
+ const dayWuXing = yongshen_rules_1.GAN_WUXING[context.dayGan];
356
+ // 获取用神五行
357
+ let yongWuXing = null;
358
+ if (item.type === '奇' || item.type === '仪') {
359
+ const ganMatch = item.name.match(/([甲乙丙丁戊己庚辛壬癸])/);
360
+ if (ganMatch) {
361
+ yongWuXing = yongshen_rules_1.GAN_WUXING[ganMatch[1]];
362
+ }
363
+ }
364
+ else if (item.type === '门') {
365
+ const men = (0, gongUtils_1.parseMenName)(item.name);
366
+ if (men)
367
+ yongWuXing = yongshen_rules_1.MEN_WUXING[men];
368
+ }
369
+ else if (item.type === '星') {
370
+ const xing = (0, gongUtils_1.parseXingName)(item.name);
371
+ if (xing)
372
+ yongWuXing = yongshen_rules_1.XING_WUXING[xing];
373
+ }
374
+ else if (item.type === '神') {
375
+ // 使用共享的 SHEN_NAME_MAP
376
+ const shen = gongUtils_1.SHEN_NAME_MAP[item.name];
377
+ if (shen)
378
+ yongWuXing = yongshen_rules_1.SHEN_WUXING[shen];
379
+ }
380
+ if (!yongWuXing)
381
+ return '比';
382
+ // 判断关系
383
+ if (yongWuXing === dayWuXing)
384
+ return '比';
385
+ if (yongshen_rules_1.WUXING_SHENG[yongWuXing] === dayWuXing)
386
+ return '生'; // 用神生日干
387
+ if (yongshen_rules_1.WUXING_KE[yongWuXing] === dayWuXing)
388
+ return '克'; // 用神克日干
389
+ if (yongshen_rules_1.WUXING_SHENG[dayWuXing] === yongWuXing)
390
+ return '泄'; // 日干生用神
391
+ if (yongshen_rules_1.WUXING_KE[dayWuXing] === yongWuXing)
392
+ return '耗'; // 日干克用神
393
+ return '比';
394
+ }
395
+ /**
396
+ * 获取格局影响
397
+ */
398
+ static getGeJuEffects(gong, result) {
399
+ const effects = [];
400
+ for (const geJu of result.geJu) {
401
+ if (geJu.gongs.includes(gong)) {
402
+ effects.push(`${geJu.name}(${geJu.type})`);
403
+ }
404
+ }
405
+ return effects;
406
+ }
407
+ /**
408
+ * 计算用神评分
409
+ */
410
+ static calcYongShenScore(state, isKong, isRuMu, isJiXing, relation, geJuEffects) {
411
+ const weights = yongshen_rules_1.YONGSHEN_SCORE_WEIGHTS;
412
+ let score = 50; // 基础分
413
+ // 旺相休囚死
414
+ score += weights.wangXiang[state];
415
+ // 空亡
416
+ if (isKong)
417
+ score += weights.kongWang;
418
+ // 入墓
419
+ if (isRuMu)
420
+ score += weights.ruMu;
421
+ // 击刑
422
+ if (isJiXing)
423
+ score += weights.jiXing;
424
+ // 与日干关系
425
+ score += weights.dayRelation[relation];
426
+ // 格局影响
427
+ for (const effect of geJuEffects) {
428
+ if (effect.includes('吉格')) {
429
+ score += weights.jiGe;
430
+ }
431
+ else if (effect.includes('凶格')) {
432
+ score += weights.xiongGe;
433
+ }
434
+ }
435
+ // 限制范围
436
+ return Math.max(0, Math.min(100, score));
437
+ }
438
+ /**
439
+ * 计算主客关系
440
+ */
441
+ static calcZhuKeRelation(zhuWuXing, keWuXing) {
442
+ if (zhuWuXing === keWuXing)
443
+ return '比和';
444
+ if (yongshen_rules_1.WUXING_KE[zhuWuXing] === keWuXing)
445
+ return '我克彼';
446
+ if (yongshen_rules_1.WUXING_KE[keWuXing] === zhuWuXing)
447
+ return '彼克我';
448
+ if (yongshen_rules_1.WUXING_SHENG[zhuWuXing] === keWuXing)
449
+ return '我生彼';
450
+ if (yongshen_rules_1.WUXING_SHENG[keWuXing] === zhuWuXing)
451
+ return '彼生我';
452
+ return '比和';
453
+ }
454
+ /**
455
+ * 生成主客分析结论
456
+ */
457
+ static generateZhuKeSummary(zhuState, keState, relation) {
458
+ const stateScore = (s) => {
459
+ const scores = { '旺': 5, '相': 4, '休': 3, '囚': 2, '死': 1 };
460
+ return scores[s];
461
+ };
462
+ const zhuScore = stateScore(zhuState);
463
+ const keScore = stateScore(keState);
464
+ let summary = '';
465
+ // 状态对比
466
+ if (zhuScore > keScore) {
467
+ summary = '我方状态优于对方';
468
+ }
469
+ else if (zhuScore < keScore) {
470
+ summary = '对方状态优于我方';
471
+ }
472
+ else {
473
+ summary = '双方状态相当';
474
+ }
475
+ // 关系补充
476
+ switch (relation) {
477
+ case '我克彼':
478
+ summary += ',我方占主动';
479
+ break;
480
+ case '彼克我':
481
+ summary += ',对方占主动';
482
+ break;
483
+ case '比和':
484
+ summary += ',双方势均力敌';
485
+ break;
486
+ case '我生彼':
487
+ summary += ',我方有付出之象';
488
+ break;
489
+ case '彼生我':
490
+ summary += ',对方有付出之象';
491
+ break;
492
+ }
493
+ return summary;
494
+ }
495
+ }
496
+ exports.YongShenCalculator = YongShenCalculator;
497
+ //# sourceMappingURL=YongShenCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YongShenCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/YongShenCalculator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAiBH,2DAagC;AAChC,iDAA6D;AAC7D,kDAU4B;AAa5B,oCAAoC;AAEpC,MAAa,kBAAkB;IAC7B;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CACZ,MAAmB,EACnB,MAAc,EACd,OAAiB;QAEjB,MAAM,MAAM,GAAG,+BAAc,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEpC,QAAQ;QACR,MAAM,OAAO,GAAoB;YAC/B,MAAM;YACN,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAU;YAC9C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO;SACR,CAAC;QAEF,QAAQ;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEnE,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEjE,SAAS;QACT,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAE7E,aAAa;QACb,IAAI,KAAgC,CAAC;QACrC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,gBAAgB;QAChB,IAAI,YAAsC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAED,OAAO;YACL,MAAM;YACN,OAAO;YACP,MAAM;YACN,QAAQ;YACR,KAAK;YACL,QAAQ,EAAE,YAAY;SACvB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CACjC,KAAqB,EACrB,OAAwB;QAExB,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAChC,IAAkB,EAClB,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,YAAY;gBACZ,MAAM,GAAG,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,GAAG;oBAAE,OAAO,IAAI,CAAC;gBACtB,MAAM,IAAI,GAAG,IAAA,uBAAW,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvB,OAAO;oBACL,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI;oBACJ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;iBAC5C,CAAC;YACJ,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,YAAY;gBACZ,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvB,MAAM,IAAI,GAAG,IAAA,wBAAY,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvB,OAAO;oBACL,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI;oBACJ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;iBAC5C,CAAC;YACJ,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,GAAG,IAAA,wBAAY,EAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvB,OAAO;oBACL,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI;oBACJ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;iBAC5C,CAAC;YACJ,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,gBAAgB;gBAChB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG;wBAC7B,IAAI,EAAE,MAAM,CAAC,UAAU;wBACvB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;qBACzD,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG;wBAC9B,IAAI,EAAE,MAAM,CAAC,WAAW;wBACxB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;qBAC1D,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAC;oBACzB,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;qBAC9C,CAAC;gBACJ,CAAC;gBACD,UAAU;gBACV,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAe,CAAC;oBACjC,MAAM,IAAI,GAAG,IAAA,uBAAW,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBACtC,IAAI,CAAC,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACvB,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,GAAG,GAAG,GAAG;wBACf,IAAI;wBACJ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC5C,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,aAAa;gBACb,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,gBAAgB;oBAChB,MAAM,IAAI,GAAG,IAAA,uBAAW,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBACtC,IAAI,CAAC,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACvB,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,IAAI;wBACV,IAAI;wBACJ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC5C,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACxB,SAAS;oBACT,MAAM,IAAI,GAAG,IAAA,8BAAkB,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAC7C,IAAI,CAAC,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACvB,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,KAAK;wBACX,IAAI;wBACJ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC5C,CAAC;gBACJ,CAAC;gBACD,OAAO;gBACP,MAAM,GAAG,GAAG,IAAI,CAAC,IAAe,CAAC;gBACjC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,MAAM,IAAI,GAAG,IAAA,uBAAW,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBACtC,IAAI,CAAC,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACvB,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,GAAG,GAAG,GAAG;wBACf,IAAI;wBACJ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC5C,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CACjC,KAAqB,EACrB,OAAwB;QAExB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAChC,IAAkB,EAClB,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpC,OAAO;QACP,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE/B,OAAO;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEnD,OAAO;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,QAAQ;QACR,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE7D,QAAQ;QACR,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtD,OAAO;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAClC,IAAI,CAAC,KAAK,EACV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,aAAa,EACb,WAAW,CACZ,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,IAAI;YACJ,MAAM;YACN,MAAM;YACN,QAAQ;YACR,aAAa;YACb,WAAW;YACX,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,YAAY,CAAC,OAAwB;QAClD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvD,SAAS;QACT,MAAM,SAAS,GAAG,2BAAU,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,2BAAU,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE7D,SAAS;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEvE,OAAO;YACL,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;YACvC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;YACpC,QAAQ;YACR,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,eAAe,CAC5B,OAAgB,EAChB,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,QAAQ;QACR,MAAM,IAAI,GAAG,IAAA,uBAAW,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe;QAE7D,OAAO;YACL,OAAO;YACP,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,mCAAmC;IAEnC;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,MAAmB,EAAE,MAAa;QAC9D,OAAO;QACP,MAAM,OAAO,GAAyB;YACpC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC;QAEF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,MAAM,GAAG,uBAAW,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB,CAAC,IAAa,EAAE,OAAwB;QACrE,MAAM,UAAU,GAAG,uBAAW,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,gCAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,SAAS,CACtB,IAAkB,EAClB,IAAa,EACb,OAAwB;QAExB,SAAS;QACT,IAAI,MAAM,GAAkB,IAAI,CAAC;QAEjC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC3C,UAAU;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACnD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,2BAAU,CAAC,QAAQ,CAAC,CAAC,CAAY,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG;gBAAE,MAAM,GAAG,2BAAU,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI;gBAAE,MAAM,GAAG,4BAAW,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC7B,sBAAsB;YACtB,MAAM,IAAI,GAAG,yBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,GAAG,4BAAW,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,WAAW;QACX,MAAM,OAAO,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,CAAC;QAEnC,WAAW;QACX,OAAO,2BAAU,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,WAAW,CAAC,IAAa,EAAE,OAAwB;QAChE,MAAM,OAAO,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,2BAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB,CAC/B,IAAkB,EAClB,OAAwB;QAExB,MAAM,SAAS,GAAG,2BAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7C,SAAS;QACT,IAAI,UAAU,GAAkB,IAAI,CAAC;QAErC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACnD,IAAI,QAAQ,EAAE,CAAC;gBACb,UAAU,GAAG,2BAAU,CAAC,QAAQ,CAAC,CAAC,CAAY,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG;gBAAE,UAAU,GAAG,2BAAU,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI;gBAAE,UAAU,GAAG,4BAAW,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC7B,sBAAsB;YACtB,MAAM,IAAI,GAAG,yBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI;gBAAE,UAAU,GAAG,4BAAW,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,UAAU;YAAE,OAAO,GAAG,CAAC;QAE5B,OAAO;QACP,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QACzC,IAAI,6BAAY,CAAC,UAAU,CAAC,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,CAAC,QAAQ;QAChE,IAAI,0BAAS,CAAC,UAAU,CAAC,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,CAAC,QAAQ;QAC7D,IAAI,6BAAY,CAAC,SAAS,CAAC,KAAK,UAAU;YAAE,OAAO,GAAG,CAAC,CAAC,QAAQ;QAChE,IAAI,0BAAS,CAAC,SAAS,CAAC,KAAK,UAAU;YAAE,OAAO,GAAG,CAAC,CAAC,QAAQ;QAE7D,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,IAAa,EAAE,MAAmB;QAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB,CAC9B,KAAqB,EACrB,MAAe,EACf,MAAe,EACf,QAAiB,EACjB,QAAwB,EACxB,WAAqB;QAErB,MAAM,OAAO,GAAG,uCAAsB,CAAC;QAEvC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,MAAM;QAEtB,QAAQ;QACR,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAElC,KAAK;QACL,IAAI,MAAM;YAAE,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC;QAEtC,KAAK;QACL,IAAI,MAAM;YAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;QAElC,KAAK;QACL,IAAI,QAAQ;YAAE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;QAEtC,QAAQ;QACR,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEvC,OAAO;QACP,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YACxB,CAAC;iBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB,CAC9B,SAAiB,EACjB,QAAgB;QAEhB,IAAI,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,0BAAS,CAAC,SAAS,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,0BAAS,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,6BAAY,CAAC,SAAS,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,6BAAY,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CACjC,QAAwB,EACxB,OAAuB,EACvB,QAAmC;QAEnC,MAAM,UAAU,GAAG,CAAC,CAAiB,EAAU,EAAE;YAC/C,MAAM,MAAM,GAAmC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YAC1F,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAEpC,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,OAAO;QACP,IAAI,QAAQ,GAAG,OAAO,EAAE,CAAC;YACvB,OAAO,GAAG,UAAU,CAAC;QACvB,CAAC;aAAM,IAAI,QAAQ,GAAG,OAAO,EAAE,CAAC;YAC9B,OAAO,GAAG,UAAU,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,QAAQ,CAAC;QACrB,CAAC;QAED,OAAO;QACP,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK;gBACR,OAAO,IAAI,QAAQ,CAAC;gBACpB,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,IAAI,QAAQ,CAAC;gBACpB,MAAM;YACR,KAAK,IAAI;gBACP,OAAO,IAAI,SAAS,CAAC;gBACrB,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,IAAI,UAAU,CAAC;gBACtB,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,IAAI,UAAU,CAAC;gBACtB,MAAM;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAhjBD,gDAgjBC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * 择日计算器
3
+ *
4
+ * 负责根据事类筛选吉时,实现奇门择日功能
5
+ */
6
+ import type { ZeRiInput, ZeRiResult } from '../types';
7
+ export declare class ZeRiCalculator {
8
+ /** 排盘缓存 */
9
+ private static cache;
10
+ /** 排盘函数(由外部注入) */
11
+ private static calculateFn;
12
+ /**
13
+ * 注入排盘函数
14
+ *
15
+ * @param fn 排盘函数
16
+ */
17
+ static setCalculateFn(fn: typeof ZeRiCalculator.calculateFn): void;
18
+ /**
19
+ * 查找吉时
20
+ *
21
+ * @param input 择日输入
22
+ * @returns 择日结果列表
23
+ */
24
+ static findAuspiciousTimes(input: ZeRiInput): ZeRiResult[];
25
+ /**
26
+ * 获取缓存的排盘结果
27
+ */
28
+ private static getCachedResult;
29
+ /**
30
+ * 应用过滤条件
31
+ */
32
+ private static passFilters;
33
+ /**
34
+ * 计算评分(使用缓存的用神信息)
35
+ */
36
+ private static calculateScoreWithCache;
37
+ /**
38
+ * 格局评分
39
+ */
40
+ private static calcGeJuScore;
41
+ /**
42
+ * 用神评分(使用缓存的用神信息)
43
+ */
44
+ private static calcYongShenScoreFromInfo;
45
+ /**
46
+ * 神煞评分
47
+ */
48
+ private static calcShenShaScore;
49
+ /**
50
+ * 获取评级
51
+ */
52
+ private static getGrade;
53
+ /**
54
+ * 获取有利因素(使用缓存的用神信息)
55
+ */
56
+ private static getHighlightsWithCache;
57
+ /**
58
+ * 获取注意事项
59
+ */
60
+ private static getWarnings;
61
+ /**
62
+ * 生成推荐理由
63
+ */
64
+ private static generateRecommendation;
65
+ /**
66
+ * 计算方位信息(使用缓存的用神信息)
67
+ */
68
+ private static calcDirectionInfoWithCache;
69
+ /**
70
+ * 清除缓存
71
+ */
72
+ static clearCache(): void;
73
+ /**
74
+ * 获取缓存大小
75
+ */
76
+ static getCacheSize(): number;
77
+ }
78
+ //# sourceMappingURL=ZeRiCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZeRiCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/ZeRiCalculator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EAUX,MAAM,UAAU,CAAC;AAkHlB,qBAAa,cAAc;IACzB,WAAW;IACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAqB;IAEzC,kBAAkB;IAClB,OAAO,CAAC,MAAM,CAAC,WAAW,CAOO;IAEjC;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,WAAW,GAAG,IAAI;IAIlE;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,EAAE;IAmH1D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA0B9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAgC1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAgCtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAwB5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAcxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAO/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAOvB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAyCrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAuB1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAgBrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAgCzC;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,MAAM;CAG9B"}