UNPKG

yijing-bazi-mcp

Version:

易经八字分析 MCP 服务器 - 提供传统命理分析和易经卦象解读的AI工具

1,792 lines (1,592 loc) 66.1 kB
/** * 八字分析引擎 * 负责八字排盘、分析和运势预测 */ const { Lunar } = require('lunar-javascript'); const moment = require('moment-timezone'); const BaziDatabase = require('../data/bazi-database.js'); const BaziCalculator = require('../utils/bazi-calculator.js'); const Logger = require('../utils/logger.js'); class BaziEngine { constructor() { this.baziDB = new BaziDatabase(); this.calculator = new BaziCalculator(); this.logger = new Logger(); } /** * 生成八字排盘 * @param {Object} params - 参数对象 * @param {string} params.birth_datetime - 出生时间 (ISO格式) * @param {string} params.timezone - 时区 * @param {string} params.gender - 性别 (male/female) * @param {string} [params.location] - 出生地点 * @param {boolean} [params.use_true_solar_time] - 是否使用真太阳时 * @param {boolean} [params.is_lunar] - 是否为农历日期 * @returns {Object} 八字排盘结果 */ async generateChart({ birth_datetime, timezone, gender, location, use_true_solar_time = false, is_lunar = false }) { try { this.logger.info('开始生成八字排盘', { birth_datetime, timezone, gender }); // 转换时间 const birthMoment = moment.tz(birth_datetime, timezone); // 真太阳时校正 let adjustedTime = birthMoment; if (use_true_solar_time && location) { adjustedTime = this.calculator.adjustForTrueSolarTime(birthMoment, location); } // 根据is_lunar参数处理农历/公历日期 let lunar, solar; if (is_lunar) { // 如果输入的是农历日期,需要先创建农历对象再转换为公历 const year = adjustedTime.year(); const month = adjustedTime.month() + 1; // moment月份从0开始 const day = adjustedTime.date(); const hour = adjustedTime.hour(); const minute = adjustedTime.minute(); lunar = Lunar.fromYmdHms(year, month, day, hour, minute, 0); solar = lunar.getSolar(); // 更新adjustedTime为转换后的公历时间 adjustedTime = moment.tz(`${solar.getYear()}-${solar.getMonth()}-${solar.getDay()} ${hour}:${minute}:00`, timezone); } else { // 如果输入的是公历日期,直接从公历创建农历对象 lunar = Lunar.fromDate(adjustedTime.toDate()); solar = lunar.getSolar(); } // 计算四柱八字 const fourPillars = this.calculateFourPillars(lunar, adjustedTime); // 计算大运 const majorLuck = this.calculateMajorLuck(fourPillars, gender, lunar); // 计算流年 const annualLuck = this.calculateAnnualLuck(adjustedTime.year()); // 计算神煞 const spirits = this.calculateSpirits(fourPillars); // 五行分析 const fiveElementsAnalysis = this.analyzeFiveElements(fourPillars); // 十神分析 const tenGodsAnalysis = this.analyzeTenGods(fourPillars); const result = { timestamp: new Date().toISOString(), birth_info: { solar_datetime: solar.toYmdHms(), lunar_date: lunar.toFullString(), timezone: timezone, gender: gender, location: location, use_true_solar_time: use_true_solar_time }, four_pillars: fourPillars, major_luck: majorLuck, annual_luck: annualLuck, spirits_and_stars: spirits, five_elements: fiveElementsAnalysis, ten_gods: tenGodsAnalysis, chart_quality: this.evaluateChartQuality(fourPillars, fiveElementsAnalysis), basic_personality: this.analyzeBasicPersonality(fourPillars, fiveElementsAnalysis) }; this.logger.info('八字排盘生成成功'); return result; } catch (error) { this.logger.error('八字排盘生成失败', { error: error.message }); throw error; } } /** * 分析八字 * @param {Object} params - 参数对象 * @param {Object} params.chart - 八字排盘数据 * @param {string} params.analysis_type - 分析类型 * @param {Array} [params.focus_areas] - 关注领域 * @param {string} [params.detail_level] - 详细程度 * @returns {Object} 分析结果 */ async analyzeChart({ chart, analysis_type, focus_areas = [], detail_level = 'standard' }) { try { this.logger.info('开始分析八字', { analysis_type, focus_areas, detail_level }); let analysis = {}; // 支持数组类型的analysis_type const types = Array.isArray(analysis_type) ? analysis_type : [analysis_type]; for (const type of types) { switch (type) { case 'personality': analysis.personality = await this.analyzePersonality(chart, detail_level); break; case 'career': analysis.career = await this.analyzeCareer(chart, detail_level); break; case 'wealth': analysis.wealth = await this.analyzeWealth(chart, detail_level); break; case 'relationship': analysis.relationship = await this.analyzeRelationship(chart, detail_level); break; case 'health': analysis.health = await this.analyzeHealth(chart, detail_level); break; case 'comprehensive': analysis.comprehensive = await this.analyzeComprehensive(chart, focus_areas, detail_level); break; default: throw new Error(`不支持的分析类型: ${type}`); } } const result = { timestamp: new Date().toISOString(), analysis_type: analysis_type, focus_areas: focus_areas, detail_level: detail_level, analysis: analysis, strengths: this.identifyStrengths(chart, analysis), challenges: this.identifyChallenges(chart, analysis), recommendations: this.generateRecommendations(chart, analysis, analysis_type) }; this.logger.info('八字分析完成'); return result; } catch (error) { this.logger.error('八字分析失败', { error: error.message }); throw error; } } /** * 识别优势 * @param {Object} chart - 八字排盘数据 * @param {Object} analysis - 分析结果 * @returns {Array} 优势列表 */ identifyStrengths(chart, analysis) { return [ '性格稳重可靠', '执行力强', '学习能力好', '人际关系和谐', '做事有条理' ]; } /** * 识别挑战 * @param {Object} chart - 八字排盘数据 * @param {Object} analysis - 分析结果 * @returns {Array} 挑战列表 */ identifyChallenges(chart, analysis) { return [ '决策速度需要提升', '创新思维有待加强', '风险承受能力较低', '表达能力需要改善', '适应变化能力待提高' ]; } /** * 生成建议 * @param {Object} chart - 八字排盘数据 * @param {Object} analysis - 分析结果 * @param {string} analysisType - 分析类型 * @returns {Array} 建议列表 */ generateRecommendations(chart, analysis, analysisType) { const baseRecommendations = [ '保持稳重的性格优势', '培养更快的决策能力', '增强创新思维', '提升沟通表达能力', '适度承担风险' ]; // 根据分析类型添加特定建议 if (Array.isArray(analysisType)) { if (analysisType.includes('career')) { baseRecommendations.push('专注专业技能提升', '建立良好的职场人脉'); } if (analysisType.includes('personality')) { baseRecommendations.push('培养自信心', '学会主动表达'); } } else { switch (analysisType) { case 'career': baseRecommendations.push('专注专业技能提升', '建立良好的职场人脉'); break; case 'personality': baseRecommendations.push('培养自信心', '学会主动表达'); break; case 'wealth': baseRecommendations.push('学习投资理财', '开拓多元收入'); break; case 'relationship': baseRecommendations.push('增强情感表达', '培养浪漫情趣'); break; case 'health': baseRecommendations.push('保持规律作息', '适量运动锻炼'); break; } } return baseRecommendations; } /** * 运势预测 * @param {Object} params - 参数对象 * @param {Object} params.chart - 八字排盘数据 * @param {string} params.period_type - 预测周期类型 * @param {string} [params.start_date] - 开始日期 * @param {string} [params.end_date] - 结束日期 * @param {Array} [params.focus_aspects] - 关注方面 * @returns {Object} 运势预测结果 */ async forecastLuck({ chart, period_type, start_date, end_date, focus_aspects = [] }) { try { this.logger.info('开始运势预测', { period_type, start_date, end_date }); const currentDate = start_date ? moment(start_date) : moment(); let forecast = {}; switch (period_type) { case 'monthly': forecast = await this.forecastMonthly(chart, currentDate, focus_aspects); break; case 'yearly': forecast = await this.forecastYearly(chart, currentDate, focus_aspects); break; case 'decade': forecast = await this.forecastDecade(chart, currentDate, focus_aspects); break; case 'custom': if (!start_date || !end_date) { throw new Error('自定义预测需要提供开始和结束日期'); } forecast = await this.forecastCustomPeriod(chart, start_date, end_date, focus_aspects); break; default: throw new Error(`不支持的预测周期类型: ${period_type}`); } const result = { timestamp: new Date().toISOString(), period_type: period_type, forecast_period: { start: start_date || currentDate.format('YYYY-MM-DD'), end: end_date || this.calculateEndDate(currentDate, period_type) }, focus_aspects: focus_aspects, forecast: forecast, key_periods: this.identifyKeyPeriods(chart, forecast), overall_trend: this.analyzeOverallTrend(forecast), actionable_advice: this.generateActionableAdvice(forecast, focus_aspects) }; this.logger.info('运势预测完成'); return result; } catch (error) { this.logger.error('运势预测失败', { error: error.message }); throw error; } } /** * 计算四柱八字 * @param {Object} lunar - 农历对象 * @param {Object} adjustedTime - 调整后的时间 * @returns {Object} 四柱八字 */ calculateFourPillars(lunar, adjustedTime) { const year = lunar.getYearInGanZhi(); const month = lunar.getMonthInGanZhi(); const day = lunar.getDayInGanZhi(); const hour = lunar.getTimeZhi(); // 获取时干 const hourGan = this.calculator.getHourGan(day.charAt(0), adjustedTime.hour()); const hourPillar = hourGan + hour; return { year: { pillar: year, heavenly_stem: year.charAt(0), earthly_branch: year.charAt(1), element: this.calculator.getGanElement(year.charAt(0)), yin_yang: this.calculator.getGanYinYang(year.charAt(0)) }, month: { pillar: month, heavenly_stem: month.charAt(0), earthly_branch: month.charAt(1), element: this.calculator.getGanElement(month.charAt(0)), yin_yang: this.calculator.getGanYinYang(month.charAt(0)) }, day: { pillar: day, heavenly_stem: day.charAt(0), earthly_branch: day.charAt(1), element: this.calculator.getGanElement(day.charAt(0)), yin_yang: this.calculator.getGanYinYang(day.charAt(0)), is_day_master: true }, hour: { pillar: hourPillar, heavenly_stem: hourGan, earthly_branch: hour, element: this.calculator.getGanElement(hourGan), yin_yang: this.calculator.getGanYinYang(hourGan) } }; } /** * 计算大运 * @param {Object} fourPillars - 四柱八字 * @param {string} gender - 性别 * @param {Object} lunar - 农历对象 * @returns {Object} 大运信息 */ calculateMajorLuck(fourPillars, gender, lunar) { const yearGan = fourPillars.year.heavenly_stem; const isYangYear = this.calculator.getGanYinYang(yearGan) === 'yang'; // 确定大运顺逆 const isForward = (gender === 'male' && isYangYear) || (gender === 'female' && !isYangYear); // 计算起运年龄 const startAge = this.calculator.calculateLuckStartAge(lunar, gender); // 生成大运序列 const majorLuckPeriods = this.calculator.generateMajorLuckSequence( fourPillars.month, isForward, startAge ); return { start_age: startAge, direction: isForward ? 'forward' : 'backward', periods: majorLuckPeriods }; } /** * 计算流年 * @param {number} currentYear - 当前年份 * @returns {Array} 流年信息 */ calculateAnnualLuck(currentYear) { const annualLuck = []; for (let i = 0; i < 10; i++) { const year = currentYear + i; const yearGanZhi = this.calculator.getYearGanZhi(year); annualLuck.push({ year: year, gan_zhi: yearGanZhi, heavenly_stem: yearGanZhi.charAt(0), earthly_branch: yearGanZhi.charAt(1), element: this.calculator.getGanElement(yearGanZhi.charAt(0)), yin_yang: this.calculator.getGanYinYang(yearGanZhi.charAt(0)) }); } return annualLuck; } /** * 性格分析 * @param {Object} chart - 八字排盘数据 * @param {string} detail_level - 详细程度 * @returns {Object} 性格分析结果 */ async analyzePersonality(chart, detail_level = 'standard') { const { four_pillars, five_elements, ten_gods } = chart; return { core_traits: this.analyzeCoreTraits(four_pillars, five_elements), behavioral_patterns: this.analyzeBehavioralPatterns(ten_gods), emotional_characteristics: this.analyzeEmotionalCharacteristics(five_elements), social_tendencies: this.analyzeSocialTendencies(four_pillars), strengths: this.identifyPersonalityStrengths(chart), weaknesses: this.identifyPersonalityWeaknesses(chart), development_suggestions: this.generatePersonalityDevelopmentSuggestions(chart) }; } /** * 事业分析 * @param {Object} chart - 八字排盘数据 * @param {string} detail_level - 详细程度 * @returns {Object} 事业分析结果 */ async analyzeCareer(chart, detail_level = 'standard') { const { four_pillars, five_elements, ten_gods } = chart; return { career_potential: this.analyzeCareerPotential(four_pillars, ten_gods), suitable_industries: this.identifySuitableIndustries(five_elements), leadership_qualities: this.analyzeLeadershipQualities(ten_gods), work_style: this.analyzeWorkStyle(four_pillars), career_challenges: this.identifyCareerChallenges(chart), development_timeline: this.analyzeCareerTimeline(chart), success_factors: this.identifyCareerSuccessFactors(chart) }; } /** * 财运分析 * @param {Object} chart - 八字排盘数据 * @param {string} detail_level - 详细程度 * @returns {Object} 财运分析结果 */ async analyzeWealth(chart, detail_level = 'standard') { const { four_pillars, five_elements, ten_gods } = chart; return { wealth_potential: this.analyzeWealthPotential(ten_gods), money_management: this.analyzeMoneyManagement(four_pillars), investment_tendencies: this.analyzeInvestmentTendencies(five_elements), wealth_sources: this.identifyWealthSources(ten_gods), financial_challenges: this.identifyFinancialChallenges(chart), wealth_timing: this.analyzeWealthTiming(chart), financial_advice: this.generateFinancialAdvice(chart) }; } /** * 感情分析 * @param {Object} chart - 八字排盘数据 * @param {string} detail_level - 详细程度 * @returns {Object} 感情分析结果 */ async analyzeRelationship(chart, detail_level = 'standard') { const { four_pillars, five_elements, ten_gods } = chart; return { relationship_patterns: this.analyzeRelationshipPatterns(four_pillars), partner_compatibility: this.analyzePartnerCompatibility(five_elements), emotional_needs: this.analyzeEmotionalNeeds(ten_gods), relationship_challenges: this.identifyRelationshipChallenges(chart), marriage_timing: this.analyzeMarriageTiming(chart), relationship_advice: this.generateRelationshipAdvice(chart) }; } /** * 健康分析 * @param {Object} chart - 八字排盘数据 * @param {string} detail_level - 详细程度 * @returns {Object} 健康分析结果 */ async analyzeHealth(chart, detail_level = 'standard') { const { four_pillars, five_elements } = chart; return { constitution_type: this.analyzeConstitutionType(five_elements), health_tendencies: this.analyzeHealthTendencies(four_pillars), vulnerable_areas: this.identifyVulnerableAreas(five_elements), seasonal_influences: this.analyzeSeasonalHealthInfluences(chart), preventive_measures: this.generatePreventiveMeasures(chart), lifestyle_recommendations: this.generateLifestyleRecommendations(chart) }; } /** * 综合分析 * @param {Object} chart - 八字排盘数据 * @param {Array} focus_areas - 关注领域 * @param {string} detail_level - 详细程度 * @returns {Object} 综合分析结果 */ async analyzeComprehensive(chart, focus_areas = [], detail_level = 'standard') { const analysis = { overall_assessment: this.generateOverallAssessment(chart), life_themes: this.identifyLifeThemes(chart), major_influences: this.analyzeMajorInfluences(chart), life_cycles: this.analyzeLifeCycles(chart), destiny_patterns: this.analyzeDestinyPatterns(chart) }; // 根据关注领域添加专项分析 for (const area of focus_areas) { switch (area) { case 'personality': analysis.personality = await this.analyzePersonality(chart, detail_level); break; case 'career': analysis.career = await this.analyzeCareer(chart, detail_level); break; case 'wealth': analysis.wealth = await this.analyzeWealth(chart, detail_level); break; case 'relationship': analysis.relationship = await this.analyzeRelationship(chart, detail_level); break; case 'health': analysis.health = await this.analyzeHealth(chart, detail_level); break; } } return analysis; } // 辅助方法 - 性格分析相关 analyzeCoreTraits(fourPillars, fiveElements) { return ['稳重', '理性', '务实', '谨慎']; } analyzeBehavioralPatterns(tenGods) { return ['深思熟虑', '循序渐进', '注重细节']; } analyzeEmotionalCharacteristics(fiveElements) { return ['情绪稳定', '内敛含蓄', '重视感情']; } analyzeSocialTendencies(fourPillars) { return ['重视人际关系', '善于合作', '值得信赖']; } identifyPersonalityStrengths(chart) { return ['可靠性强', '执行力好', '学习能力强']; } identifyPersonalityWeaknesses(chart) { return ['决策较慢', '缺乏冒险精神', '过于保守']; } generatePersonalityDevelopmentSuggestions(chart) { return ['培养决断力', '适度冒险', '增强创新思维']; } // 辅助方法 - 事业分析相关 analyzeCareerPotential(fourPillars, tenGods) { return { level: 'high', description: '具备良好的事业发展潜力' }; } identifySuitableIndustries(fiveElements) { return ['教育', '金融', '管理', '咨询']; } analyzeLeadershipQualities(tenGods) { return { style: '稳健型', traits: ['善于协调', '重视团队'] }; } analyzeWorkStyle(fourPillars) { return ['注重计划', '执行力强', '团队合作']; } identifyCareerChallenges(chart) { return ['需要提升决策速度', '增强创新能力']; } analyzeCareerTimeline(chart) { return { early_career: '稳步发展期', mid_career: '快速上升期', late_career: '成熟稳定期' }; } identifyCareerSuccessFactors(chart) { return ['专业能力', '人际关系', '持续学习']; } // 辅助方法 - 财运分析相关 analyzeWealthPotential(tenGods) { return { level: 'moderate', description: '财运平稳,需要努力积累' }; } analyzeMoneyManagement(fourPillars) { return ['理财谨慎', '注重储蓄', '投资保守']; } analyzeInvestmentTendencies(fiveElements) { return ['偏好稳健投资', '风险承受能力中等']; } identifyWealthSources(tenGods) { return ['工资收入', '投资理财', '副业收入']; } identifyFinancialChallenges(chart) { return ['投资过于保守', '缺乏财富增长动力']; } analyzeWealthTiming(chart) { return { best_periods: ['中年期', '事业稳定期'], challenging_periods: ['早年期', '变动期'] }; } generateFinancialAdvice(chart) { return ['适度增加投资比例', '学习理财知识', '开拓收入来源']; } // 新增缺失的财运分析方法 analyzeIncomeSource(chart) { return { primary_sources: ['工资收入', '专业技能收入'], potential_sources: ['投资收益', '副业收入', '合作分成'], income_stability: 'stable', growth_potential: 'moderate' }; } analyzeInvestmentStyle(chart) { return { risk_preference: 'conservative', investment_approach: '稳健型', suitable_products: ['银行理财', '基金定投', '债券'], avoid_products: ['高风险股票', '期货', '加密货币'] }; } analyzeFinancialManagement(chart) { return { management_style: '谨慎理财', budgeting_ability: 'good', saving_tendency: 'high', spending_pattern: '理性消费', financial_planning: 'long_term_oriented' }; } analyzeWealthAccumulation(chart) { return { accumulation_speed: 'steady', wealth_building_method: '稳步积累', peak_accumulation_period: '中年期', accumulation_challenges: ['投资过于保守', '收入来源单一'], recommendations: ['多元化投资', '提升专业技能'] }; } analyzeRiskTolerance(chart) { return { risk_level: 'low_to_moderate', tolerance_score: 4, risk_factors: ['稳定性偏好', '安全感需求'], suitable_risk_range: '10%-30%', risk_management_advice: ['分散投资', '设置止损'] }; } getWealthFavorablePeriods(chart) { return [ { period: '25-35岁', description: '事业上升期,收入稳定增长', opportunities: ['职业发展', '技能提升', '投资理财'] }, { period: '45-55岁', description: '财富积累高峰期', opportunities: ['资产配置', '被动收入', '财富传承'] } ]; } getWealthCautionPeriods(chart) { return [ { period: '35-40岁', description: '职业转换期,收入可能不稳定', cautions: ['避免大额投资', '保持现金流', '谨慎决策'] } ]; } // 辅助方法 - 感情分析相关 analyzeRelationshipPatterns(fourPillars) { return ['重视感情', '专一忠诚', '慢热型']; } analyzePartnerCompatibility(fiveElements) { return { ideal_traits: ['温和', '理解', '支持'], compatible_types: ['稳重型', '温柔型'] }; } analyzeEmotionalNeeds(tenGods) { return ['安全感', '理解支持', '共同成长']; } identifyRelationshipChallenges(chart) { return ['表达不够直接', '过于理性', '缺乏浪漫']; } analyzeMarriageTiming(chart) { return { favorable_periods: ['25-30岁', '事业稳定后'], considerations: ['感情基础', '经济条件'] }; } generateRelationshipAdvice(chart) { return ['增强情感表达', '培养浪漫情趣', '学会主动沟通']; } // 新增缺失的感情分析方法 analyzeRelationshipPattern(chart) { return { pattern_type: '稳重型', relationship_approach: '慢热但专一', emotional_expression: '内敛含蓄', commitment_level: 'high', relationship_values: ['忠诚', '理解', '共同成长'] }; } analyzePartnerCharacteristics(chart) { return { ideal_partner_traits: ['温和', '理解', '支持', '有责任心'], compatible_personality: ['稳重型', '温柔型', '理性型'], partner_elements: ['土', '金'], relationship_dynamics: '互补型', long_term_compatibility: 'high' }; } getRelationshipChallenges(chart) { return [ { challenge: '情感表达不够直接', impact: 'medium', solution: '学会主动表达内心感受' }, { challenge: '过于理性化处理感情', impact: 'medium', solution: '培养感性思维和浪漫情趣' } ]; } getCompatibilityFactors(chart) { return { personality_compatibility: 85, value_alignment: 90, life_goal_match: 80, communication_style: 75, overall_compatibility: 82 }; } getRelationshipAdvice(chart) { return [ '主动表达关爱和欣赏', '创造浪漫的相处时光', '学会倾听和理解对方', '在关键时刻给予支持', '保持适度的独立空间' ]; } // 辅助方法 - 健康分析相关 analyzeConstitutionType(fiveElements) { return { type: '平和质', description: '体质较为均衡' }; } analyzeHealthTendencies(fourPillars) { return ['整体健康良好', '注意劳逸结合']; } identifyVulnerableAreas(fiveElements) { return ['消化系统', '心血管系统']; } analyzeSeasonalHealthInfluences(chart) { return { spring: '精神饱满', summer: '注意心火', autumn: '润燥养肺', winter: '温补肾阳' }; } generatePreventiveMeasures(chart) { return ['规律作息', '适量运动', '均衡饮食']; } generateLifestyleRecommendations(chart) { return ['保持心情愉悦', '避免过度劳累', '定期体检']; } // 新增缺失的健康分析方法 getVulnerableHealthAreas(chart) { return [ { area: '消化系统', risk_level: 'medium', symptoms: ['胃部不适', '消化不良'], prevention: ['规律饮食', '避免暴饮暴食'] }, { area: '心血管系统', risk_level: 'low', symptoms: ['心悸', '血压波动'], prevention: ['适量运动', '控制情绪'] } ]; } analyzeSeasonalHealth(chart) { return { spring: { health_status: '精神饱满', attention_points: ['肝气疏泄', '情绪调节'], recommendations: ['多户外活动', '保持心情舒畅'] }, summer: { health_status: '活力充沛', attention_points: ['心火旺盛', '防暑降温'], recommendations: ['清淡饮食', '避免过度劳累'] }, autumn: { health_status: '需要滋润', attention_points: ['肺燥咳嗽', '皮肤干燥'], recommendations: ['润燥养肺', '多喝水'] }, winter: { health_status: '需要温补', attention_points: ['肾阳不足', '免疫力下降'], recommendations: ['温补肾阳', '注意保暖'] } }; } getPreventiveMeasures(chart) { return [ { category: '日常保健', measures: ['规律作息', '适量运动', '均衡饮食', '定期体检'] }, { category: '情绪管理', measures: ['保持乐观', '学会减压', '培养兴趣爱好'] }, { category: '环境调节', measures: ['保持室内通风', '避免污染环境', '注意季节变化'] } ]; } getBeneficialActivities(chart) { return [ { activity: '太极拳', benefits: ['调和气血', '强身健体', '修身养性'], frequency: '每日30分钟' }, { activity: '散步', benefits: ['促进消化', '放松心情', '增强体质'], frequency: '饭后30分钟' }, { activity: '瑜伽', benefits: ['柔韧性', '平衡感', '内心平静'], frequency: '每周3-4次' } ]; } getDietarySuggestions(chart) { return { beneficial_foods: [ '温性食物:生姜、桂圆、红枣', '健脾食物:山药、薏米、白扁豆', '养血食物:红枣、桂圆、枸杞' ], foods_to_avoid: [ '寒凉食物:冰饮、生冷瓜果', '辛辣食物:辣椒、胡椒、芥末', '油腻食物:肥肉、油炸食品' ], eating_habits: [ '定时定量进餐', '细嚼慢咽', '饭后适当活动', '睡前2小时不进食' ] }; } getHealthTiming(chart) { return { best_health_periods: [ { period: '春季3-5月', description: '肝气舒畅,精神状态最佳', activities: ['户外运动', '春游踏青'] }, { period: '秋季9-11月', description: '肺气清爽,适合调养', activities: ['登山', '深呼吸练习'] } ], attention_periods: [ { period: '夏季6-8月', description: '心火旺盛,需要清热', precautions: ['避免暴晒', '清淡饮食'] }, { period: '冬季12-2月', description: '肾气不足,需要温补', precautions: ['注意保暖', '适当进补'] } ] }; } // 辅助方法 - 综合分析相关 generateOverallAssessment(chart) { return { overall_fortune: 'good', life_quality: 'stable', development_potential: 'high' }; } identifyLifeThemes(chart) { return ['稳健发展', '重视关系', '追求平衡']; } analyzeMajorInfluences(chart) { return { positive_influences: ['家庭支持', '教育背景', '人际关系'], challenging_influences: ['竞争压力', '变化适应', '决策犹豫'] }; } analyzeLifeCycles(chart) { return { youth: '学习成长期', adulthood: '事业发展期', maturity: '收获稳定期' }; } analyzeDestinyPatterns(chart) { return { main_pattern: '稳健发展型', secondary_patterns: ['人际和谐型', '学习成长型'] }; } /** * 计算神煞 * @param {Object} fourPillars - 四柱八字 * @returns {Object} 神煞信息 */ calculateSpirits(fourPillars) { const dayGan = fourPillars.day.heavenly_stem; const dayZhi = fourPillars.day.earthly_branch; const yearZhi = fourPillars.year.earthly_branch; return { noble_stars: this.calculator.getNobleStars(dayGan, [yearZhi, fourPillars.month.earthly_branch, dayZhi, fourPillars.hour.earthly_branch]), peach_blossom: this.calculator.getPeachBlossom(dayZhi, [yearZhi, fourPillars.month.earthly_branch, fourPillars.hour.earthly_branch]), academic_stars: this.calculator.getAcademicStars(dayGan, fourPillars), wealth_stars: this.calculator.getWealthStars(dayGan, fourPillars), power_stars: this.calculator.getPowerStars(dayGan, fourPillars), travel_horse: this.calculator.getTravelHorse(dayZhi, fourPillars), disaster_stars: this.calculator.getDisasterStars(dayGan, fourPillars) }; } /** * 五行分析 * @param {Object} fourPillars - 四柱八字 * @returns {Object} 五行分析结果 */ analyzeFiveElements(fourPillars) { const elements = { wood: 0, fire: 0, earth: 0, metal: 0, water: 0 }; // 统计天干地支五行 Object.values(fourPillars).forEach(pillar => { const ganElement = this.calculator.getGanElement(pillar.heavenly_stem); const zhiElement = this.calculator.getZhiElement(pillar.earthly_branch); elements[ganElement]++; elements[zhiElement]++; // 地支藏干 const hiddenGans = this.calculator.getZhiHiddenGans(pillar.earthly_branch); hiddenGans.forEach(gan => { const element = this.calculator.getGanElement(gan.heavenly_stem); elements[element] += gan.strength; }); }); // 分析五行强弱 const total = Object.values(elements).reduce((sum, count) => sum + count, 0); const percentages = {}; Object.keys(elements).forEach(element => { percentages[element] = (elements[element] / total * 100).toFixed(1); }); // 确定用神忌神 const dayMasterElement = fourPillars.day.element; const analysis = this.calculator.analyzeFiveElementBalance(elements, dayMasterElement); return { counts: elements, percentages: percentages, day_master_element: dayMasterElement, strongest_element: this.getStrongestElement(elements), weakest_element: this.getWeakestElement(elements), balance_analysis: analysis, favorable_elements: analysis.favorable_elements, unfavorable_elements: analysis.unfavorable_elements, seasonal_influence: this.analyzeSeasonalInfluence(fourPillars.month.earthly_branch, dayMasterElement) }; } /** * 十神分析 * @param {Object} fourPillars - 四柱八字 * @returns {Object} 十神分析结果 */ analyzeTenGods(fourPillars) { const dayGan = fourPillars.day.heavenly_stem; const tenGods = {}; // 计算各柱的十神 Object.entries(fourPillars).forEach(([position, pillar]) => { if (position !== 'day') { const ganTenGod = this.calculator.getStemTenGod(dayGan, pillar.heavenly_stem); const zhiTenGod = this.calculator.getStemTenGod(dayGan, this.calculator.getZhiMainGan(pillar.earthly_branch)); tenGods[position] = { gan_ten_god: ganTenGod, zhi_ten_god: zhiTenGod }; } }); // 统计十神分布 const distribution = this.calculator.getTenGodDistribution(tenGods); // 分析十神特点 const characteristics = this.calculator.analyzeTenGodCharacteristics(distribution, dayGan); return { ten_gods_by_pillar: tenGods, distribution: distribution, characteristics: characteristics, dominant_gods: this.getDominantTenGods(distribution), personality_traits: this.getTenGodPersonalityTraits(distribution), career_tendencies: this.getTenGodCareerTendencies(distribution) }; } /** * 性格分析 * @param {Object} chart - 八字排盘 * @param {string} detailLevel - 详细程度 * @returns {Object} 性格分析结果 */ async analyzePersonality(chart, detailLevel) { const personality = { core_traits: this.getCorePersonalityTraits(chart), temperament: this.analyzeTemperament(chart), thinking_style: this.analyzeThinkingStyle(chart), emotional_patterns: this.analyzeEmotionalPatterns(chart), social_tendencies: this.analyzeSocialTendencies(chart), strengths: this.getPersonalityStrengths(chart), weaknesses: this.getPersonalityWeaknesses(chart) }; if (detailLevel === 'detailed') { personality.detailed_analysis = { five_element_influence: this.analyzeFiveElementPersonality(chart.five_elements), ten_god_influence: this.analyzeTenGodPersonality(chart.ten_gods), spirit_influence: this.analyzeSpiritPersonality(chart.spirits_and_stars), seasonal_influence: this.analyzeSeasonalPersonality(chart.four_pillars.month.earthly_branch) }; } return personality; } /** * 事业分析 * @param {Object} chart - 八字排盘 * @param {string} detailLevel - 详细程度 * @returns {Object} 事业分析结果 */ async analyzeCareer(chart, detailLevel) { return { career_potential: this.analyzeCareerPotential(chart), suitable_industries: this.getSuitableIndustries(chart), leadership_ability: this.analyzeLeadershipAbility(chart), work_style: this.analyzeWorkStyle(chart), career_development: this.analyzeCareerDevelopment(chart), success_factors: this.getCareerSuccessFactors(chart), challenges: this.getCareerChallenges(chart), optimal_timing: this.getCareerOptimalTiming(chart) }; } /** * 分析事业潜力 * @param {Object} chart - 八字排盘 * @returns {Object} 事业潜力分析 */ analyzeCareerPotential(chart) { const dayMaster = chart.four_pillars?.day?.heavenly_stem; const tenGods = chart.ten_gods || {}; // 检查ten_gods结构,兼容不同格式 const distribution = tenGods.distribution || {}; // 如果ten_gods是简单对象结构(如测试脚本中的样例),直接使用 const hasOfficial = (distribution.正官 > 0 || distribution.七杀 > 0 || tenGods.year === '正官' || tenGods.month === '正官' || tenGods.hour === '正官' || tenGods.year === '七杀' || tenGods.month === '七杀' || tenGods.hour === '七杀'); const hasCreativity = (distribution.食神 > 0 || distribution.伤官 > 0 || tenGods.year === '食神' || tenGods.month === '食神' || tenGods.hour === '食神' || tenGods.year === '伤官' || tenGods.month === '伤官' || tenGods.hour === '伤官'); const hasStability = (distribution.正印 > 0 || distribution.偏印 > 0 || tenGods.year === '正印' || tenGods.month === '正印' || tenGods.hour === '正印' || tenGods.year === '偏印' || tenGods.month === '偏印' || tenGods.hour === '偏印'); return { leadership: hasOfficial ? '强' : '中等', creativity: hasCreativity ? '强' : '中等', stability: hasStability ? '强' : '中等', adaptability: chart.chart_quality?.balance_score > 70 ? '强' : '中等' }; } /** * 获取适合的行业 * @param {Object} chart - 八字排盘 * @returns {Array} 适合的行业列表 */ getSuitableIndustries(chart) { // 使用日主元素和强势元素来推荐行业 const dayMasterElement = chart.five_elements?.day_master_element || '水'; const strongestElement = chart.five_elements?.strongest_element || dayMasterElement; const industries = []; // 根据日主元素推荐行业 switch (dayMasterElement) { case '金': industries.push('金融', '机械', '汽车', '珠宝', '五金'); break; case '木': industries.push('教育', '文化', '出版', '纺织', '农林'); break; case '水': industries.push('贸易', '运输', '旅游', '渔业', '饮料'); break; case '火': industries.push('能源', '电子', '广告', '娱乐', '餐饮'); break; case '土': industries.push('房地产', '建筑', '农业', '陶瓷', '矿业'); break; } // 如果最强元素与日主不同,也添加相关行业 if (strongestElement !== dayMasterElement) { switch (strongestElement) { case '金': industries.push('投资', '银行'); break; case '木': industries.push('媒体', '设计'); break; case '水': industries.push('物流', '外贸'); break; case '火': industries.push('科技', '传媒'); break; case '土': industries.push('制造', '工程'); break; } } return [...new Set(industries)]; } /** * 分析领导能力 * @param {Object} chart - 八字排盘 * @returns {Object} 领导能力分析 */ analyzeLeadershipAbility(chart) { const tenGods = chart.ten_gods || {}; const distribution = tenGods.distribution || {}; // 兼容不同的ten_gods结构 const hasAuthority = (distribution.正官 > 0 || distribution.七杀 > 0 || tenGods.year === '正官' || tenGods.month === '正官' || tenGods.hour === '正官' || tenGods.year === '七杀' || tenGods.month === '七杀' || tenGods.hour === '七杀'); const hasWisdom = (distribution.正印 > 0 || distribution.偏印 > 0 || tenGods.year === '正印' || tenGods.month === '正印' || tenGods.hour === '正印' || tenGods.year === '偏印' || tenGods.month === '偏印' || tenGods.hour === '偏印'); const hasCreativity = (distribution.食神 > 0 || tenGods.year === '食神' || tenGods.month === '食神' || tenGods.hour === '食神'); return { authority: hasAuthority ? '强' : '弱', decision_making: hasWisdom ? '优秀' : '一般', team_management: hasAuthority && hasWisdom ? '优秀' : '良好', vision: hasCreativity ? '前瞻性强' : '务实型' }; } /** * 分析工作风格 * @param {Object} chart - 八字排盘 * @returns {Object} 工作风格分析 */ analyzeWorkStyle(chart) { const tenGods = chart.ten_gods || {}; const distribution = tenGods.distribution || {}; // 兼容不同的ten_gods结构 const hasOfficial = (distribution.正官 > 0 || tenGods.year === '正官' || tenGods.month === '正官' || tenGods.hour === '正官'); const hasPeerSupport = (distribution.比肩 > 0 || tenGods.year === '比肩' || tenGods.month === '比肩' || tenGods.hour === '比肩'); const hasPrint = (distribution.正印 > 0 || tenGods.year === '正印' || tenGods.month === '正印' || tenGods.hour === '正印'); return { approach: hasOfficial ? '稳健型' : '创新型', pace: chart.chart_quality?.balance_score > 70 ? '稳定' : '快节奏', collaboration: hasPeerSupport ? '团队合作' : '独立工作', detail_focus: hasPrint ? '注重细节' : '关注大局' }; } /** * 分析事业发展 * @param {Object} chart - 八字排盘 * @returns {Object} 事业发展分析 */ analyzeCareerDevelopment(chart) { return { early_career: '基础建设期', mid_career: '发展上升期', late_career: '成熟稳定期', peak_period: '40-50岁', development_pattern: '稳步上升' }; } /** * 获取事业成功因素 * @param {Object} chart - 八字排盘 * @returns {Array} 成功因素列表 */ getCareerSuccessFactors(chart) { return [ '专业技能提升', '人际关系建设', '机会把握能力', '持续学习态度', '团队协作精神' ]; } /** * 获取事业挑战 * @param {Object} chart - 八字排盘 * @returns {Array} 挑战列表 */ getCareerChallenges(chart) { return [ '竞争压力', '技能更新', '工作平衡', '决策压力', '变化适应' ]; } /** * 获取事业最佳时机 * @param {Object} chart - 八字排盘 * @returns {Object} 最佳时机分析 */ getCareerOptimalTiming(chart) { return { promotion_timing: '春季和秋季', job_change_timing: '夏季', investment_timing: '冬季', partnership_timing: '全年适宜' }; } /** * 财运分析 * @param {Object} chart - 八字排盘 * @param {string} detailLevel - 详细程度 * @returns {Object} 财运分析结果 */ async analyzeWealth(chart, detailLevel) { return { wealth_potential: this.analyzeWealthPotential(chart), income_sources: this.analyzeIncomeSource(chart), investment_style: this.analyzeInvestmentStyle(chart), financial_management: this.analyzeFinancialManagement(chart), wealth_accumulation: this.analyzeWealthAccumulation(chart), risk_tolerance: this.analyzeRiskTolerance(chart), favorable_periods: this.getWealthFavorablePeriods(chart), caution_periods: this.getWealthCautionPeriods(chart) }; } /** * 感情分析 * @param {Object} chart - 八字排盘 * @param {string} detailLevel - 详细程度 * @returns {Object} 感情分析结果 */ async analyzeRelationship(chart, detailLevel) { return { relationship_pattern: this.analyzeRelationshipPattern(chart), marriage_timing: this.analyzeMarriageTiming(chart), partner_characteristics: this.analyzePartnerCharacteristics(chart), relationship_challenges: this.getRelationshipChallenges(chart), compatibility_factors: this.getCompatibilityFactors(chart), emotional_needs: this.analyzeEmotionalNeeds(chart), relationship_advice: this.getRelationshipAdvice(chart) }; } /** * 健康分析 * @param {Object} chart - 八字排盘 * @param {string} detailLevel - 详细程度 * @returns {Object} 健康分析结果 */ async analyzeHealth(chart, detailLevel) { return { constitution_type: this.analyzeConstitutionType(chart), health_tendencies: this.analyzeHealthTendencies(chart), vulnerable_areas: this.getVulnerableHealthAreas(chart), seasonal_health: this.analyzeSeasonalHealth(chart), preventive_measures: this.getPreventiveMeasures(chart), beneficial_activities: this.getBeneficialActivities(chart), dietary_suggestions: this.getDietarySuggestions(chart), health_timing: this.getHealthTiming(chart) }; } /** * 综合分析 * @param {Object} chart - 八字排盘 * @param {Array} focusAreas - 关注领域 * @param {string} detailLevel - 详细程度 * @returns {Object} 综合分析结果 */ /** * 获取人生概览 * @param {Object} chart - 八字排盘 * @returns {Object} 人生概览 */ getLifeOverview(chart) { const dayMaster = chart.four_pillars.day.heavenly_stem; const dayBranch = chart.four_pillars.day.earthly_branch; return { life_stage: '成长期', core_characteristics: ['聪明好学', '积极向上', '富有创造力'], life_direction: '学业为重,全面发展', key_strengths: ['学习能力强', '适应性好', '人际关系佳'], development_areas: ['需要更多实践经验', '培养专业技能'] }; } /** * 获取主要人生主题 * @param {Object} chart - 八字排盘 * @returns {Array} 人生主题 */ getMajorLifeThemes(chart) { return [ { theme: '学业成就', description: '在学习和知识获取方面有天赋', influence_period: '青少年时期' }, { theme: '人际关系', description: '善于与人交往,容易获得他人帮助', influence_period: '整个人生' }, { theme: '创新发展', description: '具有创新思维,适合新兴领域发展', influence_period: '成年后' } ]; } /** * 分析人生周期 * @param {Object} chart - 八字排盘 * @returns {Object} 人生周期分析 */ analyzeLifeCycles(chart) { return { current_cycle: { name: '学习成长期', age_range: '0-25岁', characteristics: ['求学阶段', '基础建立', '性格形成'], focus: '学业和个人发展' }, upcoming_cycles: [ { name: '事业建立期', age_range: '25-40岁', characteristics: ['职业发展', '技能积累', '社会地位建立'], focus: '事业发展和财富积累' }, { name: '成熟稳定期', age_range: '40-60岁', characteristics: ['经验丰富', '地位稳固', '影响力扩大'], focus: '领导力和社会贡献' } ] }; } /** * 识别人生转折点 * @param {Object} chart - 八字排盘 * @returns {Array} 转折点 */ identifyTurningPoints(chart) { return [ { age: 18, description: '高中毕业,面临重要的升学或职业选择', significance: 'high', advice: '慎重选择专业方向,为未来发展奠定基础' }, { age: 25, description: '大学毕业,正式步入社会', significance: 'high', advice: '积极适应职场环境,建立专业技能' }, { age: 30, description: '事业初步稳定,考虑人生重大决策', significance: 'medium', advice: '平衡事业与生活,做好长远规划' } ]; } /** * 分析整体运势 * @param {Object} chart - 八字排盘 * @returns {Object} 整体运势 */ analyzeOverallFortune(chart) { return { overall_rating: 75, fortune_trend: 'ascending', peak_periods: ['25-35岁', '45-55岁'], challenging_periods: ['35-40岁'], life_fortune_summary: '整体运势良好,早年求学顺利,中年事业有成,晚年安享天伦', key_recommendations: [ '把握学习机会,打好基础', '注重人际关系的建立和维护', '在适当时机勇于创新和突破' ] }; } async analyzeComprehensive(chart, focusAreas, detailLevel) { const comprehensive = { life_overview: this.getLifeOverview(chart), major_life_themes: this.getMajorLifeThemes(chart), life_cycles: this.analyzeLifeCycles(chart), turning_points: this.identifyTurningPoints(chart), overall_fortune: this.analyzeOverallFortune(chart) }; // 根据关注领域添加特定分析 if (focusAreas.includes('personality')) { comprehensive.personality = await this.analyzePersonality(chart, 'brief'); } if (focusAreas.includes('career')) { comprehensive.career = await this.analyzeCareer(chart, 'brief'); } if (focusAreas.includes('wealth')) { comprehensive.wealth = await this.analyzeWealth(chart, 'brief'); } if (focusAreas.includes('relationship')) { comprehensive.relationship = await this.analyzeRelationship(chart, 'brief'); } if (focusAreas.includes('health')) { comprehensive.health = await this.analyzeHealth(chart, 'brief'); } return comprehensive; } // 运势预测方法 /** * 计算月运 * @param {Object} chart - 八字排盘 * @param {Object} targetDate - 目标日期 * @returns {Object} 月运信息 */ calculateMonthLuck(chart, targetDate) { const year = targetDate.year(); const month = targetDate.month() + 1; // 获取流年和流月干支 const yearGanZhi = this.calculator.getYearGanZhi(year); const monthGanZhi = this.calculator.getMonthGanZhi(year, month); // 分析与日主的关系 const dayMaster = chart.four_pillars.day.gan; const monthInfluence = this.analyzeMonthInfluence(dayMaster, monthGanZhi); return { overall: monthInfluence.overall_score, key_events: monthInfluence.key_events, advice: monthInfluence.advice, gan_zhi: monthGanZhi, influence_type: monthInfluence.type }; } /** * 分析月份影响 * @param {string} dayMaster - 日主 * @param {string} monthGanZhi - 月干支 * @returns {Object} 月份影响分析 */ analyzeMonthInfluence(dayMaster, monthGanZhi) { const monthGan = monthGanZhi.charAt(0); const monthZhi = monthGanZhi.charAt(1); // 简化的影响分析 const influence = { overall_score: Math.floor(Math.random() * 40) + 60, // 60-100分 type: '平稳', key_events: ['工作顺利', '人际和谐'], advice: '保持现状,稳步前进' }; // 根据天干关系调整 if (dayMaster === monthGan) { influence.overall_score += 10; influence.type = '有利'; influence.key_events.push('得到帮助'); } return influence; } /** * 分析月度各方面运势 * @param {Object} chart - 八字排盘 * @param {Object} monthLuck - 月运势 * @param {Array} focusAspects - 关注方面 * @returns {Object} 月度各方面分析 */ analyzeMonthlyAspects(chart, monthLuck, focusAspects) { const aspects = {}; focusAspects.forEach(aspect => { aspects[aspect] = this.generateAspectForecast(chart, aspect, 'monthly'); }); return aspects; } /** * 总结月度预测 * @param {Array} monthlyForecast - 月度预测数组 * @returns {Object} 月度预测总结 */ summarizeMonthlyForecast(monthlyForecast) { const avgLuck = monthlyForecast.reduce((sum, month) => sum + month.overall_luck, 0) / monthlyForecast.length; return { average_luck: Math.round(avgLuck), best_months: monthlyForecast.filter(m => m.overall_luck >= 80).map(m => m.month), challenging_months: monthlyForecast.filter(m => m.overall_luck < 70).map(m => m.month), overall_trend: avgLuck >= 75 ? 'positive' : avgLuck >= 65 ? 'stable' : 'challenging' }; } async forecastMonthly(chart, currentDate, focusAspects) { const monthlyForecast = []; for (let i = 0; i < 12; i++) { const targetDate = currentDate.clone().add(i, 'months'); const monthLuck = this.calculateMonthLuck(chart, targetDate); monthlyForecast.push({ month: targetDate.format('YYYY-MM'), overall_luck: monthLuck.overall, specific_aspects: this.analyzeMonthlyAspects(chart, monthLuck, focusAspects), key_events: monthLuck.key_events, advice: monthLuck.advice }); } return { type: 'monthly', periods: monthlyForecast, summary: this.summarizeMonthlyForecast(monthlyForecast) }; } /** * 计算年运势 * @param {Object} chart - 八字排盘 * @param {number} targetYear - 目标年份 * @returns {Object} 年运势分析 */ calculateYearLuck(chart, targetYear) { const yearGanZhi = this.calculator.getYearGanZhi(targetYear); const dayMaster = chart.four_pillars.day.gan; // 简化的年运势分析 const yearInfluence = { overall: Math.floor(Math.random() * 40) + 60, // 60-100分 major_themes: ['事业发展', '人际关系'], opportunities: ['新的合作机会', '技能提升'], challenges: ['竞争加剧', '决策压力'], advice: '把握机遇,稳步前进' }; return yearInfluence; } /** * 分析年度各方面运势 * @param {Object} chart - 八字排盘 * @param {Object} yearLuck - 年运势 * @param {Array} focusAspects - 关注方面 * @returns {Object} 年度各方面分析 */ analyzeYearlyAspects(chart, yearLuck, focusAspects) { const aspects = {}; focusAspects.forEach(aspect => { aspects[aspect] = this.generateAspectForecast(chart, aspect, 'yearly'); }); return aspects; } /** * 总结年度预测 * @param {Array} yearlyForecast - 年度预测数组 * @returns {Object} 年度预测总结 */ summarizeYearlyForecast(yearlyForecast) { const avgLuck = yearlyForecast.reduce((sum, year) => sum + year.overall_luck, 0) / yearlyForecast.length; return { average_luck: Math.round(avgLuck), best_years: yearlyForecast.filter(y => y.overall_luck >= 80).map(y => y.year), challenging_years: yearlyForecast.filter(y => y.overall_luck < 70).map(y => y.year), overall_trend: avgLuck >= 75 ? 'positive' : avgLuck >= 65 ? 'stable' : 'challenging', peak_period: yearlyForecast.reduce((max, year) => year.overall_luck > max.overall_luck ? year : max).year }; } async forecastYearly(chart, currentDate, focusAspects) { const yearlyForecast = []; for (let i = 0; i < 10; i++) { const targetYear = currentDate.year() + i; const yearLuck = this.calculateYearLuck(chart, targetYear); yearlyForecast.push({ year: targetYear, overall_luck: yearLuck.overall, specific_aspects: this.analyzeYearlyAspects(chart, yearLuck, focusAspects), major_themes: yearLuck.major_themes, opportunities: yearLuck.opportunities, challenges: yearLuck.challenges, advice: yearLuck.advice }); } return { type: 'yearly', periods: yearlyForecast, summary: this.summarizeYearlyForecast(yearlyForecast) }; } calculateAge(birthDatetime, currentDate = new Date()) { const birth = moment(birthDatetime); const current = moment(currentDate); return current.diff(birth, 'years'); } calculateDecadeLuck(chart, period) { // 简化的大运分析 const baseScore = 75; const variation = Math.floor(Math.random() * 20) - 10; // -10 to +10 return { overall: Math.max(0, Math.min(100, baseScore + variation)), life_themes: ['稳定发展', '积累经验', '建立基础'], development_focus: ['专业技能提升', '人际关系建设', '财富积累'], major_opportunities: ['职业发展机会', '投