diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java index 6a4d948..2ecd3f6 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java @@ -1,12 +1,17 @@ package com.chaozhanggui.system.cashierservice.rabbit.print; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chaozhanggui.system.cashierservice.dao.TbProductMapper; import com.chaozhanggui.system.cashierservice.dao.TbProductSkuMapper; import com.chaozhanggui.system.cashierservice.dao.TbShopUserMapper; import com.chaozhanggui.system.cashierservice.entity.*; import com.chaozhanggui.system.cashierservice.entity.dto.CallNumPrintDTO; +import com.chaozhanggui.system.cashierservice.entity.po.CallNumPrintPO; +import com.chaozhanggui.system.cashierservice.mapper.TbCallQueueMapper; +import com.chaozhanggui.system.cashierservice.mapper.TbCallTableMapper; import com.chaozhanggui.system.cashierservice.model.OrderDetailPO; import com.chaozhanggui.system.cashierservice.mybatis.MPOrderDetailMapper; import com.chaozhanggui.system.cashierservice.mybatis.MPOrderInfoMapper; @@ -15,6 +20,7 @@ import com.chaozhanggui.system.cashierservice.service.ShopPrintLogService; import com.chaozhanggui.system.cashierservice.util.DateUtils; import com.chaozhanggui.system.cashierservice.util.FeieyunPrintUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -25,6 +31,14 @@ import java.util.List; @Slf4j public class FeiPrinter extends PrinterHandler { + @Resource + private TbCallQueueMapper tbCallQueueMapper; + @Resource + private TbCallTableMapper tbCallTableMapper; + + @Value("${wx.mini.page.call}") + private String callPageUrl; + private final MPOrderInfoMapper mPOrderInfoMapper; private final MpShopInfoMapper mpShopInfoMapper; private final MPOrderDetailMapper mPOrderDetailMapper; @@ -93,6 +107,30 @@ public class FeiPrinter extends PrinterHandler { @Override protected void callNumPrint(TbPrintMachine machine, CallNumPrintDTO printDTO) { log.error("未实现打印方法"); + TbCallQueue queue = tbCallQueueMapper.selectById(printDTO.getCallQueueId()); + if (queue == null) { + log.warn("叫号记录不存在"); + return; + } + TbCallTable tbCallTable = tbCallTableMapper.selectById(queue.getCallTableId()); + TbShopInfo shopInfo = mpShopInfoMapper.selectById(queue.getShopId()); + CallNumPrintPO po = new CallNumPrintPO(); + po.setCallNum(queue.getCallNum()); + po.setShopName(shopInfo.getShopName()); + po.setTableName(tbCallTable.getName()); + po.setTableNote(tbCallTable.getNote()); + po.setPreNum(tbCallQueueMapper.selectCount(new LambdaQueryWrapper() + .eq(TbCallQueue::getShopId, queue.getShopId()) + .eq(TbCallQueue::getCallTableId, queue.getCallTableId()) + .lt(TbCallQueue::getId, queue.getId()) + .in(TbCallQueue::getState, 0, 1)).toString()); + po.setCallNum(queue.getCallNum()); + po.setCodeUrl(StrUtil.format(callPageUrl, queue.getShopId(), queue.getId())); + po.setTakeTime(queue.getCreateTime()); + po.setShopNote(StrUtil.format("过号顺延{}桌 {}桌后需重新排号 谢谢理解!", tbCallTable.getPostponeNum(), tbCallTable.getPostponeNum())); + String data = FeieyunPrintUtil.getCallNumPrintData(po); + String resp = FeieyunPrintUtil.print("",machine.getAddress()); + shopPrintLogService.save(machine, "叫号单", data, resp); } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java index 21f0be0..bd91de5 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.chaozhanggui.system.cashierservice.entity.po.CallNumPrintPO; import com.chaozhanggui.system.cashierservice.model.OrderDetailPO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; @@ -316,6 +317,46 @@ public class FeieyunPrintUtil { } + public static String print(String content, String sn){ + // 通过POST请求,发送打印信息到服务器 + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(30000)// 读取超时 + .setConnectTimeout(30000)// 连接超时 + .build(); + + CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); + HttpPost post = new HttpPost(URL); + List nvps = new ArrayList(); + nvps.add(new BasicNameValuePair("user", USER)); + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + nvps.add(new BasicNameValuePair("stime", STIME)); + nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME))); + nvps.add(new BasicNameValuePair("apiname", "Open_printMsg"));// 固定值,不需要修改 + nvps.add(new BasicNameValuePair("sn", sn)); + nvps.add(new BasicNameValuePair("content", content)); + nvps.add(new BasicNameValuePair("times", "1"));// 打印联数 + + CloseableHttpResponse response = null; + String result = null; + try { + post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8")); + response = httpClient.execute(post); + int statecode = response.getStatusLine().getStatusCode(); + if (statecode == 200) { + HttpEntity httpentity = response.getEntity(); + if (httpentity != null) { + // 服务器返回的JSON字符串,建议要当做日志记录起来 + result = EntityUtils.toString(httpentity); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + close(response, post, httpClient); + } + return result; + } + public static int getProducrName(String str) { int count = 0; @@ -337,6 +378,43 @@ public class FeieyunPrintUtil { return s; } + public static void close(CloseableHttpResponse response, HttpPost post, CloseableHttpClient httpClient) { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + try { + post.abort(); + } catch (Exception e) { + e.printStackTrace(); + } + try { + httpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static String getCallNumPrintData(CallNumPrintPO po) { + StringBuilder sb = new StringBuilder(); + sb.append(StrUtil.format("{}
", po.getShopName())); + sb.append("--------------------------------
"); + sb.append(StrUtil.format("{} {}
",po.getTableName(),po.getCallNum())); + sb.append(StrUtil.format("前面有{}桌
",po.getPreNum())); + sb.append(StrUtil.format("{}
", po.getCodeUrl())); + sb.append("怕过号扫一扫
"); + sb.append("--------------------------------
"); + sb.append(po.getShopNote()+"
"); + sb.append("--------------------------------
"); + sb.append(StrUtil.format("取号时间:{}
", DateUtils.getTime(po.getTakeTime()))); + sb.append(StrUtil.format("打印时间:{}
", DateUtils.getTime(new Date()))); + sb.append(""); + return sb.toString(); + } + /** * 检查飞鹅打印机是否在线 * @@ -457,4 +535,6 @@ public class FeieyunPrintUtil { //失败 {"msg":"ok","ret":0,"data":false,"serverExecutedTime":4} System.out.println(UnicodeUtil.toString(resp)); } + + }