diff --git a/src/main/java/com/xydl/cac/adapter/BusiAdapter.java b/src/main/java/com/xydl/cac/adapter/BusiAdapter.java index e3b32d5..97beb83 100644 --- a/src/main/java/com/xydl/cac/adapter/BusiAdapter.java +++ b/src/main/java/com/xydl/cac/adapter/BusiAdapter.java @@ -21,7 +21,7 @@ import java.util.Map; @Slf4j public class BusiAdapter { - @Value("${cac.i2.enable}") + @Value("${cac.i2.enable:false}") public boolean enable; @Value("${cac.i2.url}") public String url; diff --git a/src/main/java/com/xydl/cac/controller/IcdConfigController.java b/src/main/java/com/xydl/cac/controller/IcdConfigController.java index a9827e5..4cd1d59 100644 --- a/src/main/java/com/xydl/cac/controller/IcdConfigController.java +++ b/src/main/java/com/xydl/cac/controller/IcdConfigController.java @@ -34,12 +34,12 @@ public class IcdConfigController extends BasicController { DataService dataService; @PostMapping("upload") - @ApiOperation("处理icd文件") + @ApiOperation("上传客户端icd文件") public Response upload(@RequestParam("file") MultipartFile file) throws Exception { if (file != null && file.getInputStream() != null) { String filename = file.getOriginalFilename(); String content = IOUtils.toString(file.getInputStream(), Charset.forName("UTF-8")); - configService.upload(content, filename); + configService.upload(content, filename, 0); return Response.success("OK"); } else { return Response.fail("缺少上传文件"); @@ -47,9 +47,9 @@ public class IcdConfigController extends BasicController { } @GetMapping("listFile") - @ApiOperation("查询icd文件列表") + @ApiOperation("查询客户端icd文件列表") public Response> listFile() throws Exception { - List result = configService.listFile(); + List result = configService.listFile(0); for (IcdFile file : result) { file.setXml(null); } @@ -57,7 +57,7 @@ public class IcdConfigController extends BasicController { } @GetMapping("listIed") - @ApiOperation("查询icd文件的IED列表") + @ApiOperation("查询客户端icd文件的IED列表") public Response> listIed() throws Exception { List result = configService.listIed(); return Response.success(result); diff --git a/src/main/java/com/xydl/cac/controller/IecServerController.java b/src/main/java/com/xydl/cac/controller/IecServerController.java index 20f9eef..ed34bf0 100644 --- a/src/main/java/com/xydl/cac/controller/IecServerController.java +++ b/src/main/java/com/xydl/cac/controller/IecServerController.java @@ -1,21 +1,24 @@ package com.xydl.cac.controller; +import com.xydl.cac.entity.IcdFile; import com.xydl.cac.exception.BusinessException; import com.xydl.cac.iec.IecServerService; import com.xydl.cac.iec.RealTimeDataService; import com.xydl.cac.model.Response; +import com.xydl.cac.service.IcdFileConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.constraints.NotNull; +import java.nio.charset.Charset; import java.util.HashMap; +import java.util.List; @RestController @Api(tags = {"Iec服务端接口"}) @@ -23,11 +26,36 @@ import java.util.HashMap; @Slf4j public class IecServerController extends BasicController { + @Resource + IcdFileConfigService configService; @Resource IecServerService iecServerService; @Resource RealTimeDataService realTimeDataService; + @PostMapping("upload") + @ApiOperation("上传服务端icd文件") + public Response upload(@RequestParam("file") MultipartFile file) throws Exception { + if (file != null && file.getInputStream() != null) { + String filename = file.getOriginalFilename(); + String content = IOUtils.toString(file.getInputStream(), Charset.forName("UTF-8")); + configService.upload(content, filename, 1); + return Response.success("OK"); + } else { + return Response.fail("缺少上传文件"); + } + } + + @GetMapping("listFile") + @ApiOperation("查询服务端icd文件列表") + public Response> listFile() throws Exception { + List result = configService.listFile(1); + for (IcdFile file : result) { + file.setXml(null); + } + return Response.success(result); + } + @PostMapping("start") @ApiOperation("启动IEC服务端") public Response start(@Validated @NotNull(message = "fileId不能为空!") Integer fileId) throws Exception { diff --git a/src/main/java/com/xydl/cac/entity/IcdFile.java b/src/main/java/com/xydl/cac/entity/IcdFile.java index a0507c1..51837c9 100644 --- a/src/main/java/com/xydl/cac/entity/IcdFile.java +++ b/src/main/java/com/xydl/cac/entity/IcdFile.java @@ -38,6 +38,14 @@ public class IcdFile { @Column(name = "xml") private String xml; + @ApiModelProperty(name = "是否服务端") + @Column(name = "srv") + private Integer srv; + + @ApiModelProperty(name = "是否启动") + @Column(name = "start") + private Integer start; + @Transient private List configList; @Transient diff --git a/src/main/java/com/xydl/cac/entity/IcdIed.java b/src/main/java/com/xydl/cac/entity/IcdIed.java index 395ae1f..f123a51 100644 --- a/src/main/java/com/xydl/cac/entity/IcdIed.java +++ b/src/main/java/com/xydl/cac/entity/IcdIed.java @@ -41,4 +41,8 @@ public class IcdIed { @Column(name = "name") private String name; + @ApiModelProperty(name = "是否启动") + @Column(name = "start") + private Integer start; + } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/iec/IecServerService.java b/src/main/java/com/xydl/cac/iec/IecServerService.java index 86200e4..944efd3 100644 --- a/src/main/java/com/xydl/cac/iec/IecServerService.java +++ b/src/main/java/com/xydl/cac/iec/IecServerService.java @@ -1,6 +1,7 @@ package com.xydl.cac.iec; import com.xydl.cac.entity.IcdFile; +import com.xydl.cac.exception.BusinessException; import com.xydl.cac.repository.IcdFileRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -19,18 +20,22 @@ public class IecServerService { IecServer iecServer = new IecServer(); - public void startServer(Integer fileId) { + public void startServer(Integer fileId) throws BusinessException { Optional optional = fileRepository.findById(fileId); - if (optional.isPresent()) { - IcdFile icdFile = optional.get(); - try { - iecServer.start(icdFile.getXml(), 102); - iecServer.filename = icdFile.getFilename(); - iecServer.fileId = icdFile.getId(); - RealTimeDataService.iecServer = iecServer; - } catch (Exception e) { - log.error("启动IEC61850服务端异常.", e); - } + if (!optional.isPresent()) { + throw new BusinessException("未找到该文件"); + } + IcdFile icdFile = optional.get(); + if (icdFile.getSrv() != 1) { + throw new BusinessException("该文件不是服务端文件"); + } + try { + iecServer.start(icdFile.getXml(), 102); + iecServer.filename = icdFile.getFilename(); + iecServer.fileId = icdFile.getId(); + RealTimeDataService.iecServer = iecServer; + } catch (Exception e) { + log.error("启动IEC61850服务端异常.", e); } } diff --git a/src/main/java/com/xydl/cac/repository/IcdFileRepository.java b/src/main/java/com/xydl/cac/repository/IcdFileRepository.java index c104d5e..2412792 100644 --- a/src/main/java/com/xydl/cac/repository/IcdFileRepository.java +++ b/src/main/java/com/xydl/cac/repository/IcdFileRepository.java @@ -11,5 +11,9 @@ import java.util.List; @Repository public interface IcdFileRepository extends JpaRepository, JpaSpecificationExecutor { - List findByMd5(String md5); + List findByMd5AndSrv(String md5, Integer srv); + + List findBySrv(Integer srv); + + List findBySrvAndStart(Integer srv, Integer start); } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java index d37f6e1..9a99cc3 100644 --- a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java +++ b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java @@ -9,9 +9,9 @@ import java.util.List; public interface IcdFileConfigService { - void upload(String xml, String filename) throws Exception; + void upload(String xml, String filename, int srv) throws Exception; - List listFile(); + List listFile(int srv); List listIed(); diff --git a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java index db54839..72a368d 100644 --- a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java @@ -41,9 +41,9 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { DataService dataService; @Override - public void upload(String xml, String filename) throws Exception { + public void upload(String xml, String filename, int srv) throws Exception { String md5 = Md5.getMD5Code(xml); - List files = fileRepository.findByMd5(md5); + List files = fileRepository.findByMd5AndSrv(md5, srv); if (!CollectionUtils.isEmpty(files)) { throw new BusinessException("该文件已存在"); } @@ -51,9 +51,15 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { IcdFile icdFile = IcdXmlUtil.loadIcdType(xml); icdFile.setMd5(md5); icdFile.setFilename(filename); + icdFile.setSrv(srv); + icdFile.setStart(0); fileRepository.save(icdFile); + if (srv == 1) { + return; + } for (IcdIed ied : icdFile.getIedList()) { ied.setIcdFileId(icdFile.getId()); + ied.setStart(0); iedRepository.save(ied); } for (IcdConfigType config : icdFile.getConfigList()) { @@ -85,15 +91,15 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { } @Override - public List listFile() { - List files = fileRepository.findAll(); + public List listFile(int srv) { + List files = fileRepository.findBySrv(srv); return files; } @Override public List listIed() { List result = new ArrayList<>(); - List icdFileList = fileRepository.findAll(); + List icdFileList = fileRepository.findBySrv(0); if (CollectionUtils.isEmpty(icdFileList)) { return result; } diff --git a/src/main/java/com/xydl/cac/task/Client61850Task.java b/src/main/java/com/xydl/cac/task/Client61850Task.java index 4bde094..9e5f71d 100644 --- a/src/main/java/com/xydl/cac/task/Client61850Task.java +++ b/src/main/java/com/xydl/cac/task/Client61850Task.java @@ -4,6 +4,7 @@ import com.xydl.cac.entity.*; import com.xydl.cac.repository.*; import com.xydl.cac.service.ModevTypeService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -17,6 +18,8 @@ import java.util.List; @Slf4j public class Client61850Task { + @Value("${cac.iec.enable:true}") + public boolean enable; @Resource AsyncTask asyncTask; @Resource @@ -32,6 +35,9 @@ public class Client61850Task { @Scheduled(cron = "0 * * * * ?") public void collectAll() { + if (!enable) { + return; + } Calendar cal = Calendar.getInstance(); int h = cal.get(Calendar.HOUR_OF_DAY); int m = cal.get(Calendar.MINUTE); diff --git a/src/main/java/com/xydl/cac/util/DingTalkPushUtil.java b/src/main/java/com/xydl/cac/util/DingTalkPushUtil.java index 17de69f..a466604 100644 --- a/src/main/java/com/xydl/cac/util/DingTalkPushUtil.java +++ b/src/main/java/com/xydl/cac/util/DingTalkPushUtil.java @@ -20,7 +20,7 @@ import java.net.URLEncoder; @Slf4j public class DingTalkPushUtil { - @Value("${cac.dingding.send}") + @Value("${cac.dingding.send:false}") private boolean send; @Value("${cac.dingding.token}") private String token; diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 2f4369f..97478c5 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -31,6 +31,8 @@ spring: cac: datapath: /home/xydl/ncac/data + iec: + enable: true i2: enable: false url: http://192.168.1.190:8080/busi-back-ws/service/XydlService diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index d50d8a8..c2b7fdf 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -31,6 +31,8 @@ spring: cac: datapath: /home/xydl/ncac/data + iec: + enable: true i2: enable: false url: http://192.168.1.190:8080/busi-back-ws/service/XydlService