TestController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. package com.tmzn.devicelinkykc.controller;
  2. import cn.hutool.http.HttpRequest;
  3. import cn.hutool.http.HttpResponse;
  4. import com.alibaba.fastjson2.JSONArray;
  5. import com.alibaba.fastjson2.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.tmzn.devicelinkykc.constant.ykc.StatusConstant;
  8. import com.tmzn.devicelinkykc.entity.BillingModel;
  9. import com.tmzn.devicelinkykc.entity.Device;
  10. import com.tmzn.devicelinkykc.entity.DeviceStatus;
  11. import com.tmzn.devicelinkykc.entity.OrderStatus;
  12. import com.tmzn.devicelinkykc.entity.param.AjaxResult;
  13. import com.tmzn.devicelinkykc.entity.param.dto.BillingModelDTO;
  14. import com.tmzn.devicelinkykc.frameMsg.DataConversion;
  15. import com.tmzn.devicelinkykc.frameMsg.FrameDataSplicing;
  16. import com.tmzn.devicelinkykc.frameMsg.TransMoney;
  17. import com.tmzn.devicelinkykc.frameMsg.frameType.LoginFrame;
  18. import com.tmzn.devicelinkykc.frameMsg.frameType.RealTimeStatusPushFrame;
  19. import com.tmzn.devicelinkykc.frameMsg.frameType.TransactionFlowPushFrame;
  20. import com.tmzn.devicelinkykc.mapstruct.BillingModelMapping;
  21. import com.tmzn.devicelinkykc.message.DeviceMsgHandle;
  22. import com.tmzn.devicelinkykc.msgEnum.DeviceSendYkc;
  23. import com.tmzn.devicelinkykc.redis.RedisCache;
  24. import com.tmzn.devicelinkykc.service.BillingModelService;
  25. import com.tmzn.devicelinkykc.service.DeviceControlerService;
  26. import com.tmzn.devicelinkykc.service.DeviceStatusService;
  27. import com.tmzn.devicelinkykc.service.OrderStatusService;
  28. import com.tmzn.devicelinkykc.socket.DeviceConnectionMsg;
  29. import com.tmzn.devicelinkykc.transdata.entity.DeviceParam;
  30. import com.tmzn.devicelinkykc.msgparser.MessageParseMgr;
  31. import com.tmzn.devicelinkykc.util.Encrytion;
  32. import lombok.extern.slf4j.Slf4j;
  33. import org.slf4j.Logger;
  34. import org.slf4j.LoggerFactory;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.beans.factory.annotation.Value;
  37. import org.springframework.stereotype.Controller;
  38. import org.springframework.web.bind.annotation.GetMapping;
  39. import org.springframework.web.bind.annotation.PostMapping;
  40. import org.springframework.web.bind.annotation.RequestMapping;
  41. import org.springframework.web.bind.annotation.RequestParam;
  42. import org.springframework.web.bind.annotation.*;
  43. import javax.servlet.http.HttpServletRequest;
  44. import java.math.BigDecimal;
  45. import java.util.Arrays;
  46. import java.util.HashMap;
  47. import java.util.List;
  48. import java.util.Map;
  49. import java.util.concurrent.ConcurrentHashMap;
  50. import java.util.stream.Collectors;
  51. /**
  52. * @author xp
  53. * @date 2024/4/13
  54. * @explain " "
  55. */
  56. @Controller
  57. @Slf4j(topic = "RealTimeStatusPushFrame")
  58. @RequestMapping
  59. public class TestController {
  60. @Autowired
  61. private DeviceControlerService deviceControlerService;
  62. @Autowired
  63. private BillingModelService billingModelService;
  64. @Autowired
  65. private BillingModelMapping billingModelMapping;
  66. @Value("${billingInterface}")
  67. private String url;
  68. @Autowired
  69. private RedisCache redisCache;
  70. @Autowired
  71. private MessageParseMgr messageParseMgr;
  72. @Autowired
  73. private DeviceMsgHandle deviceMsgHandle;
  74. @Autowired
  75. private TransactionFlowPushFrame transactionFlowPushFrame;
  76. @Autowired
  77. private OrderStatusService orderStatusService;
  78. @Autowired
  79. private TransMoney transMoney;
  80. @PostMapping("/msg")
  81. public String testMsg() {
  82. try {
  83. // realTimeStatusPushFrame.upStatusDevice(null,);
  84. String pileCode = "51220002000016";
  85. QueryWrapper<BillingModel> billWapper = new QueryWrapper<>();
  86. billWapper.eq("pile_code", pileCode);
  87. BillingModel b = billingModelService.getOne(billWapper);
  88. //查找所有充电中的订单
  89. QueryWrapper<OrderStatus> queryWrapper = new QueryWrapper<>();
  90. queryWrapper.eq("id", 57303); //充电中状态上报
  91. //查询所有充电中设备的最新的订单记录,来上报设备状态消息.........?????????????????
  92. OrderStatus orderStatus = orderStatusService.getOne(queryWrapper);
  93. Map<String, BigDecimal> map = transMoney.compute(orderStatus.getGunsCode(), b, orderStatus.getCreateTime(), orderStatus.getEndTime(),orderStatus);
  94. logger.info(orderStatus.getPileCode() + "计算电费,{},{}," + DataConversion.bytesToHexString(orderStatus.getTransOrder()),map.get("money"),map.get("elec"));
  95. byte[] params = transactionFlowPushFrame.params16(orderStatus.getTransOrder(), pileCode, orderStatus.getGunsCode(),
  96. orderStatus.getCreateTime(), orderStatus.getEndTime(), b, orderStatus.getCard(), map,0);
  97. //deviceMsgHandle.testMsg(message);
  98. System.out.println( DataConversion.bytesToHexString(params));
  99. int frameType = DeviceSendYkc.TRANSACTION_RECORDS_REQUEST_16.getFrameType();
  100. byte[] encrypt = new byte[0];
  101. encrypt = params;
  102. byte[] b1 = FrameDataSplicing.spliceing(0,frameType , 0, encrypt, encrypt.length,false);
  103. System.out.println( DataConversion.bytesToHexString(b1));
  104. } catch (Exception e) {
  105. e.printStackTrace();
  106. }
  107. return "ok";
  108. }
  109. @Autowired
  110. DeviceStatusService deviceStatusService;
  111. @PostMapping("/parser1")
  112. public String parser1(@RequestBody String message ) {
  113. try{
  114. String str_key = "6492806831843423";
  115. String code = "";
  116. byte[] res = Encrytion.rsaEncrypt(str_key.getBytes(),"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKbtY6sYSeN1uv4pafiaTPMHySxmIosW1Jia1mOcaMmWUQrN57uieY++1wkW3LVg4KY7CG/eeQXAwqbbvoax7yMCAwEAAQ==");
  117. System.out.println(res);
  118. byte[] res1 = Encrytion.rsaEncrypt(str_key.getBytes(),"MFwwDQYJKoZIhycNAQEBBQADSWAWSAJBAKbtY6sYSeN1uv4pafiaTPMHySxmlosW1Jia1mOcaMmWUQrN57uieY++1wkW3LVg4KY7CG/eeQxAwabbvoax7yMCAWEAAQ==");
  119. System.out.println(res1);
  120. QueryWrapper<BillingModel> billWapper = new QueryWrapper<>();
  121. billWapper.eq("pile_code", "32010600530570");
  122. billWapper.eq("device_imei", "863218078065418");
  123. BillingModel b = billingModelService.getOne(billWapper);
  124. if (b == null) {
  125. log.info("{}上报充电中未匹配计费模型", "32010600530570");
  126. }
  127. QueryWrapper<DeviceStatus> deviceStatusQueryWrapper = new QueryWrapper<>();
  128. deviceStatusQueryWrapper.eq("device_imei", "863343064704539");
  129. deviceStatusQueryWrapper.last("limit 1");
  130. DeviceStatus statusServiceOne = deviceStatusService.getOne(deviceStatusQueryWrapper);
  131. System.out.println(statusServiceOne);
  132. // deviceMsgHandle.deviceMsg(message);
  133. }catch (Exception e){
  134. e.printStackTrace();
  135. System.out.println(e.getMessage());
  136. }
  137. System.out.println(111);
  138. return "ok";
  139. }
  140. @PostMapping("/parser2")
  141. public String parser2(@RequestBody String message ) {
  142. //剩余
  143. byte[] soc = new byte[]{0x00};
  144. //电池组最高温度
  145. byte[] battery_temp = {0x32};
  146. //剩余时间
  147. byte[] remain_time = {0x00, 0x00};
  148. //枪线温度
  149. byte[] guns_line_temp = new byte[1];
  150. //9.枪线温度
  151. guns_line_temp[0] = 0x32;
  152. byte gunsStatus = 3;
  153. String imei = "868371073352243";
  154. byte guns = 1;
  155. double voltage = 136;
  156. try{
  157. //重置电压 直流电压放大10倍
  158. if(gunsStatus== StatusConstant.CHARGING){
  159. JSONArray dataArray = redisCache.getCacheMapValue("device_last_163",imei+"_"+guns);
  160. if(dataArray != null){
  161. //获取soc和剩余时间
  162. //重置soc
  163. soc[0] = (byte) (dataArray.getInteger(21+3) & 0xff);
  164. remain_time[0] = dataArray.getByte(22+3);
  165. remain_time[1] = dataArray.getByte(23+3);
  166. // int remainTIme = (dataArray.getInteger(22+3)) | (dataArray.getInteger(23+3)<<8);
  167. // remain_time[1] = (byte) ((remainTIme >> 8) & 0xFF);
  168. // remain_time[0] = (byte) (remainTIme & 0xFF);
  169. //
  170. // System.out.println(remainTIme);
  171. // System.out.println(remain_time);
  172. log.info("充电中-soc:{},remain:{}",soc,remain_time);
  173. }
  174. }
  175. int time = 136;
  176. byte[] charnging_Time = new byte[2];
  177. charnging_Time[1] = (byte) ((time >> 8) & 0xFF);
  178. charnging_Time[0] = (byte) (time & 0xFF);
  179. System.out.println(charnging_Time);
  180. }catch (Exception e){
  181. }
  182. System.out.println(111);
  183. return "ok";
  184. }
  185. @GetMapping("/test163")
  186. public AjaxResult test163(HttpServletRequest request ) {
  187. String data = request.getParameter("data");
  188. List<Integer> split = Arrays.stream(data.split(","))
  189. .map(Integer::parseInt) // 将 String 转换为 Integer
  190. .collect(Collectors.toList()); // 收集结果到 List 中
  191. List<List<Integer>> packages = Encrytion.parseMorePackage(split);
  192. System.out.println(111);
  193. // JSONArray objects = new JSONArray(split);
  194. // JSONObject obj = new JSONObject();
  195. // obj.put("data",objects);
  196. // JSONObject object = messageParseMgr.parseMessage("75960_103", obj);
  197. // System.out.println(object);
  198. return null;
  199. }
  200. @GetMapping("/parser")
  201. public AjaxResult parser(HttpServletRequest request ) {
  202. String data = request.getParameter("data");
  203. List<Integer> split = Arrays.stream(data.split(","))
  204. .map(Integer::parseInt) // 将 String 转换为 Integer
  205. .collect(Collectors.toList()); // 收集结果到 List 中
  206. List<List<Integer>> packages = Encrytion.parseMorePackage(split);
  207. System.out.println(packages);
  208. for(int i=0;i<packages.size();i++){
  209. JSONObject obj = new JSONObject();
  210. obj.put("data",packages.get(i));
  211. System.out.println("parser:"+"75960_"+packages.get(i).get(1));
  212. JSONObject object = messageParseMgr.parseMessage("75960_"+packages.get(i).get(1),obj);
  213. System.out.println(object);
  214. if(object!=null){
  215. String m = object.toString();
  216. System.out.println(m);
  217. }
  218. }
  219. System.out.println(111);
  220. // JSONArray objects = new JSONArray(split);
  221. // JSONObject obj = new JSONObject();
  222. // obj.put("data",objects);
  223. // JSONObject object = messageParseMgr.parseMessage("75960_103", obj);
  224. // System.out.println(object);
  225. return null;
  226. }
  227. @GetMapping("/test")
  228. public String test(@RequestParam("method") String method, @RequestParam("imei") String imei) {
  229. String deviceId = imei;
  230. String ccid = imei;
  231. if ("start".equals(method)) {
  232. deviceControlerService.startCharge(imei, imei, 1,50000);
  233. } else if ("stop".equals(method)) {
  234. deviceControlerService.stopCharge(imei, imei, 1);
  235. } else if ("port".equals(method)) {
  236. DeviceParam deviceParam = new DeviceParam();
  237. deviceParam.setDeviceId(imei);
  238. deviceParam.setCcid(imei);
  239. deviceControlerService.sendPortDetailCmd(deviceParam);
  240. } else if ("restartDevice".equals(method)) {
  241. deviceControlerService.restart(imei, imei);
  242. } else if ("rest".equals(method)) {
  243. deviceControlerService.reset(imei, imei);
  244. }
  245. return "ok";
  246. }
  247. private static final Logger logger = LoggerFactory.getLogger(DeviceMsgHandle.class);
  248. @GetMapping("/test2")
  249. public String test2(@RequestParam("pileCode") String pileCode) {
  250. //调用重启
  251. // redisCache.setCacheMapValue(RedisConstant.PILE_GUN_PAY_TIME, pileCode+"_"+1,System.currentTimeMillis());
  252. // return "ok";
  253. // //标记最后订单时间 5分钟内不上报空闲状态 避免刚下单状态还没更新就被freeTask任务给顶掉了
  254. new Thread(() -> {
  255. try {
  256. Thread.sleep(5000); // 延迟 5 秒
  257. DeviceParam dataParam = new DeviceParam();
  258. dataParam.setDeviceId("123456");
  259. dataParam.setCcid("123456");
  260. // deviceControlerService.sendPortDetailCmd(dataParam);
  261. logger.info(":主动下发103消息");
  262. } catch (Exception e) {
  263. logger.info(":主动下发103消息异常" + e.getMessage());
  264. }
  265. }).start();
  266. // try{
  267. // long ts = redisCache.getCacheMapValue(RedisConstant.PILE_GUN_PAY_TIME, pileCode+"_1");
  268. // if(ts!=0){
  269. // long ts1 = System.currentTimeMillis();
  270. // if((ts1-ts)<300*1000){
  271. // return "ok";
  272. // }
  273. // }
  274. // }catch (Exception e){
  275. // return "error";
  276. // }
  277. return "ok";
  278. }
  279. @Autowired LoginFrame loginFrame;
  280. @GetMapping("/test3")
  281. public String test3(@RequestParam("pileCode") String pileCode) throws Exception {
  282. //调用重启
  283. loginFrame.test(pileCode);
  284. return "ok";
  285. }
  286. @GetMapping("/test1")
  287. public String test1(@RequestParam("pileCode") String pileCode) {
  288. //调用重启
  289. try{
  290. String url = "http://127.0.0.1:8063/api/device/restLogin/"+pileCode;
  291. HttpResponse execute = HttpRequest.post(url)
  292. .timeout(3000)
  293. .execute();
  294. String body = execute.body();
  295. System.out.println("reset login body:>>>"+body);
  296. } catch (Exception ex) {
  297. System.out.println("reset error :>>>"+ex.toString());
  298. }
  299. return "ok";
  300. }
  301. @RequestMapping("/testElec")
  302. public JSONObject testCompute(@RequestParam("end")Long end,@RequestParam("start")Long star,@RequestParam("imei")String imei,@RequestParam("port")int port) {
  303. QueryWrapper<BillingModel> billingModelQueryWrapper = new QueryWrapper<>();
  304. BillingModel one = billingModelService.getOne(billingModelQueryWrapper);
  305. BillingModelDTO billingModelDTO = billingModelMapping.billingModelToBillingModelDto(one);
  306. HashMap<String, Object> map = new HashMap<>();
  307. map.put("port",port);
  308. map.put("billingModel",billingModelDTO);
  309. map.put("startTime",star/1000);
  310. map.put("endTime",end/1000);
  311. JSONObject jsonObject = new JSONObject(map);
  312. String s = jsonObject.toString();
  313. HttpResponse execute = HttpRequest.post(url)
  314. .form("data",s)
  315. .timeout(3000)
  316. .execute();
  317. int status = execute.getStatus();
  318. String body = execute.body();
  319. System.out.println("body:>>>"+body);
  320. return null;
  321. }
  322. }