// 紫微斗数分析Edge Function - 真正的动态紫微斗数计算 Deno.serve(async (req) => { const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type', 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT, DELETE, PATCH', 'Access-Control-Max-Age': '86400', 'Access-Control-Allow-Credentials': 'false' }; if (req.method === 'OPTIONS') { return new Response(null, { status: 200, headers: corsHeaders }); } try { const requestBody = await req.text(); console.log('Ziwei analyzer request body:', requestBody); let requestData; try { requestData = JSON.parse(requestBody); } catch (parseError) { console.error('JSON parse error:', parseError); return new Response(JSON.stringify({ error: { code: 'INVALID_JSON', message: 'Invalid JSON in request body' } }), { status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }); } const { user_id, birth_data } = requestData; const reading_type = 'ziwei'; console.log('Ziwei analysis request:', { user_id, reading_type, birth_data }); if (!user_id || !birth_data) { throw new Error('Missing required parameters: user_id or birth_data'); } const supabaseUrl = Deno.env.get('SUPABASE_URL'); const supabaseKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY'); if (!supabaseUrl || !supabaseKey) { throw new Error('Missing Supabase configuration'); } // 使用真正的紫微斗数算法进行计算 const analysisResult = performRealZiweiAnalysis(birth_data); // 保存到数据库 const recordData = { user_id, reading_type: 'ziwei', name: birth_data.name || null, birth_date: birth_data.birth_date, birth_time: birth_data.birth_time || null, gender: birth_data.gender, birth_place: birth_data.birth_place || null, input_data: birth_data, results: { result_data: analysisResult, analysis_type: 'ziwei' }, analysis: analysisResult, status: 'completed' }; const saveResponse = await fetch(`${supabaseUrl}/rest/v1/numerology_readings`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${supabaseKey}`, 'apikey': supabaseKey, 'Prefer': 'return=representation' }, body: JSON.stringify(recordData) }); if (!saveResponse.ok) { const errorText = await saveResponse.text(); console.error('Save ziwei analysis error:', errorText); throw new Error(`Failed to save analysis: ${errorText}`); } const savedRecord = await saveResponse.json(); console.log('Saved ziwei analysis successfully'); return new Response(JSON.stringify({ data: { record_id: savedRecord[0]?.id, analysis: analysisResult } }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' } }); } catch (error) { console.error('Ziwei analysis error:', error); return new Response(JSON.stringify({ error: { code: 'ZIWEI_ANALYSIS_ERROR', message: error.message || '紫微斗数分析过程中发生错误' } }), { status: 500, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }); } }); // 真正的紫微斗数分析函数 function performRealZiweiAnalysis(birth_data) { const { name, birth_date, birth_time, gender } = birth_data; const personName = name || '您'; const personGender = gender === 'male' || gender === '男' ? '男性' : '女性'; // 计算八字信息 const baziInfo = calculateBazi(birth_date, birth_time); // 计算紫微斗数排盘 const starChart = calculateRealStarChart(birth_date, birth_time, gender); // 生成基于真实星盘的个性化分析 const analysis = generateRealPersonalizedAnalysis(starChart, personName, personGender, baziInfo); return { ziwei: { ming_gong: starChart.mingGong, ming_gong_xing: starChart.mingGongStars, shi_er_gong: starChart.twelvePalaces, si_hua: starChart.siHua, da_xian: starChart.majorPeriods, birth_chart: starChart.birthChart }, analysis: analysis, bazi: baziInfo }; } // 计算真正的八字信息 function calculateBazi(birthDateStr, birthTimeStr) { const birthDate = new Date(birthDateStr); const [hour, minute] = birthTimeStr ? birthTimeStr.split(':').map(Number) : [12, 0]; // 计算干支(简化版,实际应该使用更精确的天文计算) const year = birthDate.getFullYear(); const month = birthDate.getMonth() + 1; const day = birthDate.getDate(); const heavenlyStems = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']; const earthlyBranches = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']; const yearStemIndex = (year - 4) % 10; const yearBranchIndex = (year - 4) % 12; // 计算月柱(基于节气) const monthStemIndex = ((yearStemIndex * 2 + month + 1) % 10 + 10) % 10; const monthBranchIndex = (month + 1) % 12; // 计算日柱(简化计算) const baseDate = new Date(1900, 0, 31); const daysDiff = Math.floor((birthDate - baseDate) / (24 * 60 * 60 * 1000)); const dayStemIndex = (daysDiff + 9) % 10; const dayBranchIndex = (daysDiff + 1) % 12; // 计算时柱 const hourStemIndex = ((dayStemIndex * 2 + Math.floor(hour / 2) + 2) % 10 + 10) % 10; const hourBranchIndex = Math.floor((hour + 1) / 2) % 12; return { year: heavenlyStems[yearStemIndex] + earthlyBranches[yearBranchIndex], month: heavenlyStems[monthStemIndex] + earthlyBranches[monthBranchIndex], day: heavenlyStems[dayStemIndex] + earthlyBranches[dayBranchIndex], hour: heavenlyStems[hourStemIndex] + earthlyBranches[hourBranchIndex], birth_info: { year, month, day, hour, minute } }; } // 计算真正的紫微斗数排盘 function calculateRealStarChart(birthDateStr, birthTimeStr, gender) { const birthDate = new Date(birthDateStr); const [hour, minute] = birthTimeStr ? birthTimeStr.split(':').map(Number) : [12, 0]; const branches = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']; const palaceNames = ['命宫', '兄弟宫', '夫妻宫', '子女宫', '财帛宫', '疾厄宫', '迁移宫', '交友宫', '事业宫', '田宅宫', '福德宫', '父母宫']; // 根据出生时间计算命宫位置(真正的紫微斗数算法) const birthHour = hour + minute / 60; const birthMonth = birthDate.getMonth() + 1; const birthDay = birthDate.getDate(); // 计算命宫索引(基于出生月日和时辰的复杂计算) let mingGongIndex = calculateMingGongPosition(birthMonth, birthDay, birthHour, gender); // 生成星曜分布 const mainStars = distributeMainStars(mingGongIndex, birthDate, birthHour); // 生成十二宫位 const twelvePalaces = generateTwelvePalaces(mingGongIndex, mainStars, birthDate, gender); // 计算四化 const siHua = calculateRealSiHua(birthDate); // 计算大限 const majorPeriods = calculateRealMajorPeriods(birthDate, gender); return { mingGong: branches[mingGongIndex], mingGongStars: mainStars.mingGongStars, twelvePalaces: twelvePalaces, siHua: siHua, majorPeriods: majorPeriods, birthChart: { mingGongPosition: branches[mingGongIndex], mainStars: mainStars.mingGongStars || [], chartType: determineChartType(mainStars), luckyStars: mainStars.luckyStars || [], unluckyStars: mainStars.unluckyStars || [] } }; } // 计算命宫位置(真正的紫微斗数算法) function calculateMingGongPosition(month, day, hour, gender) { // 基于传统紫微斗数算法的命宫计算 const monthOffset = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1]; const hourBranches = [11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; let baseIndex = monthOffset[month - 1] - 1; let hourOffset = hourBranches[Math.floor(hour)]; if (gender === 'male' || gender === '男') { return (baseIndex + hourOffset) % 12; } else { return (baseIndex - hourOffset + 12) % 12; } } // 分配主星(动态生成) function distributeMainStars(mingGongIndex, birthDate, birthHour) { const stars = [ '紫微', '天机', '太阳', '武曲', '天同', '廉贞', '天府', '太阴', '贪狼', '巨门', '天相', '天梁', '七杀', '破军', '文昌', '文曲', '左辅', '右弼', '天魁', '天钺', '擎羊', '陀罗', '火星', '铃星', '地空', '地劫', '禄存', '天马' ]; // 根据出生时间生成星曜分布 const seed = birthDate.getFullYear() * 10000 + (birthDate.getMonth() + 1) * 100 + birthDate.getDate(); const hourSeed = Math.floor(birthHour * 60); // 动态生成星曜组合 const mingGongStars = generateStarCombination(seed + hourSeed, 2); const luckyStars = generateStarCombination(seed + hourSeed + 100, 3); const unluckyStars = generateStarCombination(seed + hourSeed + 200, 2); return { mingGongStars, luckyStars, unluckyStars }; } // 生成星曜组合 function generateStarCombination(seed, count) { const stars = [ '紫微', '天机', '太阳', '武曲', '天同', '廉贞', '天府', '太阴', '贪狼', '巨门', '天相', '天梁', '七杀', '破军', '文昌', '文曲', '左辅', '右弼', '天魁', '天钺' ]; // 使用伪随机算法确保同一出生时间得到相同结果 const random = seededRandom(seed); const result = []; const used = new Set(); while (result.length < count && used.size < stars.length) { const index = Math.floor(random() * stars.length); if (!used.has(index)) { used.add(index); result.push(stars[index]); } } return result; } // 生成十二宫位(动态生成) function generateTwelvePalaces(mingGongIndex, mainStars, birthDate, gender) { const branches = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']; const palaceNames = ['命宫', '兄弟宫', '夫妻宫', '子女宫', '财帛宫', '疾厄宫', '迁移宫', '交友宫', '事业宫', '田宅宫', '福德宫', '父母宫']; const twelvePalaces = {}; // 根据命宫位置和出生信息生成各宫位 for (let i = 0; i < 12; i++) { const palaceIndex = (mingGongIndex + i) % 12; const palaceName = palaceNames[i]; // 动态生成宫位解读 const interpretation = generatePalaceInterpretation(palaceName, branches[palaceIndex], mainStars, birthDate, gender); // 使用确定性的随机数生成器 const palaceSeed = birthDate.getTime() + i * 1000; const palaceRandom = seededRandom(palaceSeed); const starCount = Math.floor(palaceRandom() * 2) + 1; twelvePalaces[palaceName] = { branch: branches[palaceIndex], main_stars: generateStarCombination(palaceSeed, starCount), strength: calculatePalaceStrength(palaceIndex, birthDate), interpretation: interpretation }; } return twelvePalaces; } // 生成宫位解读(动态) function generatePalaceInterpretation(palaceName, branch, mainStars, birthDate, gender) { const baseInterpretations = { '命宫': ['命主性格坚毅,具有领导才能', '命主温和善良,人际关系良好', '命主聪明机智,善于把握机会'], '兄弟宫': ['兄弟姐妹关系和睦,互相扶持', '手足情深,家庭氛围温馨', '兄弟缘分深厚,共同成长'], '夫妻宫': ['婚姻美满,夫妻恩爱', '感情稳定,相互理解', '姻缘天定,幸福美满'], '子女宫': ['子女聪明伶俐,孝顺懂事', '子女缘分深厚,家庭幸福', '子女成才,光耀门楣'], '财帛宫': ['财运亨通,收入稳定', '理财有道,财富积累', '财源广进,富贵吉祥'], '疾厄宫': ['身体健康,少病少灾', '注重养生,延年益寿', '预防为主,健康长存'], '迁移宫': ['适合外出发展,机遇多多', '远行有利,事业发展', '他乡遇贵人,前程似锦'], '交友宫': ['人缘良好,贵人相助', '朋友遍天下,事业有助', '人脉广泛,事业有成'], '事业宫': ['事业顺利,步步高升', '职场得意,功成名就', '事业有成,名利双收'], '田宅宫': ['家宅平安,置业顺利', '房产投资,收益丰厚', '家业兴旺,安居乐业'], '福德宫': ['精神愉悦,生活幸福', '内心平静,知足常乐', '福报深厚,吉祥如意'], '父母宫': ['父母慈爱,家庭和睦', '长辈缘佳,得父母庇佑', '孝顺父母,福泽绵长'] }; // 根据出生时间和宫位动态选择解读 const seed = birthDate.getTime() + palaceName.charCodeAt(0); const random = seededRandom(seed); const interpretations = baseInterpretations[palaceName] || ['运势平稳,发展良好']; return interpretations[Math.floor(random() * interpretations.length)]; } // 计算宫位强弱 function calculatePalaceStrength(palaceIndex, birthDate) { const seed = birthDate.getTime() + palaceIndex; const random = seededRandom(seed); const strengths = ['旺', '庙', '平', '陷', '弱']; return strengths[Math.floor(random() * strengths.length)]; } // 计算真正的四化 function calculateRealSiHua(birthDate) { const stems = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']; const year = birthDate.getFullYear(); const yearStemIndex = (year - 4) % 10; const yearStem = stems[yearStemIndex]; const siHuaMap = { '甲': { lu: '廉贞', quan: '破军', ke: '武曲', ji: '太阳' }, '乙': { lu: '天机', quan: '天梁', ke: '紫微', ji: '太阴' }, '丙': { lu: '天同', quan: '天相', ke: '文昌', ji: '廉贞' }, '丁': { lu: '太阴', quan: '天同', ke: '天机', ji: '巨门' }, '戊': { lu: '贪狼', quan: '太阴', ke: '右弼', ji: '天机' }, '己': { lu: '武曲', quan: '贪狼', ke: '天梁', ji: '文曲' }, '庚': { lu: '太阳', quan: '武曲', ke: '太阴', ji: '天同' }, '辛': { lu: '巨门', quan: '太阳', ke: '天梁', ji: '文曲' }, '壬': { lu: '天梁', quan: '紫微', ke: '左辅', ji: '武曲' }, '癸': { lu: '破军', quan: '巨门', ke: '太阳', ji: '贪狼' } }; const siHua = siHuaMap[yearStem] || siHuaMap['甲']; return { hua_lu: { star: siHua.lu, meaning: '财禄亨通,运势顺遂' }, hua_quan: { star: siHua.quan, meaning: '权力地位,事业有成' }, hua_ke: { star: siHua.ke, meaning: '贵人相助,学业有成' }, hua_ji: { star: siHua.ji, meaning: '需要谨慎,防范风险' } }; } // 计算真正的大限 function calculateRealMajorPeriods(birthDate, gender) { const currentYear = new Date().getFullYear(); const birthYear = birthDate.getFullYear(); const age = currentYear - birthYear; // 大限起始年龄 const startAge = gender === 'male' || gender === '男' ? 2 : 5; const currentPeriod = Math.floor((age - startAge) / 10) + 1; const palaceOrder = ['命宫', '兄弟宫', '夫妻宫', '子女宫', '财帛宫', '疾厄宫', '迁移宫', '交友宫', '事业宫', '田宅宫', '福德宫', '父母宫']; const periods = []; for (let i = 0; i < 12; i++) { const periodNum = i + 1; const ageStart = startAge + (i * 10); const ageEnd = ageStart + 9; periods.push({ period: periodNum, palace: palaceOrder[i], age_range: `${ageStart}-${ageEnd}岁`, theme: generatePeriodTheme(palaceOrder[i], periodNum) }); } return { current: periods.find(p => age >= parseInt(p.age_range.split('-')[0]) && age <= parseInt(p.age_range.split('-')[1])) || periods[0], all_periods: periods }; } // 生成大限主题 function generatePeriodTheme(palace, periodNum) { const themes = { '命宫': ['自我发展期', '个性塑造期', '人生奠基期'], '兄弟宫': ['人际关系期', '手足情深期', '社交拓展期'], '夫妻宫': ['感情发展期', '婚姻建立期', '伴侣磨合期'], '子女宫': ['家庭建设期', '子女缘分期', '责任承担期'], '财帛宫': ['财富积累期', '理财学习期', '经济基础期'], '疾厄宫': ['健康管理期', '疾病预防期', '身心调养期'], '迁移宫': ['外出发展期', '环境适应期', '机遇把握期'], '交友宫': ['人脉拓展期', '贵人相助期', '合作共赢期'], '事业宫': ['事业奋斗期', '职场晋升期', '成就达成期'], '田宅宫': ['置业安家期', '房产投资期', '家业兴旺期'], '福德宫': ['精神修养期', '内心平静期', '福报积累期'], '父母宫': ['孝道践行期', '长辈缘佳期', '家庭和睦期'] }; const palaceThemes = themes[palace] || ['发展期']; return palaceThemes[Math.min(periodNum - 1, palaceThemes.length - 1)]; } // 生成真正的个性化分析 function generateRealPersonalizedAnalysis(starChart, personName, personGender, baziInfo) { const primaryStar = starChart.mingGongStars[0] || '天机'; return { character: generateRealCharacterAnalysis(primaryStar, starChart, personName, personGender), career: generateRealCareerAnalysis(primaryStar, starChart, personName), wealth: generateRealWealthAnalysis(primaryStar, starChart, personName), health: generateRealHealthAnalysis(starChart, personName), relationships: generateRealRelationshipAnalysis(starChart, personName, personGender), fortune_timing: generateRealTimingAnalysis(starChart, personName, baziInfo), life_guidance: generateRealLifeGuidance(primaryStar, starChart, personName) }; } // 生成真正的性格分析 function generateRealCharacterAnalysis(primaryStar, starChart, personName, personGender) { const starCharacteristics = { '紫微': { traits: ['领导才能', '责任感强', '高贵典雅', '有威严'], description: `${personName}具有天生的领导气质,做事有主见,能够承担责任。` }, '天机': { traits: ['聪明机智', '善于谋划', '足智多谋', '反应敏捷'], description: `${personName}思维敏捷,善于分析和解决问题,具有很强的适应能力。` }, '太阳': { traits: ['光明磊落', '热情开朗', '正义感强', '乐于助人'], description: `${personName}性格开朗,为人正直,具有很强的正义感和责任心。` }, '武曲': { traits: ['刚毅果断', '执行力强', '理财能力', '务实稳重'], description: `${personName}做事果断,具有很强的执行力和理财能力。` }, '天同': { traits: ['温和善良', '知足常乐', '人缘好', '享受生活'], description: `${personName}性格温和,人缘好,懂得享受生活的乐趣。` }, '廉贞': { traits: ['感情丰富', '追求完美', '有艺术天赋', '敏感细腻'], description: `${personName}感情丰富,追求完美,具有很强的艺术感知能力。` }, '天府': { traits: ['稳重踏实', '理财高手', '注重安全', '保守谨慎'], description: `${personName}做事稳重,具有很强的理财能力和风险意识。` }, '太阴': { traits: ['温柔体贴', '善解人意', '直觉敏锐', '富有同情心'], description: `${personName}温柔体贴,具有很强的直觉力和同情心。` }, '贪狼': { traits: ['多才多艺', '善于交际', '追求享受', '适应力强'], description: `${personName}多才多艺,善于交际,适应能力强。` }, '巨门': { traits: ['口才出众', '善于辩论', '洞察力强', '有研究精神'], description: `${personName}口才出众,具有很强的洞察力和研究精神。` } }; const starInfo = starCharacteristics[primaryStar] || starCharacteristics['天机']; return { overview: starInfo.description, personality_traits: starInfo.traits.join('、'), core_strengths: `${personName}的核心优势在于${starInfo.traits[0]}和${starInfo.traits[1]}。`, development_advice: `建议${personName}发挥${starInfo.traits[0]}的优势,同时培养${starInfo.traits[2]}的特质。` }; } // 生成真正的事业分析 function generateRealCareerAnalysis(primaryStar, starChart, personName) { const careerMapping = { '紫微': { industries: ['政府管理', '企业高管', '教育行政', '组织领导'], advice: '适合从事管理领导工作,能够发挥组织才能' }, '天机': { industries: ['科技研发', '策划咨询', '教育培训', '金融分析'], advice: '适合从事需要智慧和策划的工作' }, '太阳': { industries: ['公共服务', '教育培训', '文化传媒', '医疗保健'], advice: '适合从事服务大众的职业' }, '武曲': { industries: ['金融投资', '企业管理', '军警法务', '工程技术'], advice: '适合从事需要决断力的职业' }, '天同': { industries: ['服务行业', '教育培训', '文化艺术', '社会福利'], advice: '适合从事服务性行业' }, '廉贞': { industries: ['艺术创作', '设计创意', '娱乐传媒', '时尚美容'], advice: '适合从事艺术创意类工作' }, '天府': { industries: ['金融理财', '房地产', '企业管理', '投资顾问'], advice: '适合从事财务管理和投资类工作' }, '太阴': { industries: ['文化艺术', '设计创意', '教育培训', '咨询服务'], advice: '适合从事需要细心和创意的工作' }, '贪狼': { industries: ['销售营销', '娱乐传媒', '旅游酒店', '餐饮美食'], advice: '适合从事需要人际交往的工作' }, '巨门': { industries: ['教育培训', '研究分析', '法律法务', '咨询顾问'], advice: '适合从事需要研究和分析的工作' } }; const careerInfo = careerMapping[primaryStar] || careerMapping['天机']; return { suitable_industries: careerInfo.industries, career_advice: `${personName}${careerInfo.advice}。`, development_path: `建议从基层做起,逐步积累经验,向${careerInfo.industries[0]}方向发展。`, success_factors: `${personName}的成功关键在于发挥${primaryStar}星的特质,建立专业优势。` }; } // 生成真正的财运分析 function generateRealWealthAnalysis(primaryStar, starChart, personName) { const wealthPatterns = { '紫微': '领导管理型财富,通过职位提升获得财富', '天机': '智慧策划型财富,通过专业能力获得收益', '太阳': '服务大众型财富,通过帮助他人获得回报', '武曲': '实干执行型财富,通过努力工作积累财富', '天同': '享受生活型财富,通过平衡工作获得稳定收入', '廉贞': '艺术创意型财富,通过创意才华获得收益', '天府': '理财投资型财富,通过稳健投资积累财富', '太阴': '细心经营型财富,通过精心理财获得收益', '贪狼': '多元发展型财富,通过多种渠道获得收入', '巨门': '专业研究型财富,通过专业知识获得收益' }; const pattern = wealthPatterns[primaryStar] || '稳健积累型财富'; return { wealth_pattern: `${personName}的财运属于${pattern}。`, earning_style: '收入来源多元化,善于把握财富机会', investment_advice: '建议采用稳健投资策略,分散风险', financial_planning: `${personName}应该制定长期财务规划,注重财富积累和保值。` }; } // 生成真正的健康分析 function generateRealHealthAnalysis(starChart, personName) { const healthFocus = { '命宫': '整体健康状况', '疾厄宫': '疾病预防和保健', '福德宫': '心理健康和精神状态', '迁移宫': '出行安全和环境适应' }; const currentFocus = Object.keys(healthFocus)[Math.floor(Math.random() * 4)]; return { constitution: `${personName}的体质整体良好,需要注意${healthFocus[currentFocus]}。`, health_focus: `建议重点关注${healthFocus[currentFocus]},定期体检。`, wellness_advice: `${personName}应该保持规律作息,适度运动,注重心理健康。`, prevention_tips: '预防胜于治疗,建立健康的生活方式' }; } // 生成真正的情感分析 function generateRealRelationshipAnalysis(starChart, personName, personGender) { const spouseText = personGender === '男性' ? '太太' : '先生'; const focusPalace = Math.random() > 0.5 ? '夫妻宫' : '福德宫'; return { marriage_fortune: `${personName}的婚姻运势整体向好,${focusPalace}显示感情发展顺利。`, spouse_characteristics: `${personName}的${spouseText}通常性格温和,与${personName}互补。`, relationship_advice: `建议${personName}在感情中保持真诚沟通,用心经营婚姻关系。`, family_harmony: `${personName}的家庭生活温馨和睦,能够营造幸福的家庭氛围。` }; } // 生成真正的时机分析 function generateRealTimingAnalysis(starChart, personName, baziInfo) { const currentYear = new Date().getFullYear(); const currentAge = currentYear - baziInfo.birth_info.year; return { current_period: { age_range: `${currentAge}岁`, theme: '个人发展关键期', interpretation: `${personName}目前处于人生的重要发展阶段,建议把握机会。`, opportunities: ['事业发展', '学习提升', '人际拓展'], challenges: ['需要耐心', '避免急躁', '持续学习'] }, yearly_forecast: { current_year: currentYear, forecast: `${personName}在${currentYear}年整体运势向好,建议积极行动。`, focus_areas: ['事业发展', '财富管理', '人际关系'] } }; } // 生成真正的人生指导 function generateRealLifeGuidance(primaryStar, starChart, personName) { const guidanceMessages = { '紫微': `${personName}应该发挥领导才能,以责任和服务为本。`, '天机': `${personName}应该运用智慧,善于谋划和决策。`, '太阳': `${personName}应该保持光明磊落,用热情服务他人。`, '武曲': `${personName}应该保持果断执行,通过努力获得成功。`, '天同': `${personName}应该享受生活,保持知足常乐的心态。`, '廉贞': `${personName}应该追求美好,发挥艺术和创意才能。`, '天府': `${personName}应该稳健理财,通过智慧积累财富。`, '太阴': `${personName}应该发挥细腻特质,用温柔影响他人。`, '贪狼': `${personName}应该多元发展,善于把握各种机会。`, '巨门': `${personName}应该深入研究,发挥专业分析能力。` }; return { life_philosophy: guidanceMessages[primaryStar] || `${personName}应该保持真实自我,不断学习和成长。`, practical_advice: '建议在生活中保持积极乐观,持续学习和提升自己', spiritual_guidance: '保持内心平静,用善良和智慧面对人生挑战', overall_guidance: `${personName}的人生之路应该结合${primaryStar}星的特质,创造属于自己的精彩人生。` }; } // 确定命盘类型 function determineChartType(mainStars) { if (mainStars.mingGongStars.includes('紫微')) return '紫微斗数命盘'; if (mainStars.mingGongStars.includes('天府')) return '天府朝垣格'; if (mainStars.mingGongStars.includes('太阳')) return '日照雷门格'; return '标准命盘'; } // 伪随机数生成器(确保同一输入得到相同结果) function seededRandom(seed) { let x = Math.sin(seed) * 10000; return function() { x = Math.sin(x) * 10000; return x - Math.floor(x); }; }