machineController.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.malk.tonglibo.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.malk.tonglibo.Mapper.MachineDataMapper;
  5. import com.malk.tonglibo.entity.MachineData;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.catalina.User;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.web.bind.annotation.PostMapping;
  10. import org.springframework.web.bind.annotation.RequestBody;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import java.time.LocalDateTime;
  14. import java.time.format.DateTimeFormatter;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.regex.Pattern;
  19. /**
  20. * 功能:
  21. * 作者:hanxue
  22. * 日期:2025/9/15 11:35
  23. */
  24. @RestController
  25. @RequestMapping
  26. @Slf4j
  27. public class machineController {
  28. @Autowired
  29. private MachineDataMapper machineDataMapper;
  30. private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  31. /**
  32. * 同步设备数据
  33. * @param params
  34. */
  35. @PostMapping("/device/data")
  36. public void deviceData(@RequestBody String paramsStr){
  37. try {
  38. log.info("设备数据paramsStr:{}",paramsStr);
  39. JSONObject params = JSONObject.parseObject(paramsStr);
  40. log.info("设备数据JSON:{}",params);
  41. // 创建请求记录对象
  42. LocalDateTime time = LocalDateTime.parse((String) params.get("time"), FORMATTER);
  43. // 正则:匹配 k 后跟数字的字符串
  44. Pattern kPattern = Pattern.compile("^k\\d+$");
  45. for (Map.Entry<String, Object> entry : params.entrySet()) {
  46. String key = entry.getKey();
  47. // 判断是否是 k 字段:以 'k' 开头,后面是数字
  48. if (kPattern.matcher(key).matches()) {
  49. Object dataObj = entry.getValue();
  50. if (dataObj instanceof List) {
  51. List<String> data = new ArrayList<>();
  52. MachineData machineData = new MachineData();
  53. for (Object item : (List<?>) dataObj) {
  54. String strValue;
  55. if (item instanceof Number) {
  56. // 所有数字类型(Integer, Double, Float, Long)直接转字符串
  57. strValue = item.toString();
  58. } else if (item == null) {
  59. strValue = "null"; // 或者跳过、用 "" 代替
  60. } else {
  61. // 兜底:调用 toString()
  62. strValue = item.toString();
  63. }
  64. data.add(strValue); // 存入字符串
  65. }
  66. System.out.println("数据:" + data);
  67. machineData.setParamId(params.get("id").toString());
  68. machineData.setTime(time);
  69. machineData.setMachineNo(key);
  70. machineData.setJqyxsh(data.get(0));
  71. machineData.setZcn(data.get(2));
  72. machineData.setZqsj(data.get(4));
  73. machineData.setSgdyl(data.get(6));
  74. machineData.setXgdyl(data.get(8));
  75. machineData.setYskqyl1(data.get(10));
  76. machineData.setYskqyl2(data.get(12));
  77. machineData.setZymwd1(data.get(14));
  78. machineData.setZymwd2(data.get(16));
  79. machineData.setZymwd3(data.get(18));
  80. machineData.setZymwd4(data.get(20));
  81. machineData.setSmwd1(data.get(22));
  82. machineData.setSmwd2(data.get(24));
  83. machineData.setSmwd3(data.get(26));
  84. machineData.setSmwd4(data.get(28));
  85. machineData.setXmwd1(data.get(30));
  86. machineData.setXmwd2(data.get(32));
  87. machineData.setXmwd3(data.get(34));
  88. machineData.setXmwd4(data.get(36));
  89. machineData.setXjsj(data.get(38));
  90. machineData.setTssj(data.get(40));
  91. machineData.setZysj(data.get(42));
  92. machineDataMapper.insert(machineData);
  93. }
  94. }
  95. }
  96. }catch (Exception e){
  97. log.error("设备数据同步异常:{}",e);
  98. }
  99. }
  100. /**
  101. * 宜搭获取设备数据
  102. * @param params
  103. */
  104. @PostMapping("/device/getData")
  105. public List<MachineData> deviceHeartbeat(@RequestBody Map params){
  106. QueryWrapper<MachineData> queryWrapper = new QueryWrapper<>();
  107. List<MachineData> machineDatas = machineDataMapper.selectList(queryWrapper);
  108. return null;
  109. }
  110. }