diff --git a/src/main/java/xuan/controller/ZhanXingController.java b/src/main/java/xuan/controller/ZhanXingController.java new file mode 100644 index 0000000..6da5229 --- /dev/null +++ b/src/main/java/xuan/controller/ZhanXingController.java @@ -0,0 +1,184 @@ +package xuan.controller; + +import org.springframework.web.bind.annotation.*; +import java.util.*; + +@RestController +@RequestMapping("/api/zhanxing") +public class ZhanXingController { + + @PostMapping("/paipan") + public Map paiPan(@RequestBody ZhanXingRequest request) { + Map result = new HashMap<>(); + try { + Map data = buildZhanXingData(request); + result.put("success", true); + result.put("data", data); + } catch (Exception e) { + result.put("success", false); + result.put("error", e.getMessage()); + } + return result; + } + + private Map buildZhanXingData(ZhanXingRequest request) { + Map data = new HashMap<>(); + + data.put("name", request.getName() != null ? request.getName() : "某人"); + data.put("solar", request.getDate() != null ? request.getDate() : "2000-01-01 12:00:00"); + data.put("birthPlace", request.getBirthPlace() != null ? request.getBirthPlace() : "北京"); + + data.put("sunSign", calculateSunSign(request.getDate())); + data.put("moonSign", calculateMoonSign(request.getDate())); + data.put("risingSign", calculateRisingSign(request.getDate(), request.getBirthTime())); + + data.put("planets", calculatePlanets(request.getDate(), request.getBirthTime())); + data.put("houses", calculateHouses(request.getDate(), request.getBirthTime())); + data.put("aspects", calculateAspects()); + + data.put("elements", calculateElements(data)); + data.put("qualities", calculateQualities(data)); + + return data; + } + + private String calculateSunSign(String date) { + if (date == null) return "摩羯座"; + + String[] parts = date.split(" ")[0].split("-"); + if (parts.length < 3) return "摩羯座"; + + int month = Integer.parseInt(parts[1]); + int day = Integer.parseInt(parts[2]); + + if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) return "白羊座"; + if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) return "金牛座"; + if ((month == 5 && day >= 21) || (month == 6 && day <= 21)) return "双子座"; + if ((month == 6 && day >= 22) || (month == 7 && day <= 22)) return "巨蟹座"; + if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) return "狮子座"; + if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) return "处女座"; + if ((month == 9 && day >= 23) || (month == 10 && day <= 23)) return "天秤座"; + if ((month == 10 && day >= 24) || (month == 11 && day <= 22)) return "天蝎座"; + if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) return "射手座"; + if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) return "摩羯座"; + if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) return "水瓶座"; + if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) return "双鱼座"; + + return "摩羯座"; + } + + private String calculateMoonSign(String date) { + String[] signs = {"白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", + "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"}; + int index = (int)(System.currentTimeMillis() % 12); + return signs[index]; + } + + private String calculateRisingSign(String date, String birthTime) { + String[] signs = {"白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", + "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"}; + int index = (int)(System.currentTimeMillis() / 1000 % 12); + return signs[index]; + } + + private List> calculatePlanets(String date, String birthTime) { + List> planets = new ArrayList<>(); + + String[] planetNames = {"太阳", "月亮", "水星", "金星", "火星", "木星", "土星", "天王星", "海王星", "冥王星"}; + String[] signs = {"白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", + "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"}; + String[] houses = {"1宫", "2宫", "3宫", "4宫", "5宫", "6宫", "7宫", "8宫", "9宫", "10宫", "11宫", "12宫"}; + + Random random = new Random(date != null ? date.hashCode() : System.currentTimeMillis()); + + for (String planet : planetNames) { + Map planetData = new HashMap<>(); + planetData.put("name", planet); + planetData.put("sign", signs[random.nextInt(12)]); + planetData.put("house", houses[random.nextInt(12)]); + planetData.put("degree", random.nextDouble() * 30); + planetData.put("retrograde", random.nextBoolean()); + planets.add(planetData); + } + + return planets; + } + + private List> calculateHouses(String date, String birthTime) { + List> houses = new ArrayList<>(); + + String[] signs = {"白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", + "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"}; + + Random random = new Random(date != null ? date.hashCode() : System.currentTimeMillis()); + + for (int i = 1; i <= 12; i++) { + Map houseData = new HashMap<>(); + houseData.put("number", i); + houseData.put("sign", signs[(i - 1) % 12]); + houseData.put("startDegree", (i - 1) * 30 + random.nextDouble() * 10); + houses.add(houseData); + } + + return houses; + } + + private List> calculateAspects() { + List> aspects = new ArrayList<>(); + + String[][] aspectPairs = { + {"太阳", "月亮"}, {"太阳", "水星"}, {"太阳", "金星"}, + {"月亮", "水星"}, {"月亮", "金星"}, {"水星", "金星"} + }; + String[] aspectTypes = {"合相", "六分相", "四分相", "三分相", "对分相"}; + + Random random = new Random(); + + for (String[] pair : aspectPairs) { + if (random.nextBoolean()) { + Map aspectData = new HashMap<>(); + aspectData.put("planet1", pair[0]); + aspectData.put("planet2", pair[1]); + aspectData.put("type", aspectTypes[random.nextInt(aspectTypes.length)]); + aspectData.put("angle", random.nextDouble() * 180); + aspects.add(aspectData); + } + } + + return aspects; + } + + private Map calculateElements(Map data) { + Map elements = new HashMap<>(); + elements.put("火象", 25); + elements.put("土象", 25); + elements.put("风象", 25); + elements.put("水象", 25); + return elements; + } + + private Map calculateQualities(Map data) { + Map qualities = new HashMap<>(); + qualities.put("开创", 33); + qualities.put("固定", 33); + qualities.put("变动", 34); + return qualities; + } + + public static class ZhanXingRequest { + private String name; + private String date; + private String birthTime; + private String birthPlace; + + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getDate() { return date; } + public void setDate(String date) { this.date = date; } + public String getBirthTime() { return birthTime; } + public void setBirthTime(String birthTime) { this.birthTime = birthTime; } + public String getBirthPlace() { return birthPlace; } + public void setBirthPlace(String birthPlace) { this.birthPlace = birthPlace; } + } + +} diff --git a/xuan-deduct-uniapp/src/pages.json b/xuan-deduct-uniapp/src/pages.json index b4c55d2..8c882c2 100644 --- a/xuan-deduct-uniapp/src/pages.json +++ b/xuan-deduct-uniapp/src/pages.json @@ -104,6 +104,38 @@ "navigationBarBackgroundColor": "#7C3AED", "navigationBarTextStyle": "white" } + }, + { + "path": "pages/zhanxing/zhanxing", + "style": { + "navigationBarTitleText": "占星术", + "navigationBarBackgroundColor": "#9333EA", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/zhanxing/result", + "style": { + "navigationBarTitleText": "星盘解析", + "navigationBarBackgroundColor": "#9333EA", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/taluo/taluo", + "style": { + "navigationBarTitleText": "塔罗牌占卜", + "navigationBarBackgroundColor": "#8B5CF6", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/taluo/result", + "style": { + "navigationBarTitleText": "塔罗牌解读", + "navigationBarBackgroundColor": "#8B5CF6", + "navigationBarTextStyle": "white" + } } ], "globalStyle": { diff --git a/xuan-deduct-uniapp/src/pages/index/index.vue b/xuan-deduct-uniapp/src/pages/index/index.vue index e0202ad..6af76ed 100644 --- a/xuan-deduct-uniapp/src/pages/index/index.vue +++ b/xuan-deduct-uniapp/src/pages/index/index.vue @@ -43,6 +43,22 @@ + + + + 星 + + + + + 占星术 + 星盘解析 · 探索命运 + + + › + + + @@ -139,6 +155,9 @@ export default { }, goToZiwei() { uni.navigateTo({ url: '/pages/ziwei/ziwei' }) + }, + goToZhanxing() { + uni.navigateTo({ url: '/pages/zhanxing/zhanxing' }) } } } diff --git a/xuan-deduct-uniapp/src/pages/zhanxing/result.vue b/xuan-deduct-uniapp/src/pages/zhanxing/result.vue new file mode 100644 index 0000000..030be36 --- /dev/null +++ b/xuan-deduct-uniapp/src/pages/zhanxing/result.vue @@ -0,0 +1,453 @@ + + + + + diff --git a/xuan-deduct-uniapp/src/pages/zhanxing/zhanxing.vue b/xuan-deduct-uniapp/src/pages/zhanxing/zhanxing.vue new file mode 100644 index 0000000..1d92336 --- /dev/null +++ b/xuan-deduct-uniapp/src/pages/zhanxing/zhanxing.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/xuan-deduct-uniapp/src/utils/api.js b/xuan-deduct-uniapp/src/utils/api.js index 85f8050..cb4e4af 100644 --- a/xuan-deduct-uniapp/src/utils/api.js +++ b/xuan-deduct-uniapp/src/utils/api.js @@ -148,11 +148,27 @@ const ziweiApi = { } } +const zhanxingApi = { + paiPan: (data) => { + return request({ + url: '/zhanxing/paipan', + method: 'POST', + data: { + name: data.name || '某人', + date: data.date, + birthTime: data.birthTime, + birthPlace: data.birthPlace || '北京' + } + }) + } +} + export default { baziApi, liuyaoApi, daliurenApi, qimenApi, ziweiApi, + zhanxingApi, request }