Files
suanming/logic/ziwei.txt

688 lines
28 KiB
Plaintext

// 紫微斗数分析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);
};
}