feat: 完善紫微斗数模块,添加命理解读功能

- 后端新增十四主星解读字典和十二宫位解读字典
- 添加命盘总览、人生建议、命宫主星解读功能
- 添加主要宫位分析(命宫、财帛宫、官禄宫、夫妻宫、迁移宫、福德宫)
- 添加四化飞星详细解读
- 前端结果页面重新设计,优先显示日期和命理解读
- 优化页面布局,提升用户体验
This commit is contained in:
H1d3rOne committed 2026-03-06 22:15:52 +08:00
1 parent 43609321a6
commit a695b36d2b
4 files changed
+507 -373

No files matched your search

@@ -4,14 +4,45 @@ import org.springframework.web.bind.annotation.*;
import xuan.core.ziwei.ZiWei;
import xuan.core.ziwei.settings.ZiWeiJiChuSetting;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@RestController
@RequestMapping("/api/ziwei")
public class ZiWeiController {
private static final Map<String, String> ZHU_XING_JIE_DU = new HashMap<>();
private static final Map<String, String> GONG_WEI_JIE_DU = new HashMap<>();
static {
ZHU_XING_JIE_DU.put("紫微", "帝王之星,主权威领导,性格稳重有魄力,适合管理岗位,天生具有统御能力");
ZHU_XING_JIE_DU.put("天机", "智慧之星,主聪明机敏,善于策划分析,适合参谋顾问,思维活跃多变");
ZHU_XING_JIE_DU.put("太阳", "光明之星,主外向热情,事业心强,利于公职发展,贵人运旺");
ZHU_XING_JIE_DU.put("武曲", "财星,主刚毅果断,理财能力强,适合金融商业,财运亨通");
ZHU_XING_JIE_DU.put("天同", "福星,主温和仁慈,人缘好福气厚,适合服务行业,生活安逸");
ZHU_XING_JIE_DU.put("廉贞", "桃花星,主才华艺术,感情丰富,适合文艺创作,魅力十足");
ZHU_XING_JIE_DU.put("天府", "财库星,主稳重守成,善于理财积累,适合财务管理,财源稳定");
ZHU_XING_JIE_DU.put("太阴", "阴柔之星,主细腻敏感,直觉力强,适合文艺创作,财运平稳");
ZHU_XING_JIE_DU.put("贪狼", "欲望之星,主多才多艺,交际能力强,适合演艺销售,但需防贪欲");
ZHU_XING_JIE_DU.put("巨门", "口舌之星,主能言善辩,适合律师教师,但易招是非口舌");
ZHU_XING_JIE_DU.put("天相", "印星,主正直公正,适合公务员法律,贵人运佳,事业平稳");
ZHU_XING_JIE_DU.put("天梁", "荫星,主慈悲为怀,适合医疗教育,有长辈贵人,福泽深厚");
ZHU_XING_JIE_DU.put("七杀", "将星,主刚强果断,适合军警创业,有领导才能,但需防冲动");
ZHU_XING_JIE_DU.put("破军", "变动之星,主开创冒险,适合创业改革,变动多端,需稳中求进");
GONG_WEI_JIE_DU.put("命宫", "代表核心性格、人生基调、先天特质");
GONG_WEI_JIE_DU.put("兄弟宫", "代表兄弟姐妹关系、同辈交往、合作能力");
GONG_WEI_JIE_DU.put("夫妻宫", "代表婚姻感情、配偶特质、婚姻质量");
GONG_WEI_JIE_DU.put("子女宫", "代表子女运势、后代情况、桃花缘分");
GONG_WEI_JIE_DU.put("财帛宫", "代表财富来源、理财能力、财运起伏");
GONG_WEI_JIE_DU.put("疾厄宫", "代表健康状况、易患疾病、养生方向");
GONG_WEI_JIE_DU.put("迁移宫", "代表外出运势、人际交往、贵人运");
GONG_WEI_JIE_DU.put("交友宫", "代表朋友关系、下属能力、人际网络");
GONG_WEI_JIE_DU.put("官禄宫", "代表事业发展、职业方向、官运仕途");
GONG_WEI_JIE_DU.put("田宅宫", "代表房产运势、家庭环境、祖业继承");
GONG_WEI_JIE_DU.put("福德宫", "代表精神状态、福报厚薄、晚年运势");
GONG_WEI_JIE_DU.put("父母宫", "代表父母关系、长辈助力、学历背景");
}
@PostMapping("/paipan")
public Map<String, Object> paiPan(@RequestBody ZiWeiRequest request) {
Map<String, Object> result = new HashMap<>();
@@ -117,7 +148,8 @@ public class ZiWeiController {
data.put("liuNianSuiQianZhuXing", ziWei.getLiuNianSuiQianZhuXing());
data.put("liuNianJiangQianZhuXing", ziWei.getLiuNianJiangQianZhuXing());
data.put("shiErGongZhuXing", ziWei.getShiErGongZhuXing(false));
List<List<String>> shiErGongZhuXing = ziWei.getShiErGongZhuXing(false);
data.put("shiErGongZhuXing", shiErGongZhuXing);
data.put("shiErGongZhuXingGuanXi", ziWei.getShiErGongZhuXingGuanXi());
data.put("huaLuXingGongWei", ziWei.getHuaLuXingGongWei());
@@ -145,8 +177,145 @@ public class ZiWeiController {
data.put("nextQi", ziWei.getNextQi());
data.put("chuShengQi", ziWei.getChuShengQi());
List<String> shiErMingGong = ziWei.getShiErMingGong();
int mingGongIndex = ziWei.getMingGongGongWei() - 1;
List<String> mingGongStars = shiErGongZhuXing.get(mingGongIndex);
data.put("jieDu", buildJieDu(ziWei, shiErMingGong, shiErGongZhuXing));
return data;
}
private Map<String, Object> buildJieDu(ZiWei ziWei, List<String> shiErMingGong, List<List<String>> shiErGongZhuXing) {
Map<String, Object> jieDu = new HashMap<>();
int mingGongIndex = ziWei.getMingGongGongWei() - 1;
List<String> mingGongStars = shiErGongZhuXing.get(mingGongIndex);
List<String> mainStars = new ArrayList<>();
for (String star : mingGongStars) {
if (ZHU_XING_JIE_DU.containsKey(star)) {
mainStars.add(star);
}
}
StringBuilder summary = new StringBuilder();
summary.append("【命盘总览】\n");
summary.append("命主").append(ziWei.getMingZhu()).append(",身主").append(ziWei.getShenZhu()).append(",");
summary.append("五行局为").append(ziWei.getWuXingJu()).append(",");
summary.append("命宫在").append(ziWei.getMingGongDiZhi()).append("宫");
if (!mainStars.isEmpty()) {
summary.append(",命宫主星:").append(String.join("、", mainStars));
}
summary.append("。");
jieDu.put("summary", summary.toString());
List<Map<String, String>> mingGongJieDu = new ArrayList<>();
for (String star : mingGongStars) {
if (ZHU_XING_JIE_DU.containsKey(star)) {
Map<String, String> starJieDu = new HashMap<>();
starJieDu.put("star", star);
starJieDu.put("meaning", ZHU_XING_JIE_DU.get(star));
mingGongJieDu.add(starJieDu);
}
}
jieDu.put("mingGongStars", mingGongJieDu);
List<Map<String, Object>> gongWeiJieDuList = new ArrayList<>();
String[] zhuYaoGongWei = {"命宫", "财帛宫", "官禄宫", "夫妻宫", "迁移宫", "福德宫"};
for (String gongWei : zhuYaoGongWei) {
int gongIndex = -1;
for (int i = 0; i < shiErMingGong.size(); i++) {
if (gongWei.equals(shiErMingGong.get(i))) {
gongIndex = i;
break;
}
}
if (gongIndex >= 0) {
Map<String, Object> gongJieDu = new HashMap<>();
gongJieDu.put("gongWei", gongWei);
gongJieDu.put("diZhi", ziWei.getShiErGongDiZhi().get(gongIndex));
gongJieDu.put("meaning", GONG_WEI_JIE_DU.get(gongWei));
List<String> gongStars = shiErGongZhuXing.get(gongIndex);
List<String> gongMainStars = new ArrayList<>();
for (String star : gongStars) {
if (ZHU_XING_JIE_DU.containsKey(star)) {
gongMainStars.add(star);
}
}
gongJieDu.put("stars", gongMainStars);
gongWeiJieDuList.add(gongJieDu);
}
}
jieDu.put("gongWeiJieDu", gongWeiJieDuList);
List<Map<String, String>> siHuaJieDu = new ArrayList<>();
Map<String, String> huaLu = new HashMap<>();
huaLu.put("type", "化禄");
huaLu.put("gongWei", ziWei.getHuaLuXingGongWeiJieDu());
huaLu.put("meaning", "主财运亨通,机遇顺遂,利于求财发展");
siHuaJieDu.add(huaLu);
Map<String, String> huaQuan = new HashMap<>();
huaQuan.put("type", "化权");
huaQuan.put("gongWei", ziWei.getHuaQuanXingGongWeiJieDu());
huaQuan.put("meaning", "主权势掌控,竞争有力,利于事业掌权");
siHuaJieDu.add(huaQuan);
Map<String, String> huaKe = new HashMap<>();
huaKe.put("type", "化科");
huaKe.put("gongWei", ziWei.getHuaKeXingGongWeiJieDu());
huaKe.put("meaning", "主名声学历,贵人相助,利于学业考试");
siHuaJieDu.add(huaKe);
Map<String, String> huaJi = new HashMap<>();
huaJi.put("type", "化忌");
huaJi.put("gongWei", ziWei.getHuaJiXingGongWeiJieDu());
huaJi.put("meaning", "主波折阻滞,需谨慎行事,注意防范风险");
siHuaJieDu.add(huaJi);
jieDu.put("siHuaJieDu", siHuaJieDu);
String advice = generateAdvice(ziWei, mainStars);
jieDu.put("advice", advice);
return jieDu;
}
private String generateAdvice(ZiWei ziWei, List<String> mainStars) {
StringBuilder advice = new StringBuilder();
advice.append("【人生建议】\n");
if (mainStars.contains("紫微") || mainStars.contains("天府")) {
advice.append("命带帝王之星,天生具有领导才能,适合从事管理工作或自主创业。");
} else if (mainStars.contains("七杀") || mainStars.contains("破军")) {
advice.append("命带将星变动之星,性格刚毅果断,适合开创性事业,但需注意稳中求进。");
} else if (mainStars.contains("天机") || mainStars.contains("太阴")) {
advice.append("命带智慧之星,思维敏捷细腻,适合从事策划、咨询、文艺创作等工作。");
} else if (mainStars.contains("太阳") || mainStars.contains("天相")) {
advice.append("命带光明之星,外向正直,适合从事公职、法律、教育等事业。");
} else if (mainStars.contains("武曲") || mainStars.contains("贪狼")) {
advice.append("命带财星欲望之星,善于理财交际,适合金融、销售、演艺等行业。");
} else {
advice.append("命格独特,各有千秋,宜发挥自身优势,扬长避短。");
}
advice.append("\n\n【四化飞星指引】\n");
advice.append(ziWei.getHuaLuXingGongWeiJieDu()).append("\n");
advice.append(ziWei.getHuaQuanXingGongWeiJieDu()).append("\n");
advice.append(ziWei.getHuaKeXingGongWeiJieDu()).append("\n");
advice.append(ziWei.getHuaJiXingGongWeiJieDu());
return advice.toString();
}
public static class ZiWeiRequest {
private String name;