From daa1436e55cba4494875c58b0ff2e92a21f2349a Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 13 Feb 2026 10:20:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(printer):=20=E6=B7=BB=E5=8A=A0=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=9C=BA=E6=8C=87=E5=BC=95=E5=9B=BE=E7=89=87=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 PrinterGuideEntity 实体类定义数据库表结构 - 创建 PrinterGuideMapper 数据访问接口及实现方法 - 在 AppPrinterController 中添加移动端查询已启用指引图片接口 - 在 PrinterController 中添加 PC 端指引图片管理完整 CRUD 接口 - 扩展打印机服务层集成指引图片业务逻辑 - 调整订单支付完成后购买后逻辑触发机制 - 修改用户照片列表到打印机缓存时间从 60 秒延长至 24 小时 --- .../mobile/AppPrinterController.java | 11 +++++ .../controller/pc/PrinterController.java | 43 +++++++++++++++++++ .../ycwl/basic/mapper/PrinterGuideMapper.java | 23 ++++++++++ .../pc/printer/entity/PrinterGuideEntity.java | 21 +++++++++ .../printer/impl/PrinterServiceImpl.java | 11 ++--- .../resources/mapper/PrinterGuideMapper.xml | 38 ++++++++++++++++ 6 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/mapper/PrinterGuideMapper.java create mode 100644 src/main/java/com/ycwl/basic/model/pc/printer/entity/PrinterGuideEntity.java create mode 100644 src/main/resources/mapper/PrinterGuideMapper.xml diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppPrinterController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppPrinterController.java index eaacff4f..d3a35b29 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppPrinterController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppPrinterController.java @@ -1,8 +1,10 @@ package com.ycwl.basic.controller.mobile; import com.ycwl.basic.annotation.IgnoreToken; +import com.ycwl.basic.mapper.PrinterGuideMapper; import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; +import com.ycwl.basic.model.pc.printer.entity.PrinterGuideEntity; 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; @@ -31,12 +33,21 @@ import java.util.UUID; public class AppPrinterController { @Autowired private PrinterService printerService; + @Autowired + private PrinterGuideMapper printerGuideMapper; @GetMapping("/listFor/{scenicId}") @IgnoreToken public ApiResponse> listFor(@PathVariable("scenicId") Long scenicId) { return ApiResponse.success(printerService.listByScenicId(scenicId)); } + // 查询打印机已启用的指引图片(按排序) + @GetMapping("/guide/{printerId}") + @IgnoreToken + public ApiResponse> guideList(@PathVariable("printerId") Integer printerId) { + return ApiResponse.success(printerGuideMapper.listEnabledByPrinterId(printerId)); + } + @GetMapping("/useSample/{sampleId}") public ApiResponse useSample(@PathVariable("sampleId") Long sampleId) throws IOException { JwtInfo worker = JwtTokenUtil.getWorker(); diff --git a/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java b/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java index eda2cf08..3043e893 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java @@ -3,8 +3,10 @@ package com.ycwl.basic.controller.pc; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.mapper.PrintTaskMapper; +import com.ycwl.basic.mapper.PrinterGuideMapper; import com.ycwl.basic.model.pc.printer.entity.PrintTaskEntity; import com.ycwl.basic.model.pc.printer.entity.PrinterEntity; +import com.ycwl.basic.model.pc.printer.entity.PrinterGuideEntity; import com.ycwl.basic.model.pc.printer.req.PrintTaskReqQuery; import com.ycwl.basic.model.pc.printer.req.ReprintRequest; import com.ycwl.basic.service.printer.PrinterService; @@ -16,6 +18,7 @@ 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.RestController; import java.util.List; @@ -29,6 +32,9 @@ public class PrinterController { @Autowired private PrintTaskMapper printTaskMapper; + @Autowired + private PrinterGuideMapper printerGuideMapper; + // 查询列表 @PostMapping("/list") public ApiResponse> list(@RequestBody PrinterEntity condition) { @@ -119,4 +125,41 @@ public class PrinterController { int count = printerService.rejectPrintTasks(taskIds); return ApiResponse.success(count); } + + // 查询打印机所有指引图片(含禁用) + @GetMapping("/guide/list/{printerId}") + public ApiResponse> guideList(@PathVariable("printerId") Integer printerId) { + return ApiResponse.success(printerGuideMapper.listByPrinterId(printerId)); + } + + // 添加指引图片 + @PostMapping("/guide/add") + public ApiResponse guideAdd(@RequestBody PrinterGuideEntity entity) { + if (entity.getSortOrder() == null) { + entity.setSortOrder(0); + } + if (entity.getEnabled() == null) { + entity.setEnabled(1); + } + printerGuideMapper.insertGuide(entity); + return ApiResponse.success(entity.getId()); + } + + // 删除指引图片 + @DeleteMapping("/guide/delete/{id}") + public ApiResponse guideDelete(@PathVariable("id") Integer id) { + return ApiResponse.success(printerGuideMapper.deleteById(id)); + } + + // 修改指引图片排序 + @PostMapping("/guide/updateSort/{id}") + public ApiResponse guideUpdateSort(@PathVariable("id") Integer id, @RequestParam("sortOrder") Integer sortOrder) { + return ApiResponse.success(printerGuideMapper.updateSortOrder(id, sortOrder)); + } + + // 切换指引图片启用/禁用 + @PostMapping("/guide/toggleEnabled/{id}") + public ApiResponse guideToggleEnabled(@PathVariable("id") Integer id) { + return ApiResponse.success(printerGuideMapper.toggleEnabled(id)); + } } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/mapper/PrinterGuideMapper.java b/src/main/java/com/ycwl/basic/mapper/PrinterGuideMapper.java new file mode 100644 index 00000000..e4ad1bed --- /dev/null +++ b/src/main/java/com/ycwl/basic/mapper/PrinterGuideMapper.java @@ -0,0 +1,23 @@ +package com.ycwl.basic.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ycwl.basic.model.pc.printer.entity.PrinterGuideEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface PrinterGuideMapper extends BaseMapper { + List listByPrinterId(@Param("printerId") Integer printerId); + + List listEnabledByPrinterId(@Param("printerId") Integer printerId); + + int insertGuide(PrinterGuideEntity entity); + + int deleteById(@Param("id") Integer id); + + int updateSortOrder(@Param("id") Integer id, @Param("sortOrder") Integer sortOrder); + + int toggleEnabled(@Param("id") Integer id); +} diff --git a/src/main/java/com/ycwl/basic/model/pc/printer/entity/PrinterGuideEntity.java b/src/main/java/com/ycwl/basic/model/pc/printer/entity/PrinterGuideEntity.java new file mode 100644 index 00000000..9206d456 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/printer/entity/PrinterGuideEntity.java @@ -0,0 +1,21 @@ +package com.ycwl.basic.model.pc.printer.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("printer_guide") +public class PrinterGuideEntity { + @TableId(type = IdType.AUTO) + private Integer id; + private Integer printerId; + private String imageUrl; + private Integer sortOrder; + private Integer enabled; + private Date createTime; + private Date updateTime; +} diff --git a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java index a865f72b..362ca3ef 100644 --- a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java @@ -1174,7 +1174,7 @@ public class PrinterServiceImpl implements PrinterService { if (redisTemplate.opsForValue().get(USER_PHOTO_LIST_TO_PRINTER + memberId + ":" + orderId) != null) { return; } - redisTemplate.opsForValue().set(USER_PHOTO_LIST_TO_PRINTER + memberId + ":" + orderId, "1", 60, TimeUnit.SECONDS); + redisTemplate.opsForValue().set(USER_PHOTO_LIST_TO_PRINTER + memberId + ":" + orderId, "1", 24, TimeUnit.HOURS); OrderEntity order = orderRepository.getOrder(orderId); List orderItems = orderMapper.getOrderItems(orderId); orderItems.forEach(item -> { @@ -1890,7 +1890,6 @@ public class PrinterServiceImpl implements PrinterService { order.setStatus(OrderStateEnum.PAID.getState()); order.setPayAt(new Date()); orderMapper.updateOrder(order); - setUserIsBuyItem(virtualMemberId, memberPrintId.longValue(), orderId, needEnhance); log.info("待支付订单计算后价格为0,直接完成购买: orderId={}", orderId); result.put("needPay", false); } else { @@ -1916,12 +1915,14 @@ public class PrinterServiceImpl implements PrinterService { result.put("price", order.getPayPrice()); } } else { - // 立即购买模式:触发购买后逻辑 - setUserIsBuyItem(virtualMemberId, memberPrintId.longValue(), orderId, needEnhance); - log.info("触发购买后逻辑完成: orderId={}", orderId); result.put("needPay", false); } + // 无论是否需要支付,都立即触发购买后动作(打印等) + // setUserIsBuyItem 内部通过 Redis 去重,支付回调到达时不会重复触发 + setUserIsBuyItem(virtualMemberId, memberPrintId.longValue(), orderId, needEnhance); + log.info("触发购买后逻辑完成: orderId={}", orderId); + return result; } diff --git a/src/main/resources/mapper/PrinterGuideMapper.xml b/src/main/resources/mapper/PrinterGuideMapper.xml new file mode 100644 index 00000000..7b6d49f8 --- /dev/null +++ b/src/main/resources/mapper/PrinterGuideMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + insert into printer_guide(printer_id, image_url, sort_order, enabled, create_time) + values (#{printerId}, #{imageUrl}, #{sortOrder}, #{enabled}, NOW()) + + + + delete from printer_guide where id = #{id} + + + + update printer_guide + set sort_order = #{sortOrder}, update_time = NOW() + where id = #{id} + + + + update printer_guide + set enabled = 1 - enabled, update_time = NOW() + where id = #{id} + +