diff --git a/backend/src/main/java/xuan/core/bazi/utils/BaZiAnalysisUtil.java b/backend/src/main/java/xuan/core/bazi/utils/BaZiAnalysisUtil.java new file mode 100644 index 0000000..72d8c90 --- /dev/null +++ b/backend/src/main/java/xuan/core/bazi/utils/BaZiAnalysisUtil.java @@ -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 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 calculateWuXingCount() { + Map 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 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 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 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 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 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 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 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(); + } +} diff --git a/src/main/java/xuan/controller/BaZiController.java b/src/main/java/xuan/controller/BaZiController.java index 82cc8de..2c11f54 100644 --- a/src/main/java/xuan/controller/BaZiController.java +++ b/src/main/java/xuan/controller/BaZiController.java @@ -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 buildAnalysis(BaZi baZi) { Map 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; diff --git a/src/main/java/xuan/core/bazi/utils/BaZiAnalysisUtil.java b/src/main/java/xuan/core/bazi/utils/BaZiAnalysisUtil.java new file mode 100644 index 0000000..1234166 --- /dev/null +++ b/src/main/java/xuan/core/bazi/utils/BaZiAnalysisUtil.java @@ -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 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 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 calculateWuXingCount() { + Map 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 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 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 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 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 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 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 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 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(); + } +} diff --git a/xuan-deduct-uniapp/src/App.vue b/xuan-deduct-uniapp/src/App.vue index 5aca8ed..5edf9e2 100644 --- a/xuan-deduct-uniapp/src/App.vue +++ b/xuan-deduct-uniapp/src/App.vue @@ -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 } } diff --git a/xuan-deduct-uniapp/src/manifest.json b/xuan-deduct-uniapp/src/manifest.json index 37126c6..e7e1ff6 100644 --- a/xuan-deduct-uniapp/src/manifest.json +++ b/xuan-deduct-uniapp/src/manifest.json @@ -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": "排盘工具", diff --git a/xuan-deduct-uniapp/src/pages/bazi/bazi.vue b/xuan-deduct-uniapp/src/pages/bazi/bazi.vue index 556d750..ff8efa8 100644 --- a/xuan-deduct-uniapp/src/pages/bazi/bazi.vue +++ b/xuan-deduct-uniapp/src/pages/bazi/bazi.vue @@ -65,12 +65,12 @@ 日期类型 - - 公历 - 农历 + + 公历 + @@ -83,7 +83,7 @@ @@ -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 }) diff --git a/xuan-deduct-uniapp/src/pages/bazi/result.vue b/xuan-deduct-uniapp/src/pages/bazi/result.vue index 1a5cb31..fc508ab 100644 --- a/xuan-deduct-uniapp/src/pages/bazi/result.vue +++ b/xuan-deduct-uniapp/src/pages/bazi/result.vue @@ -15,13 +15,13 @@ - 公历 - {{ result.solar || '-' }} + 农历 + {{ result.lunar || '-' }} - 农历 - {{ result.lunar || '-' }} + 公历 + {{ formatSolarTime }} @@ -29,7 +29,7 @@ - 命理解读 + 命理总评 @@ -43,24 +43,52 @@ 详细分析 - - {{ result.analysis.personality || '暂无' }} + + + 性 + 性格特质 + + {{ result.analysis.personality }} - - {{ result.analysis.career || '暂无' }} + + + 业 + 事业发展 + + {{ result.analysis.career }} - - {{ result.analysis.marriage || '暂无' }} + + + 婚 + 婚姻感情 + + {{ result.analysis.marriage }} - - {{ result.analysis.wealth || '暂无' }} + + + 财 + 财运状况 + + {{ result.analysis.wealth }} - - {{ result.analysis.health || '暂无' }} + + + 健 + 健康运势 + + {{ result.analysis.health }} + + + + + 言 + 人生建议 + + {{ result.analysis.advice }} @@ -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; diff --git a/xuan-deduct-uniapp/src/pages/index/index.vue b/xuan-deduct-uniapp/src/pages/index/index.vue index f1c2c7f..6f5a66d 100644 --- a/xuan-deduct-uniapp/src/pages/index/index.vue +++ b/xuan-deduct-uniapp/src/pages/index/index.vue @@ -85,38 +85,6 @@ - - - - ☱ - - - - - 六爻排盘 - 六爻占卜 · 预测吉凶 - - - › - - - - - - - ☯ - - - - - 大六壬 - 三式之首 · 帝王之学 - - - › - - - @@ -133,6 +101,22 @@ + + + + ☱ + + + + + 六爻 + 六爻占卜 · 预测吉凶 + + + › + + + @@ -148,6 +132,22 @@ › + + + + + ☯ + + + + + 大六壬 + 三式之首 · 帝王之学 + + + › + +