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,427 @@
1
+ "use strict";
2
+ /**
3
+ * 奇门遁甲服务
4
+ *
5
+ * 提供奇门遁甲排盘功能,支持时盘和日盘
6
+ * 支持拆补法和茅山法两种置闰算法
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.QimenService = void 0;
10
+ const lunar_javascript_1 = require("lunar-javascript");
11
+ const JuShuCalculator_1 = require("./calculators/JuShuCalculator");
12
+ const JiuGongCalculator_1 = require("./calculators/JiuGongCalculator");
13
+ const SanQiLiuYiCalculator_1 = require("./calculators/SanQiLiuYiCalculator");
14
+ const ZhuanPanCalculator_1 = require("./calculators/ZhuanPanCalculator");
15
+ const PanTypeCalculator_1 = require("./calculators/PanTypeCalculator");
16
+ const BaMenCalculator_1 = require("./calculators/BaMenCalculator");
17
+ const JiuXingCalculator_1 = require("./calculators/JiuXingCalculator");
18
+ const BaShenCalculator_1 = require("./calculators/BaShenCalculator");
19
+ const GeJuCalculator_1 = require("./calculators/GeJuCalculator");
20
+ const YongShenCalculator_1 = require("./calculators/YongShenCalculator");
21
+ const ShenShaCalculator_1 = require("./calculators/ShenShaCalculator");
22
+ const ZeRiCalculator_1 = require("./calculators/ZeRiCalculator");
23
+ const constants_1 = require("./data/constants");
24
+ class QimenService {
25
+ config;
26
+ constructor(config = {}) {
27
+ this.config = config;
28
+ }
29
+ /**
30
+ * 验证输入参数
31
+ */
32
+ validateInput(input) {
33
+ // 验证年份
34
+ if (!Number.isInteger(input.year) || input.year < 1900 || input.year > 2100) {
35
+ throw new Error(`年份必须在 1900-2100 之间,当前值: ${input.year}`);
36
+ }
37
+ // 验证月份
38
+ if (!Number.isInteger(input.month) || input.month < 1 || input.month > 12) {
39
+ throw new Error(`月份必须在 1-12 之间,当前值: ${input.month}`);
40
+ }
41
+ // 验证日期
42
+ if (!Number.isInteger(input.day) || input.day < 1 || input.day > 31) {
43
+ throw new Error(`日期必须在 1-31 之间,当前值: ${input.day}`);
44
+ }
45
+ // 验证小时
46
+ if (!Number.isInteger(input.hour) || input.hour < 0 || input.hour > 23) {
47
+ throw new Error(`小时必须在 0-23 之间,当前值: ${input.hour}`);
48
+ }
49
+ // 验证分钟(可选)
50
+ if (input.minute !== undefined) {
51
+ if (!Number.isInteger(input.minute) || input.minute < 0 || input.minute > 59) {
52
+ throw new Error(`分钟必须在 0-59 之间,当前值: ${input.minute}`);
53
+ }
54
+ }
55
+ // 验证盘类型(可选)
56
+ const validPanTypes = ['时盘', '日盘', '月盘', '年盘'];
57
+ if (input.panType !== undefined && !validPanTypes.includes(input.panType)) {
58
+ throw new Error(`盘类型必须是 ${validPanTypes.join('/')},当前值: ${input.panType}`);
59
+ }
60
+ // 验证盘式(可选)
61
+ const validPanStyles = ['转盘', '飞盘'];
62
+ if (input.panStyle !== undefined && !validPanStyles.includes(input.panStyle)) {
63
+ throw new Error(`盘式必须是 ${validPanStyles.join('/')},当前值: ${input.panStyle}`);
64
+ }
65
+ // 验证置闰方法(可选)
66
+ if (input.zhiRunMethod !== undefined && input.zhiRunMethod !== 'chaibu' && input.zhiRunMethod !== 'maoshan') {
67
+ throw new Error(`置闰方法必须是 'chaibu' 或 'maoshan',当前值: ${input.zhiRunMethod}`);
68
+ }
69
+ }
70
+ /**
71
+ * 计算奇门遁甲盘
72
+ *
73
+ * 支持四种盘类型:时盘、日盘、月盘、年盘
74
+ * 支持两种盘式:转盘(默认)、飞盘
75
+ */
76
+ calculate(input) {
77
+ // 输入参数验证
78
+ this.validateInput(input);
79
+ const panType = input.panType || '时盘';
80
+ const panStyle = input.panStyle || '转盘';
81
+ const zhiRunMethod = input.zhiRunMethod || 'chaibu';
82
+ // 1. 处理时间,获取四柱和节气信息
83
+ const { siZhu, jieQi, jieQiDate, solarDate, lunarDate } = this.getTimeInfo(input);
84
+ // 2. 计算局数参数(阴阳遁 + 上中下元 + 局数)
85
+ let yinYangDun;
86
+ let juShu;
87
+ let yuan;
88
+ if (panType === '年盘') {
89
+ // 年盘:使用 PanTypeCalculator 计算
90
+ const yearPanResult = PanTypeCalculator_1.PanTypeCalculator.calculateYearPan({
91
+ yearGanZhi: siZhu.yearGanZhi,
92
+ currentJieQi: jieQi,
93
+ });
94
+ yinYangDun = yearPanResult.yinYangDun;
95
+ juShu = yearPanResult.juShu;
96
+ yuan = yearPanResult.yuan;
97
+ }
98
+ else if (panType === '月盘') {
99
+ // 月盘:使用 PanTypeCalculator 计算
100
+ const monthPanResult = PanTypeCalculator_1.PanTypeCalculator.calculateMonthPan({
101
+ monthGanZhi: siZhu.monthGanZhi,
102
+ });
103
+ yinYangDun = monthPanResult.yinYangDun;
104
+ juShu = monthPanResult.juShu;
105
+ yuan = monthPanResult.yuan;
106
+ }
107
+ else {
108
+ // 时盘/日盘:使用 JuShuCalculator 计算
109
+ const currentDate = new Date(input.year, input.month - 1, input.day);
110
+ const juShuResult = JuShuCalculator_1.JuShuCalculator.calculate(jieQi, siZhu.dayGanZhi, zhiRunMethod, jieQiDate, currentDate);
111
+ yinYangDun = juShuResult.yinYangDun;
112
+ juShu = juShuResult.juShu;
113
+ yuan = juShuResult.yuan;
114
+ }
115
+ // 3. 计算地盘(九宫布局)
116
+ const diPanResult = JiuGongCalculator_1.JiuGongCalculator.calculate(juShu, yinYangDun);
117
+ // 4. 确定用于计算的参考干支
118
+ const { refGanZhi, refZhi } = this.getRefGanZhi(panType, siZhu);
119
+ // 5. 计算天盘、九星、八门(根据盘式选择算法)
120
+ let tianPanResult;
121
+ let jiuXingResult;
122
+ let baMenResult;
123
+ // 5.1 先计算旬首信息(需要先用飞盘式计算初始天盘以获取ganGong)
124
+ const initialTianPan = SanQiLiuYiCalculator_1.SanQiLiuYiCalculator.calculate(diPanResult.ganGong, refGanZhi, yinYangDun);
125
+ const xunShouInfo = this.calculateXunShou(refGanZhi, diPanResult.ganGong, initialTianPan.ganGong, refZhi, yinYangDun);
126
+ // 5.2 根据盘式选择算法
127
+ if (panStyle === '转盘') {
128
+ // 转盘式:使用 ZhuanPanCalculator
129
+ tianPanResult = ZhuanPanCalculator_1.ZhuanPanCalculator.calculateTianPan(diPanResult.ganGong, refGanZhi, yinYangDun);
130
+ jiuXingResult = ZhuanPanCalculator_1.ZhuanPanCalculator.calculateJiuXing(xunShouInfo.zhiFuGong, refZhi, yinYangDun);
131
+ baMenResult = ZhuanPanCalculator_1.ZhuanPanCalculator.calculateBaMen(xunShouInfo.zhiFuGong, refZhi, yinYangDun);
132
+ }
133
+ else {
134
+ // 飞盘式:使用原有的飞布算法
135
+ tianPanResult = initialTianPan;
136
+ jiuXingResult = JiuXingCalculator_1.JiuXingCalculator.calculate(xunShouInfo.zhiFuGong, refZhi, yinYangDun);
137
+ baMenResult = BaMenCalculator_1.BaMenCalculator.calculate(xunShouInfo.zhiFuGong, refZhi, yinYangDun);
138
+ }
139
+ // 6. 计算八神(八神始终按固定顺序排布,不受盘式影响)
140
+ const baShenResult = BaShenCalculator_1.BaShenCalculator.calculate(jiuXingResult.zhiFuLuoGong, yinYangDun);
141
+ // 7. 组装九宫信息
142
+ const gongs = this.assembleGongs(diPanResult.gongGan, tianPanResult.gongGan, baMenResult.gongMen, jiuXingResult.gongXing, baShenResult.gongShen, xunShouInfo.kongWang, siZhu.dayZhi);
143
+ // 8. 计算日干/时干落宫
144
+ const dayGanGong = this.findGanGong(siZhu.dayGan, siZhu.dayGanZhi, tianPanResult.ganGong);
145
+ const hourGanGong = this.findGanGong(siZhu.hourGan, siZhu.hourGanZhi, tianPanResult.ganGong);
146
+ // 9. 计算格局(传入 panType 以过滤时辰相关格局)
147
+ const geJu = GeJuCalculator_1.GeJuCalculator.calculate(gongs, yinYangDun, siZhu.dayGan, panType === '时盘' ? siZhu.hourGan : null, panType === '时盘' ? siZhu.hourZhi : null, xunShouInfo, panType);
148
+ // 更新旬首信息中的值符值使落宫
149
+ const fullXunShouInfo = {
150
+ ...xunShouInfo,
151
+ zhiFuXing: jiuXingResult.zhiFuXing,
152
+ zhiFuLuoGong: jiuXingResult.zhiFuLuoGong,
153
+ zhiShiMen: baMenResult.zhiShiMen,
154
+ zhiShiLuoGong: baMenResult.zhiShiLuoGong,
155
+ };
156
+ return {
157
+ timeInfo: {
158
+ solarDate,
159
+ lunarDate,
160
+ siZhu,
161
+ jieQi,
162
+ },
163
+ panType,
164
+ panStyle,
165
+ zhiRunMethod,
166
+ yinYangDun,
167
+ juShu,
168
+ yuan,
169
+ xunShou: fullXunShouInfo,
170
+ gongs,
171
+ dayGanGong,
172
+ hourGanGong,
173
+ geJu,
174
+ };
175
+ }
176
+ /**
177
+ * 获取参考干支(根据盘类型)
178
+ */
179
+ getRefGanZhi(panType, siZhu) {
180
+ switch (panType) {
181
+ case '年盘':
182
+ return {
183
+ refGanZhi: siZhu.yearGanZhi,
184
+ refZhi: siZhu.yearGanZhi.charAt(1),
185
+ };
186
+ case '月盘':
187
+ return {
188
+ refGanZhi: siZhu.monthGanZhi,
189
+ refZhi: siZhu.monthGanZhi.charAt(1),
190
+ };
191
+ case '日盘':
192
+ return {
193
+ refGanZhi: siZhu.dayGanZhi,
194
+ refZhi: siZhu.dayZhi,
195
+ };
196
+ case '时盘':
197
+ default:
198
+ return {
199
+ refGanZhi: siZhu.hourGanZhi,
200
+ refZhi: siZhu.hourZhi,
201
+ };
202
+ }
203
+ }
204
+ /**
205
+ * 获取时间信息(四柱、节气)
206
+ */
207
+ getTimeInfo(input) {
208
+ let solar;
209
+ let lunar;
210
+ if (input.isLunar) {
211
+ // 农历转公历
212
+ lunar = lunar_javascript_1.Lunar.fromYmd(input.year, input.month, input.day);
213
+ solar = lunar.getSolar();
214
+ }
215
+ else {
216
+ // 公历
217
+ solar = lunar_javascript_1.Solar.fromYmd(input.year, input.month, input.day);
218
+ lunar = solar.getLunar();
219
+ }
220
+ // 使用 Solar 获取精确时辰信息
221
+ const hour = input.hour;
222
+ const solarWithTime = lunar_javascript_1.Solar.fromYmdHms(solar.getYear(), solar.getMonth(), solar.getDay(), hour, input.minute || 0, 0);
223
+ const lunarWithTime = solarWithTime.getLunar();
224
+ // 使用 EightChar 获取精确四柱
225
+ const eightChar = lunarWithTime.getEightChar();
226
+ const yearGanZhi = eightChar.getYear();
227
+ const monthGanZhi = eightChar.getMonth();
228
+ const dayGanZhi = eightChar.getDay();
229
+ const hourGanZhi = eightChar.getTime();
230
+ const siZhu = {
231
+ yearGanZhi,
232
+ monthGanZhi,
233
+ dayGanZhi,
234
+ hourGanZhi,
235
+ dayGan: dayGanZhi[0],
236
+ dayZhi: dayGanZhi[1],
237
+ hourGan: hourGanZhi[0],
238
+ hourZhi: hourGanZhi[1],
239
+ };
240
+ // 获取节气
241
+ const prevJieQi = lunarWithTime.getPrevJieQi();
242
+ const jieQi = prevJieQi ? prevJieQi.getName() : '冬至';
243
+ const jieQiSolar = prevJieQi ? prevJieQi.getSolar() : solar;
244
+ const jieQiDate = new Date(jieQiSolar.getYear(), jieQiSolar.getMonth() - 1, jieQiSolar.getDay());
245
+ // 格式化日期
246
+ const solarDate = `${solar.getYear()}年${solar.getMonth()}月${solar.getDay()}日`;
247
+ const lunarDate = `${lunar.getMonthInChinese()}月${lunar.getDayInChinese()}`;
248
+ return { siZhu, jieQi, jieQiDate, solarDate, lunarDate };
249
+ }
250
+ /**
251
+ * 计算旬首信息
252
+ */
253
+ calculateXunShou(refGanZhi, diPanGanGong, tianPanGanGong, refZhi, yinYangDun) {
254
+ // 获取旬首
255
+ const xunShou = (0, constants_1.getXunShou)(refGanZhi);
256
+ const fuTou = xunShou; // 符头就是旬首
257
+ // 获取旬首对应的六仪(遁甲干)
258
+ const liuYiGan = (0, constants_1.getLiuYiGan)(xunShou);
259
+ // 值符星原始宫位 = 旬首遁干在地盘的宫位
260
+ let zhiFuGong = diPanGanGong[liuYiGan];
261
+ if (zhiFuGong === 5) {
262
+ zhiFuGong = constants_1.ZHONG_GONG_JI; // 中宫寄坤二
263
+ }
264
+ // 值使门原始宫位 = 值符星原始宫位
265
+ const zhiShiGong = zhiFuGong;
266
+ // 获取空亡
267
+ const kongWang = (0, constants_1.getXunKong)(xunShou);
268
+ return {
269
+ xunShou,
270
+ fuTou,
271
+ zhiFuXing: '蓬', // 占位,后续由 JiuXingCalculator 计算
272
+ zhiFuGong,
273
+ zhiFuLuoGong: zhiFuGong, // 占位,后续更新
274
+ zhiShiMen: '休', // 占位,后续由 BaMenCalculator 计算
275
+ zhiShiGong,
276
+ zhiShiLuoGong: zhiShiGong, // 占位,后续更新
277
+ kongWang,
278
+ };
279
+ }
280
+ /**
281
+ * 组装九宫完整信息
282
+ */
283
+ assembleGongs(diPanGan, tianPanGan, gongMen, gongXing, gongShen, kongWang, dayZhi) {
284
+ const gongs = {};
285
+ // 获取马星地支
286
+ const maZhi = constants_1.MA_XING[dayZhi];
287
+ const maGong = constants_1.DI_ZHI_GONG[maZhi];
288
+ for (let g = 1; g <= 9; g++) {
289
+ const gong = g;
290
+ // 检查是否空亡(根据地支判断)
291
+ // 某些宫位对应两个地支,只要其中一个在空亡列表中即为空亡
292
+ const gongDiZhiList = this.getGongDiZhiList(gong);
293
+ const isKong = gongDiZhiList.some(dz => kongWang.includes(dz));
294
+ // 检查是否马星
295
+ const isMa = gong === maGong;
296
+ gongs[gong] = {
297
+ gong,
298
+ gongName: constants_1.GONG_NAMES[gong],
299
+ diPanGan: diPanGan[gong],
300
+ tianPanGan: tianPanGan[gong],
301
+ men: gongMen[gong],
302
+ xing: gongXing[gong],
303
+ shen: gongShen[gong],
304
+ wuXing: constants_1.GONG_WUXING[gong],
305
+ isKong,
306
+ isMa,
307
+ };
308
+ }
309
+ return gongs;
310
+ }
311
+ /**
312
+ * 获取宫位对应的所有地支
313
+ * 某些宫位对应两个地支(坤、巽、乾、艮),需要全部返回
314
+ */
315
+ getGongDiZhiList(gong) {
316
+ const gongDiZhiMap = {
317
+ 1: ['子'], // 坎宫
318
+ 2: ['未', '申'], // 坤宫
319
+ 3: ['卯'], // 震宫
320
+ 4: ['辰', '巳'], // 巽宫
321
+ 5: ['未', '申'], // 中宫寄坤二
322
+ 6: ['戌', '亥'], // 乾宫
323
+ 7: ['酉'], // 兑宫
324
+ 8: ['丑', '寅'], // 艮宫
325
+ 9: ['午'], // 离宫
326
+ };
327
+ return gongDiZhiMap[gong];
328
+ }
329
+ /**
330
+ * 根据天干找落宫
331
+ * 注意:甲遁于六仪之下,需要根据旬首找对应的六仪
332
+ *
333
+ * @param gan - 天干
334
+ * @param ganZhi - 干支(用于确定甲的旬首)
335
+ * @param ganGong - 天干落宫映射
336
+ */
337
+ findGanGong(gan, ganZhi, ganGong) {
338
+ let actualGan = gan;
339
+ // 甲遁于六仪之下,需要根据干支的旬首找对应的六仪
340
+ if (gan === '甲') {
341
+ const xunShou = (0, constants_1.getXunShou)(ganZhi);
342
+ actualGan = (0, constants_1.getLiuYiGan)(xunShou);
343
+ }
344
+ const gong = ganGong[actualGan];
345
+ if (gong === undefined) {
346
+ return constants_1.ZHONG_GONG_JI; // 默认返回坤二
347
+ }
348
+ return gong === 5 ? constants_1.ZHONG_GONG_JI : gong;
349
+ }
350
+ // ============= Phase 3: 用神系统 + 神煞 + 择日 =============
351
+ /**
352
+ * 计算神煞信息
353
+ *
354
+ * 独立计算神煞,不影响基础排盘性能。
355
+ *
356
+ * @param result 奇门盘结果
357
+ * @returns 神煞信息列表
358
+ */
359
+ calculateShenSha(result) {
360
+ return ShenShaCalculator_1.ShenShaCalculator.calculateAll(result);
361
+ }
362
+ /**
363
+ * 带用神分析的高级排盘
364
+ *
365
+ * 在基础排盘基础上,增加用神分析、神煞计算和主客分析。
366
+ *
367
+ * @param input 排盘输入
368
+ * @param shiLei 事类
369
+ * @param options 可选配置
370
+ * @returns 扩展的奇门盘结果(含 yongShen 字段)
371
+ */
372
+ calculateWithYongShen(input, shiLei, options) {
373
+ // 基础排盘
374
+ const result = this.calculate(input);
375
+ // 用神分析
376
+ const yongShenInfo = YongShenCalculator_1.YongShenCalculator.analyze(result, shiLei, options?.nianGan);
377
+ // 附加用神信息到结果
378
+ result.yongShen = yongShenInfo;
379
+ // 可选:计算神煞并附加到各宫
380
+ if (options?.includeShenSha) {
381
+ const shenShaList = this.calculateShenSha(result);
382
+ const gongShenSha = ShenShaCalculator_1.ShenShaCalculator.distributeToGongs(shenShaList);
383
+ // 将神煞信息附加到各宫
384
+ for (const gong of [1, 2, 3, 4, 5, 6, 7, 8, 9]) {
385
+ result.gongs[gong].shenSha = gongShenSha[gong];
386
+ }
387
+ }
388
+ return result;
389
+ }
390
+ /**
391
+ * 择日功能
392
+ *
393
+ * 根据事类在指定日期范围内筛选吉时。
394
+ *
395
+ * @param zeRiInput 择日输入
396
+ * @returns 择日结果列表
397
+ */
398
+ findAuspiciousDates(zeRiInput) {
399
+ // 注入排盘函数到 ZeRiCalculator
400
+ ZeRiCalculator_1.ZeRiCalculator.setCalculateFn((calcInput) => {
401
+ return this.calculate({
402
+ year: calcInput.year,
403
+ month: calcInput.month,
404
+ day: calcInput.day,
405
+ hour: calcInput.hour,
406
+ panType: calcInput.panType || '时盘',
407
+ panStyle: zeRiInput.panStyle || '转盘',
408
+ zhiRunMethod: calcInput.zhiRunMethod || 'chaibu',
409
+ });
410
+ });
411
+ return ZeRiCalculator_1.ZeRiCalculator.findAuspiciousTimes(zeRiInput);
412
+ }
413
+ /**
414
+ * 清除择日缓存
415
+ */
416
+ clearZeRiCache() {
417
+ ZeRiCalculator_1.ZeRiCalculator.clearCache();
418
+ }
419
+ /**
420
+ * 获取择日缓存大小
421
+ */
422
+ getZeRiCacheSize() {
423
+ return ZeRiCalculator_1.ZeRiCalculator.getCacheSize();
424
+ }
425
+ }
426
+ exports.QimenService = QimenService;
427
+ //# sourceMappingURL=QimenService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QimenService.js","sourceRoot":"","sources":["../../../src/services/qimen/QimenService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * 八门计算器
3
+ * 计算八门在九宫中的分布
4
+ */
5
+ import type { BaMen, DiZhi, GongWei, YinYangDun } from '../types';
6
+ export interface BaMenResult {
7
+ /** 各宫八门 (宫位 -> 门) */
8
+ gongMen: Record<GongWei, BaMen>;
9
+ /** 值使门 */
10
+ zhiShiMen: BaMen;
11
+ /** 值使门原始宫位 */
12
+ zhiShiGong: GongWei;
13
+ /** 值使门落宫 */
14
+ zhiShiLuoGong: GongWei;
15
+ }
16
+ /**
17
+ * 八门计算器
18
+ * 负责计算八门的飞布
19
+ */
20
+ export declare class BaMenCalculator {
21
+ /**
22
+ * 计算八门布局
23
+ * @param zhiFuGong 值符星落宫(旬首遁干在地盘的宫位)
24
+ * @param hourZhi 时支
25
+ * @param yinYangDun 阴阳遁
26
+ * @returns 八门布局
27
+ *
28
+ * 原理:
29
+ * 1. 确定值使门:值符星原始宫位对应的门就是值使门
30
+ * 2. 值使门随时干飞布,从值符星落宫起,按时辰数飞布
31
+ * 3. 阳遁顺飞,阴遁逆飞
32
+ * 4. 其他七门依次排列
33
+ */
34
+ static calculate(zhiFuGong: GongWei, hourZhi: DiZhi, yinYangDun: YinYangDun): BaMenResult;
35
+ /**
36
+ * 根据宫位获取原始门
37
+ */
38
+ private static getMenByGong;
39
+ /**
40
+ * 飞门:从某宫开始飞布指定步数
41
+ */
42
+ private static flyMen;
43
+ /**
44
+ * 计算所有八门的落宫
45
+ * 从值使门落宫开始,按洛书顺序排列其他七门
46
+ */
47
+ private static calculateAllMen;
48
+ /**
49
+ * 根据宫位找门
50
+ */
51
+ static findMenByGong(gongMen: Record<GongWei, BaMen>, gong: GongWei): BaMen;
52
+ }
53
+ //# sourceMappingURL=BaMenCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaMenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/BaMenCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAW,UAAU,EAAE,MAAM,UAAU,CAAC;AAW3E,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChC,UAAU;IACV,SAAS,EAAE,KAAK,CAAC;IACjB,cAAc;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY;IACZ,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,UAAU,GACrB,WAAW;IAyBd;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAa3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,MAAM;IAerB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAgC9B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK;CAG5E"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * 八门计算器
4
+ * 计算八门在九宫中的分布
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.BaMenCalculator = void 0;
8
+ const constants_1 = require("../data/constants");
9
+ /**
10
+ * 八门计算器
11
+ * 负责计算八门的飞布
12
+ */
13
+ class BaMenCalculator {
14
+ /**
15
+ * 计算八门布局
16
+ * @param zhiFuGong 值符星落宫(旬首遁干在地盘的宫位)
17
+ * @param hourZhi 时支
18
+ * @param yinYangDun 阴阳遁
19
+ * @returns 八门布局
20
+ *
21
+ * 原理:
22
+ * 1. 确定值使门:值符星原始宫位对应的门就是值使门
23
+ * 2. 值使门随时干飞布,从值符星落宫起,按时辰数飞布
24
+ * 3. 阳遁顺飞,阴遁逆飞
25
+ * 4. 其他七门依次排列
26
+ */
27
+ static calculate(zhiFuGong, hourZhi, yinYangDun) {
28
+ const isYang = yinYangDun === '阳遁';
29
+ // 1. 确定值使门(值符星原始宫位对应的门)
30
+ const zhiShiMen = this.getMenByGong(zhiFuGong);
31
+ const zhiShiGong = constants_1.BA_MEN_GONG[zhiShiMen];
32
+ // 2. 计算时辰数(子时为1)
33
+ const hourNum = constants_1.DI_ZHI.indexOf(hourZhi) + 1;
34
+ // 3. 计算值使门落宫
35
+ // 值使门从值符星落宫起,按时辰数飞布
36
+ const zhiShiLuoGong = this.flyMen(zhiFuGong, hourNum - 1, isYang);
37
+ // 4. 计算所有八门的落宫
38
+ const gongMen = this.calculateAllMen(zhiShiMen, zhiShiLuoGong, isYang);
39
+ return {
40
+ gongMen,
41
+ zhiShiMen,
42
+ zhiShiGong,
43
+ zhiShiLuoGong,
44
+ };
45
+ }
46
+ /**
47
+ * 根据宫位获取原始门
48
+ */
49
+ static getMenByGong(gong) {
50
+ // 中宫无门,寄坤二
51
+ const actualGong = gong === 5 ? constants_1.ZHONG_GONG_JI : gong;
52
+ for (const [men, menGong] of Object.entries(constants_1.BA_MEN_GONG)) {
53
+ if (menGong === actualGong) {
54
+ return men;
55
+ }
56
+ }
57
+ return '死'; // 坤二宫默认死门
58
+ }
59
+ /**
60
+ * 飞门:从某宫开始飞布指定步数
61
+ */
62
+ static flyMen(startGong, steps, isYang) {
63
+ let actualStart = startGong;
64
+ if (actualStart === 5) {
65
+ actualStart = constants_1.ZHONG_GONG_JI;
66
+ }
67
+ const startIdx = (0, constants_1.getLuoShuIndex)(actualStart);
68
+ const targetIdx = isYang
69
+ ? (startIdx + steps) % 8
70
+ : ((startIdx - steps) % 8 + 8) % 8;
71
+ return (0, constants_1.getLuoShuGong)(targetIdx);
72
+ }
73
+ /**
74
+ * 计算所有八门的落宫
75
+ * 从值使门落宫开始,按洛书顺序排列其他七门
76
+ */
77
+ static calculateAllMen(zhiShiMen, zhiShiLuoGong, isYang) {
78
+ const gongMen = {};
79
+ // 找到值使门在八门顺序中的索引
80
+ const zhiShiIdx = constants_1.BA_MEN_ORDER.indexOf(zhiShiMen);
81
+ // 获取值使门落宫在洛书中的索引
82
+ let startIdx = (0, constants_1.getLuoShuIndex)(zhiShiLuoGong === 5 ? constants_1.ZHONG_GONG_JI : zhiShiLuoGong);
83
+ // 依次排列八门
84
+ for (let i = 0; i < 8; i++) {
85
+ const menIdx = (zhiShiIdx + i) % 8;
86
+ const men = constants_1.BA_MEN_ORDER[menIdx];
87
+ const gongIdx = isYang
88
+ ? (startIdx + i) % 8
89
+ : ((startIdx - i) % 8 + 8) % 8;
90
+ const gong = (0, constants_1.getLuoShuGong)(gongIdx);
91
+ gongMen[gong] = men;
92
+ }
93
+ // 中宫寄坤二,使用坤二的门
94
+ gongMen[5] = gongMen[constants_1.ZHONG_GONG_JI];
95
+ return gongMen;
96
+ }
97
+ /**
98
+ * 根据宫位找门
99
+ */
100
+ static findMenByGong(gongMen, gong) {
101
+ return gongMen[gong === 5 ? constants_1.ZHONG_GONG_JI : gong];
102
+ }
103
+ }
104
+ exports.BaMenCalculator = BaMenCalculator;
105
+ //# sourceMappingURL=BaMenCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaMenCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/BaMenCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 八神计算器
3
+ * 计算八神在九宫中的分布
4
+ */
5
+ import type { BaShen, GongWei, YinYangDun } from '../types';
6
+ export interface BaShenResult {
7
+ /** 各宫八神 (宫位 -> 神) */
8
+ gongShen: Record<GongWei, BaShen>;
9
+ }
10
+ /**
11
+ * 八神计算器
12
+ * 负责计算八神的排布
13
+ */
14
+ export declare class BaShenCalculator {
15
+ /**
16
+ * 计算八神布局
17
+ * @param zhiFuLuoGong 值符星落宫
18
+ * @param yinYangDun 阴阳遁
19
+ * @returns 八神布局
20
+ *
21
+ * 原理:
22
+ * 1. 值符神(第一神)永远临值符星落宫
23
+ * 2. 阳遁:八神按洛书顺序顺布
24
+ * 3. 阴遁:八神按洛书顺序逆布
25
+ *
26
+ * 八神顺序:值符-腾蛇-太阴-六合-白虎-玄武-九地-九天
27
+ */
28
+ static calculate(zhiFuLuoGong: GongWei, yinYangDun: YinYangDun): BaShenResult;
29
+ /**
30
+ * 根据宫位找神
31
+ */
32
+ static findShenByGong(gongShen: Record<GongWei, BaShen>, gong: GongWei): BaShen;
33
+ }
34
+ //# sourceMappingURL=BaShenCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaShenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/BaShenCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAS5D,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,UAAU,GACrB,YAAY;IA8Bf;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM;CAGhF"}