|
@@ -1,19 +1,25 @@
|
|
|
package com.judong.chuanyiserver.service.impl;
|
|
|
|
|
|
import com.judong.chuanyiserver.config.OpcAsyncTask;
|
|
|
+import com.judong.chuanyiserver.dao.DataSourceDao;
|
|
|
import com.judong.chuanyiserver.dao.ItemGroupDao;
|
|
|
-import com.judong.chuanyiserver.entity.Item;
|
|
|
-import com.judong.chuanyiserver.entity.ItemGroup;
|
|
|
+import com.judong.chuanyiserver.entity.*;
|
|
|
+import com.judong.chuanyiserver.enums.DataSourceTypeEnum;
|
|
|
import com.judong.chuanyiserver.enums.ResultEnum;
|
|
|
+import com.judong.chuanyiserver.exception.CustomException;
|
|
|
import com.judong.chuanyiserver.service.ItemGroupService;
|
|
|
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.ItemState;
|
|
|
+import org.openscada.opc.lib.da.Server;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Calendar;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+import static com.judong.chuanyiserver.util.KepOpcServerUtil.getVal;
|
|
|
|
|
|
@Service
|
|
|
@Transactional
|
|
@@ -31,6 +37,9 @@ public class ItemGroupServiceImpl implements ItemGroupService {
|
|
|
@Resource
|
|
|
private RedisUtil redisUtil;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private DataSourceDao dataSourceDao;
|
|
|
+
|
|
|
@Override
|
|
|
public synchronized Result addItemGroup(ItemGroup itemGroup) {
|
|
|
String userId = userUtil.getCurrentUserId();
|
|
@@ -132,13 +141,42 @@ public class ItemGroupServiceImpl implements ItemGroupService {
|
|
|
@Override
|
|
|
public Result runItemGroupById(Integer id, Integer runState) {
|
|
|
ItemGroup itemGroup = itemGroupDao.getItemGroupById(id);
|
|
|
+ DataSource dataSource = dataSourceDao.getDataSourceById(itemGroup.getDataSourceId());
|
|
|
+ DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
|
|
|
+ dataSource = OpcUtil.convertPassword(dataSource);
|
|
|
if (runState == ConstantStr.START_UP) {
|
|
|
if (itemGroup.getRunState() == ConstantStr.START_UP) {
|
|
|
return Result.ok("此item组已处于运行中");
|
|
|
}
|
|
|
redisUtil.set(ConstantStr.ITEM_GROUP + id, true);
|
|
|
- //异步启动
|
|
|
- opcAsyncTask.runItemGroup(id);
|
|
|
+ if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
|
|
|
+ dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpPort(), dataSource.getIsAnonymous())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,端口号,匿名方式都不能为空");
|
|
|
+ }
|
|
|
+ if (dataSource.getIsAnonymous() == ConstantStr.NOT_ANONYMOUS) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpUserName(), dataSource.getIpPassword())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "选择不匿名方式,需要填写用户名和密码");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //读取数据并保存
|
|
|
+ } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
|
|
|
+ dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
|
|
|
+ dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())
|
|
|
+ ) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,用户名,密码都不能为空");
|
|
|
+ }
|
|
|
+ //读取数据并保存
|
|
|
+ } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.KEP_SERVER_REAL.getValue())) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,用户名,密码都不能为空");
|
|
|
+ }
|
|
|
+ //异步读取数据并保存
|
|
|
+ opcAsyncTask.runKepServer(itemGroup, dataSource);
|
|
|
+ } else {
|
|
|
+ throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "目前还没有此种类型的连接方式");
|
|
|
+ }
|
|
|
itemGroupDao.runItemGroupById(id, runState);
|
|
|
return Result.ok("启动成功");
|
|
|
}
|
|
@@ -152,6 +190,41 @@ public class ItemGroupServiceImpl implements ItemGroupService {
|
|
|
|
|
|
@Override
|
|
|
public Result getItemValueById(Integer id) {
|
|
|
- return null;
|
|
|
+ ItemGroup itemGroup = itemGroupDao.getItemGroupById(id);
|
|
|
+ DataSource dataSource = dataSourceDao.getDataSourceById(itemGroup.getDataSourceId());
|
|
|
+ DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
|
|
|
+ dataSource = OpcUtil.convertPassword(dataSource);
|
|
|
+ if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
|
|
|
+ dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpPort(), dataSource.getIsAnonymous())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,端口号,匿名方式都不能为空");
|
|
|
+ }
|
|
|
+ if (dataSource.getIsAnonymous() == ConstantStr.NOT_ANONYMOUS) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpUserName(), dataSource.getIpPassword())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "选择不匿名方式,需要填写用户名和密码");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //读取数据并返回
|
|
|
+ return null;
|
|
|
+ } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
|
|
|
+ dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
|
|
|
+ dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())
|
|
|
+ ) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,用户名,密码都不能为空");
|
|
|
+ }
|
|
|
+ //读取数据并返回
|
|
|
+ return null;
|
|
|
+ } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.KEP_SERVER_REAL.getValue())) {
|
|
|
+ if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
|
|
|
+ throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,用户名,密码都不能为空");
|
|
|
+ }
|
|
|
+ //读取数据并返回
|
|
|
+ List<String> itemList = itemGroupDao.getItemByIdChange(itemGroup.getId());
|
|
|
+ String[] items = itemList.toArray(new String[]{});
|
|
|
+ return Result.ok(KepOpcServerUtil.opcReadItemListValue(dataSource, items));
|
|
|
+ } else {
|
|
|
+ return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "目前还没有此种类型的连接方式");
|
|
|
+ }
|
|
|
}
|
|
|
}
|