package com.doumee.service.business.impl; import cn.binarywang.wx.miniapp.bean.intractiy.WxMaStoreBalance; import com.alibaba.druid.sql.visitor.functions.Concat; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.alipay.v3.model.GoodsDetail; import com.doumee.config.xyy.dto.*; import com.doumee.config.xyy.vo.ObjectRestResponse; import com.doumee.config.xyy.vo.OrderStatisResult; import com.doumee.config.xyy.vo.PrinterResult; import com.doumee.core.constants.Constants; import com.doumee.core.utils.HttpsUtil; import com.doumee.dao.business.model.OrdersDetail; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * 云打印相关接口封装类 * @author JavaLyl */ @Service public class PrintService { private static String BASE_URL = "https://open.xpyun.net/api/openapi"; public String getPrintContent(String shopName, List detailList, String userInfo, String orderCode, String remark, String takeLocationRemark, String payTime, String expectedTakeTime){ StringBuilder printContent = new StringBuilder(); if(CollectionUtils.isNotEmpty(detailList)){ Integer num = detailList.stream().map(i->i.getNum()).reduce(Constants.ZERO, Integer::sum); Integer index = 1; for (OrdersDetail detail:detailList) { for (int i = 1; i <= detail.getNum(); i++) { int y = 160; StringBuilder page = new StringBuilder(); page.append("").append("60,60"); page.append("") .append(detail.getLuggageName()).append("(").append(i).append("/").append(detail.getNum()).append(")") .append(""); page.append("") .append(orderCode) .append(""); // 客户信息 page.append("") .append("客户信息:").append(userInfo).append(StringUtils.repeat(" ", 4)) .append(""); y += 40; // 下单时间(支付时间) page.append("") .append("下单时间:").append(payTime) .append(""); y += 40; // 取件地址(最多2行) y = appendMultiLine(page, "取件地址:", takeLocationRemark, y, 2); y += 10; // 送达时间 page.append("") .append("客户预计取件时间:").append(expectedTakeTime) .append(""); y += 40; // 订单备注(最多2行) y = appendMultiLine(page, "订单备注:", remark, y, 2); // 门店名 + 序号(固定在底部) page.append("") .append(shopName).append(StringUtils.repeat(" ", 18)) .append(index).append("/").append(num) .append(""); page.append(""); printContent.append(page); index = index+1; } } } return printContent.toString(); } /** * 追加可能换行的文本(标题+内容),超过maxChars个字符换行,最多maxLines行 * @return 消耗的y偏移后的下一个y坐标 */ private int appendMultiLine(StringBuilder sb, String title, String content, int startY, int maxLines) { String fullText = title + (StringUtils.isNotBlank(content) ? content : ""); int maxChars = 18; int line = 0; int pos = 0; int y = startY; while (pos < fullText.length() && line < maxLines) { String lineText; int end = Math.min(pos + maxChars, fullText.length()); lineText = fullText.substring(pos, end); pos = end; line++; sb.append("") .append(lineText).append(StringUtils.repeat(" ", 4)) .append(""); y += 35; } return y; } /** * 1.批量添加打印机 * @param restRequest * @return */ public ObjectRestResponse addPrinters(AddPrinterRequest restRequest) { String url = BASE_URL + "/xprinter/addPrinters"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 2.设置打印机语音类型 * @param restRequest * @return */ public ObjectRestResponse setPrinterVoiceType(SetVoiceTypeRequest restRequest) { String url = BASE_URL + "/xprinter/setVoiceType"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 3.打印小票订单 * @param restRequest * @return */ public ObjectRestResponse print(PrintRequest restRequest) { String url = BASE_URL + "/xprinter/print"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 4.打印标签订单 * @param restRequest * @return */ public ObjectRestResponse printLabel(PrintRequest restRequest) { String url = BASE_URL + "/xprinter/printLabel"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 5.批量删除打印机 * @param restRequest * @return */ public ObjectRestResponse delPrinters(DelPrinterRequest restRequest) { String url = BASE_URL + "/xprinter/delPrinters"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 6.修改打印机信息 * @param restRequest * @return */ public ObjectRestResponse updPrinter(UpdPrinterRequest restRequest) { String url = BASE_URL + "/xprinter/updPrinter"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 7.清空待打印队列 * @param restRequest * @return */ public ObjectRestResponse delPrinterQueue(PrinterRequest restRequest) { String url = BASE_URL + "/xprinter/delPrinterQueue"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 8.查询订单是否打印成功 * @param restRequest * @return */ public ObjectRestResponse queryOrderState(QueryOrderStateRequest restRequest) { String url = BASE_URL + "/xprinter/queryOrderState"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 9.查询打印机某天的订单统计数 * @param restRequest * @return */ public ObjectRestResponse queryOrderStatis(QueryOrderStatisRequest restRequest) { String url = BASE_URL + "/xprinter/queryOrderStatis"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 10.查询打印机状态 * * 0、离线 1、在线正常 2、在线不正常 * 备注:异常一般是无纸,离线的判断是打印机与服务器失去联系超过30秒 * @param restRequest * @return */ public ObjectRestResponse queryPrinterStatus(PrinterRequest restRequest) { String url = BASE_URL + "/xprinter/queryPrinterStatus"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 10.批量查询打印机状态 * * 0、离线 1、在线正常 2、在线不正常 * 备注:异常一般是无纸,离线的判断是打印机与服务器失去联系超过30秒 * @param restRequest * @return */ public ObjectRestResponse> queryPrintersStatus(PrintersRequest restRequest) { String url = BASE_URL + "/xprinter/queryPrintersStatus"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse> result = JSON.parseObject(resp, new TypeReference>>(){}); return result; } /** * 11.云喇叭播放语音 * @param restRequest * @return */ public ObjectRestResponse playVoice(VoiceRequest restRequest) { String url = BASE_URL + "/xprinter/playVoice"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 12.POS指令 * @param restRequest * @return */ public ObjectRestResponse pos(PrintRequest restRequest) { String url = BASE_URL + "/xprinter/pos"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } /** * 13.钱箱控制 * @param restRequest * @return */ public ObjectRestResponse controlBox(PrintRequest restRequest) { String url = BASE_URL + "/xprinter/controlBox"; String jsonRequest = JSON.toJSONString(restRequest); String resp = HttpsUtil.postJson(url, jsonRequest); ObjectRestResponse result = JSON.parseObject(resp, new TypeReference>(){}); return result; } }