打印日志

This commit is contained in:
2026-04-17 17:10:20 +08:00
parent 501f1c1856
commit ed85ed84f1
4 changed files with 45 additions and 109 deletions

View File

@@ -1,7 +1,7 @@
package com.czg.service.order.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.order.entity.PrintMachineLog;
import com.mybatisflex.core.BaseMapper;
/**
* 店铺小票打印记录 映射层。

View File

@@ -2,29 +2,22 @@ package com.czg.service.order.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.czg.account.entity.PrintMachine;
import com.czg.config.RedisCst;
import com.czg.market.service.OrderInfoService;
import com.czg.order.entity.OrderInfo;
import com.czg.order.entity.PrintMachineLog;
import com.czg.order.service.PrintMachineLogService;
import com.czg.service.RedisService;
import com.czg.service.order.mapper.PrintMachineLogMapper;
import com.czg.service.order.print.FeiPrinter;
import com.czg.service.order.print.YxyPrinter;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -41,19 +34,14 @@ import java.util.concurrent.atomic.AtomicReference;
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class PrintMachineLogServiceImpl extends ServiceImpl<PrintMachineLogMapper, PrintMachineLog> implements PrintMachineLogService {
@Resource
private OrderInfoService orderInfoService;
@Lazy
@Resource
private YxyPrinter yxyPrinter;
@Lazy
@Resource
private FeiPrinter feiPrinter;
@Resource
private RedisService redisService;
Map<Integer, String> yxxStatusMap = Map.of(
0, "离线(设备上线后自动补打)",
@@ -125,7 +113,7 @@ public class PrintMachineLogServiceImpl extends ServiceImpl<PrintMachineLogMappe
// 其他打印机暂时没有适配先return不做打印记录
return;
}
entity.setBizType(bizType);
entity.setPrintContentType(bizType);
entity.setPrintContent(printContent);
entity.setCreateTime(DateUtil.date().toLocalDateTime());
if (failFlag == 0) {
@@ -135,7 +123,7 @@ public class PrintMachineLogServiceImpl extends ServiceImpl<PrintMachineLogMappe
entity.setRespCode(respCode);
entity.setRespMsg(respMsg);
super.save(entity);
ThreadUtil.execAsync(() -> checkPrintStatus(orderId, config, entity));
ThreadUtil.execAsync(() -> checkPrintStatus(config, entity));
}
/**
@@ -150,11 +138,10 @@ public class PrintMachineLogServiceImpl extends ServiceImpl<PrintMachineLogMappe
/**
* 打印机状态查询(解决 retryFuture 爆红问题 + 虚拟线程 + 轮询重试)
*
* @param orderId 订单Id
* @param config 打印机配置
* @param entity 打印日志实体
* @param config 打印机配置
* @param entity 打印日志实体
*/
public void checkPrintStatus(Long orderId, PrintMachine config, PrintMachineLog entity) {
public void checkPrintStatus(PrintMachine config, PrintMachineLog entity) {
// 最大重试次数
int maxRetryTimes = 5;
AtomicInteger executedTimes = new AtomicInteger(0);
@@ -249,7 +236,6 @@ public class PrintMachineLogServiceImpl extends ServiceImpl<PrintMachineLogMappe
//仅当是最后一次任务时,才执行更新操作
if (isLastTask) {
super.updateById(entity);
// updateOrderEntity(orderId, config, isPrintSuccess);
}
}
};
@@ -269,26 +255,6 @@ public class PrintMachineLogServiceImpl extends ServiceImpl<PrintMachineLogMappe
registerShutdownHookOnce();
}
/**
* 更新状态
*/
private void updateOrderEntity(Long orderId, PrintMachine config, boolean isPrintSuccess) {
redisService.runFunAndCheckKey(() -> {
OrderInfo orderInfo = orderInfoService.getOne(query().select(OrderInfo::getPrintStatus).eq(OrderInfo::getId, orderId));
if (orderInfo == null) {
orderInfo = new OrderInfo();
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", config.getId());
jsonObject.put("name", config.getName());
jsonObject.put("time", LocalDateTimeUtil.formatNormal(LocalDateTime.now()));
orderInfo.upPrintStatus(jsonObject, isPrintSuccess);
orderInfoService.update(orderInfo, query().eq(OrderInfo::getId, orderId));
return orderInfo;
}, RedisCst.getLockKey("UP_ORDER_PRINT", orderId));
redisService.del("order:print:" + orderId);
}
/**
* 统一更新打印日志实体
*