對接飛鵝和易聯云后 ,網上幾乎沒資料對大趨智能列印機java api分享,故此分享一波,
官方檔案地址
SnParam.java
package com.shanheyongmu.openapi.param; import lombok.Data; import lombok.NoArgsConstructor; @NoArgsConstructor @Data public class SnParam { /** * 列印機編號 */ private String sn; public SnParam(String sn) { this.sn = sn; } }
PrinterAddParam.java
package com.shanheyongmu.openapi.param; import lombok.Data; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotBlank; @Data public class PrinterAddParam { /** * 列印機編號 */ @NotBlank @Length(max = 50) private String sn; /** * 設備密鑰 */ @NotBlank @Length(max = 255) private String key; /** * 設備名稱或備注 */ @Length(max = 50) private String name; @Range(min = 1, max = 16) private Integer lang; }
PrintStatusQueryParam.java
package com.shanheyongmu.openapi.param; import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = true) public class PrintStatusQueryParam extends SnParam { /** * 列印請求ID */ @NotNull private Long printId; public PrintStatusQueryParam(@NotNull String sn, @NotNull Long printId) { super(sn); this.printId = printId; } }
PrintParam.java
package com.shanheyongmu.openapi.param; import lombok.Data; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Range; /** * 列印請求 */ @Data public class PrintParam extends SnParam { /** * 列印小票模板內容 */ @Length(max = 6000) private String content; /** * 播報音源 */ @Length(max = 120) private String voice; /** * 播報語音次數,默認播報1次,不能超過3次 */ @Range(min = 1, max = 5) private Integer voicePlayTimes; /** * 多次播報語音時的間隔秒數,默認3秒 */ private String voicePlayInterval; /** * 列印小票張數,不傳默認1, 取值范圍: 1~5 */ @Range(min = 1, max = 5) private Integer copies; }
com.shanheyongmu.openapi.result 新建6個類
ResponseResult.java
package com.shanheyongmu.openapi.result; import lombok.Data; import java.io.Serializable; /** * 標準回應結構體 * @param <T> 回應業務資料 */ @Data public class ResponseResult<T> implements Serializable { private String code; private String message; private T data; }
PrinterAddResultData.java
package com.shanheyongmu.openapi.result; import lombok.Data; import java.util.List; @Data public class PrinterAddResultData { /** * 多臺設備發生增加失敗時回傳原因串列,都成功時回傳空串列(注意:增加單時失敗的原因在message中) */ List<AddFailResult> fail; @Data public static class AddFailResult { private String sn; /** * 失敗原因 */ private String reason; } }
PrinterUnbindResultData.java
package com.shanheyongmu.openapi.result; import lombok.Data; import java.util.List; /** * 列印解綁結果 */ @Data public class PrinterUnbindResultData { /** * 多臺設備解綁成功時,回傳成功的SN串列 */ List<String> ok; /** * 多臺設備發生解綁失敗時回傳原因串列 */ List<UnbindFailResult> fail; @Data public static class UnbindFailResult { private String sn; /** * 失敗原因 */ private String reason; } }
PrinterStatusResultData.java
package com.shanheyongmu.openapi.result; import lombok.Data; @Data public class PrinterStatusResultData { /** * 在線狀態 0/1 * 0=不在線 1=在線 */ int onlineStatus; /** * 設備狀態 * * * -1=初始化 0=就緒 1=列印中 2=缺紙 3=過溫 4=列印故障 */ int workStatus; /** * 設備狀態說明 */ String workStatusDesc; }
PrintRequestResultData.java
package com.shanheyongmu.openapi.result; import lombok.Data; /** * 請求列印結果 */ @Data public class PrintRequestResultData { /** * 列印請求ID */ private long printId; /** * 當前列印機佇列長度 */ private Integer queueSize; }
com.shanheyongmu.openapi.result.callback下
PrintRequestStateCallbackData.java
package com.shanheyongmu.openapi.result.callback; import lombok.Data; /** * 回呼列印結果 */ @Data public class PrintRequestStateCallbackData { /** * 列印ID */ private long printId; /** * 狀態 * 0=待列印 1=列印中 2=成功 3=失敗 4=已取消 */ private String status; }
CallbackResult.java
package com.shanheyongmu.openapi.result.callback; import lombok.Data; /** * 回呼結果 */ @Data public class CallbackResult { /** * 回呼業務型別 * * 5=列印請求狀態發生改變 6=列印機列印發生改變 */ private int type; /** * 回呼時間(unix timestamp 秒) */ private long rtime; /** * 業務json string */ private String data; }
DaQuApi.java
package com.shanheyongmu.openapi.util; import com.shanheyongmu.openapi.result.PrinterAddResultData; import com.shanheyongmu.openapi.param.PrintParam; import com.shanheyongmu.openapi.param.PrintStatusQueryParam; import com.shanheyongmu.openapi.param.PrinterAddParam; import com.shanheyongmu.openapi.param.SnParam; import com.shanheyongmu.openapi.result.*; import org.springframework.core.ParameterizedTypeReference; import java.util.List; public class DaQuApi { private static String API_PREFIX = "https://printer.juhesaas.com/openapi"; /** * 批量添加列印機 */ public static ResponseResult<PrinterAddResultData> addPrinterBatch(List<PrinterAddParam> printerList) { String url = API_PREFIX + "/addPrinter"; return DaQuRequestUtils.post(url, printerList, new ParameterizedTypeReference<ResponseResult<PrinterAddResultData>>() { }); } /** * 查詢設備狀態 */ public static ResponseResult<PrinterStatusResultData> getDeviceStatus(String sn) { return DaQuRequestUtils.post(API_PREFIX + "/getDeviceStatus", new SnParam(sn), new ParameterizedTypeReference<ResponseResult<PrinterStatusResultData>>() { }); } /** * 請求列印 */ public static ResponseResult<PrintRequestResultData> print(PrintParam printParam) { return DaQuRequestUtils.post(API_PREFIX + "/print", printParam, new ParameterizedTypeReference<ResponseResult<PrintRequestResultData>>() { }); } /** * 查詢小票列印結果 */ public static ResponseResult<PrintStatusData> getPrintStatus(PrintStatusQueryParam printStatusQueryParam) { return DaQuRequestUtils.post(API_PREFIX + "/getPrintStatus", printStatusQueryParam, new ParameterizedTypeReference<ResponseResult<PrintStatusData>>() { }); } /** * 解綁列印機 */ public static ResponseResult<PrinterUnbindResultData> unbind(List<String> snList) { return DaQuRequestUtils.post(API_PREFIX + "/delPrinter", snList, new ParameterizedTypeReference<ResponseResult<PrinterUnbindResultData>>() { }); } }
DaQuRequestUtils.java 大趨智能云列印機工具類,大趨智能 TRENDIT P7
package com.shanheyongmu.openapi.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.shanheyongmu.openapi.result.ResponseResult; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.web.client.RestTemplate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.UUID; public class DaQuRequestUtils { private static ObjectMapper objectMapper = new ObjectMapper(); /** * 發起請求 * * @param url url * @param body 請求body物件 * @param typeReference 回應型別 */ public static <R, P> ResponseResult<R> post(String url, P body, ParameterizedTypeReference<ResponseResult<R>> typeReference) { HttpHeaders hexSignHeader = getHeader(body); hexSignHeader.setContentType(MediaType.APPLICATION_JSON_UTF8); HttpEntity<P> request = new HttpEntity<>(body, hexSignHeader); return new RestTemplate().exchange(url, HttpMethod.POST, request, typeReference).getBody(); } /** * 設備請求頭 */ public static HttpHeaders getHeader(Object requestParam) { String appId = "{your appid}"; String appSecret = "{your appSecret}"; long stime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC); String uid = UUID.randomUUID().toString(); String originContext = uid + appId + stime + appSecret; if (requestParam != null) { try { // 注意:如果有自定義Spring MVC HttpMessageConverter,請注意兩邊序列化規則保持一至 originContext += objectMapper.writeValueAsString(requestParam); } catch (JsonProcessingException e) { e.printStackTrace(); } } HttpHeaders headers = new HttpHeaders(); String sign = DigestUtils.md5Hex(originContext); headers.add("appid", appId); headers.add("uid", uid); headers.add("stime", String.valueOf(stime)); headers.add("sign", sign); return headers; } }
測驗用例
package com.shanheyongmu.openapi.util; import com.shanheyongmu.openapi.param.PrintParam; import com.shanheyongmu.openapi.param.PrintStatusQueryParam; import com.shanheyongmu.openapi.param.PrinterAddParam; import com.shanheyongmu.openapi.result.*; import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.junit.Assert.*; public class DaQuApiTest { String testSN = "67002004xxxx"; String testKey = "7w4566"; @Test public void unbindTest() { ResponseResult<PrinterUnbindResultData> responseResult = DaQuApi.unbind(Arrays.asList(testSN)); System.out.println(responseResult); Assert.assertEquals("0", responseResult.getCode()); Assert.assertEquals("OK", responseResult.getMessage()); } @Test public void addPrinterBatchTest() { List<PrinterAddParam> printerList = new ArrayList<>(); PrinterAddParam printer1 = new PrinterAddParam(); printer1.setSn(testSN); printer1.setKey(testKey); printer1.setName("openApiTestSN"); printerList.add(printer1); ResponseResult<PrinterAddResultData> responseResult = DaQuApi.addPrinterBatch(printerList); System.out.println(responseResult); Assert.assertEquals("0", responseResult.getCode()); Assert.assertEquals("OK", responseResult.getMessage()); } @Test public void getDeviceStatusTest() { ResponseResult<PrinterStatusResultData> responseResult = DaQuApi.getDeviceStatus(testSN); System.out.println(responseResult); Assert.assertEquals("0", responseResult.getCode()); Assert.assertEquals("OK", responseResult.getMessage()); } @Test public void printTest() { PrintParam printParam = new PrintParam(); printParam.setSn(testSN); printParam.setContent("test print"); printParam.setVoicePlayTimes(1); printParam.setVoice("1"); // 模擬美團接單 ResponseResult<PrintRequestResultData> responseResult = DaQuApi.print(printParam); System.out.println(responseResult); Assert.assertEquals("0", responseResult.getCode()); Assert.assertEquals("OK", responseResult.getMessage()); Assert.assertNotNull(responseResult.getData()); Assert.assertNotNull(responseResult.getData().getPrintId()); Assert.assertNotNull(responseResult.getData().getQueueSize()); } @Test public void getPrintStatusTest() { PrintStatusQueryParam printStatusQueryParam = new PrintStatusQueryParam(testSN, 1045401059247738881L); ResponseResult<PrintStatusData> responseResult = DaQuApi.getPrintStatus(printStatusQueryParam); System.out.println(responseResult); Assert.assertEquals("0", responseResult.getCode()); Assert.assertEquals("OK", responseResult.getMessage()); } }
早年同窗始相知,三載瞬逝情卻萌,年少不知愁滋味,猶讀紅豆生南國,別離方知相思苦,心田紅豆根以生,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538582.html
標籤:Java
上一篇:SpringCloud Alibaba(二) - Sentinel,整合OpenFeign,GateWay服務網關
