diff --git a/src/main/java/com/ycwl/basic/pricing/dto/req/VoucherClaimReq.java b/src/main/java/com/ycwl/basic/pricing/dto/req/VoucherClaimReq.java index 9680742..a3b8b0b 100644 --- a/src/main/java/com/ycwl/basic/pricing/dto/req/VoucherClaimReq.java +++ b/src/main/java/com/ycwl/basic/pricing/dto/req/VoucherClaimReq.java @@ -5,7 +5,6 @@ import lombok.Data; @Data public class VoucherClaimReq { private Long scenicId; - private Long brokerId; private Long faceId; private String code; } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherCodeServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherCodeServiceImpl.java index b2cabfc..d1a90a6 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherCodeServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherCodeServiceImpl.java @@ -74,9 +74,6 @@ public class VoucherCodeServiceImpl implements VoucherCodeService { if (req.getScenicId() == null) { throw new BizException(400, "景区ID不能为空"); } - if (req.getBrokerId() == null) { - throw new BizException(400, "推客ID不能为空"); - } if (req.getFaceId() == null) { throw new BizException(400, "用户faceId不能为空"); } @@ -108,12 +105,7 @@ public class VoucherCodeServiceImpl implements VoucherCodeService { if (batch == null || batch.getDeleted() == 1) { throw new BizException(400, "券码批次不存在"); } - - // 验证批次是否可用于该推客 - if (!Objects.equals(batch.getBrokerId(), req.getBrokerId())) { - throw new BizException(400, "券码不属于该推客"); - } - + // 更新券码状态 voucherCode.setFaceId(req.getFaceId()); voucherCode.setStatus(VoucherCodeStatus.CLAIMED_UNUSED.getCode()); diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherPrintServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherPrintServiceImpl.java index e57ccf2..2cfc072 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherPrintServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherPrintServiceImpl.java @@ -3,6 +3,7 @@ package com.ycwl.basic.pricing.service.impl; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.exception.BaseException; import com.ycwl.basic.model.pc.face.entity.FaceEntity; +import com.ycwl.basic.model.pc.mp.MpConfigEntity; import com.ycwl.basic.pricing.dto.req.VoucherPrintReq; import com.ycwl.basic.pricing.dto.resp.VoucherPrintResp; import com.ycwl.basic.pricing.entity.PriceVoucherCode; @@ -10,7 +11,10 @@ import com.ycwl.basic.pricing.entity.VoucherPrintRecord; import com.ycwl.basic.pricing.mapper.PriceVoucherCodeMapper; import com.ycwl.basic.pricing.mapper.VoucherPrintRecordMapper; import com.ycwl.basic.pricing.service.VoucherPrintService; +import com.ycwl.basic.printer.ticket.FeiETicketPrinter; import com.ycwl.basic.repository.FaceRepository; +import com.ycwl.basic.repository.ScenicRepository; +import com.ycwl.basic.utils.WxMpUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -47,7 +51,9 @@ public class VoucherPrintServiceImpl implements VoucherPrintService { // 原子计数器,确保流水号唯一性 private static final AtomicLong counter = new AtomicLong(0); - + @Autowired + private ScenicRepository scenicRepository; + @Override @Transactional(rollbackFor = Exception.class) public VoucherPrintResp printVoucherTicket(VoucherPrintReq request) { @@ -112,15 +118,19 @@ public class VoucherPrintServiceImpl implements VoucherPrintService { printRecord.setDeleted(0); voucherPrintRecordMapper.insert(printRecord); - - // TODO: 调用打印机接口打印小票 - // printTicket(printRecord); - - // 暂时标记为打印成功状态(实际应该在打印成功回调中更新) - printRecord.setPrintStatus(1); + + try { + printTicket(printRecord); + printRecord.setPrintStatus(1); + } catch (Exception e) { + log.error("打印失败"); + printRecord.setPrintStatus(2); + } + voucherPrintRecordMapper.updatePrintStatus(printRecord.getId(), 1, null); log.info("成功创建打印记录: {}, 券码: {}", code, availableVoucher.getCode()); + printRecord.setCode(printRecord.getVoucherCode()); return buildResponse(printRecord); } finally { @@ -198,8 +208,32 @@ public class VoucherPrintServiceImpl implements VoucherPrintService { /** * 调用打印机接口(待实现) */ - private void printTicket(VoucherPrintRecord record) { - // TODO: 实现打印机接口调用逻辑 - log.info("TODO: 调用打印机打印小票,记录ID: {}, 券码: {}", record.getId(), record.getVoucherCode()); + private void printTicket(VoucherPrintRecord record) throws Exception { + FaceEntity face = faceRepository.getFace(record.getFaceId()); + MpConfigEntity scenicMpConfig = scenicRepository.getScenicMpConfig(face.getScenicId()); + String urlLink = WxMpUtil.generateUrlLink(scenicMpConfig.getAppId(), scenicMpConfig.getAppSecret(), "pages/videoSynthesis/index", "code=" + record.getVoucherCode() + "&faceId=" + face.getId()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); + SimpleDateFormat sdf2 = new SimpleDateFormat("MM月dd日"); + log.info(" 调用打印机打印小票,记录ID: {}, 券码: {}", record.getId(), record.getVoucherCode()); + String content; + content = "
世界再大
"; + content += "你永远是这段旅途
"; + content += "的焦点
"; + content += "━━━━━━━━━━━━━━━━
"; + content += "正片主演:旅途中最靓的你
"; + content += "拍摄地点:剑门关滑道
"; + content += "拍摄日期:"; + content += sdf.format(new Date()); + content += "
"; + content += "大片内容:包含Vlog、打卡录像与
"; + content += " 精选照片

"; + content += ""+urlLink+""; + content += "游后微信扫码领取"; + content += "精彩指数:★★★★★
"; + content += "━━━━━━━━━━━━━━━━
"; + content += ""+record.getVoucherCode()+""; + content += "赠品码"; + content += "有效期:"+sdf2.format(new Date())+""; + FeiETicketPrinter.doPrint("550519002", content, 1); } } \ No newline at end of file