ym923 | f955bd9 | 2025-06-09 09:58:00 +0800 | [diff] [blame] | 1 | package com.pt5.pthouduan.controller; |
| 2 | |
| 3 | import com.pt5.pthouduan.entity.request_resources; |
| 4 | import com.pt5.pthouduan.service.RequestResourcesService; |
| 5 | import org.springframework.beans.factory.annotation.Autowired; |
| 6 | import org.springframework.beans.factory.annotation.Value; |
| 7 | import org.springframework.web.bind.annotation.*; |
| 8 | import org.springframework.stereotype.Controller; |
| 9 | import org.springframework.web.multipart.MultipartFile; |
| 10 | |
| 11 | import java.io.File; |
| 12 | import java.io.IOException; |
| 13 | import java.nio.file.Files; |
| 14 | import java.nio.file.Path; |
| 15 | import java.nio.file.Paths; |
| 16 | import java.nio.file.StandardCopyOption; |
| 17 | import java.time.LocalDateTime; |
| 18 | import java.util.HashMap; |
| 19 | import java.util.List; |
| 20 | import java.util.Map; |
| 21 | import java.util.UUID; |
| 22 | |
| 23 | /** |
| 24 | * <p> |
| 25 | * 求助帖信息前端控制器 |
| 26 | * </p> |
| 27 | * |
| 28 | * 功能:创建求助帖、修改金额、删除、按名称/用户查找、计算某名称总金额 |
| 29 | * 支持上传图片 |
| 30 | * |
| 31 | * @author ym |
| 32 | * @since 2025-05-10 |
| 33 | */ |
| 34 | @CrossOrigin(origins = "http://localhost:5174") |
| 35 | @Controller |
| 36 | @RequestMapping("/request") |
| 37 | public class RequestResourcesController { |
| 38 | |
| 39 | @Autowired |
| 40 | private RequestResourcesService requestResourcesService; |
| 41 | |
| 42 | @Value("${torrent.helppost-image-dir}") |
| 43 | private String uploadDir; |
| 44 | |
| 45 | // 创建新的求助帖(移除 loaduser 参数) |
| 46 | @PostMapping("/create") |
| 47 | @ResponseBody |
| 48 | public boolean createRequest( |
| 49 | @RequestParam("userid") Long userid, |
| 50 | @RequestParam("name") String name, |
| 51 | @RequestParam("plot") String plot, |
| 52 | @RequestParam("money") Integer money, |
| 53 | @RequestParam(value = "photo", required = false) MultipartFile photoFile, |
| 54 | @RequestParam(value = "year", required = false) Integer year, |
| 55 | @RequestParam(value = "country", required = false) String country |
| 56 | ) { |
| 57 | request_resources request = new request_resources(); |
| 58 | request.setUserid(userid); |
| 59 | request.setLoaduser(null); // 初始为空 |
| 60 | request.setName(name); |
| 61 | request.setPlot(plot); |
| 62 | request.setMoney(money); |
| 63 | request.setYear(year); |
| 64 | request.setCountry(country); |
| 65 | request.setRequestTime(LocalDateTime.now()); |
| 66 | |
| 67 | if (photoFile != null && !photoFile.isEmpty()) { |
| 68 | try { |
| 69 | File dir = new File(uploadDir); |
| 70 | if (!dir.exists()) { |
| 71 | boolean created = dir.mkdirs(); // 递归创建目录 |
| 72 | if (!created) { |
| 73 | throw new IOException("无法创建目录:" + uploadDir); |
| 74 | } |
| 75 | } |
| 76 | //String coverImageDir = "D:/torrenttest/covers/"; // 封面图片存储目录 |
| 77 | String filename = System.currentTimeMillis()+"_"+photoFile.getOriginalFilename(); |
| 78 | Path helprequestImagePath = Paths.get(uploadDir, filename); |
| 79 | |
| 80 | try { |
| 81 | Files.createDirectories(helprequestImagePath.getParent()); // 创建目录 |
| 82 | Files.copy(photoFile.getInputStream(), helprequestImagePath, StandardCopyOption.REPLACE_EXISTING); |
| 83 | } catch (IOException e) { |
| 84 | throw new RuntimeException("无法存储需求贴图片", e); |
| 85 | } |
| 86 | |
| 87 | // 设置访问URL |
| 88 | request.setPhoto('/' + uploadDir + filename); |
| 89 | } catch (IOException e) { |
| 90 | e.printStackTrace(); |
| 91 | return false; |
| 92 | } |
| 93 | } |
| 94 | |
| 95 | return requestResourcesService.createRequest(request); |
| 96 | } |
| 97 | |
| 98 | // 修改求助帖的金额 |
| 99 | @PutMapping("/updateMoney/{requestid}") |
| 100 | @ResponseBody |
| 101 | public boolean updateMoney(@PathVariable Integer requestid, @RequestParam Integer money) { |
| 102 | return requestResourcesService.updateMoney(requestid, money); |
| 103 | } |
| 104 | |
| 105 | // 删除求助帖 |
| 106 | @DeleteMapping("/delete/{requestid}") |
| 107 | @ResponseBody |
| 108 | public boolean deleteRequest(@PathVariable Integer requestid) { |
| 109 | return requestResourcesService.deleteRequest(requestid); |
| 110 | } |
| 111 | |
| 112 | // 根据名称查找求助帖 |
| 113 | @GetMapping("/findByName") |
| 114 | @ResponseBody |
| 115 | public List<request_resources> findByName(@RequestParam String name) { |
| 116 | return requestResourcesService.findByName(name); |
| 117 | } |
| 118 | |
| 119 | // 根据用户查找求助帖 |
| 120 | @GetMapping("/findByUserid") |
| 121 | @ResponseBody |
| 122 | public List<request_resources> findByUserid(@RequestParam Long userid) { |
| 123 | return requestResourcesService.findByUserid(userid); |
| 124 | } |
| 125 | |
| 126 | // 计算某个名称对应的总金额 |
| 127 | @GetMapping("/totalMoneyByName") |
| 128 | @ResponseBody |
| 129 | public Integer getTotalMoneyByName(@RequestParam String name) { |
| 130 | return requestResourcesService.calculateTotalMoneyByName(name); |
| 131 | } |
| 132 | |
| 133 | // 根据被协助用户(loaduser)查找求助帖 |
| 134 | @GetMapping("/findByLoaduser") |
| 135 | @ResponseBody |
| 136 | public List<request_resources> findByLoaduser(@RequestParam Long loaduser) { |
| 137 | return requestResourcesService.findByLoaduser(loaduser); |
| 138 | } |
| 139 | |
| 140 | // ✅ 新增:根据名称批量更新 loaduser 字段 |
| 141 | @PostMapping("/updateLoaduserByName") |
| 142 | @ResponseBody |
| 143 | public boolean updateLoaduserByName(@RequestParam String name, @RequestParam Long loaduser) { |
| 144 | return requestResourcesService.updateLoaduserByName(name, loaduser); |
| 145 | } |
| 146 | |
| 147 | // ✅ 1. 更新指定 requestid 的 torrentid |
| 148 | @PutMapping("/updateTorrentid/{requestid}") |
| 149 | @ResponseBody |
| 150 | public boolean updateTorrentid(@PathVariable Integer requestid, @RequestParam Long torrentid) { |
| 151 | return requestResourcesService.updateTorrentid(requestid, torrentid); |
| 152 | } |
| 153 | |
| 154 | // ✅ 2. 查询指定 requestid 的 torrentid |
| 155 | @GetMapping("/getTorrentid/{requestid}") |
| 156 | @ResponseBody |
| 157 | public Long getTorrentid(@PathVariable Integer requestid) { |
| 158 | request_resources request = requestResourcesService.findByRequestid(requestid); |
| 159 | return request != null ? request.getTorrentid() : null; |
| 160 | } |
| 161 | |
| 162 | @GetMapping("/info/{requestid}") |
| 163 | @ResponseBody |
| 164 | public Map<String, Object> getInfoByRequestId(@PathVariable Integer requestid) { |
| 165 | request_resources request = requestResourcesService.findByRequestid(requestid); |
| 166 | if (request == null) { |
| 167 | return null; // 或返回一个空 Map,或自定义错误处理 |
| 168 | } |
| 169 | |
| 170 | Map<String, Object> result = new HashMap<>(); |
| 171 | result.put("torrentid", request.getTorrentid()); |
| 172 | result.put("money", request.getMoney()); |
| 173 | result.put("loaduser", request.getLoaduser()); |
| 174 | return result; |
| 175 | } |
| 176 | |
| 177 | |
| 178 | @GetMapping("/all") |
| 179 | @ResponseBody |
| 180 | public List<request_resources> getAllRequests() { |
| 181 | return requestResourcesService.getAllRequests(); |
| 182 | } |
| 183 | |
| 184 | } |