实现所有模块分享功能的前后端API联调
后端实现: - 新增ShareController控制器 - 提供8个模块的分享API接口(八字、紫微、占星、塔罗、梅花、六爻、奇门、大六壬) - 每个接口生成格式化的分享文本内容 前端实现: - 更新api.js,新增各模块分享API调用方法 - 占星术结果页改为调用后端API - 添加loading提示和错误处理 - 分享内容通过后端生成,确保格式统一 API接口: - POST /api/share/bazi - 八字分享 - POST /api/share/ziwei - 紫微斗数分享 - POST /api/share/zhanxing - 占星术分享 - POST /api/share/taluo - 塔罗牌分享 - POST /api/share/meihua - 梅花易数分享 - POST /api/share/liuyao - 六爻分享 - POST /api/share/qimen - 奇门遁甲分享 - POST /api/share/daliuren - 大六壬分享
This commit is contained in:
1 parent
5dd2c1ac90
commit
03535c831f
3 files changed
+468
-77
No files matched your search
@@ -1,76 +1,402 @@
|
||||
package xuan.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xuan.entity.ShareRecord;
|
||||
import xuan.repository.ShareRecordRepository;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/share")
|
||||
public class ShareController {
|
||||
|
||||
@Autowired
|
||||
private ShareRecordRepository shareRecordRepository;
|
||||
|
||||
@PostMapping("/create")
|
||||
public Map<String, Object> createShare(@RequestBody Map<String, Object> params) {
|
||||
|
||||
@PostMapping("/bazi")
|
||||
public Map<String, Object> shareBazi(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
try {
|
||||
String type = (String) params.get("type");
|
||||
String resultData = (String) params.get("resultData");
|
||||
String name = (String) params.get("name");
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
ShareRecord shareRecord = new ShareRecord();
|
||||
shareRecord.setShareId(UUID.randomUUID().toString().replace("-", "").substring(0, 16));
|
||||
shareRecord.setType(type);
|
||||
shareRecord.setResultData(resultData);
|
||||
shareRecord.setName(name);
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【八字命理分析】\n\n");
|
||||
|
||||
shareRecordRepository.save(shareRecord);
|
||||
if (data.containsKey("name")) {
|
||||
shareText.append("👤 姓名:").append(data.get("name")).append("\n");
|
||||
}
|
||||
if (data.containsKey("solar")) {
|
||||
shareText.append("📅 出生时间:").append(data.get("solar")).append("\n");
|
||||
}
|
||||
if (data.containsKey("bazi")) {
|
||||
Map<String, Object> bazi = (Map<String, Object>) data.get("bazi");
|
||||
shareText.append("\n【八字排盘】\n");
|
||||
shareText.append("年柱:").append(bazi.get("yearGan")).append(bazi.get("yearZhi")).append("\n");
|
||||
shareText.append("月柱:").append(bazi.get("monthGan")).append(bazi.get("monthZhi")).append("\n");
|
||||
shareText.append("日柱:").append(bazi.get("dayGan")).append(bazi.get("dayZhi")).append("\n");
|
||||
shareText.append("时柱:").append(bazi.get("hourGan")).append(bazi.get("hourZhi")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("interpretation")) {
|
||||
Map<String, String> interpretation = (Map<String, String>) data.get("interpretation");
|
||||
shareText.append("\n【命理解读】\n");
|
||||
if (interpretation.containsKey("personality")) {
|
||||
shareText.append("\n性格特质:\n").append(interpretation.get("personality")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("career")) {
|
||||
shareText.append("\n事业发展:\n").append(interpretation.get("career")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("marriage")) {
|
||||
shareText.append("\n婚姻感情:\n").append(interpretation.get("marriage")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("wealth")) {
|
||||
shareText.append("\n财运状况:\n").append(interpretation.get("wealth")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("health")) {
|
||||
shareText.append("\n健康建议:\n").append(interpretation.get("health")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("advice")) {
|
||||
shareText.append("\n人生建议:\n").append(interpretation.get("advice")).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("shareId", shareRecord.getShareId());
|
||||
result.put("message", "分享链接创建成功");
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", "创建分享链接失败:" + e.getMessage());
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@GetMapping("/view/{shareId}")
|
||||
public Map<String, Object> viewShare(@PathVariable String shareId) {
|
||||
|
||||
@PostMapping("/ziwei")
|
||||
public Map<String, Object> shareZiwei(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
try {
|
||||
ShareRecord shareRecord = shareRecordRepository.findByShareId(shareId)
|
||||
.orElse(null);
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
if (shareRecord == null) {
|
||||
result.put("success", false);
|
||||
result.put("error", "分享链接不存在或已过期");
|
||||
return result;
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【紫微斗数命盘】\n\n");
|
||||
|
||||
if (data.containsKey("name")) {
|
||||
shareText.append("👤 姓名:").append(data.get("name")).append("\n");
|
||||
}
|
||||
if (data.containsKey("solar")) {
|
||||
shareText.append("📅 出生时间:").append(data.get("solar")).append("\n");
|
||||
}
|
||||
|
||||
if (shareRecord.getExpireTime() != null && shareRecord.getExpireTime().before(new java.util.Date())) {
|
||||
result.put("success", false);
|
||||
result.put("error", "分享链接已过期");
|
||||
return result;
|
||||
if (data.containsKey("mingGong")) {
|
||||
shareText.append("\n【命宫主星】\n").append(data.get("mingGong")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("interpretation")) {
|
||||
Map<String, String> interpretation = (Map<String, String>) data.get("interpretation");
|
||||
shareText.append("\n【命理解读】\n");
|
||||
if (interpretation.containsKey("personality")) {
|
||||
shareText.append("\n性格特质:\n").append(interpretation.get("personality")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("career")) {
|
||||
shareText.append("\n事业发展:\n").append(interpretation.get("career")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("wealth")) {
|
||||
shareText.append("\n财运状况:\n").append(interpretation.get("wealth")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("marriage")) {
|
||||
shareText.append("\n婚姻感情:\n").append(interpretation.get("marriage")).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareRecord);
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", "获取分享数据失败:" + e.getMessage());
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@PostMapping("/zhanxing")
|
||||
public Map<String, Object> shareZhanxing(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【星盘解析】\n\n");
|
||||
|
||||
if (data.containsKey("name")) {
|
||||
shareText.append("👤 姓名:").append(data.get("name")).append("\n");
|
||||
}
|
||||
|
||||
shareText.append("\n【核心星座】\n");
|
||||
if (data.containsKey("sunSign")) {
|
||||
shareText.append("☀️ 太阳星座:").append(data.get("sunSign")).append("\n");
|
||||
}
|
||||
if (data.containsKey("moonSign")) {
|
||||
shareText.append("🌙 月亮星座:").append(data.get("moonSign")).append("\n");
|
||||
}
|
||||
if (data.containsKey("risingSign")) {
|
||||
shareText.append("⬆️ 上升星座:").append(data.get("risingSign")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("interpretation")) {
|
||||
Map<String, String> interpretation = (Map<String, String>) data.get("interpretation");
|
||||
shareText.append("\n【命理解读】\n");
|
||||
if (interpretation.containsKey("personality")) {
|
||||
shareText.append("\n性格特质:\n").append(interpretation.get("personality")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("love")) {
|
||||
shareText.append("\n感情运势:\n").append(interpretation.get("love")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("career")) {
|
||||
shareText.append("\n事业发展:\n").append(interpretation.get("career")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("wealth")) {
|
||||
shareText.append("\n财运状况:\n").append(interpretation.get("wealth")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("health")) {
|
||||
shareText.append("\n健康建议:\n").append(interpretation.get("health")).append("\n");
|
||||
}
|
||||
if (interpretation.containsKey("advice")) {
|
||||
shareText.append("\n人生建议:\n").append(interpretation.get("advice")).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@PostMapping("/taluo")
|
||||
public Map<String, Object> shareTaluo(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【塔罗牌占卜结果】\n\n");
|
||||
|
||||
if (data.containsKey("spreadName")) {
|
||||
shareText.append("🔮 牌阵:").append(data.get("spreadName")).append("\n");
|
||||
}
|
||||
if (data.containsKey("question")) {
|
||||
shareText.append("❓ 问题:").append(data.get("question")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("cards")) {
|
||||
List<Map<String, Object>> cards = (List<Map<String, Object>>) data.get("cards");
|
||||
shareText.append("\n【抽到的牌】\n");
|
||||
for (Map<String, Object> card : cards) {
|
||||
String position = (Boolean) card.get("isReversed") ? "逆位" : "正位";
|
||||
shareText.append(card.get("positionMeaning")).append(":")
|
||||
.append(card.get("name")).append("(").append(position).append(")\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (data.containsKey("interpretation")) {
|
||||
shareText.append("\n【牌义解读】\n").append(data.get("interpretation")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("summary")) {
|
||||
Map<String, String> summary = (Map<String, String>) data.get("summary");
|
||||
shareText.append("\n【综合解读】\n");
|
||||
if (summary.containsKey("personality")) {
|
||||
shareText.append("\n性格特质:\n").append(summary.get("personality")).append("\n");
|
||||
}
|
||||
if (summary.containsKey("emotion")) {
|
||||
shareText.append("\n感情运势:\n").append(summary.get("emotion")).append("\n");
|
||||
}
|
||||
if (summary.containsKey("career")) {
|
||||
shareText.append("\n事业发展:\n").append(summary.get("career")).append("\n");
|
||||
}
|
||||
if (summary.containsKey("overall")) {
|
||||
shareText.append("\n总体建议:\n").append(summary.get("overall")).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@PostMapping("/meihua")
|
||||
public Map<String, Object> shareMeihua(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【梅花易数占卜结果】\n\n");
|
||||
|
||||
if (data.containsKey("name")) {
|
||||
shareText.append("👤 占卜者:").append(data.get("name")).append("\n");
|
||||
}
|
||||
if (data.containsKey("solar")) {
|
||||
shareText.append("📅 时间:").append(data.get("solar")).append("\n");
|
||||
}
|
||||
if (data.containsKey("lunar")) {
|
||||
shareText.append("🌙 农历:").append(data.get("lunar")).append("\n");
|
||||
}
|
||||
|
||||
shareText.append("\n【卦象总览】\n");
|
||||
if (data.containsKey("benGuaName")) {
|
||||
shareText.append("本卦:").append(data.get("benGuaName"));
|
||||
if (data.containsKey("benGuaAs")) {
|
||||
shareText.append(" ").append(data.get("benGuaAs"));
|
||||
}
|
||||
shareText.append("\n");
|
||||
}
|
||||
if (data.containsKey("bianGuaName")) {
|
||||
shareText.append("变卦:").append(data.get("bianGuaName"));
|
||||
if (data.containsKey("bianGuaAs")) {
|
||||
shareText.append(" ").append(data.get("bianGuaAs"));
|
||||
}
|
||||
shareText.append("\n");
|
||||
}
|
||||
if (data.containsKey("huGuaName")) {
|
||||
shareText.append("互卦:").append(data.get("huGuaName"));
|
||||
if (data.containsKey("huGuaAs")) {
|
||||
shareText.append(" ").append(data.get("huGuaAs"));
|
||||
}
|
||||
shareText.append("\n");
|
||||
}
|
||||
if (data.containsKey("dongYaoStr")) {
|
||||
shareText.append("动爻:").append(data.get("dongYaoStr")).append("爻\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("benGuaGuaCi")) {
|
||||
shareText.append("\n【本卦卦辞】\n").append(data.get("benGuaGuaCi")).append("\n");
|
||||
}
|
||||
if (data.containsKey("bianGuaGuaCi")) {
|
||||
shareText.append("\n【变卦卦辞】\n").append(data.get("bianGuaGuaCi")).append("\n");
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@PostMapping("/liuyao")
|
||||
public Map<String, Object> shareLiuyao(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【六爻占卜结果】\n\n");
|
||||
|
||||
if (data.containsKey("name")) {
|
||||
shareText.append("👤 占卜者:").append(data.get("name")).append("\n");
|
||||
}
|
||||
if (data.containsKey("solar")) {
|
||||
shareText.append("📅 时间:").append(data.get("solar")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("guaName")) {
|
||||
shareText.append("\n【卦象】\n").append(data.get("guaName")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("interpretation")) {
|
||||
shareText.append("\n【卦辞解读】\n").append(data.get("interpretation")).append("\n");
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@PostMapping("/qimen")
|
||||
public Map<String, Object> shareQimen(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【奇门遁甲排盘】\n\n");
|
||||
|
||||
if (data.containsKey("name")) {
|
||||
shareText.append("👤 占卜者:").append(data.get("name")).append("\n");
|
||||
}
|
||||
if (data.containsKey("solar")) {
|
||||
shareText.append("📅 时间:").append(data.get("solar")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("juName")) {
|
||||
shareText.append("\n【局数】\n").append(data.get("juName")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("interpretation")) {
|
||||
shareText.append("\n【盘面解读】\n").append(data.get("interpretation")).append("\n");
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@PostMapping("/daliuren")
|
||||
public Map<String, Object> shareDaliuren(@RequestBody ShareRequest request) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【大六壬排盘】\n\n");
|
||||
|
||||
if (data.containsKey("name")) {
|
||||
shareText.append("👤 占卜者:").append(data.get("name")).append("\n");
|
||||
}
|
||||
if (data.containsKey("solar")) {
|
||||
shareText.append("📅 时间:").append(data.get("solar")).append("\n");
|
||||
}
|
||||
|
||||
if (data.containsKey("interpretation")) {
|
||||
shareText.append("\n【盘面解读】\n").append(data.get("interpretation")).append("\n");
|
||||
}
|
||||
|
||||
shareText.append("\n——来自玄学测算APP");
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareText.toString());
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static class ShareRequest {
|
||||
private Map<String, Object> data;
|
||||
|
||||
public Map<String, Object> getData() { return data; }
|
||||
public void setData(Map<String, Object> data) { this.data = data; }
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user