Browse Source

Merge branch 'master' of http://116.63.33.55/git/read_opc

FinalYu 2 years ago
parent
commit
b97fcf433d

+ 3 - 1
chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/RawDataDao.java

@@ -10,6 +10,8 @@ import java.util.Map;
 @Repository
 public interface RawDataDao {
 
+    Integer addRawData(Integer id, Integer remainder, RawData rawData);
+
     Integer addRawDataList(Integer itemGroupId, Integer remainder, List<RawData> rawDataList);
 
     List<RawData> getLineOrBarData(Integer itemGroupId, Integer remainder, Integer dataSourceId, String itemName);
@@ -20,5 +22,5 @@ public interface RawDataDao {
 
     List<Map<String, Object>> getPieData(Integer itemGroupId, Integer remainder, Integer dataSourceId, List<Item> itemList);
 
-    List<Map<String, Object>> getTableDataEvery(int itemGroupId, Integer remainder, String itemName, Integer dataSourceId,String sqlParameter);
+    List<Map<String, Object>> getTableDataEvery(int itemGroupId, Integer remainder, String itemName, Integer dataSourceId, String sqlParameter);
 }

+ 1 - 1
chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/ItemGroup.java

@@ -31,7 +31,7 @@ public class ItemGroup implements Serializable {
      */
     private Integer dataSourceId;
     /**
-     * 读取模式;0频率,1变化时读取,2超过设定值读取
+     * 读取模式;0频率,1变化时读取,2超过或者等于设定值读取,3低于或者等于设定值读取
      */
     private Integer readMode;
     /**

+ 13 - 1
chuanyi_server/src/main/java/com/judong/chuanyiserver/opc/OpcAsyncTask.java

@@ -198,7 +198,19 @@ public class OpcAsyncTask {
     }
 
     /**
-     * 新增原始数据
+     * 新增一条原始数据
+     *
+     * @param rawData
+     */
+    public void addRawData(Integer id, RawData rawData) {
+        if (Blank.isNotEmpty(id) && Blank.isNotEmpty(rawData)) {
+            Integer remainder = id % ConstantStr.SUB_TABLE_NUM;
+            rawDataDao.addRawData(id, remainder, rawData);
+        }
+    }
+
+    /**
+     * 新增原始数据集合
      *
      * @param rawDataList
      */

+ 0 - 126
chuanyi_server/src/main/java/com/judong/chuanyiserver/opc/OpcDaObservable.java

@@ -1,126 +0,0 @@
-package com.judong.chuanyiserver.opc;
-
-import com.judong.chuanyiserver.entity.DataSource;
-import com.judong.chuanyiserver.util.Blank;
-import com.judong.chuanyiserver.util.OpcDaUtil;
-import org.openscada.opc.lib.common.ConnectionInformation;
-import org.openscada.opc.lib.da.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-import java.util.concurrent.Executors;
-
-public class OpcDaObservable extends Observable {
-    private Server mServer = null;
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(OpcDaObservable.class);
-
-    /**
-     * 判断opc连接现在是否可用
-     *
-     * @param dataSource
-     * @return
-     */
-    public synchronized boolean connectionServer(DataSource dataSource) {
-        boolean mState = false;
-        try {
-            final ConnectionInformation ci = new ConnectionInformation();
-            ci.setHost(dataSource.getIpAddress());
-            ci.setDomain("");
-            ci.setUser(dataSource.getIpUserName());
-            ci.setPassword(dataSource.getIpPassword());
-            ci.setClsid(dataSource.getClsId());
-            mServer = new Server(ci, Executors.newSingleThreadScheduledExecutor());
-            mServer.connect();
-
-            mServer.addStateListener(new ServerConnectionStateListener() {
-                @Override
-                public void connectionStateChanged(boolean connected) {
-                    LOGGER.info("connectionStateChanged state = {}", connected);
-                    try {
-                        if (!connected) {
-                            mServer.connect();
-                        }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-            });
-            mState = true;
-        } catch (Exception e) {
-            LOGGER.error(e.getMessage());
-        } finally {
-            if (!mState) {
-                mServer = null;
-            }
-        }
-        return mState;
-    }
-
-    public void readItemListValue(List<String> itemIdList, int period) {
-        try {
-//            Async20Access access = new Async20Access(mServer, period, false);
-            SyncAccess access = new SyncAccess(mServer, period);
-            for (String itemId : itemIdList) {
-                access.addItem(itemId, new DataCallback() {
-                    private Map<String, Object> map;
-
-                    @Override
-                    public void changed(Item item, ItemState itemState) {
-                        try {
-                            Map<String, Object> newMap = OpcDaUtil.getVal(itemState.getValue());
-                            if (Blank.isEmpty(map)) {
-                                map = newMap;
-                                noticeChange(itemId, newMap);
-                            } else {
-                                if (!map.equals(newMap)) {
-                                    noticeChange(itemId, newMap);
-                                }
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                });
-            }
-            access.bind();
-            access.addStateListener(new AccessStateListener() {
-                @Override
-                public void stateChanged(boolean state) {
-                    System.out.println("access读取的的状态为:--------------" + state);
-//                    System.out.println("-------------------------------"+state);
-//                    if (!state) {
-//                        access.bind();
-//                    }
-//                    access.bind();
-                }
-
-                @Override
-                public void errorOccured(Throwable t) {
-                    System.out.println(t);
-                }
-            });
-            while (true) {
-//                access.unbind();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 数据变化通知观察者
-     */
-    public void noticeChange(String itemId, Object value) {
-        setChanged();
-        Map<String, Object> map = new HashMap<>();
-        map.put("itemId", itemId);
-        map.put("value", value);
-        notifyObservers(map);
-    }
-
-    public OpcDaObservable(Server server) {
-        this.mServer = server;
-    }
-}

+ 244 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/opc/OpcDaTask.java

@@ -0,0 +1,244 @@
+package com.judong.chuanyiserver.opc;
+
+import com.judong.chuanyiserver.dao.ItemGroupDao;
+import com.judong.chuanyiserver.entity.DataModel;
+import com.judong.chuanyiserver.entity.DataSource;
+import com.judong.chuanyiserver.entity.ItemGroup;
+import com.judong.chuanyiserver.entity.RawData;
+import com.judong.chuanyiserver.enums.ResultEnum;
+import com.judong.chuanyiserver.exception.CustomException;
+import com.judong.chuanyiserver.util.*;
+import lombok.val;
+import org.openscada.opc.lib.da.*;
+
+import java.util.*;
+
+public class OpcDaTask extends TimerTask {
+
+    private final RedisUtil redisUtil;
+
+    private final OpcAsyncTask opcAsyncTask;
+
+    private final ItemGroupDao itemGroupDao;
+
+    private final Timer timer;
+
+    private final ItemGroup itemGroup;
+
+    private final DataSource dataSource;
+
+    private final Map<String, DataModel> map;
+
+    private final List<String> itemIdList;
+
+    public OpcDaTask(RedisUtil redisUtil, OpcAsyncTask opcAsyncTask, ItemGroupDao itemGroupDao, Timer timer, ItemGroup itemGroup, DataSource dataSource, Map<String, DataModel> map, List<String> itemIdList) {
+        this.redisUtil = redisUtil;
+        this.opcAsyncTask = opcAsyncTask;
+        this.itemGroupDao = itemGroupDao;
+        this.timer = timer;
+        this.itemGroup = itemGroup;
+        this.dataSource = dataSource;
+        this.map = map;
+        this.itemIdList = itemIdList;
+    }
+
+    @Override
+    public void run() {
+        Server server = OpcDaUtil.createServer(dataSource);
+        try {
+            if (itemGroup.getReadMode() == ConstantStr.ON_FREQUENCY) {
+                server.connect();
+                SyncAccess access = new SyncAccess(server, itemGroup.getModeValue() * 1000);
+                for (String itemId : itemIdList) {
+                    access.addItem(itemId, new DataCallback() {
+                        @Override
+                        public void changed(Item item, ItemState itemState) {
+                            try {
+                                Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
+                                DataModel dm = map.get(itemId);
+                                String valStr = val.get("value").toString();
+                                opcAsyncTask.addRawData(itemGroup.getId(), new RawData(dataSource.getId(), itemId, val.get("javaType").toString(), Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), Double.valueOf(valStr)).toString() : valStr,
+                                        itemState.getTimestamp().getTime()));
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    });
+                }
+                access.bind();
+                while (true) {
+                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                    if (Blank.isEmpty(flage)) {
+                        flage = false;
+                    }
+                    if (!flage) {
+                        access.unbind();
+                        if (Blank.isNotEmpty(server)) {
+                            server.dispose();
+                        }
+                        redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                        itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                        timer.cancel();
+                    }
+                }
+            } else if (itemGroup.getReadMode() == ConstantStr.ON_CHANGE) {
+                server.connect();
+                SyncAccess access = new SyncAccess(server, 500);
+                Date date = new Date();
+                for (String itemId : itemIdList) {
+                    access.addItem(itemId, new DataCallback() {
+                        private Map<String, Object> valueMap;
+
+                        @Override
+                        public void changed(Item item, ItemState itemState) {
+                            try {
+                                Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
+                                if (Blank.isEmpty(valueMap)) {
+                                    valueMap = val;
+                                    DataModel dm = map.get(itemId);
+                                    String valStr = val.get("value").toString();
+                                    opcAsyncTask.addRawData(itemGroup.getId(), new RawData(dataSource.getId(), itemId, val.get("javaType").toString(), Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), Double.valueOf(valStr)).toString() : valStr,
+                                            date));
+                                } else {
+                                    if (!valueMap.equals(val)) {
+                                        valueMap = val;
+                                        DataModel dm = map.get(itemId);
+                                        String valStr = val.get("value").toString();
+                                        opcAsyncTask.addRawData(itemGroup.getId(), new RawData(dataSource.getId(), itemId, val.get("javaType").toString(), Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), Double.valueOf(valStr)).toString() : valStr,
+                                                itemState.getTimestamp().getTime()));
+                                    }
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    });
+                }
+                access.bind();
+                while (true) {
+                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                    if (Blank.isEmpty(flage)) {
+                        flage = false;
+                    }
+                    if (!flage) {
+                        access.unbind();
+                        if (Blank.isNotEmpty(server)) {
+                            server.dispose();
+                        }
+                        redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                        itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                        timer.cancel();
+                    }
+                }
+            } else if (itemGroup.getReadMode() == ConstantStr.EXCEED_SET_VALUE) {
+                server.connect();
+                SyncAccess access = new SyncAccess(server, 500);
+                Date date = new Date();
+                for (String itemId : itemIdList) {
+                    access.addItem(itemId, new DataCallback() {
+
+                        @Override
+                        public void changed(Item item, ItemState itemState) {
+                            try {
+                                Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
+                                DataModel dm = map.get(itemId);
+                                String valStr = val.get("value").toString();
+                                String dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), Double.valueOf(valStr)).toString() : valStr;
+                                if (Blank.isNotEmpty(dmData)) {
+                                    if (Double.valueOf(dmData) >= Double.valueOf(itemGroup.getModeValue())) {
+                                        opcAsyncTask.addRawData(itemGroup.getId(), new RawData(dataSource.getId(), itemId, val.get("javaType").toString(), dmData,
+                                                date));
+                                    }
+                                } else {
+                                    opcAsyncTask.addRawData(itemGroup.getId(), new RawData(dataSource.getId(), itemId, val.get("javaType").toString(), "null",
+                                            date));
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    });
+                }
+                access.bind();
+                while (true) {
+                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                    if (Blank.isEmpty(flage)) {
+                        flage = false;
+                    }
+                    if (!flage) {
+                        access.unbind();
+                        if (Blank.isNotEmpty(server)) {
+                            server.dispose();
+                        }
+                        redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                        itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                        timer.cancel();
+                    }
+                }
+            } else if (itemGroup.getReadMode() == ConstantStr.LOWER_SET_VALUE) {
+                server.connect();
+                SyncAccess access = new SyncAccess(server, 500);
+                Date date = new Date();
+                for (String itemId : itemIdList) {
+                    access.addItem(itemId, new DataCallback() {
+
+                        @Override
+                        public void changed(Item item, ItemState itemState) {
+                            try {
+                                Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
+                                DataModel dm = map.get(itemId);
+                                String valStr = val.get("value").toString();
+                                String dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), Double.valueOf(valStr)).toString() : valStr;
+                                if (Blank.isNotEmpty(dmData)) {
+                                    if (Double.valueOf(dmData) <= Double.valueOf(itemGroup.getModeValue())) {
+                                        opcAsyncTask.addRawData(itemGroup.getId(), new RawData(dataSource.getId(), itemId, val.get("javaType").toString(), dmData,
+                                                date));
+                                    }
+                                } else {
+                                    opcAsyncTask.addRawData(itemGroup.getId(), new RawData(dataSource.getId(), itemId, val.get("javaType").toString(), "null",
+                                            date));
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    });
+                }
+                access.bind();
+                while (true) {
+                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                    if (Blank.isEmpty(flage)) {
+                        flage = false;
+                    }
+                    if (!flage) {
+                        access.unbind();
+                        if (Blank.isNotEmpty(server)) {
+                            server.dispose();
+                        }
+                        redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
+                        itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                        timer.cancel();
+                    }
+                }
+            } else {
+                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配其他类型的读取模式");
+            }
+        } catch (Exception e) {
+            String message = e.getMessage();
+            if (message.contains("0x00000005")) {
+                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + "用户名或密码错误"));
+            } else if (message.contains("0x8001FFFF")) {
+                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + "ip连接不可用"));
+            } else {
+                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + e.getMessage()));
+            }
+            if (Blank.isNotEmpty(server)) {
+                server.dispose();
+            }
+            redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
+            itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+            timer.cancel();
+        }
+
+    }
+}

+ 0 - 117
chuanyi_server/src/main/java/com/judong/chuanyiserver/opc/OpcDaTimerTask.java

@@ -1,117 +0,0 @@
-package com.judong.chuanyiserver.opc;
-
-import com.judong.chuanyiserver.dao.ItemGroupDao;
-import com.judong.chuanyiserver.entity.DataModel;
-import com.judong.chuanyiserver.entity.ItemGroup;
-import com.judong.chuanyiserver.entity.RawData;
-import com.judong.chuanyiserver.enums.ResultEnum;
-import com.judong.chuanyiserver.util.*;
-import org.openscada.opc.lib.da.Group;
-import org.openscada.opc.lib.da.Item;
-import org.openscada.opc.lib.da.ItemState;
-import org.openscada.opc.lib.da.Server;
-
-import java.util.*;
-
-public class OpcDaTimerTask extends TimerTask {
-
-    private final RedisUtil redisUtil;
-
-    private final OpcAsyncTask opcAsyncTask;
-
-    private final ItemGroupDao itemGroupDao;
-
-    private final Timer pTimer;
-    private final Timer timer;
-    private final Server server;
-    private final Group group;
-    private final Item[] itemArr;
-    private final Integer dataSourceId;
-    private final ItemGroup itemGroup;
-    private final Map<String, DataModel> map;
-
-    public OpcDaTimerTask(RedisUtil redisUtil, OpcAsyncTask opcAsyncTask, ItemGroupDao itemGroupDao, Timer pTimer, Timer timer, Server server, Group group, Item[] itemArr, Integer dataSourceId, ItemGroup itemGroup, Map<String, DataModel> map) {
-        this.redisUtil = redisUtil;
-        this.opcAsyncTask = opcAsyncTask;
-        this.itemGroupDao = itemGroupDao;
-        this.pTimer = pTimer;
-        this.timer = timer;
-        this.group = group;
-        this.server = server;
-        this.itemArr = itemArr;
-        this.dataSourceId = dataSourceId;
-        this.itemGroup = itemGroup;
-        this.map = map;
-    }
-
-    @Override
-    public void run() {
-        if (!DateUtil.judgeHms(itemGroup.getEndReadTime())) {
-            if (Blank.isNotEmpty(server)) {
-                server.dispose();
-            }
-            timer.cancel();
-        }
-        Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + itemGroup.getId());
-        if (Blank.isEmpty(flage)) {
-            flage = false;
-        }
-        try {
-            if (flage) {
-                List<RawData> rawDataList = new ArrayList<>();
-                Date date = new Date();
-                Map<org.openscada.opc.lib.da.Item, ItemState> resultMap = group.read(true, itemArr);
-                List<com.judong.chuanyiserver.entity.Item> itemList = itemGroup.getItemList();
-                for (org.openscada.opc.lib.da.Item key : resultMap.keySet()) {
-                    String keyId = key.getId();
-                    for (com.judong.chuanyiserver.entity.Item item : itemList) {
-                        if (item.getItemReadName().equals(keyId)) {
-                            ItemState itemMap = resultMap.get(key);
-                            Map<String, Object> val = OpcDaUtil.getVal(itemMap.getValue());
-                            DataModel dm = map.get(item.getItemName());
-                            String valStr = val.get("value").toString();
-                            rawDataList.add(new RawData(dataSourceId, item.getItemName(), val.get("javaType").toString(),
-                                    Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), Double.valueOf(valStr)).toString() : valStr,
-                                    date));
-                            break;
-                        }
-                    }
-
-//                    ItemState itemMap = resultMap.get(key);
-//                    Map<String, Object> val = OpcDaUtil.getVal(itemMap.getValue());
-//                    DataModel dm = map.get(key.getId());
-//                    String valStr = val.get("value").toString();
-//                    rawDataList.add(new RawData(dataSourceId, key.getId(), val.get("javaType").toString(),
-//                            Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), Double.valueOf(valStr)).toString() : valStr,
-//                            date));
-                }
-                opcAsyncTask.addRawDataList(itemGroup.getId(), rawDataList);
-            } else {
-                if (Blank.isNotEmpty(server)) {
-                    server.dispose();
-                }
-                redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
-                itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
-                pTimer.cancel();
-                timer.cancel();
-            }
-        } catch (Exception e) {
-            String message = e.getMessage();
-            if (message.contains("0x00000005")) {
-                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + "用户名或密码错误"));
-            } else if (message.contains("0x8001FFFF")) {
-                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + "ip连接不可用"));
-            } else {
-                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + e.getMessage()));
-            }
-            if (Blank.isNotEmpty(server)) {
-                server.dispose();
-            }
-            redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
-            itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
-            pTimer.cancel();
-            timer.cancel();
-        }
-    }
-
-}

+ 0 - 86
chuanyi_server/src/main/java/com/judong/chuanyiserver/opc/OpcTimerTask.java

@@ -1,86 +0,0 @@
-package com.judong.chuanyiserver.opc;
-
-import com.judong.chuanyiserver.dao.ItemGroupDao;
-import com.judong.chuanyiserver.entity.DataModel;
-import com.judong.chuanyiserver.entity.DataSource;
-import com.judong.chuanyiserver.entity.ItemGroup;
-import com.judong.chuanyiserver.enums.ResultEnum;
-import com.judong.chuanyiserver.exception.CustomException;
-import com.judong.chuanyiserver.util.*;
-import org.openscada.opc.dcom.da.OPCSERVERSTATE;
-import org.openscada.opc.lib.da.Group;
-import org.openscada.opc.lib.da.Item;
-import org.openscada.opc.lib.da.Server;
-
-import java.util.*;
-
-public class OpcTimerTask extends TimerTask {
-
-    private final RedisUtil redisUtil;
-
-    private final OpcAsyncTask opcAsyncTask;
-
-    private final ItemGroupDao itemGroupDao;
-
-    private final Timer timer;
-
-    private final ItemGroup itemGroup;
-
-    private final DataSource dataSource;
-
-    private final Map<String, DataModel> map;
-    private final String[] items;
-
-    public OpcTimerTask(RedisUtil redisUtil, OpcAsyncTask opcAsyncTask, ItemGroupDao itemGroupDao, Timer timer, ItemGroup itemGroup, DataSource dataSource, Map<String, DataModel> map, String[] items) {
-        this.redisUtil = redisUtil;
-        this.opcAsyncTask = opcAsyncTask;
-        this.itemGroupDao = itemGroupDao;
-        this.timer = timer;
-        this.itemGroup = itemGroup;
-        this.dataSource = dataSource;
-        this.map = map;
-        this.items = items;
-    }
-
-    @Override
-    public void run() {
-        Server server = OpcDaUtil.createServer(dataSource);
-        try {
-            server.connect();
-            if (null == server.getServerState()) {
-                throw new CustomException(ResultEnum.NOT_FOUND.getRespCode(), "连接失败");
-            }
-            if (OPCSERVERSTATE.OPC_STATUS_RUNNING == server.getServerState().getServerState()) {
-                Group group = server.addGroup();
-                Map<String, Item> itemResult = group.addItems(items);
-                Set itemSet = new HashSet(itemResult.values());
-                org.openscada.opc.lib.da.Item[] itemArr = new org.openscada.opc.lib.da.Item[itemSet.size()];
-                itemSet.toArray(itemArr);
-                Timer chTimer = new Timer();
-                chTimer.schedule(new OpcDaTimerTask(redisUtil, opcAsyncTask, itemGroupDao, timer, chTimer, server, group, itemArr, dataSource.getId(), itemGroup, map), DateUtil.strChangeDate(DateUtil.getCurrentYmd() + " " + itemGroup.getStartReadTime()), itemGroup.getModeValue());
-            } else {
-                if (Blank.isNotEmpty(server)) {
-                    server.dispose();
-                }
-                redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
-                itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
-                timer.cancel();
-            }
-        } catch (Exception e) {
-            String message = e.getMessage();
-            if (message.contains("0x00000005")) {
-                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + "用户名或密码错误"));
-            } else if (message.contains("0x8001FFFF")) {
-                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + "ip连接不可用"));
-            } else {
-                redisUtil.convertAndSend(ConstantStr.ITEM_GROUP, Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "组" + itemGroup.getGroupName() + "运行异常,错误信息为:" + e.getMessage()));
-            }
-            if (Blank.isNotEmpty(server)) {
-                server.dispose();
-            }
-            redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
-            itemGroupDao.runItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
-            timer.cancel();
-        }
-    }
-}

+ 4 - 16
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/ItemGroupServiceImpl.java

@@ -1,16 +1,15 @@
 package com.judong.chuanyiserver.service.impl;
 
-import com.judong.chuanyiserver.opc.OpcAsyncTask;
-import com.judong.chuanyiserver.opc.OpcTimerTask;
 import com.judong.chuanyiserver.dao.DataModelDao;
 import com.judong.chuanyiserver.dao.DataSourceDao;
 import com.judong.chuanyiserver.dao.ItemGroupDao;
 import com.judong.chuanyiserver.entity.*;
-import com.judong.chuanyiserver.entity.Item;
 import com.judong.chuanyiserver.enums.DataSourceTypeEnum;
 import com.judong.chuanyiserver.enums.OpcDaDriverEnum;
 import com.judong.chuanyiserver.enums.ResultEnum;
 import com.judong.chuanyiserver.exception.CustomException;
+import com.judong.chuanyiserver.opc.OpcAsyncTask;
+import com.judong.chuanyiserver.opc.OpcDaTask;
 import com.judong.chuanyiserver.service.ItemGroupService;
 import com.judong.chuanyiserver.util.*;
 import org.springframework.stereotype.Service;
@@ -259,19 +258,8 @@ public class ItemGroupServiceImpl implements ItemGroupService {
                             itemList.set(i, itemName.substring(0, j) + s.substring(s.indexOf(".")));
                         }
                     }
-                    String[] items = itemList.toArray(new String[]{});
-                if (itemGroup.getReadMode() == ConstantStr.ON_FREQUENCY) {
-
-                        timer.schedule(new OpcTimerTask(redisUtil, opcAsyncTask, itemGroupDao, timer, itemGroup, dataSource, map, items),
-                                DateUtil.strChangeDate(DateUtil.getCurrentYmd() + " " + itemGroup.getStartReadTime()), ConstantStr.PERIOD_DAY);
-                } else if (itemGroup.getReadMode() == ConstantStr.ON_CHANGE) {
-
-                } else if (itemGroup.getReadMode() == ConstantStr.EXCEED_SET_VALUE) {
-
-                } else {
-                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配其他类型的读取模式");
-                }
-
+                    timer.schedule(new OpcDaTask(redisUtil, opcAsyncTask, itemGroupDao, timer, itemGroup, dataSource, map, itemList),
+                            DateUtil.strChangeDate(DateUtil.getCurrentYmd() + " " + itemGroup.getStartReadTime()), ConstantStr.PERIOD_DAY);
                 } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.WINCC.getValue())) {
 
                 } else {

+ 1 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/ConstantStr.java

@@ -66,6 +66,7 @@ public class ConstantStr {
     public static final Integer ON_FREQUENCY = 0;
     public static final Integer ON_CHANGE = 1;
     public static final Integer EXCEED_SET_VALUE = 2;
+    public static final Integer LOWER_SET_VALUE = 3;
 
     //取值条件
     public static final Integer AVERAGE_VALUE = 0;

+ 34 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/DateUtil.java

@@ -28,6 +28,40 @@ public class DateUtil {
     }
 
     /**
+     * Date时间转换为年月日时分秒毫秒字符串
+     *
+     * @param date
+     * @return
+     */
+    public static String dateChangeStrYmdhmss(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(date);
+    }
+
+    /**
+     * Date时间转换为年月日时分秒字符串
+     *
+     * @param date
+     * @return
+     */
+    public static String dateChangeStrYmdhms(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+    }
+
+    /**
+     * Date时间转换为年月日时分秒毫秒字符串
+     *
+     * @param date
+     * @param pattern 时间字符串格式
+     * @return
+     */
+    public static String dateChangeStr(Date date, String pattern) {
+        if (Blank.isEmpty(pattern)) {
+            return null;
+        }
+        return new SimpleDateFormat(pattern).format(date);
+    }
+
+    /**
      * 获取当前年月日字符串格式为yyyy-MM-dd
      */
     public static String getCurrentYmd() {

+ 0 - 51
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/Test.java

@@ -1,51 +0,0 @@
-package com.judong.chuanyiserver.util;
-
-import com.judong.chuanyiserver.opc.OpcDaObservable;
-import com.judong.chuanyiserver.entity.DataSource;
-import org.openscada.opc.lib.da.Server;
-import org.openscada.opc.lib.da.ServerConnectionStateListener;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Test {
-    public static void main(String[] args) {
-        List<String> stringList = new ArrayList<>();
-        stringList.add("通道 1._Statistics._MaxPendingWrites");
-        stringList.add("通道 1._Statistics._PendingWrites");
-        stringList.add("通道 1._Statistics._TxBytes");
-        DataSource dataSource = new DataSource();
-        dataSource.setClsId("7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729");
-        dataSource.setIpAddress("192.168.0.7");
-        dataSource.setIpUserName("administrator");
-        dataSource.setIpPassword("jd123456");
-        OpcDaObservable opcDaObservable = null;
-        try {
-            final Server mServer = OpcDaUtil.createServer(dataSource);
-            opcDaObservable = new OpcDaObservable(mServer);
-            mServer.connect();
-
-            mServer.addStateListener(new ServerConnectionStateListener() {
-                @Override
-                public void connectionStateChanged(boolean connected) {
-                    System.out.println("server服务的状态目前是--------------" + connected);
-//                    try {
-//                        if (!connected) {
-//                            System.out.println("------------"+connected);
-//                            mServer.connect();
-//                        }
-//                    } catch (Exception e) {
-//                        e.printStackTrace();
-//                    }
-                }
-            });
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        TestUser testUser = new TestUser();
-        testUser.setName("张三");
-        opcDaObservable.addObserver(testUser);
-        opcDaObservable.readItemListValue(stringList, 500);
-    }
-
-}

+ 0 - 12
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/TestObservable.java

@@ -1,12 +0,0 @@
-package com.judong.chuanyiserver.util;
-
-import java.util.Observable;
-import java.util.Observer;
-
-public class TestObservable extends Observable {
-
-    public void setData(String message) {
-        setChanged();
-        notifyObservers(message);
-    }
-}

+ 0 - 17
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/TestUser.java

@@ -1,17 +0,0 @@
-package com.judong.chuanyiserver.util;
-
-import lombok.Data;
-
-import java.util.Observable;
-import java.util.Observer;
-
-@Data
-public class TestUser implements Observer {
-
-    private String name;
-
-    @Override
-    public void update(Observable o, Object arg) {
-        System.out.println(name + "看到变化:" + arg);
-    }
-}

+ 1 - 3
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/TestUtil.java

@@ -78,7 +78,6 @@ public class TestUtil {
 //            Item item = group.addItem("@LOCALMACHINE::.内部变量.AI2");
 //            Item item = group.addItem("AI2");
 //            opcAsyncTask.read(item);
-            List<String> stringList=new ArrayList<>();
             server.addStateListener(new ServerConnectionStateListener() {
                 @Override
                 public void connectionStateChanged(boolean connected) {
@@ -89,11 +88,10 @@ public class TestUtil {
             access.addItem("通道 1.设备 1._System._SecondsInError", new DataCallback() {
                 @Override
                 public void changed(Item item, ItemState itemState) {
-                    stringList.add("1");
+
                 }
             });
             access.bind();
-            System.err.println(stringList);
             JIVariant value = item.read(true).getValue();
 
 //            Map<String, Object> value = KepOpcServerUtil.getVal(item.read(true).getValue());

+ 97 - 96
chuanyi_server/src/main/resources/mapper/RawDataDao.xml

@@ -2,6 +2,13 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.judong.chuanyiserver.dao.RawDataDao">
 
+    <insert id="addRawData">
+        insert into t_raw_data${remainder}
+        (item_group_id, data_source_id, item_name, data_type, data_value, create_time)
+        VALUES (#{itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType}, #{rawData.dataValue},
+                #{rawData.createTime})
+    </insert>
+
     <insert id="addRawDataList">
         insert into
         t_raw_data${remainder}
@@ -62,101 +69,95 @@
     </select>
 
     <select id="getTableDataEvery" resultType="java.util.Map">
-        SELECT
-        IF
-        (
-        a.data_h &gt; 7,
-        date_format( CONCAT( date_format( CURRENT_DATE ()- 1, '%Y-%m-%d' ), ' ', a.data_h, ':00:00' ), '%Y-%m-%d %H:%i' ),
-        date_format( CONCAT( date_format( CURRENT_DATE (), '%Y-%m-%d' ), ' ', a.data_h, ':00:00' ), '%Y-%m-%d %H:%i' )) dh,
-        a.data_v dv
-        FROM
-        (
-        SELECT
-        CONCAT( timetable.HOUR, ':00:00' ) data_h,
-        ifnull( avgtable.data_val, 0 ) data_v
-        FROM
-        (
-        SELECT
-        0 HOUR UNION ALL
-        SELECT
-        1 HOUR UNION ALL
-        SELECT
-        2 HOUR UNION ALL
-        SELECT
-        3 HOUR UNION ALL
-        SELECT
-        4 HOUR UNION ALL
-        SELECT
-        5 HOUR UNION ALL
-        SELECT
-        6 HOUR UNION ALL
-        SELECT
-        7 HOUR UNION ALL
-        SELECT
-        8 HOUR UNION ALL
-        SELECT
-        9 HOUR UNION ALL
-        SELECT
-        10 HOUR UNION ALL
-        SELECT
-        11 HOUR UNION ALL
-        SELECT
-        12 HOUR UNION ALL
-        SELECT
-        13 HOUR UNION ALL
-        SELECT
-        14 HOUR UNION ALL
-        SELECT
-        15 HOUR UNION ALL
-        SELECT
-        16 HOUR UNION ALL
-        SELECT
-        17 HOUR UNION ALL
-        SELECT
-        18 HOUR UNION ALL
-        SELECT
-        19 HOUR UNION ALL
-        SELECT
-        20 HOUR UNION ALL
-        SELECT
-        21 HOUR UNION ALL
-        SELECT
-        22 HOUR UNION ALL
-        SELECT
-        23 HOUR
-        ) timetable
-        LEFT JOIN ((
-        SELECT HOUR
-        ( create_time ) AS data_hour,
-        ${sqlParameter}( data_value ) AS data_val
-        FROM
-        t_raw_data${remainder}
-        WHERE
-        item_group_id = #{itemGroupId}
-        AND data_source_id = #{dataSourceId}
-        AND item_name = #{itemName}
-        AND date_format( create_time, '%Y-%m-%d' )= date_format( now(), '%Y-%m-%d' )
-        AND date_format( create_time, '%Y-%m-%d %H' ) &lt;= concat( date_format( now(), '%Y-%m-%d ' ), '07' )
-        GROUP BY
-        HOUR ( create_time )
-        ) UNION ALL
-        (
-        SELECT HOUR
-        ( create_time ),
-        ${sqlParameter}( data_value )
-        FROM
-        t_raw_data${remainder}
-        WHERE
-        item_group_id = #{itemGroupId}
-        AND data_source_id = #{dataSourceId}
-        AND item_name = #{itemName}
-        AND date_format( create_time, '%Y-%m-%d' )= date_format( CURRENT_DATE ()- 1, '%Y-%m-%d' )
-        AND date_format( create_time, '%Y-%m-%d %H' ) &gt;= concat( date_format( CURRENT_DATE ()- 1, '%Y-%m-%d ' ), '08' )
-        GROUP BY
-        HOUR ( create_time ))
-        ) avgtable ON timetable.HOUR = avgtable.data_hour
-        ) a
-        ORDER BY
-        dh
+        SELECT IF
+                   (
+                       a.data_h &gt; 7,
+                       date_format(CONCAT(date_format(CURRENT_DATE() - 1, '%Y-%m-%d'), ' ', a.data_h, ':00:00'),
+                                   '%Y-%m-%d %H:%i'),
+                       date_format(CONCAT(date_format(CURRENT_DATE(), '%Y-%m-%d'), ' ', a.data_h, ':00:00'),
+                                   '%Y-%m-%d %H:%i')) dh,
+               a.data_v                               dv
+        FROM (
+                 SELECT CONCAT(timetable.HOUR, ':00:00') data_h,
+                        ifnull(avgtable.data_val, 0)     data_v
+                 FROM (
+                          SELECT 0 HOUR
+                          UNION ALL
+                          SELECT 1 HOUR
+                          UNION ALL
+                          SELECT 2 HOUR
+                          UNION ALL
+                          SELECT 3 HOUR
+                          UNION ALL
+                          SELECT 4 HOUR
+                          UNION ALL
+                          SELECT 5 HOUR
+                          UNION ALL
+                          SELECT 6 HOUR
+                          UNION ALL
+                          SELECT 7 HOUR
+                          UNION ALL
+                          SELECT 8 HOUR
+                          UNION ALL
+                          SELECT 9 HOUR
+                          UNION ALL
+                          SELECT 10 HOUR
+                          UNION ALL
+                          SELECT 11 HOUR
+                          UNION ALL
+                          SELECT 12 HOUR
+                          UNION ALL
+                          SELECT 13 HOUR
+                          UNION ALL
+                          SELECT 14 HOUR
+                          UNION ALL
+                          SELECT 15 HOUR
+                          UNION ALL
+                          SELECT 16 HOUR
+                          UNION ALL
+                          SELECT 17 HOUR
+                          UNION ALL
+                          SELECT 18 HOUR
+                          UNION ALL
+                          SELECT 19 HOUR
+                          UNION ALL
+                          SELECT 20 HOUR
+                          UNION ALL
+                          SELECT 21 HOUR
+                          UNION ALL
+                          SELECT 22 HOUR
+                          UNION ALL
+                          SELECT 23 HOUR
+                      ) timetable
+                          LEFT JOIN ((
+                                         SELECT HOUR
+                                                    (create_time) AS data_hour,
+                                                ${sqlParameter}( data_value ) AS data_val
+                                         FROM t_raw_data${remainder}
+                                         WHERE item_group_id = #{itemGroupId}
+                                           AND data_source_id = #{dataSourceId}
+                                           AND item_name = #{itemName}
+                                           AND date_format(create_time, '%Y-%m-%d') = date_format(now(), '%Y-%m-%d')
+                                           AND date_format(create_time, '%Y-%m-%d %H') &lt;=
+                                               concat(date_format(now(), '%Y-%m-%d '), '07')
+                                         GROUP BY HOUR(create_time)
+                                     )
+                                     UNION ALL
+                                     (
+                                         SELECT HOUR
+                                                    (create_time),
+                                                ${sqlParameter}( data_value )
+                                         FROM t_raw_data${remainder}
+                                         WHERE item_group_id = #{itemGroupId}
+                                           AND data_source_id = #{dataSourceId}
+                                           AND item_name = #{itemName}
+                                           AND date_format(create_time, '%Y-%m-%d') =
+                                               date_format(CURRENT_DATE() - 1, '%Y-%m-%d')
+                                           AND date_format(create_time, '%Y-%m-%d %H') &gt;=
+                                               concat(date_format(CURRENT_DATE() - 1, '%Y-%m-%d '), '08')
+                                         GROUP BY HOUR(create_time))
+                 ) avgtable ON timetable.HOUR = avgtable.data_hour
+             ) a
+        ORDER BY dh
     </select>
 </mapper>