记录页面添加分页、搜索、全选和一键清理功能
后端实现: - RecordController:添加分页和搜索参数支持 - DeductRecordService:新增findByUserIdWithSearch方法 - DeductRecordRepository:添加分页查询和关键词搜索方法 - 新增deleteBatch批量删除接口 前端实现: - 搜索栏:支持按姓名或事项搜索 - 分页功能:上一页/下一页按钮,显示页码信息 - 全选功能:复选框全选/取消全选 - 批量删除:选中多条记录后可批量删除 - 一键清空:清空所有测算记录 - UI优化:添加操作栏、复选框样式 API接口: - GET /api/records/list - 支持分页和搜索参数 - POST /api/records/deleteBatch - 批量删除记录 - POST /api/records/clear - 清空所有记录
This commit is contained in:
1 parent
03535c831f
commit
16624fa189
8 files changed
+675
-499
No files matched your search
@@ -1,402 +1,76 @@
|
||||
package xuan.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.*;
|
||||
import xuan.entity.ShareRecord;
|
||||
import xuan.repository.ShareRecordRepository;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/share")
|
||||
public class ShareController {
|
||||
|
||||
@PostMapping("/bazi")
|
||||
public Map<String, Object> shareBazi(@RequestBody ShareRequest request) {
|
||||
|
||||
@Autowired
|
||||
private ShareRecordRepository shareRecordRepository;
|
||||
|
||||
@PostMapping("/create")
|
||||
public Map<String, Object> createShare(@RequestBody Map<String, Object> params) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
String type = (String) params.get("type");
|
||||
String resultData = (String) params.get("resultData");
|
||||
String name = (String) params.get("name");
|
||||
|
||||
StringBuilder shareText = new StringBuilder();
|
||||
shareText.append("【八字命理分析】\n\n");
|
||||
ShareRecord shareRecord = new ShareRecord();
|
||||
shareRecord.setShareId(UUID.randomUUID().toString().replace("-", "").substring(0, 16));
|
||||
shareRecord.setType(type);
|
||||
shareRecord.setResultData(resultData);
|
||||
shareRecord.setName(name);
|
||||
|
||||
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");
|
||||
shareRecordRepository.save(shareRecord);
|
||||
|
||||
result.put("success", true);
|
||||
result.put("data", shareText.toString());
|
||||
result.put("shareId", shareRecord.getShareId());
|
||||
result.put("message", "分享链接创建成功");
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("error", e.getMessage());
|
||||
result.put("error", "创建分享链接失败:" + e.getMessage());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@PostMapping("/ziwei")
|
||||
public Map<String, Object> shareZiwei(@RequestBody ShareRequest request) {
|
||||
|
||||
@GetMapping("/view/{shareId}")
|
||||
public Map<String, Object> viewShare(@PathVariable String shareId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
try {
|
||||
Map<String, Object> data = request.getData();
|
||||
ShareRecord shareRecord = shareRecordRepository.findByShareId(shareId)
|
||||
.orElse(null);
|
||||
|
||||
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 == null) {
|
||||
result.put("success", false);
|
||||
result.put("error", "分享链接不存在或已过期");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (data.containsKey("mingGong")) {
|
||||
shareText.append("\n【命宫主星】\n").append(data.get("mingGong")).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("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", shareText.toString());
|
||||
result.put("data", shareRecord);
|
||||
} 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