From 5ca11ae7f64bea7463b8a14c27a79036efc62f04 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 17 二月 2025 14:37:32 +0800
Subject: [PATCH] jtt808初始化
---
server/web/src/main/java/com/doumee/api/web/HomeApi.java | 17 ++
server/services/src/main/java/com/doumee/core/utils/StringTools.java | 269 ++++++++++++++++++++++++++++++++++++++++++++
server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java | 23 +++
server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java | 9 -
4 files changed, 308 insertions(+), 10 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/core/utils/StringTools.java b/server/services/src/main/java/com/doumee/core/utils/StringTools.java
new file mode 100644
index 0000000..cc470ac
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/StringTools.java
@@ -0,0 +1,269 @@
+package com.doumee.core.utils;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.*;
+
+/**
+ * @author yezhihao
+ * https://gitee.com/yezhihao/jt808-server
+ */
+public class StringTools {
+
+ public static final int[] EMPTY = new int[0];
+
+ public static final Integer[] EMPTY_ = new Integer[0];
+
+ public static int[] toInts(String str, String delimiter) {
+ String[] split = str.split(delimiter);
+ int[] result = new int[split.length];
+ for (int i = 0; i < split.length; i++)
+ result[i] = Integer.parseInt(split[i]);
+ return result;
+ }
+
+ public static double[] toDoubles(String str, String delimiter) {
+ String[] split = str.split(delimiter);
+ double[] result = new double[split.length];
+ for (int i = 0; i < split.length; i++)
+ result[i] = Double.parseDouble(split[i]);
+ return result;
+ }
+
+ public static byte[] toBytes(String str, String delimiter) {
+ String[] split = str.split(delimiter);
+ byte[] result = new byte[split.length];
+ for (int i = 0; i < split.length; i++)
+ result[i] = (byte) Integer.parseInt(split[i]);
+ return result;
+ }
+
+ public static String merge(String delimiter, Collection value) {
+ if (value == null || value.size() == 0)
+ return null;
+
+ StringBuilder result = new StringBuilder(value.size() * 5);
+ for (Object id : value)
+ result.append(id).append(delimiter);
+
+ return result.substring(0, result.length() - 1);
+ }
+
+ public static String merge(String delimiter, Object... value) {
+ if (value == null || value.length == 0)
+ return null;
+
+ StringBuilder result = new StringBuilder(value.length * 5);
+ for (Object id : value)
+ result.append(id).append(delimiter);
+
+ return result.substring(0, result.length() - 1);
+ }
+
+ public static String merge(String delimiter, int... value) {
+ if (value == null || value.length == 0)
+ return null;
+
+ StringBuilder result = new StringBuilder(value.length * 5);
+ for (int id : value)
+ result.append(id).append(delimiter);
+
+ return result.substring(0, result.length() - 1);
+ }
+
+ public static int[] toInts(Integer[] src) {
+ if (src == null || src.length == 0)
+ return EMPTY;
+
+ int[] dest = new int[src.length];
+ for (int i = 0; i < src.length; i++)
+ dest[i] = src[i];
+ return dest;
+ }
+
+ public static Integer[] toInts(int[] src) {
+ if (src == null || src.length == 0)
+ return EMPTY_;
+
+ Integer[] dest = new Integer[src.length];
+ for (int i = 0; i < src.length; i++)
+ dest[i] = src[i];
+ return dest;
+ }
+
+ public static Integer parseInt(String num) {
+ return parseInt(num, null);
+ }
+
+ public static Integer parseInt(String num, Integer defVal) {
+ if (isBlank(num))
+ return defVal;
+ try {
+ return Integer.parseInt(num);
+ } catch (NumberFormatException e) {
+ return defVal;
+ }
+ }
+
+ public static String toUnderline(String str) {
+ StringBuilder result = new StringBuilder(str.length() + 4);
+ char[] chars = str.toCharArray();
+
+ result.append(Character.toLowerCase(chars[0]));
+
+ for (int i = 1; i < chars.length; i++) {
+ char c = chars[i];
+ if (Character.isUpperCase(c))
+ result.append('_').append(Character.toLowerCase(c));
+ else
+ result.append(c);
+ }
+ return result.toString();
+ }
+
+ public static String subPrefix(String str, String prefix) {
+ if (str != null && str.startsWith(prefix))
+ str = str.substring(prefix.length());
+ return str;
+ }
+
+ public static Map newMap(Object... entrys) {
+ Map result = new HashMap((int) (entrys.length / 1.5) + 1);
+ for (int i = 0; i < entrys.length; )
+ result.put(entrys[i++], entrys[i++]);
+ return result;
+ }
+
+ public static boolean isNotBlank(String str) {
+ return !isBlank(str);
+ }
+
+ public static boolean isBlank(String str) {
+ return str == null || str.length() == 0 || str.trim().length() == 0;
+ }
+
+ public static <T> T getDefault(T value, T defaultValue) {
+ return value != null ? value : defaultValue;
+ }
+
+ public static String leftPad(String str, int size, char ch) {
+ if(str ==null){
+ str = "";
+ }
+ int length = str.length();
+ int pads = size - length;
+ if (pads > 0) {
+ char[] result = new char[size];
+ str.getChars(0, length, result, pads);
+ while (pads > 0)
+ result[--pads] = ch;
+ return new String(result);
+ }
+ return str;
+ }
+ public static String leftTrip(String str, char ch) {
+ if(str==null ){
+ return null;
+ }
+ int index = 0;
+ while (index < str.length() && str.charAt(index) == ch) {
+ index++;
+ }
+ String result = str.substring(index);
+ return str;
+ }
+
+ public static int[] toArray(Collection<Integer> list) {
+ if (list == null || list.isEmpty())
+ return null;
+
+ int[] result = new int[list.size()];
+ int i = 0;
+ for (Integer e : list) {
+ if (e != null)
+ result[i++] = e;
+ }
+ return result;
+ }
+
+ public static Set<Integer> toSet(int... num) {
+ if (num == null || num.length == 0) {
+ return Collections.EMPTY_SET;
+ }
+ Set<Integer> result;
+ if (num.length <= 3) {
+ result = new TreeSet<>();
+ } else {
+ result = new HashSet<>(num.length << 1);
+ }
+ for (int i : num) {
+ result.add(i);
+ }
+ return result;
+ }
+
+ public static boolean isNum(String val) {
+ if (isBlank(val)) {
+ return false;
+ }
+ int sz = val.length();
+ for (int i = 0; i < sz; i++) {
+ if (!Character.isDigit(val.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static String getStackTrace(final Throwable throwable) {
+ final StringWriter sw = new StringWriter(7680);
+ final PrintWriter pw = new PrintWriter(sw, true);
+ throwable.printStackTrace(pw);
+ return sw.getBuffer().toString();
+ }
+
+ private static final char[] hexCode = "0123456789abcdef".toCharArray();
+
+ public static String bytes2Hex(byte[] bytes) {
+ char[] hex = new char[bytes.length << 1];
+ for (int j = 0, i = 0; i < bytes.length; i++) {
+ byte b = bytes[i];
+ hex[j++] = hexCode[(b >> 4) & 0xF];
+ hex[j++] = hexCode[(b & 0xF)];
+ }
+ return new String(hex);
+ }
+
+ public static byte[] hex2Bytes(String hex) {
+ final int len = hex.length();
+
+ if (len % 2 != 0) {
+ throw new IllegalArgumentException("hexBinary needs to be even-length: " + hex);
+ }
+
+ byte[] out = new byte[len >> 1];
+ for (int i = 0; i < len; i += 2) {
+
+ int h = hexToBin(hex.charAt(i));
+ int l = hexToBin(hex.charAt(i + 1));
+ if (h == -1 || l == -1) {
+ throw new IllegalArgumentException("contains illegal character for hexBinary: " + hex);
+ }
+ out[i >> 1] = (byte) (h * 16 + l);
+ }
+ return out;
+ }
+
+ public static int hexToBin(char ch) {
+ if ('0' <= ch && ch <= '9') {
+ return ch - '0';
+ }
+ if ('A' <= ch && ch <= 'F') {
+ return ch - ('A' - 10);
+ }
+ if ('a' <= ch && ch <= 'f') {
+ return ch - ('a' - 10);
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java
index 152fa98..3397748 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java
@@ -4,6 +4,7 @@
import com.doumee.core.constants.Constants;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.StringTools;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.BikesMapper;
import com.doumee.dao.business.join.BikesJoinMapper;
@@ -19,6 +20,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.system.SystemDictDataService;
+import com.github.xiaoymin.knife4j.core.util.StrUtil;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -96,12 +98,7 @@
if(StringUtils.isBlank(m.getDeviceSn() )){
return;
}
- String tSn = m.getDeviceSn();
- if(tSn.length() <12){
- for (int i = 0; i < 12-tSn.length(); i++) {
- tSn = "0"+tSn;
- }
- }
+ String tSn = StringTools.leftPad(m.getDeviceSn(),12,'0') ;
Bikes bikes = bikesJoinMapper.selectOne(new QueryWrapper<Bikes>().lambda()
.eq(Bikes::getDeviceSn,tSn)
.eq(Bikes::getIsdeleted,Constants.ZERO)
diff --git a/server/web/src/main/java/com/doumee/api/web/HomeApi.java b/server/web/src/main/java/com/doumee/api/web/HomeApi.java
index 5428d6a..ff2fafa 100644
--- a/server/web/src/main/java/com/doumee/api/web/HomeApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/HomeApi.java
@@ -6,6 +6,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.dao.business.web.response.HomeResponse;
import com.doumee.dao.business.web.response.RidesDetailResponse;
+import com.doumee.jtt808.web.service.Jtt808Service;
import com.doumee.service.business.GoodsorderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -13,10 +14,11 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.yzh.commons.model.APIResult;
+import org.yzh.protocol.t808.T0201_0500;
+import org.yzh.protocol.t808.T0805;
+import org.yzh.protocol.t808.T8500;
/**
* Created by IntelliJ IDEA.
@@ -34,6 +36,8 @@
@Autowired
private GoodsorderService goodsorderService;
+ @Autowired
+ private Jtt808Service jtt808Service;
@LoginRequired
@ApiOperation(value = "棣栭〉淇℃伅", notes = "棣栭〉淇℃伅")
@@ -45,5 +49,10 @@
HomeResponse homeResponse = goodsorderService.getHome(getMemberId());
return ApiResponse.success("鏌ヨ鎴愬姛",homeResponse);
}
+ @ApiOperation(value = "娴嬭瘯鐢垫睜鎺у埗", notes = "娴嬭瘯鐢垫睜鎺у埗")
+ @PostMapping("/testControl")
+ public ApiResponse<APIResult<T0201_0500>> testControl(@RequestBody T8500 param) {
+ return ApiResponse.success( jtt808Service.bikeControl(param));
+ }
}
diff --git a/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java b/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java
new file mode 100644
index 0000000..1ae9388
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java
@@ -0,0 +1,23 @@
+package com.doumee.jtt808.web.service;
+
+import com.doumee.jtt808.web.endpoint.MessageManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.yzh.commons.model.APIResult;
+import org.yzh.protocol.t808.T0201_0500;
+import org.yzh.protocol.t808.T8500;
+import reactor.core.publisher.Mono;
+
+@Service
+public class Jtt808Service {
+ @Autowired
+ private MessageManager messageManager;
+
+ public APIResult<T0201_0500> bikeControl(@RequestBody T8500 request) {
+ Mono<APIResult<T0201_0500>> result = messageManager.requestR(request, T0201_0500.class);
+ APIResult<T0201_0500> data = result.block();
+ return data;
+ }
+
+}
--
Gitblit v1.9.3