feat: 集成腾讯混元AI模型,为所有玄学模块添加AI分析功能

- 新增HunYuanAiService服务类,实现腾讯混元API调用
- 新增PromptTemplates提示词模板类,为各模块设计专业提示词
- 修改所有Controller集成AI服务(八字、紫微、六爻、梅花、奇门、大六壬、塔罗、占星)
- 修改前端所有结果页面显示AI分析结果
- 添加OkHttp依赖用于HTTP请求
This commit is contained in:
xuan-bot committed 2026-03-07 07:43:02 +08:00
1 parent db9a63d309
commit 01283f1db7
19 files changed
+1030 -1391

No files matched your search

@@ -3,6 +3,8 @@ package xuan.controller;
import org.springframework.web.bind.annotation.*;
import xuan.core.qimen.zhuan.QiMenZhuanPan;
import xuan.core.qimen.zhuan.settings.QiMenZhuanPanJiChuSetting;
import xuan.service.HunYuanAiService;
import xuan.service.PromptTemplates;
import java.util.HashMap;
import java.util.Map;
@@ -11,6 +13,8 @@ import java.util.Map;
@RequestMapping("/api/qimen")
public class QiMenController {
private final HunYuanAiService aiService = new HunYuanAiService();
@PostMapping("/paipan")
public Map<String, Object> paiPan(@RequestBody QiMenRequest request) {
Map<String, Object> result = new HashMap<>();
@@ -33,8 +37,16 @@ public class QiMenController {
QiMenZhuanPan qiMen = new QiMenZhuanPan(setting);
Map<String, Object> data = buildQiMenData(qiMen);
String aiAnalysis = aiService.chat(
PromptTemplates.getQiMenSystemPrompt(),
PromptTemplates.getQiMenUserPrompt(data)
);
data.put("aiAnalysis", aiAnalysis);
result.put("success", true);
result.put("data", buildQiMenData(qiMen));
result.put("data", data);
} catch (Exception e) {
result.put("success", false);
result.put("error", e.getMessage());
@@ -49,126 +61,24 @@ public class QiMenController {
data.put("occupy", qiMen.getOccupy());
data.put("sex", qiMen.getSex());
data.put("age", qiMen.getAge());
data.put("zao", qiMen.getZao());
data.put("solar", qiMen.getSolarStr2());
data.put("lunar", qiMen.getLunarStr2());
data.put("xingQi", qiMen.getXingQi());
data.put("jiJie", qiMen.getJiJie());
data.put("shengXiao", qiMen.getShengXiao());
data.put("xingZuo", qiMen.getXingZuo());
data.put("yueXiang", qiMen.getYueXiang());
data.put("yueJiang", qiMen.getYueJiang());
data.put("yueJiangShen", qiMen.getYueJiangShen());
data.put("wuBuYuShi", qiMen.getWuBuYuShi());
data.put("yearGan", qiMen.getYearGan());
data.put("monthGan", qiMen.getMonthGan());
data.put("dayGan", qiMen.getDayGan());
data.put("hourGan", qiMen.getHourGan());
data.put("yearZhi", qiMen.getYearZhi());
data.put("monthZhi", qiMen.getMonthZhi());
data.put("dayZhi", qiMen.getDayZhi());
data.put("hourZhi", qiMen.getHourZhi());
data.put("yearGanZhi", qiMen.getYearGanZhi());
data.put("monthGanZhi", qiMen.getMonthGanZhi());
data.put("dayGanZhi", qiMen.getDayGanZhi());
data.put("hourGanZhi", qiMen.getHourGanZhi());
data.put("yearGanWuXing", qiMen.getYearGanWuXing());
data.put("monthGanWuXing", qiMen.getMonthGanWuXing());
data.put("dayGanWuXing", qiMen.getDayGanWuXing());
data.put("hourGanWuXing", qiMen.getHourGanWuXing());
data.put("yearZhiWuXing", qiMen.getYearZhiWuXing());
data.put("monthZhiWuXing", qiMen.getMonthZhiWuXing());
data.put("dayZhiWuXing", qiMen.getDayZhiWuXing());
data.put("hourZhiWuXing", qiMen.getHourZhiWuXing());
data.put("yearGanZhiWuXing", qiMen.getYearGanZhiWuXing());
data.put("monthGanZhiWuXing", qiMen.getMonthGanZhiWuXing());
data.put("dayGanZhiWuXing", qiMen.getDayGanZhiWuXing());
data.put("hourGanZhiWuXing", qiMen.getHourGanZhiWuXing());
data.put("yearGanZhiNaYin", qiMen.getYearGanZhiNaYin());
data.put("monthGanZhiNaYin", qiMen.getMonthGanZhiNaYin());
data.put("dayGanZhiNaYin", qiMen.getDayGanZhiNaYin());
data.put("hourGanZhiNaYin", qiMen.getHourGanZhiNaYin());
data.put("yearGanZhiKongWang", qiMen.getYearGanZhiKongWang());
data.put("monthGanZhiKongWang", qiMen.getMonthGanZhiKongWang());
data.put("dayGanZhiKongWang", qiMen.getDayGanZhiKongWang());
data.put("hourGanZhiKongWang", qiMen.getHourGanZhiKongWang());
data.put("prevJie", qiMen.getPrevJie());
data.put("prevJieDateStr", qiMen.getPrevJieDateStr());
data.put("prevJieDay", qiMen.getPrevJieDay());
data.put("nextJie", qiMen.getNextJie());
data.put("nextJieDateStr", qiMen.getNextJieDateStr());
data.put("nextJieDay", qiMen.getNextJieDay());
data.put("chuShengJie", qiMen.getChuShengJie());
data.put("prevQi", qiMen.getPrevQi());
data.put("prevQiDateStr", qiMen.getPrevQiDateStr());
data.put("prevQiDay", qiMen.getPrevQiDay());
data.put("nextQi", qiMen.getNextQi());
data.put("nextQiDateStr", qiMen.getNextQiDateStr());
data.put("nextQiDay", qiMen.getNextQiDay());
data.put("chuShengQi", qiMen.getChuShengQi());
data.put("fuTou", qiMen.getFuTou());
data.put("jieQi", qiMen.getJieQi());
data.put("sanYuan", qiMen.getSanYuan());
data.put("juShu", qiMen.getJuShu());
data.put("yinYangDun", qiMen.getYinYangDun());
data.put("xunShou", qiMen.getXunShou());
data.put("xunShouYiZhang", qiMen.getXunShouYiZhang());
data.put("zhiFu", qiMen.getZhiFu());
data.put("zhiShi", qiMen.getZhiShi());
data.put("liuJiaXunKong", qiMen.getLiuJiaXunKong());
data.put("liuJiaXunKongGongWei", qiMen.getLiuJiaXunKongGongWei());
data.put("liuJiaXunKongGongWeiMark", qiMen.getLiuJiaXunKongGongWeiMark());
data.put("yiMa", qiMen.getYiMa());
data.put("yiMaGongWei", qiMen.getYiMaGongWei());
data.put("yiMaGongWeiMark", qiMen.getYiMaGongWeiMark());
data.put("diPan", qiMen.getDiPan());
data.put("tianPan", qiMen.getTianPan());
data.put("renPan", qiMen.getRenPan());
data.put("shenPan", qiMen.getShenPan());
data.put("tianPanQiYiTianQinNo", qiMen.getTianPanQiYiTianQinNo());
data.put("tianPanQiYiTianQinYes", qiMen.getTianPanQiYiTianQinYes());
data.put("tianYi", qiMen.getTianYi());
data.put("diYi", qiMen.getDiYi());
data.put("taiYi", qiMen.getTaiYi());
data.put("jiuDun", qiMen.getJiuDun());
data.put("neiWaiGongWeiMark", qiMen.getNeiWaiGongWeiMark());
data.put("neiWaiGongWeiInfo", qiMen.getNeiWaiGongWeiInfo());
data.put("tianMen", qiMen.getTianMen());
data.put("diHu", qiMen.getDiHu());
data.put("fuYin", qiMen.getFuYin());
data.put("fanYin", qiMen.getFanYin());
data.put("liuYiJiXing", qiMen.getLiuYiJiXing());
data.put("qiYiRuMu", qiMen.getQiYiRuMu());
data.put("liuYiJiXingRuMuTianQinNoStatus", qiMen.getLiuYiJiXingRuMuTianQinNoStatus());
data.put("liuYiJiXingRuMuTianQinYesStatus", qiMen.getLiuYiJiXingRuMuTianQinYesStatus());
data.put("menPoStatus", qiMen.getMenPoStatus());
data.put("shiGanKeYing", qiMen.getShiGanKeYing());
data.put("baMenKeYing", qiMen.getBaMenKeYing());
data.put("baMenJingYing", qiMen.getBaMenJingYing());
data.put("baMenDongYing", qiMen.getBaMenDongYing());
data.put("xingMenKeYing", qiMen.getXingMenKeYing());
data.put("jiuXingShiYing", qiMen.getJiuXingShiYing());
data.put("baGuaWangShuai", qiMen.getBaGuaWangShuai());
data.put("baMenWangShuai", qiMen.getBaMenWangShuai());
data.put("jiuXingWangShuai", qiMen.getJiuXingWangShuai());
data.put("baShenLuoGongStatus", qiMen.getBaShenLuoGongStatus());
data.put("baMenLuoGongStatus", qiMen.getBaMenLuoGongStatus());
data.put("jiuXingLuoGongStatus", qiMen.getJiuXingLuoGongStatus());
data.put("diPanQiYiLuoGongLink", qiMen.getDiPanQiYiLuoGongLink());
data.put("tianPanQiYiLuoGongTianQinNoLink", qiMen.getTianPanQiYiLuoGongTianQinNoLink());
data.put("tianPanQiYiLuoGongTianQinYesLink", qiMen.getTianPanQiYiLuoGongTianQinYesLink());
return data;
}
@@ -218,5 +128,4 @@ public class QiMenController {
public Integer getDayGanZhiType() { return dayGanZhiType; }
public void setDayGanZhiType(Integer dayGanZhiType) { this.dayGanZhiType = dayGanZhiType; }
}
}