feat(printer): 新增样品使用功能并优化打印流程

- 在AppPrinterController中新增/useSample接口用于使用样品- PrinterServiceImpl中实现生成微信小程序二维码逻辑
- 更新setUserIsBuyItem方法签名以支持异常抛出- 添加useSample方法占位实现
- 引入相关依赖类如MpConfigEntity、OrderRepository和WxMpUtil
This commit is contained in:
2025-11-07 20:32:21 +08:00
parent fb3a08fdcf
commit 96d001dfc0
3 changed files with 29 additions and 0 deletions

View File

@@ -36,6 +36,12 @@ public class AppPrinterController {
return ApiResponse.success(printerService.listByScenicId(scenicId));
}
@PostMapping("/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<List<MemberPrintResp>> getListFor(@PathVariable("scenicId") Long scenicId, @RequestParam(required = false) String faceId) {
JwtInfo worker = JwtTokenUtil.getWorker();

View File

@@ -55,4 +55,6 @@ public interface PrinterService {
void batchSetUserPhotoListToPrinter(Long memberId, Long scenicId, Integer printerId);
void setUserIsBuyItem(Long memberId, Long id, Long orderId);
Object useSample(Long userId, Long sampleId);
}

View File

@@ -18,6 +18,7 @@ import com.ycwl.basic.mapper.PrinterMapper;
import com.ycwl.basic.mapper.SourceMapper;
import com.ycwl.basic.model.mobile.order.PriceObj;
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import com.ycwl.basic.pricing.dto.PriceCalculationRequest;
@@ -36,6 +37,7 @@ import com.ycwl.basic.model.printer.req.PrinterSyncReq;
import com.ycwl.basic.model.printer.req.WorkerAuthReqVo;
import com.ycwl.basic.model.printer.resp.PrintTaskResp;
import com.ycwl.basic.model.wx.WXPayOrderReqVO;
import com.ycwl.basic.repository.OrderRepository;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.mobile.WxPayService;
import com.ycwl.basic.service.printer.PrinterService;
@@ -46,6 +48,7 @@ import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.ImageUtils;
import com.ycwl.basic.utils.JacksonUtil;
import com.ycwl.basic.utils.SnowFlakeUtil;
import com.ycwl.basic.utils.WxMpUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
@@ -92,6 +95,8 @@ public class PrinterServiceImpl implements PrinterService {
private IPriceCalculationService priceCalculationService;
@Autowired
private ScenicRepository scenicRepository;
@Autowired
private OrderRepository orderRepository;
@Override
public List<PrinterResp> listByScenicId(Long scenicId) {
@@ -571,6 +576,14 @@ public class PrinterServiceImpl implements PrinterService {
printerMapper.setUserIsBuyItem(memberId, id, orderId);
// 创建打印任务
List<MemberPrintResp> userPhotoListByOrderId = getUserPhotoListByOrderId(orderId);
File qrCodeFile = new File("qrCodeFile" + orderId + ".png");
OrderEntity order = orderRepository.getOrder(orderId);
MpConfigEntity scenicMpConfig = scenicRepository.getScenicMpConfig(order.getScenicId());
try {
WxMpUtil.generateWXAQRCode(scenicMpConfig.getAppId(), scenicMpConfig.getAppSecret(), scenicMpConfig.getState(), "pages/my/orderDetailNew?id="+orderId, "qrCodeFile" + orderId + ".png");
} catch (Exception e) {
throw new RuntimeException(e);
}
userPhotoListByOrderId.forEach(item -> {
PrinterEntity printer = printerMapper.getById(item.getPrinterId());
@@ -627,6 +640,9 @@ public class PrinterServiceImpl implements PrinterService {
WatermarkInfo watermarkInfo = new WatermarkInfo();
watermarkInfo.setOriginalFile(needRotation ? rotatedOriginalFile : originalFile);
watermarkInfo.setWatermarkedFile(watermarkedFile);
watermarkInfo.setQrcodeFile(qrCodeFile);
watermarkInfo.setDatetime(new Date());
watermarkInfo.setDtFormat("yyyy-MM-dd");
operator.process(watermarkInfo);
@@ -698,6 +714,11 @@ public class PrinterServiceImpl implements PrinterService {
});
}
@Override
public Object useSample(Long userId, Long sampleId) {
return null;
}
/**
* 获取下一个要使用的打印机名称(轮询逻辑)
*