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.
- package/README.md +72 -44
- package/dist/core/qimen/FlyingRule.d.ts +60 -0
- package/dist/core/qimen/FlyingRule.d.ts.map +1 -0
- package/dist/core/qimen/FlyingRule.js +94 -0
- package/dist/core/qimen/FlyingRule.js.map +1 -0
- package/dist/core/qimen/GongMapping.d.ts +29 -0
- package/dist/core/qimen/GongMapping.d.ts.map +1 -0
- package/dist/core/qimen/GongMapping.js +83 -0
- package/dist/core/qimen/GongMapping.js.map +1 -0
- package/dist/core/qimen/RotatingRule.d.ts +76 -0
- package/dist/core/qimen/RotatingRule.d.ts.map +1 -0
- package/dist/core/qimen/RotatingRule.js +126 -0
- package/dist/core/qimen/RotatingRule.js.map +1 -0
- package/dist/core/qimen/YinYangDunCalculator.d.ts +28 -0
- package/dist/core/qimen/YinYangDunCalculator.d.ts.map +1 -0
- package/dist/core/qimen/YinYangDunCalculator.js +79 -0
- package/dist/core/qimen/YinYangDunCalculator.js.map +1 -0
- package/dist/core/qimen/index.d.ts +10 -0
- package/dist/core/qimen/index.d.ts.map +1 -0
- package/dist/core/qimen/index.js +58 -0
- package/dist/core/qimen/index.js.map +1 -0
- package/dist/core/qimen/types.d.ts +19 -0
- package/dist/core/qimen/types.d.ts.map +1 -0
- package/dist/core/qimen/types.js +7 -0
- package/dist/core/qimen/types.js.map +1 -0
- package/dist/index.js +269 -2
- package/dist/index.js.map +1 -1
- package/dist/output/qimenTextRenderer.d.ts +40 -0
- package/dist/output/qimenTextRenderer.d.ts.map +1 -0
- package/dist/output/qimenTextRenderer.js +363 -0
- package/dist/output/qimenTextRenderer.js.map +1 -0
- package/dist/services/qimen/QimenService.d.ts +93 -0
- package/dist/services/qimen/QimenService.d.ts.map +1 -0
- package/dist/services/qimen/QimenService.js +427 -0
- package/dist/services/qimen/QimenService.js.map +1 -0
- package/dist/services/qimen/calculators/BaMenCalculator.d.ts +53 -0
- package/dist/services/qimen/calculators/BaMenCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/BaMenCalculator.js +105 -0
- package/dist/services/qimen/calculators/BaMenCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/BaShenCalculator.d.ts +34 -0
- package/dist/services/qimen/calculators/BaShenCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/BaShenCalculator.js +57 -0
- package/dist/services/qimen/calculators/BaShenCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/GeJuCalculator.d.ts +141 -0
- package/dist/services/qimen/calculators/GeJuCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/GeJuCalculator.js +711 -0
- package/dist/services/qimen/calculators/GeJuCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.d.ts +56 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.js +98 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.d.ts +54 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.js +117 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/JuShuCalculator.d.ts +57 -0
- package/dist/services/qimen/calculators/JuShuCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/JuShuCalculator.js +115 -0
- package/dist/services/qimen/calculators/JuShuCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.d.ts +117 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.js +237 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts +50 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js +86 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.d.ts +80 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.js +300 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/YongShenCalculator.d.ts +78 -0
- package/dist/services/qimen/calculators/YongShenCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/YongShenCalculator.js +497 -0
- package/dist/services/qimen/calculators/YongShenCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/ZeRiCalculator.d.ts +78 -0
- package/dist/services/qimen/calculators/ZeRiCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/ZeRiCalculator.js +431 -0
- package/dist/services/qimen/calculators/ZeRiCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts +118 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.js +260 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.js.map +1 -0
- package/dist/services/qimen/data/constants.d.ts +105 -0
- package/dist/services/qimen/data/constants.d.ts.map +1 -0
- package/dist/services/qimen/data/constants.js +295 -0
- package/dist/services/qimen/data/constants.js.map +1 -0
- package/dist/services/qimen/data/shensha-rules.d.ts +177 -0
- package/dist/services/qimen/data/shensha-rules.d.ts.map +1 -0
- package/dist/services/qimen/data/shensha-rules.js +397 -0
- package/dist/services/qimen/data/shensha-rules.js.map +1 -0
- package/dist/services/qimen/data/yongshen-rules.d.ts +115 -0
- package/dist/services/qimen/data/yongshen-rules.d.ts.map +1 -0
- package/dist/services/qimen/data/yongshen-rules.js +365 -0
- package/dist/services/qimen/data/yongshen-rules.js.map +1 -0
- package/dist/services/qimen/index.d.ts +20 -0
- package/dist/services/qimen/index.d.ts.map +1 -0
- package/dist/services/qimen/index.js +43 -0
- package/dist/services/qimen/index.js.map +1 -0
- package/dist/services/qimen/types.d.ts +390 -0
- package/dist/services/qimen/types.d.ts.map +1 -0
- package/dist/services/qimen/types.js +20 -0
- package/dist/services/qimen/types.js.map +1 -0
- package/dist/services/qimen/utils/gongUtils.d.ts +80 -0
- package/dist/services/qimen/utils/gongUtils.d.ts.map +1 -0
- package/dist/services/qimen/utils/gongUtils.js +164 -0
- package/dist/services/qimen/utils/gongUtils.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 盘类型计算器
|
|
3
|
+
* 处理年盘、月盘的特殊计算逻辑
|
|
4
|
+
*
|
|
5
|
+
* 年盘规则:
|
|
6
|
+
* 1. 阴阳遁:冬至后到夏至前为阳遁,夏至后到冬至前为阴遁
|
|
7
|
+
* 2. 三元:按年支确定 (子午卯酉→上元, 寅申巳亥→中元, 辰戌丑未→下元)
|
|
8
|
+
* 3. 局数:(年干支序数 % 9) + 1
|
|
9
|
+
* 4. 旬首:基于年干支
|
|
10
|
+
* 5. 天盘旋转:值符飞到年干所在宫
|
|
11
|
+
*
|
|
12
|
+
* 月盘规则:
|
|
13
|
+
* 1. 阴阳遁:按月建对应的节气确定
|
|
14
|
+
* 2. 三元:按月支确定(规则同年盘)
|
|
15
|
+
* 3. 局数:使用节气局数表
|
|
16
|
+
* 4. 旬首:基于月干支
|
|
17
|
+
* 5. 天盘旋转:值符飞到月干所在宫
|
|
18
|
+
*/
|
|
19
|
+
import type { DiZhi, JuShu, YinYangDun, YuanType } from '../types';
|
|
20
|
+
/**
|
|
21
|
+
* 月建对应的节气映射
|
|
22
|
+
* 月建(地支)-> 对应的节气
|
|
23
|
+
*/
|
|
24
|
+
export declare const MONTH_JIEQI_MAP: Record<DiZhi, string>;
|
|
25
|
+
/**
|
|
26
|
+
* 三元判定表:地支 -> 三元
|
|
27
|
+
* 子午卯酉 → 上元
|
|
28
|
+
* 寅申巳亥 → 中元
|
|
29
|
+
* 辰戌丑未 → 下元
|
|
30
|
+
*/
|
|
31
|
+
export declare const DI_ZHI_YUAN_MAP: Record<DiZhi, YuanType>;
|
|
32
|
+
/**
|
|
33
|
+
* 年盘阴阳遁判断
|
|
34
|
+
* 冬至当天为阳遁起始,夏至当天为阴遁起始
|
|
35
|
+
* @param currentJieQi 当前节气
|
|
36
|
+
* @returns 阴阳遁
|
|
37
|
+
*/
|
|
38
|
+
export declare function getYearPanYinYangDun(currentJieQi: string): YinYangDun;
|
|
39
|
+
/**
|
|
40
|
+
* 年盘三元判断
|
|
41
|
+
* 根据年支确定三元
|
|
42
|
+
* @param yearZhi 年支
|
|
43
|
+
* @returns 三元
|
|
44
|
+
*/
|
|
45
|
+
export declare function getYearPanYuan(yearZhi: DiZhi): YuanType;
|
|
46
|
+
/**
|
|
47
|
+
* 年盘局数计算
|
|
48
|
+
* 公式:(年干支在六十甲子中的序数 % 9) + 1
|
|
49
|
+
* 注意:序数从0开始,所以甲子=0, 乙丑=1, ...
|
|
50
|
+
* @param yearGanZhi 年干支(如 "甲辰")
|
|
51
|
+
* @returns 局数 (1-9)
|
|
52
|
+
*/
|
|
53
|
+
export declare function getYearPanJuShu(yearGanZhi: string): JuShu;
|
|
54
|
+
/**
|
|
55
|
+
* 月盘阴阳遁判断
|
|
56
|
+
* 根据月建对应的节气确定
|
|
57
|
+
* @param monthZhi 月支(月建)
|
|
58
|
+
* @returns 阴阳遁
|
|
59
|
+
*/
|
|
60
|
+
export declare function getMonthPanYinYangDun(monthZhi: DiZhi): YinYangDun;
|
|
61
|
+
/**
|
|
62
|
+
* 月盘三元判断
|
|
63
|
+
* 根据月支确定三元(规则同年盘)
|
|
64
|
+
* @param monthZhi 月支
|
|
65
|
+
* @returns 三元
|
|
66
|
+
*/
|
|
67
|
+
export declare function getMonthPanYuan(monthZhi: DiZhi): YuanType;
|
|
68
|
+
/**
|
|
69
|
+
* 月盘局数计算
|
|
70
|
+
* 使用月建对应的节气,结合三元查找局数
|
|
71
|
+
* @param monthZhi 月支(月建)
|
|
72
|
+
* @returns 局数 (1-9)
|
|
73
|
+
*/
|
|
74
|
+
export declare function getMonthPanJuShu(monthZhi: DiZhi): JuShu;
|
|
75
|
+
/**
|
|
76
|
+
* 从干支字符串提取地支
|
|
77
|
+
* @param ganZhi 干支字符串(如 "甲子")
|
|
78
|
+
* @returns 地支
|
|
79
|
+
*/
|
|
80
|
+
export declare function extractZhi(ganZhi: string): DiZhi;
|
|
81
|
+
/**
|
|
82
|
+
* 验证干支是否有效
|
|
83
|
+
* @param ganZhi 干支字符串
|
|
84
|
+
* @returns 是否有效
|
|
85
|
+
*/
|
|
86
|
+
export declare function isValidGanZhi(ganZhi: string): boolean;
|
|
87
|
+
export interface YearPanParams {
|
|
88
|
+
yearGanZhi: string;
|
|
89
|
+
currentJieQi: string;
|
|
90
|
+
}
|
|
91
|
+
export interface MonthPanParams {
|
|
92
|
+
monthGanZhi: string;
|
|
93
|
+
}
|
|
94
|
+
export interface PanTypeResult {
|
|
95
|
+
yinYangDun: YinYangDun;
|
|
96
|
+
yuan: YuanType;
|
|
97
|
+
juShu: JuShu;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 盘类型计算器
|
|
101
|
+
* 统一处理年盘、月盘的阴阳遁、三元、局数计算
|
|
102
|
+
*/
|
|
103
|
+
export declare class PanTypeCalculator {
|
|
104
|
+
/**
|
|
105
|
+
* 计算年盘参数
|
|
106
|
+
* @param params 年盘参数
|
|
107
|
+
* @returns 阴阳遁、三元、局数
|
|
108
|
+
*/
|
|
109
|
+
static calculateYearPan(params: YearPanParams): PanTypeResult;
|
|
110
|
+
/**
|
|
111
|
+
* 计算月盘参数
|
|
112
|
+
* @param params 月盘参数
|
|
113
|
+
* @returns 阴阳遁、三元、局数
|
|
114
|
+
*/
|
|
115
|
+
static calculateMonthPan(params: MonthPanParams): PanTypeResult;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=PanTypeCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanTypeCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/PanTypeCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKnE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAajD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAanD,CAAC;AAoBF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,CASrE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,GAAG,QAAQ,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAQzD;AAID;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,KAAK,GAAG,UAAU,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,CAWvD;AAeD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAKhD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAID,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;IAgB7D;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa;CAehE"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 盘类型计算器
|
|
4
|
+
* 处理年盘、月盘的特殊计算逻辑
|
|
5
|
+
*
|
|
6
|
+
* 年盘规则:
|
|
7
|
+
* 1. 阴阳遁:冬至后到夏至前为阳遁,夏至后到冬至前为阴遁
|
|
8
|
+
* 2. 三元:按年支确定 (子午卯酉→上元, 寅申巳亥→中元, 辰戌丑未→下元)
|
|
9
|
+
* 3. 局数:(年干支序数 % 9) + 1
|
|
10
|
+
* 4. 旬首:基于年干支
|
|
11
|
+
* 5. 天盘旋转:值符飞到年干所在宫
|
|
12
|
+
*
|
|
13
|
+
* 月盘规则:
|
|
14
|
+
* 1. 阴阳遁:按月建对应的节气确定
|
|
15
|
+
* 2. 三元:按月支确定(规则同年盘)
|
|
16
|
+
* 3. 局数:使用节气局数表
|
|
17
|
+
* 4. 旬首:基于月干支
|
|
18
|
+
* 5. 天盘旋转:值符飞到月干所在宫
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.PanTypeCalculator = exports.DI_ZHI_YUAN_MAP = exports.MONTH_JIEQI_MAP = void 0;
|
|
22
|
+
exports.getYearPanYinYangDun = getYearPanYinYangDun;
|
|
23
|
+
exports.getYearPanYuan = getYearPanYuan;
|
|
24
|
+
exports.getYearPanJuShu = getYearPanJuShu;
|
|
25
|
+
exports.getMonthPanYinYangDun = getMonthPanYinYangDun;
|
|
26
|
+
exports.getMonthPanYuan = getMonthPanYuan;
|
|
27
|
+
exports.getMonthPanJuShu = getMonthPanJuShu;
|
|
28
|
+
exports.extractZhi = extractZhi;
|
|
29
|
+
exports.isValidGanZhi = isValidGanZhi;
|
|
30
|
+
const constants_1 = require("../data/constants");
|
|
31
|
+
// ============= 常量定义 =============
|
|
32
|
+
/**
|
|
33
|
+
* 月建对应的节气映射
|
|
34
|
+
* 月建(地支)-> 对应的节气
|
|
35
|
+
*/
|
|
36
|
+
exports.MONTH_JIEQI_MAP = {
|
|
37
|
+
'寅': '立春', // 正月
|
|
38
|
+
'卯': '惊蛰', // 二月
|
|
39
|
+
'辰': '清明', // 三月
|
|
40
|
+
'巳': '立夏', // 四月
|
|
41
|
+
'午': '芒种', // 五月
|
|
42
|
+
'未': '小暑', // 六月
|
|
43
|
+
'申': '立秋', // 七月
|
|
44
|
+
'酉': '白露', // 八月
|
|
45
|
+
'戌': '寒露', // 九月
|
|
46
|
+
'亥': '立冬', // 十月
|
|
47
|
+
'子': '大雪', // 十一月
|
|
48
|
+
'丑': '小寒', // 十二月
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* 三元判定表:地支 -> 三元
|
|
52
|
+
* 子午卯酉 → 上元
|
|
53
|
+
* 寅申巳亥 → 中元
|
|
54
|
+
* 辰戌丑未 → 下元
|
|
55
|
+
*/
|
|
56
|
+
exports.DI_ZHI_YUAN_MAP = {
|
|
57
|
+
'子': '上元',
|
|
58
|
+
'午': '上元',
|
|
59
|
+
'卯': '上元',
|
|
60
|
+
'酉': '上元',
|
|
61
|
+
'寅': '中元',
|
|
62
|
+
'申': '中元',
|
|
63
|
+
'巳': '中元',
|
|
64
|
+
'亥': '中元',
|
|
65
|
+
'辰': '下元',
|
|
66
|
+
'戌': '下元',
|
|
67
|
+
'丑': '下元',
|
|
68
|
+
'未': '下元',
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* 阳遁节气列表(冬至到芒种)
|
|
72
|
+
*/
|
|
73
|
+
const YANG_DUN_JIEQI = [
|
|
74
|
+
'冬至', '小寒', '大寒', '立春', '雨水', '惊蛰',
|
|
75
|
+
'春分', '清明', '谷雨', '立夏', '小满', '芒种'
|
|
76
|
+
];
|
|
77
|
+
/**
|
|
78
|
+
* 阴遁节气列表(夏至到大雪)
|
|
79
|
+
*/
|
|
80
|
+
const YIN_DUN_JIEQI = [
|
|
81
|
+
'夏至', '小暑', '大暑', '立秋', '处暑', '白露',
|
|
82
|
+
'秋分', '寒露', '霜降', '立冬', '小雪', '大雪'
|
|
83
|
+
];
|
|
84
|
+
// ============= 年盘计算 =============
|
|
85
|
+
/**
|
|
86
|
+
* 年盘阴阳遁判断
|
|
87
|
+
* 冬至当天为阳遁起始,夏至当天为阴遁起始
|
|
88
|
+
* @param currentJieQi 当前节气
|
|
89
|
+
* @returns 阴阳遁
|
|
90
|
+
*/
|
|
91
|
+
function getYearPanYinYangDun(currentJieQi) {
|
|
92
|
+
if (YANG_DUN_JIEQI.includes(currentJieQi)) {
|
|
93
|
+
return '阳遁';
|
|
94
|
+
}
|
|
95
|
+
if (YIN_DUN_JIEQI.includes(currentJieQi)) {
|
|
96
|
+
return '阴遁';
|
|
97
|
+
}
|
|
98
|
+
// 默认返回阳遁(不应该发生)
|
|
99
|
+
return '阳遁';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 年盘三元判断
|
|
103
|
+
* 根据年支确定三元
|
|
104
|
+
* @param yearZhi 年支
|
|
105
|
+
* @returns 三元
|
|
106
|
+
*/
|
|
107
|
+
function getYearPanYuan(yearZhi) {
|
|
108
|
+
return exports.DI_ZHI_YUAN_MAP[yearZhi];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 年盘局数计算
|
|
112
|
+
* 公式:(年干支在六十甲子中的序数 % 9) + 1
|
|
113
|
+
* 注意:序数从0开始,所以甲子=0, 乙丑=1, ...
|
|
114
|
+
* @param yearGanZhi 年干支(如 "甲辰")
|
|
115
|
+
* @returns 局数 (1-9)
|
|
116
|
+
*/
|
|
117
|
+
function getYearPanJuShu(yearGanZhi) {
|
|
118
|
+
const index = constants_1.JIA_ZI_60.indexOf(yearGanZhi);
|
|
119
|
+
if (index === -1) {
|
|
120
|
+
throw new Error(`无效的年干支: ${yearGanZhi}`);
|
|
121
|
+
}
|
|
122
|
+
// 公式: (index % 9) + 1,确保结果在 1-9 之间
|
|
123
|
+
const ju = (index % 9) + 1;
|
|
124
|
+
return ju;
|
|
125
|
+
}
|
|
126
|
+
// ============= 月盘计算 =============
|
|
127
|
+
/**
|
|
128
|
+
* 月盘阴阳遁判断
|
|
129
|
+
* 根据月建对应的节气确定
|
|
130
|
+
* @param monthZhi 月支(月建)
|
|
131
|
+
* @returns 阴阳遁
|
|
132
|
+
*/
|
|
133
|
+
function getMonthPanYinYangDun(monthZhi) {
|
|
134
|
+
const jieQi = exports.MONTH_JIEQI_MAP[monthZhi];
|
|
135
|
+
const jieQiInfo = constants_1.JIEQI_JU_MAP[jieQi];
|
|
136
|
+
if (!jieQiInfo) {
|
|
137
|
+
throw new Error(`无法找到节气信息: ${jieQi}`);
|
|
138
|
+
}
|
|
139
|
+
return jieQiInfo.dun;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 月盘三元判断
|
|
143
|
+
* 根据月支确定三元(规则同年盘)
|
|
144
|
+
* @param monthZhi 月支
|
|
145
|
+
* @returns 三元
|
|
146
|
+
*/
|
|
147
|
+
function getMonthPanYuan(monthZhi) {
|
|
148
|
+
return exports.DI_ZHI_YUAN_MAP[monthZhi];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 月盘局数计算
|
|
152
|
+
* 使用月建对应的节气,结合三元查找局数
|
|
153
|
+
* @param monthZhi 月支(月建)
|
|
154
|
+
* @returns 局数 (1-9)
|
|
155
|
+
*/
|
|
156
|
+
function getMonthPanJuShu(monthZhi) {
|
|
157
|
+
const jieQi = exports.MONTH_JIEQI_MAP[monthZhi];
|
|
158
|
+
const yuan = getMonthPanYuan(monthZhi);
|
|
159
|
+
const jieQiInfo = constants_1.JIEQI_JU_MAP[jieQi];
|
|
160
|
+
if (!jieQiInfo) {
|
|
161
|
+
throw new Error(`无法找到节气信息: ${jieQi}`);
|
|
162
|
+
}
|
|
163
|
+
const yuanIndex = getYuanIndex(yuan);
|
|
164
|
+
return jieQiInfo.ju[yuanIndex];
|
|
165
|
+
}
|
|
166
|
+
// ============= 辅助函数 =============
|
|
167
|
+
/**
|
|
168
|
+
* 获取元索引
|
|
169
|
+
*/
|
|
170
|
+
function getYuanIndex(yuan) {
|
|
171
|
+
switch (yuan) {
|
|
172
|
+
case '上元': return 0;
|
|
173
|
+
case '中元': return 1;
|
|
174
|
+
case '下元': return 2;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* 从干支字符串提取地支
|
|
179
|
+
* @param ganZhi 干支字符串(如 "甲子")
|
|
180
|
+
* @returns 地支
|
|
181
|
+
*/
|
|
182
|
+
function extractZhi(ganZhi) {
|
|
183
|
+
if (ganZhi.length !== 2) {
|
|
184
|
+
throw new Error(`无效的干支格式: ${ganZhi}`);
|
|
185
|
+
}
|
|
186
|
+
return ganZhi.charAt(1);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 验证干支是否有效
|
|
190
|
+
* @param ganZhi 干支字符串
|
|
191
|
+
* @returns 是否有效
|
|
192
|
+
*/
|
|
193
|
+
function isValidGanZhi(ganZhi) {
|
|
194
|
+
return constants_1.JIA_ZI_60.includes(ganZhi);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 盘类型计算器
|
|
198
|
+
* 统一处理年盘、月盘的阴阳遁、三元、局数计算
|
|
199
|
+
*/
|
|
200
|
+
class PanTypeCalculator {
|
|
201
|
+
/**
|
|
202
|
+
* 计算年盘参数
|
|
203
|
+
* @param params 年盘参数
|
|
204
|
+
* @returns 阴阳遁、三元、局数
|
|
205
|
+
*/
|
|
206
|
+
static calculateYearPan(params) {
|
|
207
|
+
const { yearGanZhi, currentJieQi } = params;
|
|
208
|
+
if (!isValidGanZhi(yearGanZhi)) {
|
|
209
|
+
throw new Error(`无效的年干支: ${yearGanZhi}`);
|
|
210
|
+
}
|
|
211
|
+
const yearZhi = extractZhi(yearGanZhi);
|
|
212
|
+
return {
|
|
213
|
+
yinYangDun: getYearPanYinYangDun(currentJieQi),
|
|
214
|
+
yuan: getYearPanYuan(yearZhi),
|
|
215
|
+
juShu: getYearPanJuShu(yearGanZhi),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* 计算月盘参数
|
|
220
|
+
* @param params 月盘参数
|
|
221
|
+
* @returns 阴阳遁、三元、局数
|
|
222
|
+
*/
|
|
223
|
+
static calculateMonthPan(params) {
|
|
224
|
+
const { monthGanZhi } = params;
|
|
225
|
+
if (!isValidGanZhi(monthGanZhi)) {
|
|
226
|
+
throw new Error(`无效的月干支: ${monthGanZhi}`);
|
|
227
|
+
}
|
|
228
|
+
const monthZhi = extractZhi(monthGanZhi);
|
|
229
|
+
return {
|
|
230
|
+
yinYangDun: getMonthPanYinYangDun(monthZhi),
|
|
231
|
+
yuan: getMonthPanYuan(monthZhi),
|
|
232
|
+
juShu: getMonthPanJuShu(monthZhi),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
exports.PanTypeCalculator = PanTypeCalculator;
|
|
237
|
+
//# sourceMappingURL=PanTypeCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanTypeCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/PanTypeCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 三奇六仪计算器
|
|
3
|
+
* 计算天盘布局(时干/日干带动的天盘飞布)
|
|
4
|
+
*/
|
|
5
|
+
import type { GongWei, TianGan, YinYangDun } from '../types';
|
|
6
|
+
export interface TianPanResult {
|
|
7
|
+
/** 各宫天盘干 (宫位 -> 干) */
|
|
8
|
+
gongGan: Record<GongWei, TianGan>;
|
|
9
|
+
/** 干找宫位映射 (干 -> 宫位) */
|
|
10
|
+
ganGong: Record<TianGan, GongWei>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 三奇六仪计算器
|
|
14
|
+
* 负责计算天盘布局
|
|
15
|
+
*/
|
|
16
|
+
export declare class SanQiLiuYiCalculator {
|
|
17
|
+
/**
|
|
18
|
+
* 计算天盘布局
|
|
19
|
+
* @param diPanGanGong 地盘干->宫位映射
|
|
20
|
+
* @param hourGanZhi 时干支(时盘)或日干支(日盘)
|
|
21
|
+
* @param yinYangDun 阴阳遁
|
|
22
|
+
* @returns 天盘各宫的干
|
|
23
|
+
*
|
|
24
|
+
* 原理:
|
|
25
|
+
* 1. 找到时干(或日干)在地盘的落宫
|
|
26
|
+
* 2. 以该宫为起点,将三奇六仪按洛书顺序飞布
|
|
27
|
+
* 3. 阳遁顺飞,阴遁逆飞
|
|
28
|
+
*
|
|
29
|
+
* 例如:
|
|
30
|
+
* - 阳遁一局,时干为庚
|
|
31
|
+
* - 庚在地盘震三宫
|
|
32
|
+
* - 则天盘从震三宫开始顺布:戊-震3, 己-巽4, 庚-离9...
|
|
33
|
+
*/
|
|
34
|
+
static calculate(diPanGanGong: Record<TianGan, GongWei>, hourGanZhi: string, yinYangDun: YinYangDun): TianPanResult;
|
|
35
|
+
/**
|
|
36
|
+
* 获取遁甲干
|
|
37
|
+
* 甲遁于六仪之下,需要根据时干支确定
|
|
38
|
+
*/
|
|
39
|
+
private static getDunGan;
|
|
40
|
+
/**
|
|
41
|
+
* 根据起始宫位和步数计算目标宫位(9宫飞布)
|
|
42
|
+
* 洛书9宫顺序:1(坎) -> 8(艮) -> 3(震) -> 4(巽) -> 5(中) -> 9(离) -> 2(坤) -> 7(兑) -> 6(乾)
|
|
43
|
+
*/
|
|
44
|
+
private static getGongByStep;
|
|
45
|
+
/**
|
|
46
|
+
* 根据天干找天盘落宫
|
|
47
|
+
*/
|
|
48
|
+
static findGongByGan(ganGong: Record<TianGan, GongWei>, gan: TianGan): GongWei;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=SanQiLiuYiCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SanQiLiuYiCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/SanQiLiuYiCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAU7D,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,SAAS,CACd,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,GACrB,aAAa;IA4BhB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAWxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAU5B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO;CAI/E"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 三奇六仪计算器
|
|
4
|
+
* 计算天盘布局(时干/日干带动的天盘飞布)
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SanQiLiuYiCalculator = void 0;
|
|
8
|
+
const constants_1 = require("../data/constants");
|
|
9
|
+
/**
|
|
10
|
+
* 三奇六仪计算器
|
|
11
|
+
* 负责计算天盘布局
|
|
12
|
+
*/
|
|
13
|
+
class SanQiLiuYiCalculator {
|
|
14
|
+
/**
|
|
15
|
+
* 计算天盘布局
|
|
16
|
+
* @param diPanGanGong 地盘干->宫位映射
|
|
17
|
+
* @param hourGanZhi 时干支(时盘)或日干支(日盘)
|
|
18
|
+
* @param yinYangDun 阴阳遁
|
|
19
|
+
* @returns 天盘各宫的干
|
|
20
|
+
*
|
|
21
|
+
* 原理:
|
|
22
|
+
* 1. 找到时干(或日干)在地盘的落宫
|
|
23
|
+
* 2. 以该宫为起点,将三奇六仪按洛书顺序飞布
|
|
24
|
+
* 3. 阳遁顺飞,阴遁逆飞
|
|
25
|
+
*
|
|
26
|
+
* 例如:
|
|
27
|
+
* - 阳遁一局,时干为庚
|
|
28
|
+
* - 庚在地盘震三宫
|
|
29
|
+
* - 则天盘从震三宫开始顺布:戊-震3, 己-巽4, 庚-离9...
|
|
30
|
+
*/
|
|
31
|
+
static calculate(diPanGanGong, hourGanZhi, yinYangDun) {
|
|
32
|
+
const isYang = yinYangDun === '阳遁';
|
|
33
|
+
const hourGan = hourGanZhi.charAt(0);
|
|
34
|
+
// 时干对应的遁甲干
|
|
35
|
+
// 如果时干是甲,需要找到该甲的旬首,然后找到对应的六仪
|
|
36
|
+
const dunGan = this.getDunGan(hourGan, hourGanZhi);
|
|
37
|
+
// 找到遁甲干在地盘的落宫
|
|
38
|
+
let startGong = diPanGanGong[dunGan];
|
|
39
|
+
if (startGong === 5) {
|
|
40
|
+
startGong = constants_1.ZHONG_GONG_JI; // 中宫寄坤二
|
|
41
|
+
}
|
|
42
|
+
const gongGan = {};
|
|
43
|
+
const ganGong = {};
|
|
44
|
+
// 从起始宫开始,依次布入三奇六仪(9干飞布9宫)
|
|
45
|
+
for (let i = 0; i < 9; i++) {
|
|
46
|
+
const gan = constants_1.SAN_QI_LIU_YI[i];
|
|
47
|
+
const gong = this.getGongByStep(startGong, i, isYang);
|
|
48
|
+
gongGan[gong] = gan;
|
|
49
|
+
ganGong[gan] = gong;
|
|
50
|
+
}
|
|
51
|
+
return { gongGan, ganGong };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 获取遁甲干
|
|
55
|
+
* 甲遁于六仪之下,需要根据时干支确定
|
|
56
|
+
*/
|
|
57
|
+
static getDunGan(hourGan, hourGanZhi) {
|
|
58
|
+
if (hourGan !== '甲') {
|
|
59
|
+
// 非甲时,直接返回时干
|
|
60
|
+
return hourGan;
|
|
61
|
+
}
|
|
62
|
+
// 甲时,需要找到旬首对应的六仪
|
|
63
|
+
const xunShou = (0, constants_1.getXunShou)(hourGanZhi);
|
|
64
|
+
return (0, constants_1.getLiuYiGan)(xunShou);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 根据起始宫位和步数计算目标宫位(9宫飞布)
|
|
68
|
+
* 洛书9宫顺序:1(坎) -> 8(艮) -> 3(震) -> 4(巽) -> 5(中) -> 9(离) -> 2(坤) -> 7(兑) -> 6(乾)
|
|
69
|
+
*/
|
|
70
|
+
static getGongByStep(startGong, steps, isYang) {
|
|
71
|
+
const startIdx = (0, constants_1.getLuoShuIndex9)(startGong);
|
|
72
|
+
const targetIdx = isYang
|
|
73
|
+
? (startIdx + steps) % 9
|
|
74
|
+
: ((startIdx - steps) % 9 + 9) % 9;
|
|
75
|
+
return (0, constants_1.getLuoShuGong9)(targetIdx);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 根据天干找天盘落宫
|
|
79
|
+
*/
|
|
80
|
+
static findGongByGan(ganGong, gan) {
|
|
81
|
+
const gong = ganGong[gan];
|
|
82
|
+
return gong === 5 ? constants_1.ZHONG_GONG_JI : gong;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.SanQiLiuYiCalculator = SanQiLiuYiCalculator;
|
|
86
|
+
//# sourceMappingURL=SanQiLiuYiCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SanQiLiuYiCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/SanQiLiuYiCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAO2B;AAS3B;;;GAGG;AACH,MAAa,oBAAoB;IAC/B;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,SAAS,CACd,YAAsC,EACtC,UAAkB,EAClB,UAAsB;QAEtB,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAY,CAAC;QAEhD,WAAW;QACX,6BAA6B;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEnD,cAAc;QACd,IAAI,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,SAAS,GAAG,yBAAa,CAAC,CAAC,QAAQ;QACrC,CAAC;QAED,MAAM,OAAO,GAA6B,EAA8B,CAAC;QACzE,MAAM,OAAO,GAA6B,EAA8B,CAAC;QAEzE,0BAA0B;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,yBAAa,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,SAAS,CAAC,OAAgB,EAAE,UAAkB;QAC3D,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,aAAa;YACb,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAA,sBAAU,EAAC,UAAU,CAAC,CAAC;QACvC,OAAO,IAAA,uBAAW,EAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,aAAa,CAAC,SAAkB,EAAE,KAAa,EAAE,MAAe;QAC7E,MAAM,QAAQ,GAAG,IAAA,2BAAe,EAAC,SAAS,CAAC,CAAC;QAE5C,MAAM,SAAS,GAAG,MAAM;YACtB,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;YACxB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAErC,OAAO,IAAA,0BAAc,EAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAiC,EAAE,GAAY;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;CACF;AAtFD,oDAsFC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 神煞计算器
|
|
3
|
+
*
|
|
4
|
+
* 负责计算奇门盘中的各类神煞
|
|
5
|
+
*/
|
|
6
|
+
import type { ShenShaInfo, QimenResult, GongWei } from '../types';
|
|
7
|
+
export declare class ShenShaCalculator {
|
|
8
|
+
/**
|
|
9
|
+
* 计算所有神煞
|
|
10
|
+
*
|
|
11
|
+
* @param result 奇门盘结果
|
|
12
|
+
* @returns 神煞信息列表
|
|
13
|
+
*/
|
|
14
|
+
static calculateAll(result: QimenResult): ShenShaInfo[];
|
|
15
|
+
/**
|
|
16
|
+
* 将神煞分配到各宫
|
|
17
|
+
*
|
|
18
|
+
* @param shenShaList 神煞列表
|
|
19
|
+
* @returns 按宫位分组的神煞
|
|
20
|
+
*/
|
|
21
|
+
static distributeToGongs(shenShaList: ShenShaInfo[]): Record<GongWei, ShenShaInfo[]>;
|
|
22
|
+
/**
|
|
23
|
+
* 计算天乙贵人
|
|
24
|
+
*/
|
|
25
|
+
private static calcTianYiGuiRen;
|
|
26
|
+
/**
|
|
27
|
+
* 计算驿马
|
|
28
|
+
*/
|
|
29
|
+
private static calcYiMa;
|
|
30
|
+
/**
|
|
31
|
+
* 计算华盖
|
|
32
|
+
*/
|
|
33
|
+
private static calcHuaGai;
|
|
34
|
+
/**
|
|
35
|
+
* 计算月德
|
|
36
|
+
*/
|
|
37
|
+
private static calcYueDe;
|
|
38
|
+
/**
|
|
39
|
+
* 计算禄神
|
|
40
|
+
*/
|
|
41
|
+
private static calcLuShen;
|
|
42
|
+
/**
|
|
43
|
+
* 计算桃花(咸池)
|
|
44
|
+
*/
|
|
45
|
+
private static calcTaoHua;
|
|
46
|
+
/**
|
|
47
|
+
* 计算天医
|
|
48
|
+
*/
|
|
49
|
+
private static calcTianYi;
|
|
50
|
+
/**
|
|
51
|
+
* 计算太岁
|
|
52
|
+
*/
|
|
53
|
+
private static calcTaiSui;
|
|
54
|
+
/**
|
|
55
|
+
* 计算羊刃
|
|
56
|
+
*/
|
|
57
|
+
private static calcYangRen;
|
|
58
|
+
/**
|
|
59
|
+
* 计算丁马
|
|
60
|
+
*
|
|
61
|
+
* 丁奇落宫即为丁马
|
|
62
|
+
*/
|
|
63
|
+
private static calcDingMa;
|
|
64
|
+
/**
|
|
65
|
+
* 计算神煞总评分
|
|
66
|
+
*
|
|
67
|
+
* @param shenShaList 神煞列表
|
|
68
|
+
* @returns 总评分
|
|
69
|
+
*/
|
|
70
|
+
static calcTotalScore(shenShaList: ShenShaInfo[]): number;
|
|
71
|
+
/**
|
|
72
|
+
* 按吉凶类型分组神煞
|
|
73
|
+
*/
|
|
74
|
+
static groupByType(shenShaList: ShenShaInfo[]): {
|
|
75
|
+
ji: ShenShaInfo[];
|
|
76
|
+
xiong: ShenShaInfo[];
|
|
77
|
+
zhongxing: ShenShaInfo[];
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ShenShaCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShenShaCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/ShenShaCalculator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,OAAO,EAGR,MAAM,UAAU,CAAC;AAqClB,qBAAa,iBAAiB;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE;IA8BvD;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,WAAW,EAAE,WAAW,EAAE,GACzB,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;IAcjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAqB/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAevB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAoCzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAgBxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAezB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAezB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAezB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAYzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAe1B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAYzB;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM;IAwBzD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG;QAC9C,EAAE,EAAE,WAAW,EAAE,CAAC;QAClB,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,SAAS,EAAE,WAAW,EAAE,CAAC;KAC1B;CAqBF"}
|