chudk il y a 7 ans
Parent
commit
951aa09040

+ 21 - 0
src/main/java/com/tidecloud/dataacceptance/entity/Device.java

@@ -19,7 +19,14 @@ public class Device implements Serializable{
     private Integer step;
     private Integer terminalState;
     private String deviceId;
+    private String itemState;
     
+    public String getItemState() {
+        return itemState;
+    }
+    public void setItemState(String itemState) {
+        this.itemState = itemState;
+    }
     public String getDeviceId() {
         return deviceId;
     }
@@ -73,4 +80,18 @@ public class Device implements Serializable{
         return "Device [timestamp=" + timestamp + ", lng=" + lng + ", lat=" + lat + ", speed=" + speed + ", electric="
                 + electric + ", step=" + step + ", terminalState=" + terminalState + ", deviceId=" + deviceId + "]";
     }
+    public static String buildDeviceStr(Device device){
+        
+        StringBuilder builder = new StringBuilder();
+        builder.append(device.getDeviceId()).append(",");
+        builder.append(device.getTimestamp().getTime() / 1000).append(",");
+        builder.append(device.getItemState()).append(",");
+        builder.append(device.getLng()).append(",");
+        builder.append(device.getLat()).append(",");
+        builder.append(device.getSpeed()).append(",");
+        builder.append(device.getStep()).append(",");
+        builder.append(device.getTerminalState());
+        
+        return builder.toString();
+    }
 }

+ 74 - 6
src/main/java/com/tidecloud/datacceptance/service/impl/DiscardServerHandler.java

@@ -1,5 +1,11 @@
 package com.tidecloud.datacceptance.service.impl;
 
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
 import java.nio.charset.Charset;
@@ -13,6 +19,7 @@ import java.util.Map;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import com.tidecloud.dataacceptance.entity.Advice;
@@ -29,8 +36,13 @@ import io.netty.channel.ChannelInboundHandlerAdapter;
  */
 @Component
 public class DiscardServerHandler extends ChannelInboundHandlerAdapter {
+    
+    @Value("${server.dataPath}")
+    private String dataPath;
 
     private static final Logger logger = LoggerFactory.getLogger(DiscardServerHandler.class);
+    private static final Long TEN_M = 10485760l;
+    private static final String prefixName = "watch";
 
     private Map<String, Channel> channelMap = new HashMap<String, Channel>();
     private List<Channel> channelList = new ArrayList<Channel>();
@@ -131,24 +143,59 @@ public class DiscardServerHandler extends ChannelInboundHandlerAdapter {
         Device device = new Device();
         String gpsState = bodys[3];
         logger.info("正在解析device,gpsState:" + gpsState);
-        if (!"A".equals(gpsState)) {
+        /*if (!"A".equals(gpsState)) {
             logger.info("gps定位为:" + gpsState + "无效");
             return null;
-        }
+        }*/
         String date = bodys[1];
         String time = bodys[2];
         Date timestamp = new SimpleDateFormat("yyMMddHHmmss").parse(date + time);
         device.setTimestamp(timestamp);
         device.setLat(getDouble(bodys[4]));
         device.setLng(getDouble(bodys[6]));
-        device.setSpeed(getDouble(bodys[5]));
-        device.setElectric(getDouble(bodys[13]));
-        device.setStep(getInteger(bodys[14]));
+        device.setSpeed(getDouble(bodys[8]));
+        device.setElectric(getDouble(bodys[14]));
+        device.setStep(getInteger(bodys[15]));
+        device.setItemState(bodys[17]);
         // getDouble()
         logger.info("设备上传具体监控项信息:" + device.toString());
         return device;
     }
-
+    
+    private void dataStorage(Device device) {
+        String deviceStr = Device.buildDeviceStr(device);
+        File path = new File(dataPath);
+        File[] listFiles = path.listFiles();
+        boolean isTouch = true;
+        for (File sonFile : listFiles) {
+            long len = sonFile.length();
+            if (len < TEN_M) {
+               // String fileName = dataPath + prefixName + new SimpleDateFormat("yyMMddHHmmss").format(new Date());
+               // File file = new File(fileName);
+                writeDevice2File(sonFile, deviceStr);
+                isTouch = false;
+            }
+        }
+        if (isTouch) {
+            String fileName = dataPath + prefixName + new SimpleDateFormat("yyMMddHHmmss").format(new Date());
+            File file = new File(fileName);
+            writeDevice2File(file, deviceStr);
+        }
+    }
+    
+    public void writeDevice2File(File file, String deviceStr){
+        Integer length = deviceStr.getBytes().length;
+        try {
+            DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(file, true));
+            dataOutputStream.write(int2bytes(length));;
+            dataOutputStream.writeUTF(deviceStr);
+            dataOutputStream.flush();
+            dataOutputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
         cause.printStackTrace();
@@ -174,6 +221,17 @@ public class DiscardServerHandler extends ChannelInboundHandlerAdapter {
      * 【Receive from 223.104.255.118 :61922】:[3G*3918197044*000D*LK,12642,0,93]
      */
     public static void main(String[] args) {
+        Device device = new Device();
+        device.setDeviceId("3918197044");
+        device.setElectric(11.2d);
+        device.setItemState("125");
+        device.setLat(24.4441);
+        device.setLng(114.223);
+        device.setSpeed(21.2);
+        device.setStep(12);
+        device.setTerminalState(12);
+        device.setTimestamp(new Date());
+        new DiscardServerHandler().dataStorage(device);
     }
 
     public static String byteBufferToString(ByteBuffer buffer) {
@@ -203,4 +261,14 @@ public class DiscardServerHandler extends ChannelInboundHandlerAdapter {
         }
         return Double.valueOf(str);
     }
+    
+    static byte[] int2bytes(int num)
+    {
+           byte[] b=new byte[4];
+           //int mask=0xff;
+           for(int i=0;i<4;i++){
+                b[3-i]=(byte)(num>>>(24-i*8));
+           }
+          return b;
+    }
 }

+ 1 - 0
src/main/resources/application.yml

@@ -1,3 +1,4 @@
 server:
   port: 7009
+  dataPath: /home/service/collector_watch/rawdata/