feat: 实现八字命理个性化分析系统
后端改进: - 新增 BaZiAnalysisUtil 八字分析工具类 - 实现基于五行旺衰的性格分析 - 实现基于日主的事业发展建议 - 实现基于日支的婚姻感情分析 - 实现基于财星的财运状况分析 - 实现基于五行的健康养生建议 - 实现个性化的人生指导建议 - 修复类型不匹配问题(List vs Array) 前端改进: - 四柱八字模块添加输入校验 - 日期类型默认改为农历 - 公历农历显示顺序调换 - 公历时间精确到分钟 - 命理解读内容增强,支持多维度展示 - 首页模块顺序调整 - '六爻排盘'改名为'六爻' - 添加占星术和塔罗牌API配置 - 更新AppID配置 优化: - 所有测算结果根据八字动态生成 - 符合传统八字命理学推演原理 - 提升用户体验和测算准确性
This commit is contained in:
1 parent
2ac5c5782a
commit
db9a63d309
8 files changed
+1438
-260
No files matched your search
@@ -0,0 +1,618 @@
|
||||
package xuan.core.bazi.utils;
|
||||
|
||||
import java.util.*;
|
||||
import xuan.core.bazi.BaZi;
|
||||
|
||||
/**
|
||||
* 八字命理分析工具
|
||||
* 基于传统八字命理学原理进行推演分析
|
||||
*/
|
||||
public class BaZiAnalysisUtil {
|
||||
|
||||
private BaZi baZi;
|
||||
private String[] baZiArray;
|
||||
private Map<String, Integer> wuXingCount;
|
||||
private String riGan;
|
||||
private String riZhi;
|
||||
private String nianGan;
|
||||
private String nianZhi;
|
||||
private String yueGan;
|
||||
private String yueZhi;
|
||||
private String shiGan;
|
||||
private String shiZhi;
|
||||
|
||||
public BaZiAnalysisUtil(BaZi baZi) {
|
||||
this.baZi = baZi;
|
||||
this.baZiArray = baZi.getBaZi();
|
||||
this.wuXingCount = calculateWuXingCount();
|
||||
|
||||
if (baZiArray != null && baZiArray.length >= 4) {
|
||||
this.nianGan = baZiArray[0].substring(0, 1);
|
||||
this.nianZhi = baZiArray[0].substring(1);
|
||||
this.yueGan = baZiArray[1].substring(0, 1);
|
||||
this.yueZhi = baZiArray[1].substring(1);
|
||||
this.riGan = baZiArray[2].substring(0, 1);
|
||||
this.riZhi = baZiArray[2].substring(1);
|
||||
this.shiGan = baZiArray[3].substring(0, 1);
|
||||
this.shiZhi = baZiArray[3].substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, Integer> calculateWuXingCount() {
|
||||
Map<String, Integer> count = new HashMap<>();
|
||||
count.put("木", 0);
|
||||
count.put("火", 0);
|
||||
count.put("土", 0);
|
||||
count.put("金", 0);
|
||||
count.put("水", 0);
|
||||
|
||||
if (baZiArray == null) return count;
|
||||
|
||||
for (String ganZhi : baZiArray) {
|
||||
String gan = ganZhi.substring(0, 1);
|
||||
String zhi = ganZhi.substring(1);
|
||||
|
||||
String ganWX = getGanWuXing(gan);
|
||||
count.put(ganWX, count.get(ganWX) + 1);
|
||||
|
||||
String[] zhiWX = getZhiWuXing(zhi);
|
||||
for (String wx : zhiWX) {
|
||||
count.put(wx, count.get(wx) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
private String getGanWuXing(String gan) {
|
||||
Map<String, String> ganWX = new HashMap<>();
|
||||
ganWX.put("甲", "木"); ganWX.put("乙", "木");
|
||||
ganWX.put("丙", "火"); ganWX.put("丁", "火");
|
||||
ganWX.put("戊", "土"); ganWX.put("己", "土");
|
||||
ganWX.put("庚", "金"); ganWX.put("辛", "金");
|
||||
ganWX.put("壬", "水"); ganWX.put("癸", "水");
|
||||
return ganWX.getOrDefault(gan, "土");
|
||||
}
|
||||
|
||||
private String[] getZhiWuXing(String zhi) {
|
||||
Map<String, String[]> zhiWX = new HashMap<>();
|
||||
zhiWX.put("子", new String[]{"水"});
|
||||
zhiWX.put("丑", new String[]{"土", "水", "金"});
|
||||
zhiWX.put("寅", new String[]{"木", "火", "土"});
|
||||
zhiWX.put("卯", new String[]{"木"});
|
||||
zhiWX.put("辰", new String[]{"土", "木", "水"});
|
||||
zhiWX.put("巳", new String[]{"火", "土", "金"});
|
||||
zhiWX.put("午", new String[]{"火", "土"});
|
||||
zhiWX.put("未", new String[]{"土", "火", "木"});
|
||||
zhiWX.put("申", new String[]{"金", "水", "土"});
|
||||
zhiWX.put("酉", new String[]{"金"});
|
||||
zhiWX.put("戌", new String[]{"土", "金", "火"});
|
||||
zhiWX.put("亥", new String[]{"水", "木"});
|
||||
return zhiWX.getOrDefault(zhi, new String[]{"土"});
|
||||
}
|
||||
|
||||
public String generateSummary() {
|
||||
StringBuilder summary = new StringBuilder();
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
String wangShuai = getWuXingWangShuai(riGanWX);
|
||||
|
||||
summary.append("【命理总评】\n\n");
|
||||
summary.append("根据您的八字排盘分析,您是").append(riGanWX).append("命人,日主为").append(riGan).append(",");
|
||||
summary.append(wangShuai).append("。\n\n");
|
||||
|
||||
String[] queShi = baZi.getWuXingQueShi();
|
||||
if (queShi != null && queShi.length > 0) {
|
||||
summary.append("八字中五行缺").append(String.join("、", queShi)).append(",");
|
||||
summary.append("建议在生活中适当补充相关元素。\n\n");
|
||||
}
|
||||
|
||||
String shengXiao = baZi.getShengXiao();
|
||||
String xingZuo = baZi.getXingZuo();
|
||||
summary.append("生肖属").append(shengXiao).append(",星座为").append(xingZuo).append("。\n\n");
|
||||
|
||||
summary.append("【命格特点】\n\n");
|
||||
summary.append(getMingGeTeDian());
|
||||
|
||||
return summary.toString();
|
||||
}
|
||||
|
||||
private String getWuXingWangShuai(String wuXing) {
|
||||
int count = wuXingCount.getOrDefault(wuXing, 0);
|
||||
if (count >= 3) return "五行" + wuXing + "旺," + wuXing + "气充足";
|
||||
else if (count >= 2) return "五行" + wuXing + "相," + wuXing + "气适中";
|
||||
else if (count == 1) return "五行" + wuXing + "休," + wuXing + "气偏弱";
|
||||
else return "五行" + wuXing + "囚," + wuXing + "气不足";
|
||||
}
|
||||
|
||||
private String getMingGeTeDian() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("甲".equals(riGan)) {
|
||||
sb.append("甲木参天,脱胎要火。您性格正直,有领导力,像大树一样挺拔。");
|
||||
sb.append("做事有魄力,喜欢当主角,有担当,能扛事。");
|
||||
sb.append("但有时过于固执,需要学会变通。\n");
|
||||
} else if ("乙".equals(riGan)) {
|
||||
sb.append("乙木虽柔,刲羊解牛。您性格温和,善于变通,像花草一样柔韧。");
|
||||
sb.append("适应能力强,能屈能伸,善于处理人际关系。");
|
||||
sb.append("但有时优柔寡断,需要培养决断力。\n");
|
||||
} else if ("丙".equals(riGan)) {
|
||||
sb.append("丙火猛烈,欺霜侮雪。您性格热情,充满活力,像太阳一样温暖。");
|
||||
sb.append("善于表达,有感染力,容易成为人群中的焦点。");
|
||||
sb.append("但有时过于冲动,需要学会冷静。\n");
|
||||
} else if ("丁".equals(riGan)) {
|
||||
sb.append("丁火柔中,内性昭融。您性格细腻,心思缜密,像灯烛一样温暖。");
|
||||
sb.append("有耐心,善于照顾他人感受。");
|
||||
sb.append("但有时过于敏感,需要放宽心态。\n");
|
||||
} else if ("戊".equals(riGan)) {
|
||||
sb.append("戊土厚重,载华岳而不重。您性格稳重,值得信赖,像大地一样厚实。");
|
||||
sb.append("有包容心,能担当重任。");
|
||||
sb.append("但有时过于保守,需要勇于创新。\n");
|
||||
} else if ("己".equals(riGan)) {
|
||||
sb.append("己土卑湿,中正蓄藏。您性格温和,有爱心,像田园一样肥沃。");
|
||||
sb.append("善于培育,愿意付出,有耐心和毅力。");
|
||||
sb.append("但有时过于执着,需要学会放手。\n");
|
||||
} else if ("庚".equals(riGan)) {
|
||||
sb.append("庚金带煞,刚健为最。您性格果断,刚毅不屈,像宝剑一样锋利。");
|
||||
sb.append("讲义气,有正义感,做事雷厉风行。");
|
||||
sb.append("但有时过于强硬,需要学会温柔。\n");
|
||||
} else if ("辛".equals(riGan)) {
|
||||
sb.append("辛金软弱,温润而清。您性格细腻,有品味,像珠宝一样精致。");
|
||||
sb.append("注重细节,追求完美,有艺术天赋。");
|
||||
sb.append("但有时过于挑剔,需要学会宽容。\n");
|
||||
} else if ("壬".equals(riGan)) {
|
||||
sb.append("壬水通河,能泄金气。您性格豪爽,有冲劲,像江河一样奔放。");
|
||||
sb.append("目标明确,勇往直前,有开拓精神。");
|
||||
sb.append("但有时过于急躁,需要稳扎稳打。\n");
|
||||
} else if ("癸".equals(riGan)) {
|
||||
sb.append("癸水至弱,达于天津。您性格聪慧,心思细腻,像雨露一样滋润。");
|
||||
sb.append("观察力强,善于思考,有智慧。");
|
||||
sb.append("但有时过于内向,需要主动表达。\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generatePersonality() {
|
||||
StringBuilder personality = new StringBuilder();
|
||||
|
||||
personality.append("【性格特质分析】\n\n");
|
||||
|
||||
personality.append("根据您的日主").append(riGan).append("和八字组合分析:\n\n");
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
int riGanCount = wuXingCount.getOrDefault(riGanWX, 0);
|
||||
|
||||
if (riGanCount >= 3) {
|
||||
personality.append("您的日主").append(riGanWX).append("气旺盛,性格特点鲜明,");
|
||||
personality.append(getWuXingPersonality(riGanWX, true));
|
||||
} else if (riGanCount <= 1) {
|
||||
personality.append("您的日主").append(riGanWX).append("气偏弱,性格相对温和,");
|
||||
personality.append(getWuXingPersonality(riGanWX, false));
|
||||
} else {
|
||||
personality.append("您的日主").append(riGanWX).append("气适中,性格比较平衡,");
|
||||
personality.append(getWuXingPersonality(riGanWX, null));
|
||||
}
|
||||
|
||||
personality.append("\n\n【优势与不足】\n\n");
|
||||
personality.append(getAdvantagesAndDisadvantages());
|
||||
|
||||
return personality.toString();
|
||||
}
|
||||
|
||||
private String getWuXingPersonality(String wuXing, Boolean isWang) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("木".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格刚直,有主见,做事果断,有领导才能。但有时过于固执,不善变通。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格温和,善良,有同情心,但有时缺乏主见,优柔寡断。");
|
||||
} else {
|
||||
sb.append("性格正直,有原则,做事有条理,善于规划。");
|
||||
}
|
||||
} else if ("火".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格热情,外向,有感染力,但有时过于冲动,缺乏耐心。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格温和,有礼貌,但有时缺乏热情,做事不够积极。");
|
||||
} else {
|
||||
sb.append("性格开朗,善于表达,有感染力,人际关系好。");
|
||||
}
|
||||
} else if ("土".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格稳重,可靠,有包容心,但有时过于保守,缺乏创新。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格诚实,守信,但有时缺乏自信,容易依赖他人。");
|
||||
} else {
|
||||
sb.append("性格稳重,值得信赖,做事踏实,有责任心。");
|
||||
}
|
||||
} else if ("金".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格刚毅,果断,有正义感,但有时过于强硬,缺乏柔情。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格温和,有礼貌,但有时缺乏决断力,优柔寡断。");
|
||||
} else {
|
||||
sb.append("性格正直,讲原则,做事有条理,注重细节。");
|
||||
}
|
||||
} else if ("水".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格聪明,灵活,有智慧,但有时过于圆滑,缺乏原则。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格内向,谨慎,但有时缺乏自信,胆小怕事。");
|
||||
} else {
|
||||
sb.append("性格聪慧,善于思考,有洞察力,适应能力强。");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getAdvantagesAndDisadvantages() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
List<String> shenSha = new ArrayList<>();
|
||||
if (baZi.getYearGanZhiShenSha() != null) shenSha.addAll(baZi.getYearGanZhiShenSha());
|
||||
if (baZi.getMonthGanZhiShenSha() != null) shenSha.addAll(baZi.getMonthGanZhiShenSha());
|
||||
if (baZi.getDayGanZhiShenSha() != null) shenSha.addAll(baZi.getDayGanZhiShenSha());
|
||||
if (baZi.getHourGanZhiShenSha() != null) shenSha.addAll(baZi.getHourGanZhiShenSha());
|
||||
|
||||
if (shenSha.contains("天德") || shenSha.contains("月德")) {
|
||||
sb.append("• 有天德、月德贵人护佑,为人善良,有福气。\n");
|
||||
}
|
||||
if (shenSha.contains("文昌")) {
|
||||
sb.append("• 有文昌星,聪明好学,有文艺天赋。\n");
|
||||
}
|
||||
if (shenSha.contains("华盖")) {
|
||||
sb.append("• 有华盖星,有艺术天赋,思想独特。\n");
|
||||
}
|
||||
if (shenSha.contains("将星")) {
|
||||
sb.append("• 有将星,有领导才能,适合管理岗位。\n");
|
||||
}
|
||||
if (shenSha.contains("桃花")) {
|
||||
sb.append("• 有桃花星,人缘好,异性缘佳。\n");
|
||||
}
|
||||
if (shenSha.contains("驿马")) {
|
||||
sb.append("• 有驿马星,适合外出发展,事业多变动。\n");
|
||||
}
|
||||
|
||||
if (sb.length() == 0) {
|
||||
sb.append("• 性格特点需要结合具体大运流年综合分析。\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateCareer() {
|
||||
StringBuilder career = new StringBuilder();
|
||||
|
||||
career.append("【事业发展分析】\n\n");
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
career.append("根据您的八字五行配置,适合从事以下行业:\n\n");
|
||||
|
||||
career.append(getWuXingCareer(riGanWX));
|
||||
|
||||
career.append("\n【事业建议】\n\n");
|
||||
career.append(getCareerAdvice());
|
||||
|
||||
return career.toString();
|
||||
}
|
||||
|
||||
private String getWuXingCareer(String wuXing) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("木".equals(wuXing)) {
|
||||
sb.append("• 木属性行业:教育、培训、文化、艺术、出版、设计、园林、农业、林业、木材加工、家具制造、纺织品、服装、医药、保健品等。\n");
|
||||
} else if ("火".equals(wuXing)) {
|
||||
sb.append("• 火属性行业:电力、能源、电子、IT、互联网、餐饮、酒店、美容、化妆品、广告、影视、传媒、娱乐、体育等。\n");
|
||||
} else if ("土".equals(wuXing)) {
|
||||
sb.append("• 土属性行业:房地产、建筑、建材、装饰、农业、畜牧业、矿业、地质、仓储、物流、中介、咨询、管理等。\n");
|
||||
} else if ("金".equals(wuXing)) {
|
||||
sb.append("• 金属性行业:金融、银行、证券、保险、投资、金属、机械、五金、珠宝、首饰、汽车、航空、法律、执法等。\n");
|
||||
} else if ("水".equals(wuXing)) {
|
||||
sb.append("• 水属性行业:水利、水产、航运、交通、旅游、酒店、餐饮、娱乐、文化、教育、传媒、贸易、物流、清洁等。\n");
|
||||
}
|
||||
|
||||
String[] queShi = baZi.getWuXingQueShi();
|
||||
if (queShi != null && queShi.length > 0) {
|
||||
sb.append("\n由于八字缺").append(String.join("、", queShi)).append(",");
|
||||
sb.append("建议也可以考虑补充这些五行属性的行业,以达到五行平衡。\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getCareerAdvice() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
List<String> shenSha = new ArrayList<>();
|
||||
if (baZi.getYearGanZhiShenSha() != null) shenSha.addAll(baZi.getYearGanZhiShenSha());
|
||||
if (baZi.getMonthGanZhiShenSha() != null) shenSha.addAll(baZi.getMonthGanZhiShenSha());
|
||||
if (baZi.getDayGanZhiShenSha() != null) shenSha.addAll(baZi.getDayGanZhiShenSha());
|
||||
if (baZi.getHourGanZhiShenSha() != null) shenSha.addAll(baZi.getHourGanZhiShenSha());
|
||||
|
||||
if (shenSha.contains("文昌")) {
|
||||
sb.append("• 有文昌星,适合从事文化、教育、写作、研究等工作。\n");
|
||||
}
|
||||
if (shenSha.contains("将星")) {
|
||||
sb.append("• 有将星,适合从事管理、领导、军警等工作。\n");
|
||||
}
|
||||
if (shenSha.contains("驿马")) {
|
||||
sb.append("• 有驿马星,适合从事需要经常出差、流动的工作。\n");
|
||||
}
|
||||
if (shenSha.contains("华盖")) {
|
||||
sb.append("• 有华盖星,适合从事艺术、设计、创作等工作。\n");
|
||||
}
|
||||
|
||||
sb.append("• 选择行业时,建议结合自己的兴趣、特长和八字五行来综合考虑。\n");
|
||||
sb.append("• 如果八字中某个五行特别旺,可以选择与之相关的行业,这样更容易发挥优势。\n");
|
||||
sb.append("• 事业发展需要天时地利人和,后天的努力和机遇同样重要。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateMarriage() {
|
||||
StringBuilder marriage = new StringBuilder();
|
||||
|
||||
marriage.append("【婚姻感情分析】\n\n");
|
||||
|
||||
int sex = baZi.getSex();
|
||||
|
||||
marriage.append(getMarriageAnalysis(sex));
|
||||
|
||||
marriage.append("\n【婚姻建议】\n\n");
|
||||
marriage.append(getMarriageAdvice(sex));
|
||||
|
||||
return marriage.toString();
|
||||
}
|
||||
|
||||
private String getMarriageAnalysis(int sex) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
String riZhiWX = getZhiWuXing(riZhi)[0];
|
||||
|
||||
if (sex == 1) {
|
||||
sb.append("作为男性,您的日支").append(riZhi).append("代表妻宫,");
|
||||
sb.append(getZhiMarriageMeaning(riZhi, true));
|
||||
} else {
|
||||
sb.append("作为女性,您的日支").append(riZhi).append("代表夫宫,");
|
||||
sb.append(getZhiMarriageMeaning(riZhi, false));
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getZhiMarriageMeaning(String zhi, boolean isMale) {
|
||||
Map<String, String> meanings = new HashMap<>();
|
||||
|
||||
if (isMale) {
|
||||
meanings.put("子", "妻子聪明伶俐,善于持家。");
|
||||
meanings.put("丑", "妻子勤劳朴实,性格稳重。");
|
||||
meanings.put("寅", "妻子能干,有主见,但可能较为强势。");
|
||||
meanings.put("卯", "妻子温柔贤惠,善解人意。");
|
||||
meanings.put("辰", "妻子能干,善于理财,但可能较为固执。");
|
||||
meanings.put("巳", "妻子热情开朗,但可能较为强势。");
|
||||
meanings.put("午", "妻子性格开朗,但可能较为急躁。");
|
||||
meanings.put("未", "妻子温柔体贴,善解人意。");
|
||||
meanings.put("申", "妻子聪明能干,但可能较为强势。");
|
||||
meanings.put("酉", "妻子漂亮,注重外表,但可能较为挑剔。");
|
||||
meanings.put("戌", "妻子忠诚可靠,但可能较为固执。");
|
||||
meanings.put("亥", "妻子温柔善良,善解人意。");
|
||||
} else {
|
||||
meanings.put("子", "丈夫聪明,有才华,但可能较为花心。");
|
||||
meanings.put("丑", "丈夫稳重可靠,有责任心。");
|
||||
meanings.put("寅", "丈夫有魄力,有担当,但可能较为强势。");
|
||||
meanings.put("卯", "丈夫温柔体贴,善解人意。");
|
||||
meanings.put("辰", "丈夫能干,有事业心,但可能较为固执。");
|
||||
meanings.put("巳", "丈夫有才华,但可能较为花心。");
|
||||
meanings.put("午", "丈夫热情开朗,但可能较为急躁。");
|
||||
meanings.put("未", "丈夫温柔体贴,善解人意。");
|
||||
meanings.put("申", "丈夫聪明能干,但可能较为强势。");
|
||||
meanings.put("酉", "丈夫有才华,注重外表,但可能较为挑剔。");
|
||||
meanings.put("戌", "丈夫忠诚可靠,但可能较为固执。");
|
||||
meanings.put("亥", "丈夫温柔善良,善解人意。");
|
||||
}
|
||||
|
||||
return meanings.getOrDefault(zhi, "婚姻状况需要结合大运流年综合分析。");
|
||||
}
|
||||
|
||||
private String getMarriageAdvice(int sex) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
List<String> shenSha = new ArrayList<>();
|
||||
if (baZi.getYearGanZhiShenSha() != null) shenSha.addAll(baZi.getYearGanZhiShenSha());
|
||||
if (baZi.getMonthGanZhiShenSha() != null) shenSha.addAll(baZi.getMonthGanZhiShenSha());
|
||||
if (baZi.getDayGanZhiShenSha() != null) shenSha.addAll(baZi.getDayGanZhiShenSha());
|
||||
if (baZi.getHourGanZhiShenSha() != null) shenSha.addAll(baZi.getHourGanZhiShenSha());
|
||||
|
||||
if (shenSha.contains("桃花")) {
|
||||
sb.append("• 有桃花星,异性缘佳,但要注意把握分寸,避免烂桃花。\n");
|
||||
}
|
||||
if (shenSha.contains("红艳")) {
|
||||
sb.append("• 有红艳星,魅力十足,容易吸引异性。\n");
|
||||
}
|
||||
|
||||
sb.append("• 婚姻需要经营,相互理解、包容和支持是关键。\n");
|
||||
sb.append("• 选择伴侣时,性格互补比相似更重要。\n");
|
||||
sb.append("• 婚姻中要学会沟通,遇到问题及时解决,不要冷战。\n");
|
||||
sb.append("• 婚姻是两个人的事,需要共同经营和维护。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateWealth() {
|
||||
StringBuilder wealth = new StringBuilder();
|
||||
|
||||
wealth.append("【财运状况分析】\n\n");
|
||||
|
||||
wealth.append(getWealthAnalysis());
|
||||
|
||||
wealth.append("\n【理财建议】\n\n");
|
||||
wealth.append(getWealthAdvice());
|
||||
|
||||
return wealth.toString();
|
||||
}
|
||||
|
||||
private String getWealthAnalysis() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
boolean hasZhengCai = false;
|
||||
boolean hasPianCai = false;
|
||||
|
||||
String[] baZiWuXing = baZi.getBaZiWuXing();
|
||||
if (baZiWuXing != null) {
|
||||
for (String wx : baZiWuXing) {
|
||||
if ("财".equals(wx)) hasZhengCai = true;
|
||||
if ("才".equals(wx)) hasPianCai = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasZhengCai && hasPianCai) {
|
||||
sb.append("您的八字中正财、偏财都有,财运较好。正财代表稳定收入,偏财代表意外之财。\n");
|
||||
sb.append("既有稳定的工资收入,也有机会获得投资收益、奖金等额外收入。\n");
|
||||
} else if (hasZhengCai) {
|
||||
sb.append("您的八字中有正财,财运稳定。正财代表通过正当工作、努力劳动获得的收入。\n");
|
||||
sb.append("适合通过稳定的工作获得收入,不宜过度投机。\n");
|
||||
} else if (hasPianCai) {
|
||||
sb.append("您的八字中有偏财,有意外之财的机会。偏财代表投资收益、奖金等。\n");
|
||||
sb.append("可以适当进行投资理财,但要注意风险控制。\n");
|
||||
} else {
|
||||
sb.append("您的八字中财星不显,财运需要通过后天努力来改善。\n");
|
||||
sb.append("建议通过勤奋工作、学习技能来提升收入能力。\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getWealthAdvice() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("• 合理规划:收入要合理分配,不要过度消费。\n");
|
||||
sb.append("• 稳健投资:选择适合自己的投资方式,不要盲目跟风。\n");
|
||||
sb.append("• 开源节流:既要努力工作增加收入,也要学会节约开支。\n");
|
||||
sb.append("• 未雨绸缪:要有储蓄习惯,为未来做好准备。\n");
|
||||
sb.append("• 理性消费:不要冲动消费,买真正需要的东西。\n");
|
||||
sb.append("• 财富不是人生的全部,健康、家庭、友情同样重要。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateHealth() {
|
||||
StringBuilder health = new StringBuilder();
|
||||
|
||||
health.append("【健康运势分析】\n\n");
|
||||
|
||||
health.append(getHealthAnalysis());
|
||||
|
||||
health.append("\n【养生建议】\n\n");
|
||||
health.append(getHealthAdvice());
|
||||
|
||||
return health.toString();
|
||||
}
|
||||
|
||||
private String getHealthAnalysis() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("根据八字五行旺衰,需要注意以下方面的健康:\n\n");
|
||||
|
||||
for (Map.Entry<String, Integer> entry : wuXingCount.entrySet()) {
|
||||
String wuXing = entry.getKey();
|
||||
int count = entry.getValue();
|
||||
|
||||
if (count >= 3) {
|
||||
sb.append(getWuXingHealth(wuXing, true));
|
||||
} else if (count <= 1) {
|
||||
sb.append(getWuXingHealth(wuXing, false));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getWuXingHealth(String wuXing, boolean isWang) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("木".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 木旺:注意肝胆健康,容易肝火旺盛,建议保持心情舒畅,少生气。\n");
|
||||
} else {
|
||||
sb.append("• 木弱:注意肝胆健康,容易疲劳,建议多吃绿色蔬菜,保持充足睡眠。\n");
|
||||
}
|
||||
} else if ("火".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 火旺:注意心脏和眼睛健康,容易心烦失眠,建议保持心情平静,少吃辛辣。\n");
|
||||
} else {
|
||||
sb.append("• 火弱:注意心脏和眼睛健康,容易手脚冰凉,建议多运动,少吃生冷。\n");
|
||||
}
|
||||
} else if ("土".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 土旺:注意脾胃健康,容易消化不良,建议饮食清淡,少吃油腻。\n");
|
||||
} else {
|
||||
sb.append("• 土弱:注意脾胃健康,容易胃寒胃痛,建议饮食规律,少吃生冷。\n");
|
||||
}
|
||||
} else if ("金".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 金旺:注意肺部和呼吸系统健康,容易咳嗽,建议避免吸烟,保持空气清新。\n");
|
||||
} else {
|
||||
sb.append("• 金弱:注意肺部和呼吸系统健康,容易感冒,建议多锻炼,增强体质。\n");
|
||||
}
|
||||
} else if ("水".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 水旺:注意肾脏和泌尿系统健康,容易水肿,建议少喝水,避免过度劳累。\n");
|
||||
} else {
|
||||
sb.append("• 水弱:注意肾脏和泌尿系统健康,容易腰酸,建议多喝水,避免过度劳累。\n");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getHealthAdvice() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("• 规律作息:早睡早起,保证充足睡眠。\n");
|
||||
sb.append("• 适量运动:每天坚持运动30分钟以上。\n");
|
||||
sb.append("• 健康饮食:多吃蔬菜水果,少吃油腻食物。\n");
|
||||
sb.append("• 定期体检:每年至少体检一次,早发现早治疗。\n");
|
||||
sb.append("• 心理健康:保持良好心态,学会释放压力。\n");
|
||||
sb.append("• 健康是最大的财富,要珍惜和保护好自己的身体。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateAdvice() {
|
||||
StringBuilder advice = new StringBuilder();
|
||||
|
||||
advice.append("【人生建议】\n\n");
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
int riGanCount = wuXingCount.getOrDefault(riGanWX, 0);
|
||||
|
||||
if (riGanCount >= 3) {
|
||||
advice.append("您的日主").append(riGanWX).append("气旺盛,性格特点鲜明,建议:\n\n");
|
||||
advice.append("• 发挥自己的优势,在适合的领域深耕细作。\n");
|
||||
advice.append("• 学会谦虚,听取他人意见,不要过于固执。\n");
|
||||
advice.append("• 注意平衡,不要因为某个方面太强而忽视其他方面。\n");
|
||||
} else if (riGanCount <= 1) {
|
||||
advice.append("您的日主").append(riGanWX).append("气偏弱,建议:\n\n");
|
||||
advice.append("• 培养自信,相信自己的能力。\n");
|
||||
advice.append("• 多学习,提升自己的技能和知识。\n");
|
||||
advice.append("• 寻找贵人相助,借助他人的力量。\n");
|
||||
} else {
|
||||
advice.append("您的日主").append(riGanWX).append("气适中,性格比较平衡,建议:\n\n");
|
||||
advice.append("• 保持平衡,不要偏激。\n");
|
||||
advice.append("• 发挥优势,弥补不足。\n");
|
||||
advice.append("• 稳步前进,不要急于求成。\n");
|
||||
}
|
||||
|
||||
advice.append("\n【总体建议】\n\n");
|
||||
advice.append("• 命运掌握在自己手中,后天的努力和选择同样重要。\n");
|
||||
advice.append("• 保持积极乐观的心态,面对困难不要轻易放弃。\n");
|
||||
advice.append("• 珍惜身边的人,家人、朋友是最宝贵的财富。\n");
|
||||
advice.append("• 不断学习进步,提升自己的能力和修养。\n");
|
||||
advice.append("• 做人做事要有原则,但也要学会变通。\n");
|
||||
|
||||
return advice.toString();
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import xuan.core.bazi.BaZi;
|
||||
import xuan.core.bazi.settings.BaZiJiChuSetting;
|
||||
import xuan.core.bazi.settings.BaZiShenShaSetting;
|
||||
import xuan.core.bazi.settings.BaZiGanZhiLiuYiSetting;
|
||||
import xuan.core.bazi.utils.BaZiAnalysisUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -86,210 +87,19 @@ public class BaZiController {
|
||||
private Map<String, Object> buildAnalysis(BaZi baZi) {
|
||||
Map<String, Object> analysis = new HashMap<>();
|
||||
|
||||
analysis.put("summary", generateSummary(baZi));
|
||||
analysis.put("personality", generatePersonality(baZi));
|
||||
analysis.put("career", generateCareer(baZi));
|
||||
analysis.put("marriage", generateMarriage(baZi));
|
||||
analysis.put("wealth", generateWealth(baZi));
|
||||
analysis.put("health", generateHealth(baZi));
|
||||
BaZiAnalysisUtil analysisUtil = new BaZiAnalysisUtil(baZi);
|
||||
|
||||
analysis.put("summary", analysisUtil.generateSummary());
|
||||
analysis.put("personality", analysisUtil.generatePersonality());
|
||||
analysis.put("career", analysisUtil.generateCareer());
|
||||
analysis.put("marriage", analysisUtil.generateMarriage());
|
||||
analysis.put("wealth", analysisUtil.generateWealth());
|
||||
analysis.put("health", analysisUtil.generateHealth());
|
||||
analysis.put("advice", analysisUtil.generateAdvice());
|
||||
|
||||
return analysis;
|
||||
}
|
||||
|
||||
private String generateSummary(BaZi baZi) {
|
||||
String dayGanZhi = baZi.getDayGanZhi();
|
||||
String riGan = dayGanZhi.substring(0, 1);
|
||||
|
||||
StringBuilder summary = new StringBuilder();
|
||||
|
||||
summary.append("【总体评价】\n\n");
|
||||
|
||||
if ("甲".equals(riGan)) {
|
||||
summary.append("您是一个有领导力的人,像大树一样正直挺拔。做事有魄力,喜欢当主角,有担当,能扛事。");
|
||||
} else if ("乙".equals(riGan)) {
|
||||
summary.append("您是一个灵活变通的人,像花草一样柔韧。适应能力强,能屈能伸,善于处理人际关系。");
|
||||
} else if ("丙".equals(riGan)) {
|
||||
summary.append("您是一个热情开朗的人,像太阳一样温暖。善于表达,有感染力,容易成为人群中的焦点。");
|
||||
} else if ("丁".equals(riGan)) {
|
||||
summary.append("您是一个细腻体贴的人,像灯烛一样温暖。心思细腻,有耐心,善于照顾他人感受。");
|
||||
} else if ("戊".equals(riGan)) {
|
||||
summary.append("您是一个稳重可靠的人,像大地一样厚实。值得信赖,有包容心,能担当重任。");
|
||||
} else if ("己".equals(riGan)) {
|
||||
summary.append("您是一个有爱心的人,像田园一样肥沃。善于培育,愿意付出,有耐心和毅力。");
|
||||
} else if ("庚".equals(riGan)) {
|
||||
summary.append("您是一个果断刚毅的人,像宝剑一样锋利。做事雷厉风行,讲义气,有正义感。");
|
||||
} else if ("辛".equals(riGan)) {
|
||||
summary.append("您是一个有品味的人,像珠宝一样精致。注重细节,追求完美,有艺术天赋。");
|
||||
} else if ("壬".equals(riGan)) {
|
||||
summary.append("您是一个有冲劲的人,像江河一样奔放。目标明确,勇往直前,有开拓精神。");
|
||||
} else if ("癸".equals(riGan)) {
|
||||
summary.append("您是一个聪明智慧的人,像雨露一样滋润。心思细腻,观察力强,善于思考。");
|
||||
}
|
||||
|
||||
summary.append("\n\n");
|
||||
summary.append("【人生建议】\n\n");
|
||||
summary.append("人生就像一场马拉松,不在于起点,而在于过程中的坚持和努力。您的八字显示,您有自己独特的优势和潜力。");
|
||||
summary.append("关键是要发挥自己的长处,弥补自己的短板。");
|
||||
summary.append("记住:命运掌握在自己手中,后天的努力和选择同样重要。");
|
||||
|
||||
return summary.toString();
|
||||
}
|
||||
|
||||
private String generatePersonality(BaZi baZi) {
|
||||
String dayGanZhi = baZi.getDayGanZhi();
|
||||
String riGan = dayGanZhi.substring(0, 1);
|
||||
|
||||
StringBuilder personality = new StringBuilder();
|
||||
|
||||
personality.append("【性格特点】\n\n");
|
||||
|
||||
if ("甲".equals(riGan)) {
|
||||
personality.append("优点:正直、有担当、有领导力、做事有魄力\n");
|
||||
personality.append("缺点:有时候太固执,不善于妥协\n");
|
||||
personality.append("建议:学会灵活变通,多听取他人意见\n");
|
||||
} else if ("乙".equals(riGan)) {
|
||||
personality.append("优点:灵活、适应力强、善于变通、人际关系好\n");
|
||||
personality.append("缺点:有时候优柔寡断,缺乏主见\n");
|
||||
personality.append("建议:培养决断力,学会坚持自己的立场\n");
|
||||
} else if ("丙".equals(riGan)) {
|
||||
personality.append("优点:热情、开朗、有感染力、善于表达\n");
|
||||
personality.append("缺点:有时候太冲动,缺乏耐心\n");
|
||||
personality.append("建议:学会冷静思考,培养耐心\n");
|
||||
} else if ("丁".equals(riGan)) {
|
||||
personality.append("优点:细腻、体贴、有耐心、善于照顾他人\n");
|
||||
personality.append("缺点:有时候太敏感,容易多想\n");
|
||||
personality.append("建议:学会放宽心态,不要过于纠结细节\n");
|
||||
} else if ("戊".equals(riGan)) {
|
||||
personality.append("优点:稳重、可靠、有包容心、值得信赖\n");
|
||||
personality.append("缺点:有时候太保守,缺乏创新\n");
|
||||
personality.append("建议:学会接受新事物,勇于尝试\n");
|
||||
} else if ("己".equals(riGan)) {
|
||||
personality.append("优点:有爱心、有耐心、善于培育、愿意付出\n");
|
||||
personality.append("缺点:有时候太执着,不善于放手\n");
|
||||
personality.append("建议:学会适度放手,给自己和他人空间\n");
|
||||
} else if ("庚".equals(riGan)) {
|
||||
personality.append("优点:果断、刚毅、讲义气、有正义感\n");
|
||||
personality.append("缺点:有时候太强硬,缺乏柔情\n");
|
||||
personality.append("建议:学会温柔待人,培养耐心\n");
|
||||
} else if ("辛".equals(riGan)) {
|
||||
personality.append("优点:有品味、注重细节、追求完美、有艺术天赋\n");
|
||||
personality.append("缺点:有时候太挑剔,要求过高\n");
|
||||
personality.append("建议:学会接受不完美,给自己和他人宽容\n");
|
||||
} else if ("壬".equals(riGan)) {
|
||||
personality.append("优点:有冲劲、目标明确、勇往直前、有开拓精神\n");
|
||||
personality.append("缺点:有时候太急躁,缺乏耐心\n");
|
||||
personality.append("建议:学会稳扎稳打,不要急于求成\n");
|
||||
} else if ("癸".equals(riGan)) {
|
||||
personality.append("优点:聪明、智慧、心思细腻、观察力强\n");
|
||||
personality.append("缺点:有时候太内向,不善表达\n");
|
||||
personality.append("建议:学会主动表达,多与人交流\n");
|
||||
}
|
||||
|
||||
return personality.toString();
|
||||
}
|
||||
|
||||
private String generateCareer(BaZi baZi) {
|
||||
StringBuilder career = new StringBuilder();
|
||||
|
||||
career.append("【事业发展】\n\n");
|
||||
career.append("适合的行业方向:\n\n");
|
||||
|
||||
career.append("• 木属性行业:教育、培训、文化、艺术、出版、设计、园林、农业、林业、木材加工、家具制造、纺织品、服装、医药、保健品等。\n\n");
|
||||
|
||||
career.append("• 火属性行业:电力、能源、电子、IT、互联网、餐饮、酒店、美容、化妆品、广告、影视、传媒、娱乐、体育等。\n\n");
|
||||
|
||||
career.append("• 土属性行业:房地产、建筑、建材、装饰、农业、畜牧业、矿业、地质、仓储、物流、中介、咨询、管理等。\n\n");
|
||||
|
||||
career.append("• 金属性行业:金融、银行、证券、保险、投资、金属、机械、五金、珠宝、首饰、汽车、航空、法律、执法等。\n\n");
|
||||
|
||||
career.append("• 水属性行业:水利、水产、航运、交通、旅游、酒店、餐饮、娱乐、文化、教育、传媒、贸易、物流、清洁等。\n\n");
|
||||
|
||||
career.append("【事业建议】\n\n");
|
||||
career.append("选择行业时,建议结合自己的兴趣、特长和八字五行来综合考虑。");
|
||||
career.append("如果八字中某个五行特别旺,可以选择与之相关的行业,这样更容易发挥优势。");
|
||||
career.append("如果八字中某个五行缺失,可以在工作中多接触相关领域,或者通过学习来弥补。");
|
||||
|
||||
return career.toString();
|
||||
}
|
||||
|
||||
private String generateMarriage(BaZi baZi) {
|
||||
StringBuilder marriage = new StringBuilder();
|
||||
|
||||
marriage.append("【感情婚姻】\n\n");
|
||||
|
||||
String sex = baZi.getSex();
|
||||
|
||||
if ("男".equals(sex)) {
|
||||
marriage.append("男命看婚姻:\n\n");
|
||||
marriage.append("• 您的八字中财星代表妻子,财星旺相的话,妻子贤惠能干,婚姻幸福。\n");
|
||||
marriage.append("• 财星弱的话,可能需要晚婚,或者妻子身体较弱,需要多关心照顾。\n");
|
||||
marriage.append("• 建议选择性格互补的伴侣,这样婚姻更和谐。\n\n");
|
||||
} else {
|
||||
marriage.append("女命看婚姻:\n\n");
|
||||
marriage.append("• 您的八字中官杀代表丈夫,官杀旺相的话,丈夫有能力,婚姻稳定。\n");
|
||||
marriage.append("• 官杀弱的话,可能需要晚婚,或者丈夫事业需要扶持。\n");
|
||||
marriage.append("• 建议选择有责任心、有担当的伴侣,这样婚姻更幸福。\n\n");
|
||||
}
|
||||
|
||||
marriage.append("【婚姻建议】\n\n");
|
||||
marriage.append("婚姻需要经营,不是命中注定就一成不变的。");
|
||||
marriage.append("好的婚姻需要双方共同努力,相互理解,相互包容。");
|
||||
marriage.append("遇到问题时,多沟通,多换位思考,不要轻易放弃。");
|
||||
marriage.append("记住:婚姻是两个人的事,需要共同经营和维护。");
|
||||
|
||||
return marriage.toString();
|
||||
}
|
||||
|
||||
private String generateWealth(BaZi baZi) {
|
||||
StringBuilder wealth = new StringBuilder();
|
||||
|
||||
wealth.append("【财运分析】\n\n");
|
||||
|
||||
wealth.append("财运特点:\n\n");
|
||||
wealth.append("• 正财:通过正当工作、努力劳动获得的收入,稳定可靠。\n");
|
||||
wealth.append("• 偏财:意外之财、投资收益、奖金等,时有时无。\n\n");
|
||||
|
||||
wealth.append("【理财建议】\n\n");
|
||||
wealth.append("1. 合理规划:收入要合理分配,不要过度消费。\n");
|
||||
wealth.append("2. 稳健投资:选择适合自己的投资方式,不要盲目跟风。\n");
|
||||
wealth.append("3. 开源节流:既要努力工作增加收入,也要学会节约开支。\n");
|
||||
wealth.append("4. 未雨绸缪:要有储蓄习惯,为未来做好准备。\n");
|
||||
wealth.append("5. 理性消费:不要冲动消费,买真正需要的东西。\n\n");
|
||||
|
||||
wealth.append("记住:财富不是人生的全部,健康、家庭、友情同样重要。");
|
||||
|
||||
return wealth.toString();
|
||||
}
|
||||
|
||||
private String generateHealth(BaZi baZi) {
|
||||
StringBuilder health = new StringBuilder();
|
||||
|
||||
health.append("【健康提醒】\n\n");
|
||||
|
||||
health.append("根据八字五行,需要注意以下方面的健康:\n\n");
|
||||
|
||||
health.append("• 木(肝胆):如果八字木旺或木弱,要注意肝胆健康。保持心情舒畅,避免生气,少喝酒,多吃绿色蔬菜。\n\n");
|
||||
|
||||
health.append("• 火(心脏、眼睛):如果八字火旺或火弱,要注意心脏和眼睛健康。避免过度焦虑,保持充足睡眠,少吃辛辣食物。\n\n");
|
||||
|
||||
health.append("• 土(脾胃):如果八字土旺或土弱,要注意脾胃健康。饮食规律,避免暴饮暴食,少吃生冷食物。\n\n");
|
||||
|
||||
health.append("• 金(肺部、呼吸系统):如果八字金旺或金弱,要注意肺部和呼吸系统健康。避免吸烟,保持空气清新,多吃白色食物。\n\n");
|
||||
|
||||
health.append("• 水(肾脏、泌尿系统):如果八字水旺或水弱,要注意肾脏和泌尿系统健康。多喝水,避免过度劳累,少吃咸食。\n\n");
|
||||
|
||||
health.append("【养生建议】\n\n");
|
||||
health.append("1. 规律作息:早睡早起,保证充足睡眠。\n");
|
||||
health.append("2. 适量运动:每天坚持运动30分钟以上。\n");
|
||||
health.append("3. 健康饮食:多吃蔬菜水果,少吃油腻食物。\n");
|
||||
health.append("4. 定期体检:每年至少体检一次,早发现早治疗。\n");
|
||||
health.append("5. 心理健康:保持良好心态,学会释放压力。\n\n");
|
||||
|
||||
health.append("记住:健康是最大的财富,要珍惜和保护好自己的身体。");
|
||||
|
||||
return health.toString();
|
||||
}
|
||||
|
||||
public static class BaZiRequest {
|
||||
private String name;
|
||||
private String occupy;
|
||||
|
||||
@@ -0,0 +1,608 @@
|
||||
package xuan.core.bazi.utils;
|
||||
|
||||
import java.util.*;
|
||||
import xuan.core.bazi.BaZi;
|
||||
|
||||
/**
|
||||
* 八字命理分析工具
|
||||
* 基于传统八字命理学原理进行推演分析
|
||||
*/
|
||||
public class BaZiAnalysisUtil {
|
||||
|
||||
private BaZi baZi;
|
||||
private String[] baZiArray;
|
||||
private Map<String, Integer> wuXingCount;
|
||||
private String riGan;
|
||||
private String riZhi;
|
||||
private String nianGan;
|
||||
private String nianZhi;
|
||||
private String yueGan;
|
||||
private String yueZhi;
|
||||
private String shiGan;
|
||||
private String shiZhi;
|
||||
|
||||
public BaZiAnalysisUtil(BaZi baZi) {
|
||||
this.baZi = baZi;
|
||||
List<String> baZiList = baZi.getBaZi();
|
||||
if (baZiList != null && baZiList.size() >= 4) {
|
||||
this.baZiArray = baZiList.toArray(new String[0]);
|
||||
}
|
||||
this.wuXingCount = calculateWuXingCount();
|
||||
|
||||
if (baZiArray != null && baZiArray.length >= 4) {
|
||||
this.nianGan = baZiArray[0].substring(0, 1);
|
||||
this.nianZhi = baZiArray[0].substring(1);
|
||||
this.yueGan = baZiArray[1].substring(0, 1);
|
||||
this.yueZhi = baZiArray[1].substring(1);
|
||||
this.riGan = baZiArray[2].substring(0, 1);
|
||||
this.riZhi = baZiArray[2].substring(1);
|
||||
this.shiGan = baZiArray[3].substring(0, 1);
|
||||
this.shiZhi = baZiArray[3].substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, Integer> calculateWuXingCount() {
|
||||
Map<String, Integer> count = new HashMap<>();
|
||||
count.put("木", 0);
|
||||
count.put("火", 0);
|
||||
count.put("土", 0);
|
||||
count.put("金", 0);
|
||||
count.put("水", 0);
|
||||
|
||||
if (baZiArray == null) return count;
|
||||
|
||||
for (String ganZhi : baZiArray) {
|
||||
String gan = ganZhi.substring(0, 1);
|
||||
String zhi = ganZhi.substring(1);
|
||||
|
||||
String ganWX = getGanWuXing(gan);
|
||||
count.put(ganWX, count.get(ganWX) + 1);
|
||||
|
||||
String[] zhiWX = getZhiWuXing(zhi);
|
||||
for (String wx : zhiWX) {
|
||||
count.put(wx, count.get(wx) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
private String getGanWuXing(String gan) {
|
||||
Map<String, String> ganWX = new HashMap<>();
|
||||
ganWX.put("甲", "木"); ganWX.put("乙", "木");
|
||||
ganWX.put("丙", "火"); ganWX.put("丁", "火");
|
||||
ganWX.put("戊", "土"); ganWX.put("己", "土");
|
||||
ganWX.put("庚", "金"); ganWX.put("辛", "金");
|
||||
ganWX.put("壬", "水"); ganWX.put("癸", "水");
|
||||
return ganWX.getOrDefault(gan, "土");
|
||||
}
|
||||
|
||||
private String[] getZhiWuXing(String zhi) {
|
||||
Map<String, String[]> zhiWX = new HashMap<>();
|
||||
zhiWX.put("子", new String[]{"水"});
|
||||
zhiWX.put("丑", new String[]{"土", "水", "金"});
|
||||
zhiWX.put("寅", new String[]{"木", "火", "土"});
|
||||
zhiWX.put("卯", new String[]{"木"});
|
||||
zhiWX.put("辰", new String[]{"土", "木", "水"});
|
||||
zhiWX.put("巳", new String[]{"火", "土", "金"});
|
||||
zhiWX.put("午", new String[]{"火", "土"});
|
||||
zhiWX.put("未", new String[]{"土", "火", "木"});
|
||||
zhiWX.put("申", new String[]{"金", "水", "土"});
|
||||
zhiWX.put("酉", new String[]{"金"});
|
||||
zhiWX.put("戌", new String[]{"土", "金", "火"});
|
||||
zhiWX.put("亥", new String[]{"水", "木"});
|
||||
return zhiWX.getOrDefault(zhi, new String[]{"土"});
|
||||
}
|
||||
|
||||
public String generateSummary() {
|
||||
StringBuilder summary = new StringBuilder();
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
String wangShuai = getWuXingWangShuai(riGanWX);
|
||||
|
||||
summary.append("根据您的八字排盘分析,您是").append(riGanWX).append("命人,日主为").append(riGan).append(",");
|
||||
summary.append(wangShuai).append("。\n\n");
|
||||
|
||||
String[] queShi = baZi.getWuXingQueShi() != null ? baZi.getWuXingQueShi().toArray(new String[0]) : null;
|
||||
if (queShi != null && queShi.length > 0) {
|
||||
summary.append("八字中五行缺").append(String.join("、", queShi)).append(",");
|
||||
summary.append("建议在生活中适当补充相关元素。\n\n");
|
||||
}
|
||||
|
||||
String shengXiao = baZi.getShengXiao();
|
||||
String xingZuo = baZi.getXingZuo();
|
||||
summary.append("生肖属").append(shengXiao).append(",星座为").append(xingZuo).append("。\n\n");
|
||||
|
||||
summary.append(getMingGeTeDian());
|
||||
|
||||
return summary.toString();
|
||||
}
|
||||
|
||||
private String getWuXingWangShuai(String wuXing) {
|
||||
int count = wuXingCount.getOrDefault(wuXing, 0);
|
||||
if (count >= 3) return "五行" + wuXing + "旺," + wuXing + "气充足";
|
||||
else if (count >= 2) return "五行" + wuXing + "相," + wuXing + "气适中";
|
||||
else if (count == 1) return "五行" + wuXing + "休," + wuXing + "气偏弱";
|
||||
else return "五行" + wuXing + "囚," + wuXing + "气不足";
|
||||
}
|
||||
|
||||
private String getMingGeTeDian() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("甲".equals(riGan)) {
|
||||
sb.append("甲木参天,脱胎要火。您性格正直,有领导力,像大树一样挺拔。");
|
||||
sb.append("做事有魄力,喜欢当主角,有担当,能扛事。");
|
||||
sb.append("但有时过于固执,需要学会变通。");
|
||||
} else if ("乙".equals(riGan)) {
|
||||
sb.append("乙木虽柔,刲羊解牛。您性格温和,善于变通,像花草一样柔韧。");
|
||||
sb.append("适应能力强,能屈能伸,善于处理人际关系。");
|
||||
sb.append("但有时优柔寡断,需要培养决断力。");
|
||||
} else if ("丙".equals(riGan)) {
|
||||
sb.append("丙火猛烈,欺霜侮雪。您性格热情,充满活力,像太阳一样温暖。");
|
||||
sb.append("善于表达,有感染力,容易成为人群中的焦点。");
|
||||
sb.append("但有时过于冲动,需要学会冷静。");
|
||||
} else if ("丁".equals(riGan)) {
|
||||
sb.append("丁火柔中,内性昭融。您性格细腻,心思缜密,像灯烛一样温暖。");
|
||||
sb.append("有耐心,善于照顾他人感受。");
|
||||
sb.append("但有时过于敏感,需要放宽心态。");
|
||||
} else if ("戊".equals(riGan)) {
|
||||
sb.append("戊土厚重,载华岳而不重。您性格稳重,值得信赖,像大地一样厚实。");
|
||||
sb.append("有包容心,能担当重任。");
|
||||
sb.append("但有时过于保守,需要勇于创新。");
|
||||
} else if ("己".equals(riGan)) {
|
||||
sb.append("己土卑湿,中正蓄藏。您性格温和,有爱心,像田园一样肥沃。");
|
||||
sb.append("善于培育,愿意付出,有耐心和毅力。");
|
||||
sb.append("但有时过于执着,需要学会放手。");
|
||||
} else if ("庚".equals(riGan)) {
|
||||
sb.append("庚金带煞,刚健为最。您性格果断,刚毅不屈,像宝剑一样锋利。");
|
||||
sb.append("讲义气,有正义感,做事雷厉风行。");
|
||||
sb.append("但有时过于强硬,需要学会温柔。");
|
||||
} else if ("辛".equals(riGan)) {
|
||||
sb.append("辛金软弱,温润而清。您性格细腻,有品味,像珠宝一样精致。");
|
||||
sb.append("注重细节,追求完美,有艺术天赋。");
|
||||
sb.append("但有时过于挑剔,需要学会宽容。");
|
||||
} else if ("壬".equals(riGan)) {
|
||||
sb.append("壬水通河,能泄金气。您性格豪爽,有冲劲,像江河一样奔放。");
|
||||
sb.append("目标明确,勇往直前,有开拓精神。");
|
||||
sb.append("但有时过于急躁,需要稳扎稳打。");
|
||||
} else if ("癸".equals(riGan)) {
|
||||
sb.append("癸水至弱,达于天津。您性格聪慧,心思细腻,像雨露一样滋润。");
|
||||
sb.append("观察力强,善于思考,有智慧。");
|
||||
sb.append("但有时过于内向,需要主动表达。");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generatePersonality() {
|
||||
StringBuilder personality = new StringBuilder();
|
||||
|
||||
personality.append("根据您的日主").append(riGan).append("和八字组合分析:\n\n");
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
int riGanCount = wuXingCount.getOrDefault(riGanWX, 0);
|
||||
|
||||
if (riGanCount >= 3) {
|
||||
personality.append("您的日主").append(riGanWX).append("气旺盛,性格特点鲜明,");
|
||||
personality.append(getWuXingPersonality(riGanWX, true));
|
||||
} else if (riGanCount <= 1) {
|
||||
personality.append("您的日主").append(riGanWX).append("气偏弱,性格相对温和,");
|
||||
personality.append(getWuXingPersonality(riGanWX, false));
|
||||
} else {
|
||||
personality.append("您的日主").append(riGanWX).append("气适中,性格比较平衡,");
|
||||
personality.append(getWuXingPersonality(riGanWX, null));
|
||||
}
|
||||
|
||||
personality.append("\n\n【优势与不足】\n\n");
|
||||
personality.append(getAdvantagesAndDisadvantages());
|
||||
|
||||
return personality.toString();
|
||||
}
|
||||
|
||||
private String getWuXingPersonality(String wuXing, Boolean isWang) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("木".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格刚直,有主见,做事果断,有领导才能。但有时过于固执,不善变通。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格温和,善良,有同情心,但有时缺乏主见,优柔寡断。");
|
||||
} else {
|
||||
sb.append("性格正直,有原则,做事有条理,善于规划。");
|
||||
}
|
||||
} else if ("火".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格热情,外向,有感染力,但有时过于冲动,缺乏耐心。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格温和,有礼貌,但有时缺乏热情,做事不够积极。");
|
||||
} else {
|
||||
sb.append("性格开朗,善于表达,有感染力,人际关系好。");
|
||||
}
|
||||
} else if ("土".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格稳重,可靠,有包容心,但有时过于保守,缺乏创新。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格诚实,守信,但有时缺乏自信,容易依赖他人。");
|
||||
} else {
|
||||
sb.append("性格稳重,值得信赖,做事踏实,有责任心。");
|
||||
}
|
||||
} else if ("金".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格刚毅,果断,有正义感,但有时过于强硬,缺乏柔情。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格温和,有礼貌,但有时缺乏决断力,优柔寡断。");
|
||||
} else {
|
||||
sb.append("性格正直,讲原则,做事有条理,注重细节。");
|
||||
}
|
||||
} else if ("水".equals(wuXing)) {
|
||||
if (Boolean.TRUE.equals(isWang)) {
|
||||
sb.append("性格聪明,灵活,有智慧,但有时过于圆滑,缺乏原则。");
|
||||
} else if (Boolean.FALSE.equals(isWang)) {
|
||||
sb.append("性格内向,谨慎,但有时缺乏自信,胆小怕事。");
|
||||
} else {
|
||||
sb.append("性格聪慧,善于思考,有洞察力,适应能力强。");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getAdvantagesAndDisadvantages() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
List<String> shenSha = new ArrayList<>();
|
||||
if (baZi.getYearGanZhiShenSha() != null) shenSha.addAll(baZi.getYearGanZhiShenSha());
|
||||
if (baZi.getMonthGanZhiShenSha() != null) shenSha.addAll(baZi.getMonthGanZhiShenSha());
|
||||
if (baZi.getDayGanZhiShenSha() != null) shenSha.addAll(baZi.getDayGanZhiShenSha());
|
||||
if (baZi.getHourGanZhiShenSha() != null) shenSha.addAll(baZi.getHourGanZhiShenSha());
|
||||
|
||||
if (shenSha.contains("天德") || shenSha.contains("月德")) {
|
||||
sb.append("• 有天德、月德贵人护佑,为人善良,有福气。\n");
|
||||
}
|
||||
if (shenSha.contains("文昌")) {
|
||||
sb.append("• 有文昌星,聪明好学,有文艺天赋。\n");
|
||||
}
|
||||
if (shenSha.contains("华盖")) {
|
||||
sb.append("• 有华盖星,有艺术天赋,思想独特。\n");
|
||||
}
|
||||
if (shenSha.contains("将星")) {
|
||||
sb.append("• 有将星,有领导才能,适合管理岗位。\n");
|
||||
}
|
||||
if (shenSha.contains("桃花")) {
|
||||
sb.append("• 有桃花星,人缘好,异性缘佳。\n");
|
||||
}
|
||||
if (shenSha.contains("驿马")) {
|
||||
sb.append("• 有驿马星,适合外出发展,事业多变动。\n");
|
||||
}
|
||||
|
||||
if (sb.length() == 0) {
|
||||
sb.append("• 性格特点需要结合具体大运流年综合分析。\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateCareer() {
|
||||
StringBuilder career = new StringBuilder();
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
career.append("根据您的八字五行配置,适合从事以下行业:\n\n");
|
||||
|
||||
career.append(getWuXingCareer(riGanWX));
|
||||
|
||||
career.append("\n【事业建议】\n\n");
|
||||
career.append(getCareerAdvice());
|
||||
|
||||
return career.toString();
|
||||
}
|
||||
|
||||
private String getWuXingCareer(String wuXing) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("木".equals(wuXing)) {
|
||||
sb.append("• 木属性行业:教育、培训、文化、艺术、出版、设计、园林、农业、林业、木材加工、家具制造、纺织品、服装、医药、保健品等。\n");
|
||||
} else if ("火".equals(wuXing)) {
|
||||
sb.append("• 火属性行业:电力、能源、电子、IT、互联网、餐饮、酒店、美容、化妆品、广告、影视、传媒、娱乐、体育等。\n");
|
||||
} else if ("土".equals(wuXing)) {
|
||||
sb.append("• 土属性行业:房地产、建筑、建材、装饰、农业、畜牧业、矿业、地质、仓储、物流、中介、咨询、管理等。\n");
|
||||
} else if ("金".equals(wuXing)) {
|
||||
sb.append("• 金属性行业:金融、银行、证券、保险、投资、金属、机械、五金、珠宝、首饰、汽车、航空、法律、执法等。\n");
|
||||
} else if ("水".equals(wuXing)) {
|
||||
sb.append("• 水属性行业:水利、水产、航运、交通、旅游、酒店、餐饮、娱乐、文化、教育、传媒、贸易、物流、清洁等。\n");
|
||||
}
|
||||
|
||||
String[] queShi = baZi.getWuXingQueShi() != null ? baZi.getWuXingQueShi().toArray(new String[0]) : null;
|
||||
if (queShi != null && queShi.length > 0) {
|
||||
sb.append("\n由于八字缺").append(String.join("、", queShi)).append(",");
|
||||
sb.append("建议也可以考虑补充这些五行属性的行业,以达到五行平衡。\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getCareerAdvice() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
List<String> shenSha = new ArrayList<>();
|
||||
if (baZi.getYearGanZhiShenSha() != null) shenSha.addAll(baZi.getYearGanZhiShenSha());
|
||||
if (baZi.getMonthGanZhiShenSha() != null) shenSha.addAll(baZi.getMonthGanZhiShenSha());
|
||||
if (baZi.getDayGanZhiShenSha() != null) shenSha.addAll(baZi.getDayGanZhiShenSha());
|
||||
if (baZi.getHourGanZhiShenSha() != null) shenSha.addAll(baZi.getHourGanZhiShenSha());
|
||||
|
||||
if (shenSha.contains("文昌")) {
|
||||
sb.append("• 有文昌星,适合从事文化、教育、写作、研究等工作。\n");
|
||||
}
|
||||
if (shenSha.contains("将星")) {
|
||||
sb.append("• 有将星,适合从事管理、领导、军警等工作。\n");
|
||||
}
|
||||
if (shenSha.contains("驿马")) {
|
||||
sb.append("• 有驿马星,适合从事需要经常出差、流动的工作。\n");
|
||||
}
|
||||
if (shenSha.contains("华盖")) {
|
||||
sb.append("• 有华盖星,适合从事艺术、设计、创作等工作。\n");
|
||||
}
|
||||
|
||||
sb.append("• 选择行业时,建议结合自己的兴趣、特长和八字五行来综合考虑。\n");
|
||||
sb.append("• 如果八字中某个五行特别旺,可以选择与之相关的行业,这样更容易发挥优势。\n");
|
||||
sb.append("• 事业发展需要天时地利人和,后天的努力和机遇同样重要。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateMarriage() {
|
||||
StringBuilder marriage = new StringBuilder();
|
||||
|
||||
String sex = baZi.getSex();
|
||||
int sexInt = "男".equals(sex) ? 1 : 0;
|
||||
|
||||
marriage.append(getMarriageAnalysis(sexInt));
|
||||
|
||||
marriage.append("\n【婚姻建议】\n\n");
|
||||
marriage.append(getMarriageAdvice(sexInt));
|
||||
|
||||
return marriage.toString();
|
||||
}
|
||||
|
||||
private String getMarriageAnalysis(int sex) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
String riZhiWX = getZhiWuXing(riZhi)[0];
|
||||
|
||||
if (sex == 1) {
|
||||
sb.append("作为男性,您的日支").append(riZhi).append("代表妻宫,");
|
||||
sb.append(getZhiMarriageMeaning(riZhi, true));
|
||||
} else {
|
||||
sb.append("作为女性,您的日支").append(riZhi).append("代表夫宫,");
|
||||
sb.append(getZhiMarriageMeaning(riZhi, false));
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getZhiMarriageMeaning(String zhi, boolean isMale) {
|
||||
Map<String, String> meanings = new HashMap<>();
|
||||
|
||||
if (isMale) {
|
||||
meanings.put("子", "妻子聪明伶俐,善于持家。");
|
||||
meanings.put("丑", "妻子勤劳朴实,性格稳重。");
|
||||
meanings.put("寅", "妻子能干,有主见,但可能较为强势。");
|
||||
meanings.put("卯", "妻子温柔贤惠,善解人意。");
|
||||
meanings.put("辰", "妻子能干,善于理财,但可能较为固执。");
|
||||
meanings.put("巳", "妻子热情开朗,但可能较为强势。");
|
||||
meanings.put("午", "妻子性格开朗,但可能较为急躁。");
|
||||
meanings.put("未", "妻子温柔体贴,善解人意。");
|
||||
meanings.put("申", "妻子聪明能干,但可能较为强势。");
|
||||
meanings.put("酉", "妻子漂亮,注重外表,但可能较为挑剔。");
|
||||
meanings.put("戌", "妻子忠诚可靠,但可能较为固执。");
|
||||
meanings.put("亥", "妻子温柔善良,善解人意。");
|
||||
} else {
|
||||
meanings.put("子", "丈夫聪明,有才华,但可能较为花心。");
|
||||
meanings.put("丑", "丈夫稳重可靠,有责任心。");
|
||||
meanings.put("寅", "丈夫有魄力,有担当,但可能较为强势。");
|
||||
meanings.put("卯", "丈夫温柔体贴,善解人意。");
|
||||
meanings.put("辰", "丈夫能干,有事业心,但可能较为固执。");
|
||||
meanings.put("巳", "丈夫有才华,但可能较为花心。");
|
||||
meanings.put("午", "丈夫热情开朗,但可能较为急躁。");
|
||||
meanings.put("未", "丈夫温柔体贴,善解人意。");
|
||||
meanings.put("申", "丈夫聪明能干,但可能较为强势。");
|
||||
meanings.put("酉", "丈夫有才华,注重外表,但可能较为挑剔。");
|
||||
meanings.put("戌", "丈夫忠诚可靠,但可能较为固执。");
|
||||
meanings.put("亥", "丈夫温柔善良,善解人意。");
|
||||
}
|
||||
|
||||
return meanings.getOrDefault(zhi, "婚姻状况需要结合大运流年综合分析。");
|
||||
}
|
||||
|
||||
private String getMarriageAdvice(int sex) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
List<String> shenSha = new ArrayList<>();
|
||||
if (baZi.getYearGanZhiShenSha() != null) shenSha.addAll(baZi.getYearGanZhiShenSha());
|
||||
if (baZi.getMonthGanZhiShenSha() != null) shenSha.addAll(baZi.getMonthGanZhiShenSha());
|
||||
if (baZi.getDayGanZhiShenSha() != null) shenSha.addAll(baZi.getDayGanZhiShenSha());
|
||||
if (baZi.getHourGanZhiShenSha() != null) shenSha.addAll(baZi.getHourGanZhiShenSha());
|
||||
|
||||
if (shenSha.contains("桃花")) {
|
||||
sb.append("• 有桃花星,异性缘佳,但要注意把握分寸,避免烂桃花。\n");
|
||||
}
|
||||
if (shenSha.contains("红艳")) {
|
||||
sb.append("• 有红艳星,魅力十足,容易吸引异性。\n");
|
||||
}
|
||||
|
||||
sb.append("• 婚姻需要经营,相互理解、包容和支持是关键。\n");
|
||||
sb.append("• 选择伴侣时,性格互补比相似更重要。\n");
|
||||
sb.append("• 婚姻中要学会沟通,遇到问题及时解决,不要冷战。\n");
|
||||
sb.append("• 婚姻是两个人的事,需要共同经营和维护。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateWealth() {
|
||||
StringBuilder wealth = new StringBuilder();
|
||||
|
||||
wealth.append(getWealthAnalysis());
|
||||
|
||||
wealth.append("\n【理财建议】\n\n");
|
||||
wealth.append(getWealthAdvice());
|
||||
|
||||
return wealth.toString();
|
||||
}
|
||||
|
||||
private String getWealthAnalysis() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
boolean hasZhengCai = false;
|
||||
boolean hasPianCai = false;
|
||||
|
||||
List<String> baZiWuXingList = baZi.getBaZiWuXing();
|
||||
if (baZiWuXingList != null) {
|
||||
for (String wx : baZiWuXingList) {
|
||||
if ("财".equals(wx)) hasZhengCai = true;
|
||||
if ("才".equals(wx)) hasPianCai = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasZhengCai && hasPianCai) {
|
||||
sb.append("您的八字中正财、偏财都有,财运较好。正财代表稳定收入,偏财代表意外之财。\n");
|
||||
sb.append("既有稳定的工资收入,也有机会获得投资收益、奖金等额外收入。\n");
|
||||
} else if (hasZhengCai) {
|
||||
sb.append("您的八字中有正财,财运稳定。正财代表通过正当工作、努力劳动获得的收入。\n");
|
||||
sb.append("适合通过稳定的工作获得收入,不宜过度投机。\n");
|
||||
} else if (hasPianCai) {
|
||||
sb.append("您的八字中有偏财,有意外之财的机会。偏财代表投资收益、奖金等。\n");
|
||||
sb.append("可以适当进行投资理财,但要注意风险控制。\n");
|
||||
} else {
|
||||
sb.append("您的八字中财星不显,财运需要通过后天努力来改善。\n");
|
||||
sb.append("建议通过勤奋工作、学习技能来提升收入能力。\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getWealthAdvice() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("• 合理规划:收入要合理分配,不要过度消费。\n");
|
||||
sb.append("• 稳健投资:选择适合自己的投资方式,不要盲目跟风。\n");
|
||||
sb.append("• 开源节流:既要努力工作增加收入,也要学会节约开支。\n");
|
||||
sb.append("• 未雨绸缪:要有储蓄习惯,为未来做好准备。\n");
|
||||
sb.append("• 理性消费:不要冲动消费,买真正需要的东西。\n");
|
||||
sb.append("• 财富不是人生的全部,健康、家庭、友情同样重要。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateHealth() {
|
||||
StringBuilder health = new StringBuilder();
|
||||
|
||||
health.append(getHealthAnalysis());
|
||||
|
||||
health.append("\n【养生建议】\n\n");
|
||||
health.append(getHealthAdvice());
|
||||
|
||||
return health.toString();
|
||||
}
|
||||
|
||||
private String getHealthAnalysis() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("根据八字五行旺衰,需要注意以下方面的健康:\n\n");
|
||||
|
||||
for (Map.Entry<String, Integer> entry : wuXingCount.entrySet()) {
|
||||
String wuXing = entry.getKey();
|
||||
int count = entry.getValue();
|
||||
|
||||
if (count >= 3) {
|
||||
sb.append(getWuXingHealth(wuXing, true));
|
||||
} else if (count <= 1) {
|
||||
sb.append(getWuXingHealth(wuXing, false));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getWuXingHealth(String wuXing, boolean isWang) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ("木".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 木旺:注意肝胆健康,容易肝火旺盛,建议保持心情舒畅,少生气。\n");
|
||||
} else {
|
||||
sb.append("• 木弱:注意肝胆健康,容易疲劳,建议多吃绿色蔬菜,保持充足睡眠。\n");
|
||||
}
|
||||
} else if ("火".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 火旺:注意心脏和眼睛健康,容易心烦失眠,建议保持心情平静,少吃辛辣。\n");
|
||||
} else {
|
||||
sb.append("• 火弱:注意心脏和眼睛健康,容易手脚冰凉,建议多运动,少吃生冷。\n");
|
||||
}
|
||||
} else if ("土".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 土旺:注意脾胃健康,容易消化不良,建议饮食清淡,少吃油腻。\n");
|
||||
} else {
|
||||
sb.append("• 土弱:注意脾胃健康,容易胃寒胃痛,建议饮食规律,少吃生冷。\n");
|
||||
}
|
||||
} else if ("金".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 金旺:注意肺部和呼吸系统健康,容易咳嗽,建议避免吸烟,保持空气清新。\n");
|
||||
} else {
|
||||
sb.append("• 金弱:注意肺部和呼吸系统健康,容易感冒,建议多锻炼,增强体质。\n");
|
||||
}
|
||||
} else if ("水".equals(wuXing)) {
|
||||
if (isWang) {
|
||||
sb.append("• 水旺:注意肾脏和泌尿系统健康,容易水肿,建议少喝水,避免过度劳累。\n");
|
||||
} else {
|
||||
sb.append("• 水弱:注意肾脏和泌尿系统健康,容易腰酸,建议多喝水,避免过度劳累。\n");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getHealthAdvice() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("• 规律作息:早睡早起,保证充足睡眠。\n");
|
||||
sb.append("• 适量运动:每天坚持运动30分钟以上。\n");
|
||||
sb.append("• 健康饮食:多吃蔬菜水果,少吃油腻食物。\n");
|
||||
sb.append("• 定期体检:每年至少体检一次,早发现早治疗。\n");
|
||||
sb.append("• 心理健康:保持良好心态,学会释放压力。\n");
|
||||
sb.append("• 健康是最大的财富,要珍惜和保护好自己的身体。\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String generateAdvice() {
|
||||
StringBuilder advice = new StringBuilder();
|
||||
|
||||
String riGanWX = getGanWuXing(riGan);
|
||||
int riGanCount = wuXingCount.getOrDefault(riGanWX, 0);
|
||||
|
||||
if (riGanCount >= 3) {
|
||||
advice.append("您的日主").append(riGanWX).append("气旺盛,性格特点鲜明,建议:\n\n");
|
||||
advice.append("• 发挥自己的优势,在适合的领域深耕细作。\n");
|
||||
advice.append("• 学会谦虚,听取他人意见,不要过于固执。\n");
|
||||
advice.append("• 注意平衡,不要因为某个方面太强而忽视其他方面。\n");
|
||||
} else if (riGanCount <= 1) {
|
||||
advice.append("您的日主").append(riGanWX).append("气偏弱,建议:\n\n");
|
||||
advice.append("• 培养自信,相信自己的能力。\n");
|
||||
advice.append("• 多学习,提升自己的技能和知识。\n");
|
||||
advice.append("• 寻找贵人相助,借助他人的力量。\n");
|
||||
} else {
|
||||
advice.append("您的日主").append(riGanWX).append("气适中,性格比较平衡,建议:\n\n");
|
||||
advice.append("• 保持平衡,不要偏激。\n");
|
||||
advice.append("• 发挥优势,弥补不足。\n");
|
||||
advice.append("• 稳步前进,不要急于求成。\n");
|
||||
}
|
||||
|
||||
advice.append("\n【总体建议】\n\n");
|
||||
advice.append("• 命运掌握在自己手中,后天的努力和选择同样重要。\n");
|
||||
advice.append("• 保持积极乐观的心态,面对困难不要轻易放弃。\n");
|
||||
advice.append("• 珍惜身边的人,家人、朋友是最宝贵的财富。\n");
|
||||
advice.append("• 不断学习进步,提升自己的能力和修养。\n");
|
||||
advice.append("• 做人做事要有原则,但也要学会变通。\n");
|
||||
|
||||
return advice.toString();
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,13 @@ export default {
|
||||
},
|
||||
globalData: {
|
||||
baziResult: null,
|
||||
ziweiResult: null
|
||||
ziweiResult: null,
|
||||
zhanxingResult: null,
|
||||
taLuoResult: null,
|
||||
liuyaoResult: null,
|
||||
daliurenResult: null,
|
||||
qimenResult: null,
|
||||
meihuaResult: null
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "排盘工具",
|
||||
"name": "命理测算",
|
||||
"appid": "",
|
||||
"description": "中国传统命理学排盘工具",
|
||||
"versionName": "1.0.0",
|
||||
"versionCode": "100",
|
||||
"transformPx": false,
|
||||
"mp-weixin": {
|
||||
"appid": "",
|
||||
"appid": "wxbae101ca6e1f61e6",
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"es6": true,
|
||||
@@ -15,7 +15,11 @@
|
||||
},
|
||||
"usingComponents": true,
|
||||
"permission": {},
|
||||
"requiredPrivateInfos": []
|
||||
"requiredPrivateInfos": [],
|
||||
"optimization": {
|
||||
"subPackages": true
|
||||
},
|
||||
"runmode": "librun"
|
||||
},
|
||||
"h5": {
|
||||
"title": "排盘工具",
|
||||
|
||||
@@ -65,12 +65,12 @@
|
||||
<text class="form-label">日期类型</text>
|
||||
</view>
|
||||
<view class="gender-group">
|
||||
<view class="gender-item" :class="{ active: dateType === 0 }" @click="dateType = 0">
|
||||
<text class="gender-text">公历</text>
|
||||
</view>
|
||||
<view class="gender-item" :class="{ active: dateType === 1 }" @click="dateType = 1">
|
||||
<text class="gender-text">农历</text>
|
||||
</view>
|
||||
<view class="gender-item" :class="{ active: dateType === 0 }" @click="dateType = 0">
|
||||
<text class="gender-text">公历</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
<view class="btn-wrapper">
|
||||
<button class="submit-btn" @click="calculate" :disabled="loading">
|
||||
<text class="btn-text">{{ loading ? '排盘中...' : '开始排盘' }}</text>
|
||||
<text class="btn-text">{{ loading ? '测算中...' : '开始测算' }}</text>
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
@@ -99,7 +99,7 @@ export default {
|
||||
solarDate: '2000-01-01',
|
||||
birthTime: '12:00',
|
||||
gender: '男',
|
||||
dateType: 0,
|
||||
dateType: 1,
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
@@ -113,10 +113,46 @@ export default {
|
||||
async calculate() {
|
||||
if (this.loading) return
|
||||
|
||||
if (!this.name || this.name.trim() === '') {
|
||||
uni.showToast({
|
||||
title: '请输入姓名',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.solarDate) {
|
||||
uni.showToast({
|
||||
title: '请选择出生日期',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.birthTime) {
|
||||
uni.showToast({
|
||||
title: '请选择出生时间',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.gender) {
|
||||
uni.showToast({
|
||||
title: '请选择性别',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
this.loading = true
|
||||
|
||||
uni.showLoading({
|
||||
title: '排盘中...',
|
||||
title: '测算中...',
|
||||
mask: true
|
||||
})
|
||||
|
||||
@@ -124,7 +160,7 @@ export default {
|
||||
const dateStr = this.solarDate + ' ' + this.birthTime + ':00'
|
||||
|
||||
const result = await api.baziApi.paiPan({
|
||||
name: this.name || '某人',
|
||||
name: this.name.trim(),
|
||||
sex: this.gender === '男' ? 1 : 0,
|
||||
date: dateStr,
|
||||
dateType: this.dateType
|
||||
@@ -139,9 +175,9 @@ export default {
|
||||
})
|
||||
} catch (e) {
|
||||
uni.hideLoading()
|
||||
console.error('排盘错误:', e)
|
||||
console.error('测算错误:', e)
|
||||
uni.showToast({
|
||||
title: '排盘失败:' + (e.message || '未知错误'),
|
||||
title: '测算失败:' + (e.message || '未知错误'),
|
||||
icon: 'none',
|
||||
duration: 3000
|
||||
})
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
<view class="info-card">
|
||||
<view class="info-row">
|
||||
<view class="info-item">
|
||||
<text class="info-label">公历</text>
|
||||
<text class="info-value">{{ result.solar || '-' }}</text>
|
||||
<text class="info-label">农历</text>
|
||||
<text class="info-value">{{ result.lunar || '-' }}</text>
|
||||
</view>
|
||||
<view class="info-divider"></view>
|
||||
<view class="info-item">
|
||||
<text class="info-label">农历</text>
|
||||
<text class="info-value">{{ result.lunar || '-' }}</text>
|
||||
<text class="info-label">公历</text>
|
||||
<text class="info-value">{{ formatSolarTime }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -29,7 +29,7 @@
|
||||
<view class="summary-card" v-if="result.analysis">
|
||||
<view class="card-header">
|
||||
<view class="card-dot gold"></view>
|
||||
<text class="card-title">命理解读</text>
|
||||
<text class="card-title">命理总评</text>
|
||||
</view>
|
||||
|
||||
<view class="summary-section">
|
||||
@@ -43,24 +43,52 @@
|
||||
<text class="card-title">详细分析</text>
|
||||
</view>
|
||||
|
||||
<view class="detail-section">
|
||||
<text class="detail-content">{{ result.analysis.personality || '暂无' }}</text>
|
||||
<view class="detail-section" v-if="result.analysis.personality">
|
||||
<view class="detail-title-wrapper">
|
||||
<view class="detail-icon personality">性</view>
|
||||
<text class="detail-title">性格特质</text>
|
||||
</view>
|
||||
<text class="detail-content">{{ result.analysis.personality }}</text>
|
||||
</view>
|
||||
|
||||
<view class="detail-section">
|
||||
<text class="detail-content">{{ result.analysis.career || '暂无' }}</text>
|
||||
<view class="detail-section" v-if="result.analysis.career">
|
||||
<view class="detail-title-wrapper">
|
||||
<view class="detail-icon career">业</view>
|
||||
<text class="detail-title">事业发展</text>
|
||||
</view>
|
||||
<text class="detail-content">{{ result.analysis.career }}</text>
|
||||
</view>
|
||||
|
||||
<view class="detail-section">
|
||||
<text class="detail-content">{{ result.analysis.marriage || '暂无' }}</text>
|
||||
<view class="detail-section" v-if="result.analysis.marriage">
|
||||
<view class="detail-title-wrapper">
|
||||
<view class="detail-icon marriage">婚</view>
|
||||
<text class="detail-title">婚姻感情</text>
|
||||
</view>
|
||||
<text class="detail-content">{{ result.analysis.marriage }}</text>
|
||||
</view>
|
||||
|
||||
<view class="detail-section">
|
||||
<text class="detail-content">{{ result.analysis.wealth || '暂无' }}</text>
|
||||
<view class="detail-section" v-if="result.analysis.wealth">
|
||||
<view class="detail-title-wrapper">
|
||||
<view class="detail-icon wealth">财</view>
|
||||
<text class="detail-title">财运状况</text>
|
||||
</view>
|
||||
<text class="detail-content">{{ result.analysis.wealth }}</text>
|
||||
</view>
|
||||
|
||||
<view class="detail-section">
|
||||
<text class="detail-content">{{ result.analysis.health || '暂无' }}</text>
|
||||
<view class="detail-section" v-if="result.analysis.health">
|
||||
<view class="detail-title-wrapper">
|
||||
<view class="detail-icon health">健</view>
|
||||
<text class="detail-title">健康运势</text>
|
||||
</view>
|
||||
<text class="detail-content">{{ result.analysis.health }}</text>
|
||||
</view>
|
||||
|
||||
<view class="detail-section" v-if="result.analysis.advice">
|
||||
<view class="detail-title-wrapper">
|
||||
<view class="detail-icon advice">言</view>
|
||||
<text class="detail-title">人生建议</text>
|
||||
</view>
|
||||
<text class="detail-content">{{ result.analysis.advice }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -199,6 +227,24 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
formatSolarTime() {
|
||||
if (this.result.solar) {
|
||||
let time = this.result.solar
|
||||
if (time.includes(':')) {
|
||||
const parts = time.split(' ')
|
||||
if (parts.length === 2) {
|
||||
const datePart = parts[0]
|
||||
const timePart = parts[1]
|
||||
const timeComponents = timePart.split(':')
|
||||
if (timeComponents.length >= 2) {
|
||||
return `${datePart} ${timeComponents[0]}:${timeComponents[1]}`
|
||||
}
|
||||
}
|
||||
}
|
||||
return time.replace(/:\d{2}$/, '')
|
||||
}
|
||||
return '-'
|
||||
},
|
||||
shenShaData() {
|
||||
return {
|
||||
'年柱': this.result.yearGanZhiShenSha || [],
|
||||
@@ -401,6 +447,56 @@ page {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.detail-title-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 12rpx;
|
||||
}
|
||||
|
||||
.detail-icon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 22rpx;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
margin-right: 12rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.detail-icon.personality {
|
||||
background: linear-gradient(135deg, #DC2626, #B91C1C);
|
||||
}
|
||||
|
||||
.detail-icon.career {
|
||||
background: linear-gradient(135deg, #F59E0B, #D97706);
|
||||
}
|
||||
|
||||
.detail-icon.marriage {
|
||||
background: linear-gradient(135deg, #EC4899, #DB2777);
|
||||
}
|
||||
|
||||
.detail-icon.wealth {
|
||||
background: linear-gradient(135deg, #10B981, #059669);
|
||||
}
|
||||
|
||||
.detail-icon.health {
|
||||
background: linear-gradient(135deg, #06B6D4, #0891B2);
|
||||
}
|
||||
|
||||
.detail-icon.advice {
|
||||
background: linear-gradient(135deg, #8B5CF6, #7C3AED);
|
||||
}
|
||||
|
||||
.detail-title {
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
color: #1F2937;
|
||||
}
|
||||
|
||||
.detail-content {
|
||||
font-size: 24rpx;
|
||||
color: #374151;
|
||||
|
||||
@@ -85,38 +85,6 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="menu-item" @click="goToLiuyao">
|
||||
<view class="menu-icon-wrapper">
|
||||
<view class="menu-icon" style="background: linear-gradient(135deg, #2563EB 0%, #1D4ED8 100%);">
|
||||
<text class="icon-text">☱</text>
|
||||
</view>
|
||||
<view class="icon-glow" style="background: rgba(37, 99, 235, 0.3);"></view>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-name">六爻排盘</text>
|
||||
<text class="menu-desc">六爻占卜 · 预测吉凶</text>
|
||||
</view>
|
||||
<view class="menu-arrow">
|
||||
<text class="arrow-text">›</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="menu-item" @click="goToDaliuren">
|
||||
<view class="menu-icon-wrapper">
|
||||
<view class="menu-icon" style="background: linear-gradient(135deg, #7C3AED 0%, #6D28D9 100%);">
|
||||
<text class="icon-text">☯</text>
|
||||
</view>
|
||||
<view class="icon-glow" style="background: rgba(124, 58, 237, 0.3);"></view>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-name">大六壬</text>
|
||||
<text class="menu-desc">三式之首 · 帝王之学</text>
|
||||
</view>
|
||||
<view class="menu-arrow">
|
||||
<text class="arrow-text">›</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="menu-item" @click="goToQimen">
|
||||
<view class="menu-icon-wrapper">
|
||||
<view class="menu-icon" style="background: linear-gradient(135deg, #D97706 0%, #B45309 100%);">
|
||||
@@ -133,6 +101,22 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="menu-item" @click="goToLiuyao">
|
||||
<view class="menu-icon-wrapper">
|
||||
<view class="menu-icon" style="background: linear-gradient(135deg, #2563EB 0%, #1D4ED8 100%);">
|
||||
<text class="icon-text">☱</text>
|
||||
</view>
|
||||
<view class="icon-glow" style="background: rgba(37, 99, 235, 0.3);"></view>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-name">六爻</text>
|
||||
<text class="menu-desc">六爻占卜 · 预测吉凶</text>
|
||||
</view>
|
||||
<view class="menu-arrow">
|
||||
<text class="arrow-text">›</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="menu-item" @click="goToMeihua">
|
||||
<view class="menu-icon-wrapper">
|
||||
<view class="menu-icon" style="background: linear-gradient(135deg, #059669 0%, #047857 100%);">
|
||||
@@ -148,6 +132,22 @@
|
||||
<text class="arrow-text">›</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="menu-item" @click="goToDaliuren">
|
||||
<view class="menu-icon-wrapper">
|
||||
<view class="menu-icon" style="background: linear-gradient(135deg, #7C3AED 0%, #6D28D9 100%);">
|
||||
<text class="icon-text">☯</text>
|
||||
</view>
|
||||
<view class="icon-glow" style="background: rgba(124, 58, 237, 0.3);"></view>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-name">大六壬</text>
|
||||
<text class="menu-desc">三式之首 · 帝王之学</text>
|
||||
</view>
|
||||
<view class="menu-arrow">
|
||||
<text class="arrow-text">›</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="footer">
|
||||
|
||||
Reference in new issue
Block a user