From 81dc2f1b862888c4a7d5b045f5c500e94ba7a816 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 31 Dec 2025 23:37:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(printer):=20=E6=B7=BB=E5=8A=A0=E6=99=AF?= =?UTF-8?q?=E5=8C=BAID=E5=8F=82=E6=95=B0=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=85=A7=E7=89=87=E6=89=93=E5=8D=B0=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在价格计算请求中添加景区ID参数 - 实现用户照片按sourceId去重机制,避免重复添加相同照片 - 查询用户在景区的已有打印记录用于去重判断 - 优化普通照片打印商品项,添加设备ID属性信息 - 过滤无效数据并去重后生成设备ID属性列表 --- .../printer/impl/PrinterServiceImpl.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) 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 a16a6f95..4c22772b 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 @@ -460,6 +460,7 @@ public class PrinterServiceImpl implements PrinterService { // 构建价格计算请求 PriceCalculationRequest request = new PriceCalculationRequest(); request.setUserId(memberId); + request.setScenicId(scenicId); // 创建商品项列表 List productItems = new ArrayList<>(); @@ -559,7 +560,27 @@ public class PrinterServiceImpl implements PrinterService { @Override public List addUserPhotoFromSource(Long memberId, Long scenicId, FromSourceReq req, Long faceId) { List resultIds = new ArrayList<>(); + + // 预先查询用户在该景区的已有打印记录,用于去重 + List existingPhotos = printerMapper.listRelationByFaceId(memberId, scenicId, faceId); + Map sourceIdToMemberPrintId = new HashMap<>(); + if (existingPhotos != null) { + for (MemberPrintResp photo : existingPhotos) { + if (photo.getSourceId() != null) { + sourceIdToMemberPrintId.put(photo.getSourceId(), photo.getId()); + } + } + } + req.getIds().forEach(id -> { + // 检查该sourceId是否已经添加过 + if (sourceIdToMemberPrintId.containsKey(id)) { + Integer existingId = sourceIdToMemberPrintId.get(id); + log.info("sourceId={}已存在于打印列表中,返回已有记录: memberPrintId={}", id, existingId); + resultIds.add(existingId); + return; + } + SourceRespVO byId = sourceMapper.getById(id); if (byId == null) { resultIds.add(null); @@ -738,12 +759,30 @@ public class PrinterServiceImpl implements PrinterService { // 添加普通照片打印商品项 (sourceId > 0) if (normalCount > 0) { + List normalAttrs = userPhotoList.stream() + .filter(item -> Objects.nonNull(item.getQuantity()) + && item.getSourceId() != null && item.getSourceId() > 0) + .filter(item -> sourceMapper.getById(item.getSourceId()) != null) + .map(MemberPrintResp::getSourceId) + .map(id -> { + SourceEntity source = sourceRepository.getSource(id); + if (source == null) { + return null; + } + return source.getDeviceId(); + }) + .filter(Objects::nonNull) + .distinct() + .map(String::valueOf) + .toList(); + ProductItem normalPhotoItem = new ProductItem(); normalPhotoItem.setProductType(ProductType.PHOTO_PRINT); normalPhotoItem.setProductId(scenicId.toString()); normalPhotoItem.setQuantity(Long.valueOf(normalCount).intValue()); normalPhotoItem.setPurchaseCount(1); normalPhotoItem.setScenicId(scenicId.toString()); + normalPhotoItem.setAttributeKeys(normalAttrs); productItems.add(normalPhotoItem); log.debug("创建订单-普通照片打印数量: {}", normalCount); }