package com.ycwl.basic.controller.mobile; import com.ycwl.basic.annotation.IgnoreToken; import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; import com.ycwl.basic.model.pc.printer.resp.MemberPrintResp; import com.ycwl.basic.model.pc.printer.resp.PrinterResp; import com.ycwl.basic.model.printer.req.FromSourceReq; import com.ycwl.basic.service.printer.PrinterService; import com.ycwl.basic.storage.StorageFactory; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.JwtTokenUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.UUID; @RestController @RequestMapping("/api/mobile/printer/v1") public class AppPrinterController { @Autowired private PrinterService printerService; @GetMapping("/listFor/{scenicId}") @IgnoreToken public ApiResponse> listFor(@PathVariable("scenicId") Long scenicId) { return ApiResponse.success(printerService.listByScenicId(scenicId)); } @GetMapping("/useSample/{sampleId}") public ApiResponse useSample(@PathVariable("sampleId") Long sampleId) throws IOException { JwtInfo worker = JwtTokenUtil.getWorker(); return ApiResponse.success(printerService.useSample(worker.getUserId(), sampleId)); } @GetMapping("/getListFor/{scenicId}") public ApiResponse> getListFor(@PathVariable("scenicId") Long scenicId, @RequestParam(required = false) String faceId) { JwtInfo worker = JwtTokenUtil.getWorker(); return ApiResponse.success(printerService.getUserPhotoList(worker.getUserId(), scenicId, parseFaceId(faceId))); } @GetMapping("/getItem/{scenicId}/{id}") public ApiResponse getItem(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id) { JwtInfo worker = JwtTokenUtil.getWorker(); MemberPrintResp userPhoto = printerService.getUserPhoto(worker.getUserId(), scenicId, id); if (userPhoto == null) { return ApiResponse.fail("未找到该图片"); } return ApiResponse.success(userPhoto); } @PostMapping("/deleteFrom/{scenicId}/{id}") public ApiResponse deleteFrom(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id) { JwtInfo worker = JwtTokenUtil.getWorker(); printerService.deleteUserPhoto(worker.getUserId(), scenicId, id); return ApiResponse.success(null); } @PostMapping("/uploadTo/{scenicId}") public ApiResponse upload(@PathVariable("scenicId") Long scenicId, @RequestParam(value = "file") MultipartFile file, @RequestParam(value = "faceId", required = false) String faceId) { String[] split = file.getOriginalFilename().split("\\."); String ext = split[split.length - 1]; String url = StorageFactory.use().uploadFile(file, "printer", UUID.randomUUID() + "." + ext); Integer id = printerService.addUserPhoto(JwtTokenUtil.getWorker().getUserId(), scenicId, url, parseFaceId(faceId), null); return ApiResponse.success(id); } @PostMapping(value = "/uploadTo/{scenicId}/cropped/{id}", consumes = "multipart/form-data") public ApiResponse uploadReplace(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id, @RequestPart(value = "crop", required = false) String crop, @RequestPart(value = "file") MultipartFile file) { String[] split = file.getOriginalFilename().split("\\."); String ext = split[split.length - 1]; String url = StorageFactory.use().uploadFile(file, "printer", UUID.randomUUID() + "." + ext); printerService.setPhotoCropped(JwtTokenUtil.getWorker().getUserId(), scenicId, id, url, crop); return ApiResponse.success(url); } @PostMapping("/uploadTo/{scenicId}/formSource") public ApiResponse uploadFromSource(@PathVariable("scenicId") Long scenicId, @RequestBody FromSourceReq req, @RequestParam(value = "faceId", required = false) String faceId) { List list = printerService.addUserPhotoFromSource(JwtTokenUtil.getWorker().getUserId(), scenicId, req, parseFaceId(faceId)); return ApiResponse.success(list); } @PostMapping("/setQuantity/{scenicId}/{id}") public ApiResponse setQuantity(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id, @RequestParam("quantity") Integer quantity) { if (quantity == null) { return ApiResponse.fail("请输入数量"); } if (quantity < 0) { return ApiResponse.fail("数量不能小于0"); } printerService.setPhotoQuantity(JwtTokenUtil.getWorker().getUserId(), scenicId, id, quantity); return ApiResponse.success(null); } @GetMapping("/price/{scenicId}") public ApiResponse queryPrice(@PathVariable("scenicId") Long scenicId, @RequestParam(value = "faceId", required = false) String faceId) { return ApiResponse.success(printerService.queryPrice(JwtTokenUtil.getWorker().getUserId(), scenicId, parseFaceId(faceId))); } @PostMapping("/order/{scenicId}") public ApiResponse> createOrder(@PathVariable("scenicId") Long scenicId, @RequestParam(value = "faceId", required = false) String faceId) { return ApiResponse.success(printerService.createOrder(JwtTokenUtil.getWorker().getUserId(), scenicId, null, parseFaceId(faceId))); } @PostMapping("/order/{scenicId}/toPrinter/{printerId}") public ApiResponse> createOrderToPrinter(@PathVariable("scenicId") Long scenicId, @PathVariable("printerId") Integer printerId, @RequestParam(value = "faceId", required = false) String faceId) { return ApiResponse.success(printerService.createOrder(JwtTokenUtil.getWorker().getUserId(), scenicId, printerId, parseFaceId(faceId))); } /** * 解析 faceId 字符串为 Long 类型 * 如果字符串不是有效数字,则返回 null */ private Long parseFaceId(String faceId) { if (faceId == null || faceId.trim().isEmpty()) { return null; } try { return Long.parseLong(faceId.trim()); } catch (NumberFormatException e) { return null; } } }