liuguijing 1 year ago
commit bc73f50100

2
.gitignore vendored

@ -47,3 +47,5 @@ packages/
/test/plugin/workspace /test/plugin/workspace
/test/jacoco/classes /test/jacoco/classes
/test/jacoco/*.exec /test/jacoco/*.exec
src/main/resources/static

@ -142,6 +142,11 @@
<artifactId>querydsl-apt</artifactId> <artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version> <version>${querydsl.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.mitre.dsmiley.httpproxy</groupId>
<artifactId>smiley-http-proxy-servlet</artifactId>
<version>1.12.1</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

@ -1,20 +1,25 @@
CREATE TABLE `icd_file_config` ( CREATE TABLE `icd_config_type` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`ied_name` varchar(45) NOT NULL, `ied_name` varchar(45) NOT NULL COMMENT 'IED名称',
`ldevice_inst` varchar(45) NOT NULL, `ldevice_inst` varchar(45) NOT NULL COMMENT '设备类型',
`ln_class` varchar(45) NOT NULL, `ln_class` varchar(45) NOT NULL COMMENT 'LN类型',
`do_name` varchar(45) NOT NULL, `ln_desc` varchar(200) DEFAULT NULL,
`last_name` varchar(45) DEFAULT NULL, `table_name` varchar(45) DEFAULT NULL COMMENT '表名',
`table_name` varchar(45) DEFAULT NULL,
`col_name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `idxKey` (`ied_name`,`ldevice_inst`,`ln_class`,`do_name`) KEY `idxKey` (`ied_name`,`ldevice_inst`,`ln_class`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ICD配置类型表';
CREATE TABLE `icd_file_config_inst` ( CREATE TABLE `icd_config_type_att` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`config_id` int(11) NOT NULL, `icd_config_type_id` int(11) NOT NULL COMMENT '配置类型表id',
`inst` varchar(45) DEFAULT NULL, `do_name` varchar(45) NOT NULL COMMENT '属性',
`paramindex` varchar(200) DEFAULT NULL, `param` varchar(200) DEFAULT NULL COMMENT '参数',
PRIMARY KEY (`id`), `description` varchar(200) DEFAULT NULL COMMENT '备注',
KEY `idxConfigid` (`config_id`) `col_name` varchar(45) DEFAULT NULL COMMENT '字段名',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ICD配置类型属性表';
CREATE TABLE `icd_config_type_inst` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`icd_config_type_id` int(11) NOT NULL COMMENT '配置类型表id',
`inst` varchar(45) NOT NULL COMMENT '实例',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ICD配置类型实例表';

@ -0,0 +1,36 @@
package com.xydl.cac.config;
import org.mitre.dsmiley.httpproxy.ProxyServlet;
import org.springframework.boot.context.properties.bind.BindResult;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import java.util.Properties;
@Configuration
public class SolrProxyServletConfiguration implements EnvironmentAware {
@Bean
public ServletRegistrationBean servletRegistrationBean() {
Properties properties = (Properties) bindResult.get();
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), properties.getProperty("servlet_url"));
servletRegistrationBean.addInitParameter(ProxyServlet.P_TARGET_URI, properties.getProperty("target_url"));
servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, properties.getProperty("logging_enabled", "false"));
return servletRegistrationBean;
}
private BindResult bindResult;
@Override
public void setEnvironment(Environment environment) {
Iterable sources = ConfigurationPropertySources.get(environment);
Binder binder = new Binder(sources);
BindResult bindResult = binder.bind("proxy.solr", Properties.class);
this.bindResult = bindResult;
}
}

@ -1,6 +1,7 @@
package com.xydl.cac.controller; package com.xydl.cac.controller;
import com.xydl.cac.entity.Bdz; import com.xydl.cac.entity.Bdz;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import com.xydl.cac.service.BdzService; import com.xydl.cac.service.BdzService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -40,7 +41,7 @@ public class BdzController extends BasicController {
@ApiOperation("更新") @ApiOperation("更新")
public Response<String> update(@Validated @RequestBody Bdz item) throws Exception { public Response<String> update(@Validated @RequestBody Bdz item) throws Exception {
if (item.getId() == null) { if (item.getId() == null) {
throw new Exception("ID不能为空!"); throw new BusinessException("ID不能为空!");
} }
service.update(item); service.update(item);
return Response.success("OK"); return Response.success("OK");

@ -77,10 +77,17 @@ public class IcdConfigController extends BasicController {
return Response.success("OK"); return Response.success("OK");
} }
@PostMapping("deleteAtt")
@ApiOperation("删除ICD类型属性配置")
public Response<String> deleteAtt(@Validated @NotNull(message = "attid不能为空!") Integer attid) {
configService.deleteAtt(attid);
return Response.success("OK");
}
@GetMapping("tableList") @GetMapping("tableList")
@ApiOperation("查询data表名") @ApiOperation("查询data表名")
public Response<List<String>> tableList() throws Exception { public Response<List<ColumnModel>> tableList() throws Exception {
List<String> result = dataService.getDataTables(); List<ColumnModel> result = dataService.getDataTables();
return Response.success(result); return Response.success(result);
} }
@ -91,4 +98,11 @@ public class IcdConfigController extends BasicController {
return Response.success(result); return Response.success(result);
} }
@PostMapping("clearAll")
@ApiOperation("清空所有配置")
public Response<String> clearAll() throws Exception {
configService.clearAll();
return Response.success("OK");
}
} }

@ -1,6 +1,7 @@
package com.xydl.cac.controller; package com.xydl.cac.controller;
import com.xydl.cac.entity.Jg; import com.xydl.cac.entity.Jg;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import com.xydl.cac.service.JgService; import com.xydl.cac.service.JgService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -40,7 +41,7 @@ public class JgController extends BasicController {
@ApiOperation("更新") @ApiOperation("更新")
public Response<String> update(@Validated @RequestBody Jg item) throws Exception { public Response<String> update(@Validated @RequestBody Jg item) throws Exception {
if (item.getId() == null) { if (item.getId() == null) {
throw new Exception("ID不能为空!"); throw new BusinessException("ID不能为空!");
} }
service.update(item); service.update(item);
return Response.success("OK"); return Response.success("OK");

@ -1,6 +1,7 @@
package com.xydl.cac.controller; package com.xydl.cac.controller;
import com.xydl.cac.entity.Lx; import com.xydl.cac.entity.Lx;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import com.xydl.cac.service.LxService; import com.xydl.cac.service.LxService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -40,7 +41,7 @@ public class LxController extends BasicController {
@ApiOperation("更新") @ApiOperation("更新")
public Response<String> update(@Validated @RequestBody Lx item) throws Exception { public Response<String> update(@Validated @RequestBody Lx item) throws Exception {
if (item.getId() == null) { if (item.getId() == null) {
throw new Exception("ID不能为空!"); throw new BusinessException("ID不能为空!");
} }
service.update(item); service.update(item);
return Response.success("OK"); return Response.success("OK");

@ -2,6 +2,7 @@ package com.xydl.cac.controller;
import com.xydl.cac.entity.Modev; import com.xydl.cac.entity.Modev;
import com.xydl.cac.entity.ModevType; import com.xydl.cac.entity.ModevType;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import com.xydl.cac.service.ModevService; import com.xydl.cac.service.ModevService;
import com.xydl.cac.service.ModevTypeService; import com.xydl.cac.service.ModevTypeService;
@ -43,7 +44,7 @@ public class ModevController extends BasicController {
@ApiOperation("更新") @ApiOperation("更新")
public Response<String> update(@Validated @RequestBody Modev item) throws Exception { public Response<String> update(@Validated @RequestBody Modev item) throws Exception {
if (item.getId() == null) { if (item.getId() == null) {
throw new Exception("ID不能为空!"); throw new BusinessException("ID不能为空!");
} }
service.update(item); service.update(item);
return Response.success("OK"); return Response.success("OK");

@ -1,6 +1,7 @@
package com.xydl.cac.controller; package com.xydl.cac.controller;
import com.xydl.cac.entity.ModevType; import com.xydl.cac.entity.ModevType;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import com.xydl.cac.service.ModevTypeService; import com.xydl.cac.service.ModevTypeService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -40,7 +41,7 @@ public class ModevTypeController extends BasicController {
@ApiOperation("更新") @ApiOperation("更新")
public Response<String> update(@Validated @RequestBody ModevType item) throws Exception { public Response<String> update(@Validated @RequestBody ModevType item) throws Exception {
if (item.getId() == null) { if (item.getId() == null) {
throw new Exception("ID不能为空!"); throw new BusinessException("ID不能为空!");
} }
service.update(item); service.update(item);
return Response.success("OK"); return Response.success("OK");

@ -3,6 +3,7 @@ package com.xydl.cac.controller;
import com.xydl.cac.entity.Bdz; import com.xydl.cac.entity.Bdz;
import com.xydl.cac.entity.IcdConfigTypeInst; import com.xydl.cac.entity.IcdConfigTypeInst;
import com.xydl.cac.entity.Rptparamindex; import com.xydl.cac.entity.Rptparamindex;
import com.xydl.cac.model.BindDetail;
import com.xydl.cac.model.BindingModel; import com.xydl.cac.model.BindingModel;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import com.xydl.cac.service.ParamBindService; import com.xydl.cac.service.ParamBindService;
@ -42,9 +43,43 @@ public class ParamBindController extends BasicController {
@PostMapping("preview") @PostMapping("preview")
@ApiOperation("预览") @ApiOperation("预览")
public Response<List<Rptparamindex>> preview(@Validated @RequestBody BindingModel item) throws Exception { public Response preview(@Validated @RequestBody BindingModel item) throws Exception {
List<Rptparamindex> result = bindService.preview(item); return bindService.preview(item);
}
@PostMapping("bind")
@ApiOperation("绑定")
public Response<String> bind(@Validated @RequestBody BindingModel item) throws Exception {
bindService.bind(item);
return Response.success("OK");
}
@PostMapping("unbind")
@ApiOperation("解绑")
public Response<String> unbind(@Validated @NotNull(message = "eqmid不能为空!") @Param("eqmid") Integer eqmid) throws Exception {
bindService.unbind(eqmid);
return Response.success("OK");
}
@GetMapping("getBind")
@ApiOperation("查询绑定信息")
public Response<BindDetail> getBind(@Validated @NotNull(message = "eqmid不能为空!") @Param("eqmid") Integer eqmid) throws Exception {
BindDetail result = bindService.getBind(eqmid);
return Response.success(result); return Response.success(result);
} }
@PostMapping("generateParamindex")
@ApiOperation("生成rptparamindex表的相关绑定数据")
public Response<String> generateParamindex() throws Exception {
String msg = bindService.generateParamindex();
return Response.success(msg);
}
@PostMapping("clearAll")
@ApiOperation("清空所有绑定")
public Response<String> clearAll() throws Exception {
bindService.clearAll();
return Response.success("OK");
}
} }

@ -1,6 +1,7 @@
package com.xydl.cac.controller; package com.xydl.cac.controller;
import com.xydl.cac.entity.Zsb; import com.xydl.cac.entity.Zsb;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import com.xydl.cac.service.ZsbService; import com.xydl.cac.service.ZsbService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -40,7 +41,7 @@ public class ZsbController extends BasicController {
@ApiOperation("更新") @ApiOperation("更新")
public Response<String> update(@Validated @RequestBody Zsb item) throws Exception { public Response<String> update(@Validated @RequestBody Zsb item) throws Exception {
if (item.getId() == null) { if (item.getId() == null) {
throw new Exception("ID不能为空!"); throw new BusinessException("ID不能为空!");
} }
service.update(item); service.update(item);
return Response.success("OK"); return Response.success("OK");

@ -8,7 +8,8 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -26,7 +27,8 @@ public class Bdz {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@NotEmpty(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Size(max = 50, message = "名称长度不能超过50个字符")
@ApiModelProperty("名称") @ApiModelProperty("名称")
@Column(name = "mc") @Column(name = "mc")
private String mc; private String mc;

@ -1,6 +1,7 @@
package com.xydl.cac.entity; package com.xydl.cac.entity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -24,15 +25,23 @@ public class IcdConfigType {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@ApiModelProperty(name = "IED名称")
@Column(name = "ied_name") @Column(name = "ied_name")
private String iedName; private String iedName;
@ApiModelProperty(name = "设备类型")
@Column(name = "ldevice_inst") @Column(name = "ldevice_inst")
private String ldeviceInst; private String ldeviceInst;
@ApiModelProperty(name = "LN类型")
@Column(name = "ln_class") @Column(name = "ln_class")
private String lnClass; private String lnClass;
@ApiModelProperty(name = "LN类型备注")
@Column(name = "ln_desc")
private String lnDesc;
@ApiModelProperty(name = "表名")
@Column(name = "table_name") @Column(name = "table_name")
private String tableName; private String tableName;
@ -46,14 +55,15 @@ public class IcdConfigType {
@Transient @Transient
private List<IcdConfigTypeInst> instList; private List<IcdConfigTypeInst> instList;
public void addAtt(String doName, String lastname) { public void addAtt(String doName, String desc, String param) {
if (attMap == null) { if (attMap == null) {
attMap = new LinkedHashMap<>(); attMap = new LinkedHashMap<>();
} }
if (!attMap.containsKey(doName)) { if (!attMap.containsKey(doName)) {
IcdConfigTypeAtt item = IcdConfigTypeAtt.builder() IcdConfigTypeAtt item = IcdConfigTypeAtt.builder()
.doName(doName) .doName(doName)
.lastName(lastname) .description(desc)
.param(param)
.build(); .build();
attMap.put(doName, item); attMap.put(doName, item);
} }

@ -1,6 +1,7 @@
package com.xydl.cac.entity; package com.xydl.cac.entity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -24,15 +25,23 @@ public class IcdConfigTypeAtt {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@ApiModelProperty(name = "配置类型表id")
@Column(name = "icd_config_type_id") @Column(name = "icd_config_type_id")
private Integer icdConfigTypeId; private Integer icdConfigTypeId;
@ApiModelProperty(name = "属性")
@Column(name = "do_name") @Column(name = "do_name")
private String doName; private String doName;
@Column(name = "last_name") @ApiModelProperty(name = "参数")
private String lastName; @Column(name = "param")
private String param;
@ApiModelProperty(name = "备注")
@Column(name = "description")
private String description;
@ApiModelProperty(name = "字段名")
@Column(name = "col_name") @Column(name = "col_name")
private String colName; private String colName;

@ -1,6 +1,7 @@
package com.xydl.cac.entity; package com.xydl.cac.entity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -22,9 +23,11 @@ public class IcdConfigTypeInst {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@ApiModelProperty(name = "配置类型表id")
@Column(name = "icd_config_type_id") @Column(name = "icd_config_type_id")
private Integer icdConfigTypeId; private Integer icdConfigTypeId;
@ApiModelProperty(name = "实例")
@Column(name = "inst") @Column(name = "inst")
private String inst; private String inst;

@ -8,8 +8,9 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -27,7 +28,8 @@ public class Jg {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@NotEmpty(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Size(max = 50, message = "名称长度不能超过50个字符")
@ApiModelProperty("名称") @ApiModelProperty("名称")
@Column(name = "mc") @Column(name = "mc")
private String mc; private String mc;

@ -8,7 +8,8 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data
@ -25,7 +26,8 @@ public class Lx {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@NotEmpty(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Size(max = 50, message = "名称长度不能超过50个字符")
@ApiModelProperty("名称") @ApiModelProperty("名称")
@Column(name = "mc") @Column(name = "mc")
private String mc; private String mc;

@ -8,8 +8,9 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date; import java.util.Date;
@Data @Data
@ -26,7 +27,8 @@ public class Modev {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@NotEmpty(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Size(max = 50, message = "名称长度不能超过50个字符")
@Column(name = "name") @Column(name = "name")
@ApiModelProperty("监测设备名称") @ApiModelProperty("监测设备名称")
private String name; private String name;

@ -7,7 +7,8 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Data @Data
@Builder @Builder
@ -23,11 +24,12 @@ public class ModevType {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@NotEmpty(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Size(max = 50, message = "名称长度不能超过50个字符")
@Column(name = "mc") @Column(name = "mc")
private String mc; private String mc;
@NotEmpty(message = "表名不能为空") @NotBlank(message = "表名不能为空")
@Column(name = "tablename") @Column(name = "tablename")
private String tablename; private String tablename;

@ -8,8 +8,9 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -27,7 +28,8 @@ public class Zsb {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@NotEmpty(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Size(max = 50, message = "名称长度不能超过50个字符")
@ApiModelProperty("名称") @ApiModelProperty("名称")
@Column(name = "mc") @Column(name = "mc")
private String mc; private String mc;

@ -0,0 +1,8 @@
package com.xydl.cac.exception;
public class BusinessException extends Exception {
public BusinessException(String message) {
super(message);
}
}

@ -2,6 +2,8 @@ package com.xydl.cac.exception;
import com.xydl.cac.model.Response; import com.xydl.cac.model.Response;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.core.NestedExceptionUtils;
import org.springframework.http.converter.HttpMessageConversionException;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
@ -21,6 +23,19 @@ public class GlobalExceptionHandler {
return Response.fail(message); return Response.fail(message);
} }
@ExceptionHandler(HttpMessageConversionException.class)
public Response<String> handleHttpMessageConversionException(HttpMessageConversionException ex) {
String message = "类型转换异常:" + ex.getRootCause().getLocalizedMessage();
return Response.fail(message);
}
@ExceptionHandler(BusinessException.class)
public Response<String> handleBusinessException(BusinessException ex) {
String message = ex.getMessage();
log.error(message);
return Response.fail(message);
}
@ExceptionHandler(Exception.class) @ExceptionHandler(Exception.class)
public Response<String> handleException(Exception ex) { public Response<String> handleException(Exception ex) {
log.error("", ex); log.error("", ex);

@ -0,0 +1,53 @@
package com.xydl.cac.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.PathMatcher;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
@Component
@Slf4j
public class UrlFilter extends OncePerRequestFilter {
PathMatcher pathMatcher = new AntPathMatcher();
private List<String> urlWhiteList = Arrays.asList("/swagger-ui/**", "/swagger-resources/**", "/v3/api-docs/**",
"/static/**", "/newcac/**");
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String path = request.getRequestURI();
for (String white : urlWhiteList) {
if (pathMatcher.match(white, path)) {
filterChain.doFilter(request, response);
return;
}
}
String method = request.getMethod();
StringBuilder str = new StringBuilder(method + " " + path + " called");
Enumeration<String> params = request.getParameterNames();
while (params.hasMoreElements()) {
String paramName = params.nextElement();
str.append(", ").append(paramName).append("=").append(request.getParameter(paramName));
}
log.info(str.toString());
if (path.startsWith("/cac-api/")) {
path = path.replace("/cac-api/", "/");
request.getRequestDispatcher(path).forward(request, response);
return;
}
filterChain.doFilter(request, response);
}
}

@ -0,0 +1,21 @@
package com.xydl.cac.model;
import com.xydl.cac.entity.IcdConfigTypeAtt;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class BindDetail {
@ApiModelProperty("eqmid")
Integer eqmid;
@ApiModelProperty("逻辑设备实例的Id")
Integer icdid;
@ApiModelProperty("iedName")
String iedName;
@ApiModelProperty("表字段名")
List<ColumnModel> columnList;
@ApiModelProperty("绑定关系")
List<IcdConfigTypeAtt> attList;
}

@ -12,5 +12,5 @@ public class BindingModel {
Integer eqmid; Integer eqmid;
@NotNull(message = "逻辑设备实例的Id不能为空") @NotNull(message = "逻辑设备实例的Id不能为空")
@ApiModelProperty("逻辑设备实例的Id") @ApiModelProperty("逻辑设备实例的Id")
Integer bindingId; Integer icdid;
} }

@ -10,6 +10,7 @@ import java.io.Serializable;
public class Response<T> implements Serializable { public class Response<T> implements Serializable {
private boolean success; private boolean success;
private String errorMsg; private String errorMsg;
private String warnMsg;
private T data; private T data;
public Response(T data) { public Response(T data) {

@ -10,6 +10,12 @@ import java.util.List;
@Repository @Repository
public interface ModevRepository extends JpaRepository<Modev, Integer>, JpaSpecificationExecutor<Modev> { public interface ModevRepository extends JpaRepository<Modev, Integer>, JpaSpecificationExecutor<Modev> {
List<Modev> findByZsbid(Integer zsbid); List<Modev> findByZsbid(Integer zsbid);
List<Modev> findByZsbidAndName(Integer zsbid, String name); List<Modev> findByZsbidAndName(Integer zsbid, String name);
List<Modev> findByIcdidAndIdIsNot(Integer icdid, Integer id);
List<Modev> findByIcdidIsNotNull();
} }

@ -9,9 +9,11 @@ import java.util.Map;
public interface DataService { public interface DataService {
List<String> getDataTables() throws Exception; List<ColumnModel> getDataTables() throws Exception;
List<ColumnModel> getDataTableColumns(String tableName) throws Exception; List<ColumnModel> getDataTableColumns(String tableName) throws Exception;
OnePage<Map<String, Object>> getDate(NiecSensor sensor, List<NiecPoint> points, ConditionModel model); OnePage<Map<String, Object>> getDate(NiecSensor sensor, List<NiecPoint> points, ConditionModel model);
void clearAllBind();
} }

@ -18,4 +18,8 @@ public interface IcdFileConfigService {
void updateAtt(IcdConfigTypeAtt item) throws Exception; void updateAtt(IcdConfigTypeAtt item) throws Exception;
void delete(Integer id); void delete(Integer id);
void deleteAtt(Integer attid);
void clearAll();
} }

@ -2,8 +2,9 @@ package com.xydl.cac.service;
import com.xydl.cac.entity.Bdz; import com.xydl.cac.entity.Bdz;
import com.xydl.cac.entity.IcdConfigTypeInst; import com.xydl.cac.entity.IcdConfigTypeInst;
import com.xydl.cac.entity.Rptparamindex; import com.xydl.cac.model.BindDetail;
import com.xydl.cac.model.BindingModel; import com.xydl.cac.model.BindingModel;
import com.xydl.cac.model.Response;
import java.util.List; import java.util.List;
@ -13,5 +14,15 @@ public interface ParamBindService {
List<IcdConfigTypeInst> instList(String iedName); List<IcdConfigTypeInst> instList(String iedName);
List<Rptparamindex> preview(BindingModel item) throws Exception; Response preview(BindingModel item) throws Exception;
void bind(BindingModel item) throws Exception;
void unbind(Integer eqmid) throws Exception;
BindDetail getBind(Integer eqmid) throws Exception;
String generateParamindex() throws Exception;
void clearAll();
} }

@ -2,6 +2,7 @@ package com.xydl.cac.service.impl;
import com.xydl.cac.entity.Bdz; import com.xydl.cac.entity.Bdz;
import com.xydl.cac.entity.Jg; import com.xydl.cac.entity.Jg;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.repository.BdzRepository; import com.xydl.cac.repository.BdzRepository;
import com.xydl.cac.repository.JgRepository; import com.xydl.cac.repository.JgRepository;
import com.xydl.cac.service.BdzService; import com.xydl.cac.service.BdzService;
@ -33,7 +34,7 @@ public class BdzServiceImpl implements BdzService {
item.setId(null); item.setId(null);
List<Bdz> list = repository.findByMc(item.getMc()); List<Bdz> list = repository.findByMc(item.getMc());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
return repository.save(item); return repository.save(item);
} }
@ -42,7 +43,7 @@ public class BdzServiceImpl implements BdzService {
public void update(Bdz item) throws Exception { public void update(Bdz item) throws Exception {
List<Bdz> list = repository.findByMcAndIdIsNot(item.getMc(), item.getId()); List<Bdz> list = repository.findByMcAndIdIsNot(item.getMc(), item.getId());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
repository.save(item); repository.save(item);
} }
@ -51,7 +52,7 @@ public class BdzServiceImpl implements BdzService {
public void delete(Integer id) throws Exception { public void delete(Integer id) throws Exception {
List<Jg> jgList = jgRepository.findByBdzid(id); List<Jg> jgList = jgRepository.findByBdzid(id);
if (!CollectionUtils.isEmpty(jgList)) { if (!CollectionUtils.isEmpty(jgList)) {
throw new Exception("已被区域使用不能删除"); throw new BusinessException("已被区域使用不能删除");
} }
repository.deleteById(id); repository.deleteById(id);
} }

@ -1,10 +1,12 @@
package com.xydl.cac.service.impl; package com.xydl.cac.service.impl;
import com.xydl.cac.entity.ModevType;
import com.xydl.cac.entity.NiecPoint; import com.xydl.cac.entity.NiecPoint;
import com.xydl.cac.entity.NiecSensor; import com.xydl.cac.entity.NiecSensor;
import com.xydl.cac.model.ColumnModel; import com.xydl.cac.model.ColumnModel;
import com.xydl.cac.model.ConditionModel; import com.xydl.cac.model.ConditionModel;
import com.xydl.cac.model.OnePage; import com.xydl.cac.model.OnePage;
import com.xydl.cac.repository.ModevTypeRepository;
import com.xydl.cac.service.DataService; import com.xydl.cac.service.DataService;
import com.xydl.cac.util.DateUtil; import com.xydl.cac.util.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -28,15 +30,26 @@ public class DataServiceImpl implements DataService {
@Resource @Resource
private JdbcTemplate jdbcTemplate; private JdbcTemplate jdbcTemplate;
@Resource
ModevTypeRepository modevTypeRepository;
@Override @Override
public List<String> getDataTables() throws Exception { public List<ColumnModel> getDataTables() throws Exception {
List<String> tables = new ArrayList<>(); List<ModevType> typeList = modevTypeRepository.findAll();
List<ColumnModel> tables = new ArrayList<>();
String sql = "SHOW TABLES"; String sql = "SHOW TABLES";
List<String> list = jdbcTemplate.queryForList(sql, String.class); List<String> list = jdbcTemplate.queryForList(sql, String.class);
for (String table : list) { for (String name : list) {
if (table.startsWith("data_")) { if (name.startsWith("data_")) {
tables.add(table); ColumnModel item = new ColumnModel();
item.setName(name);
for (ModevType type : typeList) {
if (name.equals(type.getTablename())) {
item.setComment(type.getMc());
break;
}
}
tables.add(item);
} }
} }
return tables; return tables;
@ -50,7 +63,7 @@ public class DataServiceImpl implements DataService {
List<ColumnModel> result = new ArrayList<>(); List<ColumnModel> result = new ArrayList<>();
String sql = "SELECT COLUMN_NAME name, COLUMN_COMMENT comment FROM information_schema.columns WHERE TABLE_NAME='" String sql = "SELECT COLUMN_NAME name, COLUMN_COMMENT comment FROM information_schema.columns WHERE TABLE_NAME='"
+ tableName + "' AND TABLE_SCHEMA='" + schema + "'"; + tableName + "' AND TABLE_SCHEMA='" + schema + "' ORDER BY name,comment";
List<ColumnModel> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ColumnModel.class)); List<ColumnModel> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ColumnModel.class));
for (ColumnModel item : list) { for (ColumnModel item : list) {
String col = item.getName(); String col = item.getName();
@ -108,4 +121,10 @@ public class DataServiceImpl implements DataService {
result.setContent(content); result.setContent(content);
return result; return result;
} }
@Override
public void clearAllBind() {
String sql = "UPDATE modev SET icdid=null";
jdbcTemplate.execute(sql);
}
} }

@ -1,6 +1,7 @@
package com.xydl.cac.service.impl; package com.xydl.cac.service.impl;
import com.xydl.cac.entity.*; import com.xydl.cac.entity.*;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.repository.*; import com.xydl.cac.repository.*;
import com.xydl.cac.service.IcdFileConfigService; import com.xydl.cac.service.IcdFileConfigService;
import com.xydl.cac.util.IcdXmlUtil; import com.xydl.cac.util.IcdXmlUtil;
@ -40,7 +41,11 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
config.getIedName(), config.getLdeviceInst(), config.getLnClass()); config.getIedName(), config.getLdeviceInst(), config.getLnClass());
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
repository.save(config); repository.save(config);
} else {
config.setId(list.get(0).getId());
}
attRepository.deleteByIcdConfigTypeId(config.getId());
if (config.getAttMap() != null) { if (config.getAttMap() != null) {
Collection<IcdConfigTypeAtt> attList = config.getAttMap().values(); Collection<IcdConfigTypeAtt> attList = config.getAttMap().values();
for (IcdConfigTypeAtt item : attList) { for (IcdConfigTypeAtt item : attList) {
@ -49,6 +54,7 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
attRepository.saveAll(attList); attRepository.saveAll(attList);
} }
instRepository.deleteByIcdConfigTypeId(config.getId());
if (config.getInstMap() != null) { if (config.getInstMap() != null) {
Collection<IcdConfigTypeInst> instList = config.getInstMap().values(); Collection<IcdConfigTypeInst> instList = config.getInstMap().values();
for (IcdConfigTypeInst item : instList) { for (IcdConfigTypeInst item : instList) {
@ -58,7 +64,6 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
} }
} }
} }
}
@Override @Override
public List<String> iedList() { public List<String> iedList() {
@ -93,9 +98,16 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
public void update(IcdConfigType item) throws Exception { public void update(IcdConfigType item) throws Exception {
Optional<IcdConfigType> optional = repository.findById(item.getId()); Optional<IcdConfigType> optional = repository.findById(item.getId());
if (!optional.isPresent()) { if (!optional.isPresent()) {
throw new Exception("未找到该项"); throw new BusinessException("未找到该项");
} }
IcdConfigType r = optional.get(); IcdConfigType r = optional.get();
if (r.getTableName() != null && !r.getTableName().equals(item.getTableName())) {
List<IcdConfigTypeAtt> attList = attRepository.findByIcdConfigTypeId(r.getId());
for (IcdConfigTypeAtt att : attList) {
att.setColName(null);
}
attRepository.saveAll(attList);
}
r.setTableName(item.getTableName()); r.setTableName(item.getTableName());
repository.save(r); repository.save(r);
} }
@ -104,7 +116,7 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
public void updateAtt(IcdConfigTypeAtt item) throws Exception { public void updateAtt(IcdConfigTypeAtt item) throws Exception {
Optional<IcdConfigTypeAtt> optional = attRepository.findById(item.getId()); Optional<IcdConfigTypeAtt> optional = attRepository.findById(item.getId());
if (!optional.isPresent()) { if (!optional.isPresent()) {
throw new Exception("未找到该项"); throw new BusinessException("未找到该项");
} }
IcdConfigTypeAtt r = optional.get(); IcdConfigTypeAtt r = optional.get();
r.setColName(item.getColName()); r.setColName(item.getColName());
@ -118,4 +130,16 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
repository.deleteById(id); repository.deleteById(id);
} }
@Override
public void deleteAtt(Integer attid) {
attRepository.deleteById(attid);
}
@Override
public void clearAll() {
instRepository.deleteAll();
attRepository.deleteAll();
repository.deleteAll();
}
} }

@ -3,6 +3,7 @@ package com.xydl.cac.service.impl;
import com.xydl.cac.entity.Bdz; import com.xydl.cac.entity.Bdz;
import com.xydl.cac.entity.Jg; import com.xydl.cac.entity.Jg;
import com.xydl.cac.entity.Zsb; import com.xydl.cac.entity.Zsb;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.repository.BdzRepository; import com.xydl.cac.repository.BdzRepository;
import com.xydl.cac.repository.JgRepository; import com.xydl.cac.repository.JgRepository;
import com.xydl.cac.repository.ZsbRepository; import com.xydl.cac.repository.ZsbRepository;
@ -65,11 +66,11 @@ public class JgServiceImpl implements JgService {
item.setId(null); item.setId(null);
Optional<Bdz> optionalBdz = bdzRepository.findById(item.getBdzid()); Optional<Bdz> optionalBdz = bdzRepository.findById(item.getBdzid());
if (!optionalBdz.isPresent()) { if (!optionalBdz.isPresent()) {
throw new Exception("未找到该变电站"); throw new BusinessException("未找到该变电站");
} }
List<Jg> list = repository.findByBdzidAndMc(item.getBdzid(), item.getMc()); List<Jg> list = repository.findByBdzidAndMc(item.getBdzid(), item.getMc());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
return repository.save(item); return repository.save(item);
} }
@ -78,11 +79,11 @@ public class JgServiceImpl implements JgService {
public void update(Jg item) throws Exception { public void update(Jg item) throws Exception {
Optional<Bdz> optionalBdz = bdzRepository.findById(item.getBdzid()); Optional<Bdz> optionalBdz = bdzRepository.findById(item.getBdzid());
if (!optionalBdz.isPresent()) { if (!optionalBdz.isPresent()) {
throw new Exception("未找到该变电站"); throw new BusinessException("未找到该变电站");
} }
List<Jg> list = repository.findByBdzidAndMcAndIdIsNot(item.getBdzid(), item.getMc(), item.getId()); List<Jg> list = repository.findByBdzidAndMcAndIdIsNot(item.getBdzid(), item.getMc(), item.getId());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
repository.save(item); repository.save(item);
} }
@ -91,7 +92,7 @@ public class JgServiceImpl implements JgService {
public void delete(Integer id) throws Exception { public void delete(Integer id) throws Exception {
List<Zsb> zsbList = zsbRepository.findByJgid(id); List<Zsb> zsbList = zsbRepository.findByJgid(id);
if (!CollectionUtils.isEmpty(zsbList)) { if (!CollectionUtils.isEmpty(zsbList)) {
throw new Exception("已被主设备使用不能删除"); throw new BusinessException("已被主设备使用不能删除");
} }
repository.deleteById(id); repository.deleteById(id);
} }
@ -100,7 +101,7 @@ public class JgServiceImpl implements JgService {
public Jg detail(Integer id) throws Exception { public Jg detail(Integer id) throws Exception {
Optional<Jg> optional = repository.findById(id); Optional<Jg> optional = repository.findById(id);
if (!optional.isPresent()) { if (!optional.isPresent()) {
throw new Exception("未找到该区域"); throw new BusinessException("未找到该区域");
} }
Jg jg = optional.get(); Jg jg = optional.get();
Optional<Bdz> optionalBdz = bdzRepository.findById(jg.getBdzid()); Optional<Bdz> optionalBdz = bdzRepository.findById(jg.getBdzid());

@ -1,6 +1,7 @@
package com.xydl.cac.service.impl; package com.xydl.cac.service.impl;
import com.xydl.cac.entity.Lx; import com.xydl.cac.entity.Lx;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.repository.LxRepository; import com.xydl.cac.repository.LxRepository;
import com.xydl.cac.service.LxService; import com.xydl.cac.service.LxService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -29,7 +30,7 @@ public class LxServiceImpl implements LxService {
item.setId(null); item.setId(null);
List<Lx> list = repository.findByMc(item.getMc()); List<Lx> list = repository.findByMc(item.getMc());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
return repository.save(item); return repository.save(item);
} }
@ -38,7 +39,7 @@ public class LxServiceImpl implements LxService {
public void update(Lx item) throws Exception { public void update(Lx item) throws Exception {
List<Lx> list = repository.findByMcAndIdIsNot(item.getMc(), item.getId()); List<Lx> list = repository.findByMcAndIdIsNot(item.getMc(), item.getId());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
repository.save(item); repository.save(item);
} }

@ -3,6 +3,7 @@ package com.xydl.cac.service.impl;
import com.xydl.cac.entity.Modev; import com.xydl.cac.entity.Modev;
import com.xydl.cac.entity.ModevType; import com.xydl.cac.entity.ModevType;
import com.xydl.cac.entity.Zsb; import com.xydl.cac.entity.Zsb;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.repository.ModevRepository; import com.xydl.cac.repository.ModevRepository;
import com.xydl.cac.repository.ModevTypeRepository; import com.xydl.cac.repository.ModevTypeRepository;
import com.xydl.cac.repository.ZsbRepository; import com.xydl.cac.repository.ZsbRepository;
@ -52,7 +53,7 @@ public class ModevServiceImpl implements ModevService {
item.setId(null); item.setId(null);
List<Modev> byZsbidAndName = repository.findByZsbidAndName(item.getZsbid(), item.getName()); List<Modev> byZsbidAndName = repository.findByZsbidAndName(item.getZsbid(), item.getName());
if (!CollectionUtils.isEmpty(byZsbidAndName)) { if (!CollectionUtils.isEmpty(byZsbidAndName)) {
throw new Exception("该监测装置已存在"); throw new BusinessException("该监测装置已存在");
} }
return repository.save(item); return repository.save(item);
} }
@ -63,7 +64,7 @@ public class ModevServiceImpl implements ModevService {
if (!CollectionUtils.isEmpty(byMc)) { if (!CollectionUtils.isEmpty(byMc)) {
for (Modev it : byMc) { for (Modev it : byMc) {
if (it.getId().intValue() != item.getId().intValue()) { if (it.getId().intValue() != item.getId().intValue()) {
throw new Exception("该监测装置类型已存在"); throw new BusinessException("该监测装置类型已存在");
} }
} }
} }
@ -79,7 +80,7 @@ public class ModevServiceImpl implements ModevService {
public Modev detail(Integer id) throws Exception { public Modev detail(Integer id) throws Exception {
Optional<Modev> optional = repository.findById(id); Optional<Modev> optional = repository.findById(id);
if (!optional.isPresent()) { if (!optional.isPresent()) {
throw new Exception("未找到该类型"); throw new BusinessException("未找到该类型");
} }
return optional.get(); return optional.get();
} }
@ -92,7 +93,7 @@ public class ModevServiceImpl implements ModevService {
entity.setIcdid(icdid); entity.setIcdid(icdid);
repository.save(entity); repository.save(entity);
} else { } else {
throw new Exception("未找到对应的检测装置"); throw new BusinessException("未找到对应的检测装置");
} }
} }
} }

@ -1,6 +1,7 @@
package com.xydl.cac.service.impl; package com.xydl.cac.service.impl;
import com.xydl.cac.entity.ModevType; import com.xydl.cac.entity.ModevType;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.repository.ModevTypeRepository; import com.xydl.cac.repository.ModevTypeRepository;
import com.xydl.cac.service.ModevTypeService; import com.xydl.cac.service.ModevTypeService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -30,7 +31,7 @@ public class ModevTypeServiceImpl implements ModevTypeService {
item.setId(null); item.setId(null);
List<ModevType> byMc = repository.findByMc(item.getMc()); List<ModevType> byMc = repository.findByMc(item.getMc());
if (!CollectionUtils.isEmpty(byMc)) { if (!CollectionUtils.isEmpty(byMc)) {
throw new Exception("该监测装置类型已存在"); throw new BusinessException("该监测装置类型已存在");
} }
return repository.save(item); return repository.save(item);
} }
@ -41,7 +42,7 @@ public class ModevTypeServiceImpl implements ModevTypeService {
if (!CollectionUtils.isEmpty(byMc)) { if (!CollectionUtils.isEmpty(byMc)) {
for (ModevType it : byMc) { for (ModevType it : byMc) {
if (it.getId().intValue() != item.getId().intValue()) { if (it.getId().intValue() != item.getId().intValue()) {
throw new Exception("该监测装置类型已存在"); throw new BusinessException("该监测装置类型已存在");
} }
} }
} }
@ -57,7 +58,7 @@ public class ModevTypeServiceImpl implements ModevTypeService {
public ModevType detail(Integer id) throws Exception { public ModevType detail(Integer id) throws Exception {
Optional<ModevType> optional = repository.findById(id); Optional<ModevType> optional = repository.findById(id);
if (!optional.isPresent()) { if (!optional.isPresent()) {
throw new Exception("未找到该类型"); throw new BusinessException("未找到该类型");
} }
return optional.get(); return optional.get();
} }

@ -2,6 +2,7 @@ package com.xydl.cac.service.impl;
import com.xydl.cac.entity.NiecPoint; import com.xydl.cac.entity.NiecPoint;
import com.xydl.cac.entity.NiecSensor; import com.xydl.cac.entity.NiecSensor;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.ConditionModel; import com.xydl.cac.model.ConditionModel;
import com.xydl.cac.model.OnePage; import com.xydl.cac.model.OnePage;
import com.xydl.cac.model.SensorDetail; import com.xydl.cac.model.SensorDetail;
@ -73,24 +74,24 @@ public class NiecSensorServiceImpl implements NiecSensorService {
public SensorDetail<Map<String, Object>> getDetail(ConditionModel model) throws Exception { public SensorDetail<Map<String, Object>> getDetail(ConditionModel model) throws Exception {
Optional<NiecSensor> optional = repository.findById(model.getId()); Optional<NiecSensor> optional = repository.findById(model.getId());
if (!optional.isPresent()) { if (!optional.isPresent()) {
throw new Exception("未找到该装置"); throw new BusinessException("未找到该装置");
} }
NiecSensor sensor = optional.get(); NiecSensor sensor = optional.get();
if (StringUtils.isBlank(sensor.getDtimeFieldName())) { if (StringUtils.isBlank(sensor.getDtimeFieldName())) {
throw new Exception("该装置缺少采样时间字段名信息"); throw new BusinessException("该装置缺少采样时间字段名信息");
} }
if (StringUtils.isBlank(sensor.getTableName())) { if (StringUtils.isBlank(sensor.getTableName())) {
throw new Exception("该装置缺少table_name信息"); throw new BusinessException("该装置缺少table_name信息");
} }
if (StringUtils.isBlank(sensor.getDevidFieldName())) { if (StringUtils.isBlank(sensor.getDevidFieldName())) {
throw new Exception("该装置缺少sensor_id的字段名信息"); throw new BusinessException("该装置缺少sensor_id的字段名信息");
} }
if (sensor.getDevId() == null) { if (sensor.getDevId() == null) {
throw new Exception("该装置缺少dev_id信息"); throw new BusinessException("该装置缺少dev_id信息");
} }
List<NiecPoint> points = pointService.getList(sensor.getId(), 2); List<NiecPoint> points = pointService.getList(sensor.getId(), 2);
if (CollectionUtils.isEmpty(points)) { if (CollectionUtils.isEmpty(points)) {
throw new Exception("该装置缺少业务点表配置信息"); throw new BusinessException("该装置缺少业务点表配置信息");
} }
SensorDetail<Map<String, Object>> result = this.getData(sensor, points, model); SensorDetail<Map<String, Object>> result = this.getData(sensor, points, model);

@ -1,10 +1,16 @@
package com.xydl.cac.service.impl; package com.xydl.cac.service.impl;
import com.xydl.cac.entity.*; import com.xydl.cac.entity.*;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.BindDetail;
import com.xydl.cac.model.BindingModel; import com.xydl.cac.model.BindingModel;
import com.xydl.cac.model.ColumnModel;
import com.xydl.cac.model.Response;
import com.xydl.cac.repository.*; import com.xydl.cac.repository.*;
import com.xydl.cac.service.DataService;
import com.xydl.cac.service.ParamBindService; import com.xydl.cac.service.ParamBindService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -13,6 +19,7 @@ import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
@Service @Service
@Slf4j @Slf4j
@ -28,6 +35,8 @@ public class ParamBindServiceImpl implements ParamBindService {
@Resource @Resource
ModevRepository modevRepository; ModevRepository modevRepository;
@Resource @Resource
ModevTypeRepository modevTypeRepository;
@Resource
IcdConfigTypeRepository typeRepository; IcdConfigTypeRepository typeRepository;
@Resource @Resource
IcdConfigTypeInstRepository instRepository; IcdConfigTypeInstRepository instRepository;
@ -35,6 +44,8 @@ public class ParamBindServiceImpl implements ParamBindService {
IcdConfigTypeAttRepository attRepository; IcdConfigTypeAttRepository attRepository;
@Resource @Resource
RptparamindexRepository rptparamindexRepository; RptparamindexRepository rptparamindexRepository;
@Resource
DataService dataService;
@Override @Override
public List<Bdz> getTree() throws Exception { public List<Bdz> getTree() throws Exception {
@ -74,62 +85,204 @@ public class ParamBindServiceImpl implements ParamBindService {
} }
@Override @Override
public List<Rptparamindex> preview(BindingModel item) throws Exception { public Response preview(BindingModel item) throws Exception {
Optional<IcdConfigTypeInst> optionalInst = instRepository.findById(item.getBindingId()); Optional<Modev> optionalModev = modevRepository.findById(item.getEqmid());
if (!optionalModev.isPresent()) {
throw new BusinessException("未找到该监测装置, eqmid=" + item.getEqmid());
}
Modev modev = optionalModev.get();
Optional<ModevType> optionalModevType = modevTypeRepository.findById(modev.getModevtid());
if (!optionalModevType.isPresent()) {
throw new BusinessException("该监测装置类型不正确, 请先修正");
}
ModevType modevType = optionalModevType.get();
Optional<IcdConfigTypeInst> optionalInst = instRepository.findById(item.getIcdid());
if (!optionalInst.isPresent()) { if (!optionalInst.isPresent()) {
throw new Exception("未找到该ICD配置类型实例, eqmid=" + item.getEqmid() + ", bindingId=" + item.getBindingId()); throw new BusinessException("未找到该ICD逻辑设备实例, icdid=" + item.getIcdid());
} }
IcdConfigTypeInst inst = optionalInst.get(); IcdConfigTypeInst inst = optionalInst.get();
Optional<IcdConfigType> optionalType = typeRepository.findById(inst.getIcdConfigTypeId()); Optional<IcdConfigType> optionalType = typeRepository.findById(inst.getIcdConfigTypeId());
if (!optionalType.isPresent()) { if (!optionalType.isPresent()) {
throw new Exception("未找到该实例对应的ICD配置类型, bindingId=" + item.getBindingId()); throw new BusinessException("未找到该实例对应的ICD配置类型, icdid=" + item.getIcdid());
} }
IcdConfigType type = optionalType.get(); IcdConfigType type = optionalType.get();
List<Rptparamindex> result = new ArrayList<>();
String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass() String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass()
+ inst.getInst(); + inst.getInst();
List<IcdConfigTypeAtt> attList = attRepository.findByIcdConfigTypeId(type.getId()); List<IcdConfigTypeAtt> attList = attRepository.findByIcdConfigTypeId(type.getId());
List<String> msgList = new ArrayList<>();
for (IcdConfigTypeAtt att : attList) { for (IcdConfigTypeAtt att : attList) {
String paramindex = param + "$" + att.getLastName(); if (StringUtils.isBlank(att.getColName())) {
Optional<Rptparamindex> optionalRpt = rptparamindexRepository.findById(paramindex); msgList.add(att.getDoName() + "该属性还未配置绑定字段");
if (!optionalRpt.isPresent()) { } else {
throw new Exception("未找到该Rptparamindex对象参引=" + paramindex); // String paramindex = param + "$" + att.getParam();
// Optional<Rptparamindex> optionalRpt = rptparamindexRepository.findById(paramindex);
// if (!optionalRpt.isPresent()) {
// throw new BusinessException("未找到该Rptparamindex对象参引=" + paramindex);
// }
}
}
Response resp = Response.success(attList);
if (StringUtils.isBlank(type.getTableName())) {
msgList.add("该ICD配置类型还未设置对应的tableName");
} else if (!type.getTableName().equals(modevType.getTablename())) {
msgList.add("该ICD配置类型的tableName(" + type.getTableName() + ")和该监测装置类型的tableName(" + modevType.getTablename() + ")不一致");
}
if (msgList.size() > 0) {
String message = msgList.stream().collect(Collectors.joining("\n\r"));
resp.setWarnMsg(message);
}
return resp;
}
@Override
public void bind(BindingModel item) throws Exception {
Optional<Modev> optionalModev = modevRepository.findById(item.getEqmid());
if (!optionalModev.isPresent()) {
throw new BusinessException("未找到该监测装置, eqmid=" + item.getEqmid());
}
Modev modev = optionalModev.get();
Optional<IcdConfigTypeInst> optionalInst = instRepository.findById(item.getIcdid());
if (!optionalInst.isPresent()) {
throw new BusinessException("未找到该ICD逻辑设备实例, icdid=" + item.getIcdid());
}
IcdConfigTypeInst inst = optionalInst.get();
Optional<IcdConfigType> optionalType = typeRepository.findById(inst.getIcdConfigTypeId());
if (!optionalType.isPresent()) {
throw new BusinessException("未找到该实例对应的ICD配置类型, icdid=" + item.getIcdid());
}
IcdConfigType type = optionalType.get();
List<Modev> list = modevRepository.findByIcdidAndIdIsNot(item.getIcdid(), item.getEqmid());
if (!CollectionUtils.isEmpty(list)) {
throw new BusinessException("该逻辑设备实例已被" + list.get(0).getName() + "绑定");
}
List<IcdConfigTypeAtt> attList = attRepository.findByIcdConfigTypeId(type.getId());
Optional<ModevType> optionalModevType = modevTypeRepository.findById(modev.getModevtid());
if (optionalModevType.isPresent()) {
ModevType modevType = optionalModevType.get();
if (StringUtils.isNotBlank(modevType.getTablename())) {
List<ColumnModel> columnList = dataService.getDataTableColumns(modevType.getTablename());
for (IcdConfigTypeAtt att : attList) {
if (StringUtils.isNotBlank(att.getColName())) {
boolean found = false;
for (ColumnModel col : columnList) {
if (col.getName().equals(att.getColName())) {
found = true;
break;
}
}
if (!found) {
throw new BusinessException("当前监控设备对应的表" + modevType.getTablename() + "里不存在配置属性"
+ att.getDoName() + "绑定的字段" + att.getColName());
}
}
}
}
}
modev.setIcdid(item.getIcdid());
modevRepository.save(modev);
}
@Override
public void unbind(Integer eqmid) throws Exception {
Optional<Modev> optionalModev = modevRepository.findById(eqmid);
if (!optionalModev.isPresent()) {
throw new BusinessException("未找到该监测装置, eqmid=" + eqmid);
}
Modev modev = optionalModev.get();
modev.setIcdid(null);
modevRepository.save(modev);
}
@Override
public BindDetail getBind(Integer eqmid) throws Exception {
Optional<Modev> optionalModev = modevRepository.findById(eqmid);
if (!optionalModev.isPresent()) {
throw new BusinessException("未找到该监测装置");
}
Modev modev = optionalModev.get();
BindDetail result = new BindDetail();
result.setEqmid(eqmid);
Optional<ModevType> optionalModevType = modevTypeRepository.findById(modev.getModevtid());
if (optionalModevType.isPresent()) {
ModevType modevType = optionalModevType.get();
if (StringUtils.isNotBlank(modevType.getTablename())) {
List<ColumnModel> columnList = dataService.getDataTableColumns(modevType.getTablename());
result.setColumnList(columnList);
}
}
if (modev.getIcdid() != null) {
result.setIcdid(modev.getIcdid());
Optional<IcdConfigTypeInst> optionalInst = instRepository.findById(modev.getIcdid());
if (optionalInst.isPresent()) {
IcdConfigTypeInst inst = optionalInst.get();
Optional<IcdConfigType> optionalType = typeRepository.findById(inst.getIcdConfigTypeId());
if (optionalType.isPresent()) {
IcdConfigType type = optionalType.get();
result.setIedName(type.getIedName());
String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass()
+ inst.getInst();
List<IcdConfigTypeAtt> attList = attRepository.findByIcdConfigTypeId(type.getId());
result.setAttList(attList);
}
} }
Rptparamindex rpt = optionalRpt.get();
rpt.setTablename(type.getTableName());
rpt.setColname(att.getColName());
rpt.setEqmid(item.getEqmid());
result.add(rpt);
} }
return result; return result;
} }
private void bindOne(Integer eqmid, Integer bindingId) throws Exception { @Override
Optional<IcdConfigTypeInst> optionalInst = instRepository.findById(bindingId); public String generateParamindex() throws Exception {
List<Modev> modevList = modevRepository.findByIcdidIsNotNull();
if (!CollectionUtils.isEmpty(modevList)) {
for (Modev item : modevList) {
generateOne(item);
}
return "已对" + modevList.size() + "条绑定数据生成对应的61850参引数据";
} else {
throw new BusinessException("无任何绑定数据");
}
}
private void generateOne(Modev item) throws Exception {
Optional<IcdConfigTypeInst> optionalInst = instRepository.findById(item.getIcdid());
if (!optionalInst.isPresent()) { if (!optionalInst.isPresent()) {
throw new Exception("未找到该ICD配置类型实例, eqmid=" + eqmid + ", bindingId=" + bindingId); throw new BusinessException("未找到该ICD逻辑设备实例, eqmid=" + item.getId() + ", icdid=" + item.getIcdid());
} }
IcdConfigTypeInst inst = optionalInst.get(); IcdConfigTypeInst inst = optionalInst.get();
Optional<IcdConfigType> optionalType = typeRepository.findById(inst.getIcdConfigTypeId()); Optional<IcdConfigType> optionalType = typeRepository.findById(inst.getIcdConfigTypeId());
if (!optionalType.isPresent()) { if (!optionalType.isPresent()) {
throw new Exception("未找到该实例对应的ICD配置类型, bindingId=" + bindingId); throw new BusinessException("未找到该实例对应的ICD配置类型, icdid=" + item.getIcdid());
} }
IcdConfigType type = optionalType.get(); IcdConfigType type = optionalType.get();
String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass() String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass()
+ inst.getInst(); + inst.getInst();
List<IcdConfigTypeAtt> attList = attRepository.findByIcdConfigTypeId(type.getId()); List<IcdConfigTypeAtt> attList = attRepository.findByIcdConfigTypeId(type.getId());
for (IcdConfigTypeAtt att : attList) { for (IcdConfigTypeAtt att : attList) {
String paramindex = param + "$" + att.getLastName(); if (StringUtils.isNotBlank(att.getColName())) {
String paramindex = param + "$" + att.getParam();
Optional<Rptparamindex> optionalRpt = rptparamindexRepository.findById(paramindex); Optional<Rptparamindex> optionalRpt = rptparamindexRepository.findById(paramindex);
if (!optionalRpt.isPresent()) { if (!optionalRpt.isPresent()) {
throw new Exception("未找到该Rptparamindex对象参引=" + paramindex); throw new BusinessException(item.getName() + "的字段" + att.getColName() + "对应的属性"
+ att.getDoName() + "未找到该Rptparamindex对象参引=" + paramindex);
} }
Rptparamindex rpt = optionalRpt.get(); Rptparamindex rpt = optionalRpt.get();
rpt.setTablename(type.getTableName()); rpt.setTablename(type.getTableName());
rpt.setColname(att.getColName()); rpt.setColname(att.getColName());
rpt.setEqmid(eqmid); rpt.setEqmid(item.getId());
rptparamindexRepository.save(rpt); rptparamindexRepository.save(rpt);
} }
} }
} }
@Override
public void clearAll() {
dataService.clearAllBind();
}
}

@ -2,8 +2,11 @@ package com.xydl.cac.service.impl;
import com.xydl.cac.entity.Jg; import com.xydl.cac.entity.Jg;
import com.xydl.cac.entity.Lx; import com.xydl.cac.entity.Lx;
import com.xydl.cac.entity.Modev;
import com.xydl.cac.entity.Zsb; import com.xydl.cac.entity.Zsb;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.repository.LxRepository; import com.xydl.cac.repository.LxRepository;
import com.xydl.cac.repository.ModevRepository;
import com.xydl.cac.repository.ZsbRepository; import com.xydl.cac.repository.ZsbRepository;
import com.xydl.cac.service.JgService; import com.xydl.cac.service.JgService;
import com.xydl.cac.service.ZsbService; import com.xydl.cac.service.ZsbService;
@ -27,6 +30,8 @@ public class ZsbServiceImpl implements ZsbService {
JgService jgService; JgService jgService;
@Resource @Resource
LxRepository lxRepository; LxRepository lxRepository;
@Resource
ModevRepository modevRepository;
@Override @Override
public List<Zsb> listAll(Integer jgid) throws Exception { public List<Zsb> listAll(Integer jgid) throws Exception {
@ -85,11 +90,11 @@ public class ZsbServiceImpl implements ZsbService {
item.setBdzid(jg.getBdzid()); item.setBdzid(jg.getBdzid());
Optional<Lx> optionalLx = lxRepository.findById(item.getLxid()); Optional<Lx> optionalLx = lxRepository.findById(item.getLxid());
if (!optionalLx.isPresent()) { if (!optionalLx.isPresent()) {
throw new Exception("未找到该设备类型"); throw new BusinessException("未找到该设备类型");
} }
List<Zsb> list = repository.findByJgidAndMc(item.getJgid(), item.getMc()); List<Zsb> list = repository.findByJgidAndMc(item.getJgid(), item.getMc());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
return repository.save(item); return repository.save(item);
} }
@ -100,17 +105,21 @@ public class ZsbServiceImpl implements ZsbService {
item.setBdzid(jg.getBdzid()); item.setBdzid(jg.getBdzid());
Optional<Lx> optionalLx = lxRepository.findById(item.getLxid()); Optional<Lx> optionalLx = lxRepository.findById(item.getLxid());
if (!optionalLx.isPresent()) { if (!optionalLx.isPresent()) {
throw new Exception("未找到该设备类型"); throw new BusinessException("未找到该设备类型");
} }
List<Zsb> list = repository.findByJgidAndMcAndIdIsNot(item.getJgid(), item.getMc(), item.getId()); List<Zsb> list = repository.findByJgidAndMcAndIdIsNot(item.getJgid(), item.getMc(), item.getId());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new Exception("该名称已被使用"); throw new BusinessException("该名称已被使用");
} }
repository.save(item); repository.save(item);
} }
@Override @Override
public void delete(Integer id) throws Exception { public void delete(Integer id) throws Exception {
List<Modev> modevList = modevRepository.findByZsbid(id);
if (!CollectionUtils.isEmpty(modevList)) {
throw new BusinessException("已被监测装置使用不能删除");
}
repository.deleteById(id); repository.deleteById(id);
} }
@ -118,7 +127,7 @@ public class ZsbServiceImpl implements ZsbService {
public Zsb detail(Integer id) throws Exception { public Zsb detail(Integer id) throws Exception {
Optional<Zsb> optional = repository.findById(id); Optional<Zsb> optional = repository.findById(id);
if (!optional.isPresent()) { if (!optional.isPresent()) {
throw new Exception("未找到该主设备"); throw new BusinessException("未找到该主设备");
} }
Zsb zsb = optional.get(); Zsb zsb = optional.get();
Jg jg = jgService.detail(zsb.getJgid()); Jg jg = jgService.detail(zsb.getJgid());

@ -5,7 +5,9 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.xydl.cac.entity.IcdConfigType; import com.xydl.cac.entity.IcdConfigType;
import com.xydl.cac.exception.BusinessException;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.util.*; import java.util.*;
@ -14,7 +16,12 @@ public class IcdXmlUtil {
public static LinkedHashMap<String, IcdConfigType> loadIcdType(String xml) throws Exception { public static LinkedHashMap<String, IcdConfigType> loadIcdType(String xml) throws Exception {
XmlMapper xmlMapper = XmlMapper.builder() XmlMapper xmlMapper = XmlMapper.builder()
.build(); .build();
JsonNode root = xmlMapper.readTree(xml); JsonNode root;
try {
root = xmlMapper.readTree(xml);
} catch (Exception ex) {
throw new BusinessException("ICD文件解析失败请上传正确的xml类型文件");
}
LinkedHashMap<String, IcdConfigType> result = processTypeRoot(root); LinkedHashMap<String, IcdConfigType> result = processTypeRoot(root);
return result; return result;
} }
@ -22,25 +29,33 @@ public class IcdXmlUtil {
private static LinkedHashMap<String, IcdConfigType> processTypeRoot(JsonNode root) { private static LinkedHashMap<String, IcdConfigType> processTypeRoot(JsonNode root) {
LinkedHashMap<String, IcdConfigType> result = new LinkedHashMap<>(); LinkedHashMap<String, IcdConfigType> result = new LinkedHashMap<>();
Map<String, JsonNode> mapLNodeType = buildLNodeTypeMap(root);
Map<String, JsonNode> mapDOType = buildDOTypeMap(root);
Map<String, JsonNode> mapDAType = buildDATypeMap(root);
List<JsonNode> iedList = findNodes(root, "IED"); List<JsonNode> iedList = findNodes(root, "IED");
for (JsonNode iedNode : iedList) { for (JsonNode iedNode : iedList) {
processIEDNode(iedNode, result); processIEDNode(result, iedNode,
mapLNodeType, mapDOType, mapDAType);
} }
return result; return result;
} }
private static void processIEDNode(JsonNode iedNode, LinkedHashMap<String, IcdConfigType> result) { private static void processIEDNode(LinkedHashMap<String, IcdConfigType> result, JsonNode iedNode,
Map<String, JsonNode> mapLNodeType, Map<String, JsonNode> mapDOType, Map<String, JsonNode> mapDAType) {
String iedName = iedNode.get("name").asText(); String iedName = iedNode.get("name").asText();
List<JsonNode> devList = findNodes(iedNode, "LDevice"); List<JsonNode> devList = findNodes(iedNode, "LDevice");
for (JsonNode dev : devList) { for (JsonNode dev : devList) {
processTypeDeviceNode(dev, iedName, result); processTypeDeviceNode(result, iedName, dev,
mapLNodeType, mapDOType, mapDAType);
} }
} }
private static void processTypeDeviceNode(JsonNode deviceNode, String iedName, LinkedHashMap<String, IcdConfigType> result) { private static void processTypeDeviceNode(LinkedHashMap<String, IcdConfigType> result, String iedName, JsonNode deviceNode,
Map<String, JsonNode> mapLNodeType, Map<String, JsonNode> mapDOType, Map<String, JsonNode> mapDAType) {
String ldeviceInst = deviceNode.get("inst").asText(); String ldeviceInst = deviceNode.get("inst").asText();
Map<String, JsonNode> lnMap = buildLNMap(deviceNode); Map<String, JsonNode> mapLN = buildLNMap(deviceNode);
List<JsonNode> fcdaList = findNodes(deviceNode, "FCDA"); List<JsonNode> fcdaList = findNodes(deviceNode, "FCDA");
for (JsonNode fcdaNode : fcdaList) { for (JsonNode fcdaNode : fcdaList) {
@ -49,11 +64,25 @@ public class IcdXmlUtil {
String doName = fcdaNode.get("doName").asText(); String doName = fcdaNode.get("doName").asText();
String fc = fcdaNode.get("fc").asText(); String fc = fcdaNode.get("fc").asText();
JsonNode lnNode = lnMap.get(lnClass + lnInst); JsonNode lnNode = mapLN.get(lnClass + lnInst);
String dai = findLN_DOI_DAI(lnNode, doName); String lnType = lnNode.get("lnType").asText();
JsonNode nodeLnDesc = lnNode.get("desc");
String lnDesc = null;
if (nodeLnDesc != null) {
lnDesc = nodeLnDesc.asText();
}
JsonNode nodeLNodeType = mapLNodeType.get(lnType);
JsonNode nodeDO = findLNodeType_DO_Node(nodeLNodeType, doName);
String doType = nodeDO.get("type").asText();
JsonNode nodeDoDesc = nodeDO.get("desc");
String doDesc = null;
if (nodeDoDesc != null) {
doDesc = nodeDoDesc.asText();
}
JsonNode nodeDOType = mapDOType.get(doType);
String lastname = findLastname(nodeDOType, fc, mapDAType);
String key = iedName + ldeviceInst + "/" + lnClass; String key = iedName + ldeviceInst + "/" + lnClass;
String param = fc + "$" + doName + "$" + dai;
if ("MX".equals(fc)) { if ("MX".equals(fc)) {
IcdConfigType config = result.get(key); IcdConfigType config = result.get(key);
if (config == null) { if (config == null) {
@ -61,26 +90,109 @@ public class IcdXmlUtil {
.iedName(iedName) .iedName(iedName)
.ldeviceInst(ldeviceInst) .ldeviceInst(ldeviceInst)
.lnClass(lnClass) .lnClass(lnClass)
.lnDesc(lnDesc)
.build(); .build();
result.put(key, config); result.put(key, config);
} }
String param = fc + "$" + doName + "$" + lastname;
config.addInst(lnInst); config.addInst(lnInst);
config.addAtt(doName, param); config.addAtt(doName, doDesc, param);
} else if ("ST".equals(fc)) {
// IcdConfigType config = result.get(key);
// if (config == null) {
// config = IcdConfigType.builder()
// .iedName(iedName)
// .ldeviceInst(ldeviceInst)
// .lnClass(lnClass)
// .build();
// result.put(key, config);
// }
// String param = fc + "$" + doName + "$" + lastname;
// config.addInst(lnInst);
// config.addAtt(doName, param);
} }
} }
} }
private static Map<String, JsonNode> buildLNMap(JsonNode deviceNode) { private static Map<String, JsonNode> buildLNMap(JsonNode deviceNode) {
Map<String, JsonNode> map = new LinkedHashMap<>(); Map<String, JsonNode> map = new LinkedHashMap<>();
List<JsonNode> lnList = findNodes(deviceNode, "LN"); List<JsonNode> list = findNodes(deviceNode, "LN");
for (JsonNode lnNode : lnList) { for (JsonNode node : list) {
String lnClass = lnNode.get("lnClass").asText(); String lnClass = node.get("lnClass").asText();
String inst = lnNode.get("inst").asText(); String inst = node.get("inst").asText();
map.put(lnClass + inst, lnNode); map.put(lnClass + inst, node);
}
return map;
}
private static Map<String, JsonNode> buildDOTypeMap(JsonNode root) {
Map<String, JsonNode> map = new LinkedHashMap<>();
List<JsonNode> list = findNodes(root, "DOType");
for (JsonNode node : list) {
String id = node.get("id").asText();
map.put(id, node);
}
return map;
}
private static Map<String, JsonNode> buildDATypeMap(JsonNode root) {
Map<String, JsonNode> map = new LinkedHashMap<>();
List<JsonNode> list = findNodes(root, "DAType");
for (JsonNode node : list) {
String id = node.get("id").asText();
map.put(id, node);
}
return map;
}
private static Map<String, JsonNode> buildLNodeTypeMap(JsonNode root) {
Map<String, JsonNode> map = new LinkedHashMap<>();
List<JsonNode> listLNodeType = findNodes(root, "LNodeType");
for (JsonNode node : listLNodeType) {
String id = node.get("id").asText();
map.put(id, node);
} }
return map; return map;
} }
private static JsonNode findLNodeType_DO_Node(JsonNode lnNode, String doName) {
JsonNode result = null;
List<JsonNode> doiList = findNodes(lnNode, "DO");
for (JsonNode doiNode : doiList) {
String doiName = doiNode.get("name").asText();
if (doiName.equals(doName)) {
result = doiNode;
break;
}
}
return result;
}
private static String findLastname(JsonNode node, String fcname, Map<String, JsonNode> mapDAType) {
String result = "";
List<JsonNode> daList = findNodes(node, "DA");
for (JsonNode daNode : daList) {
String fc = daNode.get("fc").asText();
String bType = daNode.get("bType").asText();
if (bType.equals("Struct") && fc.equals(fcname)) {
result = daNode.get("name").asText();
JsonNode typeNode = daNode.get("type");
if (typeNode != null && StringUtils.isNotBlank(typeNode.asText())) {
JsonNode nodeDAType = mapDAType.get(typeNode.asText());
if (nodeDAType != null) {
List<JsonNode> bdaList = findNodes(nodeDAType, "BDA");
if (!CollectionUtils.isEmpty(bdaList)) {
String name = bdaList.get(0).get("name").asText();
result = result + "$" + name;
}
}
}
break;
}
}
return result;
}
private static String findLN_DOI_DAI(JsonNode lnNode, String doName) { private static String findLN_DOI_DAI(JsonNode lnNode, String doName) {
String result = ""; String result = "";
List<JsonNode> doiList = findNodes(lnNode, "DOI"); List<JsonNode> doiList = findNodes(lnNode, "DOI");

@ -0,0 +1,66 @@
package com.xydl.cac.util;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.StringPath;
import org.apache.commons.lang3.StringUtils;
public class SqlEscapeUtil {
/**
*
**/
public static final char ESCAPE = '!';
/**
*
*
* @param param
* @return String
*/
public static String escape(String param) {
if (StringUtils.isNotEmpty(param)) {
String temp = param.replaceAll("/", ESCAPE + "/");
temp = temp.replaceAll("%", ESCAPE + "%");
temp = temp.replaceAll("_", ESCAPE + "_");
temp = temp.replaceAll("'", "''");
return temp.trim();
}
return "";
}
/**
*
*
* @param param
* @return String
*/
public static BooleanExpression escape(StringPath path, String param) {
if (StringUtils.isNotEmpty(param)) {
String temp = param.replaceAll("!", ESCAPE + "!");
temp = temp.replaceAll("%", ESCAPE + "%");
temp = temp.replaceAll("_", ESCAPE + "_");
temp = temp.replaceAll("'", "\\'");
return path.like("%"+ temp.trim() +"%", ESCAPE);
}
return null;
}
public static boolean sqlValidate(String str) {
if (StringUtils.isBlank(str)) {
return false;
}
str = str.toLowerCase();// 统一转为小写
String badStr = "'|exec|and|or|execute|insert|select|delete|update|drop|%|master|truncate|"
+ "declare|sitename|net user|xp_cmdshell|like'|exec|execute|insert|create|drop|"
+ "table|grant|use|group_concat|column_name|information_schema.columns|table_schema|"
+ "select|delete|update|master|truncate|declare|-- |like|//|%";// 过滤掉的sql关键字可以手动添加
String[] badStrs = badStr.split("\\|");
for (String s : badStrs) {
if (str.contains(s)) {
return true;
}
}
return false;
}
}

@ -13,7 +13,7 @@ spring:
username: root username: root
password: 123456 password: 123456
jpa: jpa:
show-sql: true show-sql: false
open-in-view: false open-in-view: false
mvc: mvc:
format: format:
@ -25,16 +25,7 @@ spring:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB
logging: proxy:
level: solr:
root: info servlet_url: /prod-api/*
com: target_url: http://127.0.0.1:8082/
xydl: debug
file:
name: /home/xydl/ncac/logs/ncac.log

@ -13,7 +13,7 @@ spring:
username: iec username: iec
password: Iec@1043 password: Iec@1043
jpa: jpa:
show-sql: true show-sql: false
open-in-view: false open-in-view: false
mvc: mvc:
format: format:
@ -25,15 +25,7 @@ spring:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB
logging: proxy:
level: solr:
root: info servlet_url: /prod-api/*
com: target_url: http://127.0.0.1:8082/
xydl: debug
file:
name: /home/xydl/ncac/logs/ncac.log

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- For assistance related to logback-translator or configuration -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user -->
<!-- -->
<!-- For professional support please see -->
<!-- http://www.qos.ch/shop/products/professionalSupport -->
<!-- -->
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %c:%L--&gt;%m%n</pattern>
</encoder>
</appender>
<appender name="ROLL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} [%line] - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/ncac.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>60</maxHistory>
</rollingPolicy>
</appender>
<!-- <logger name="org.hibernate" level="INFO" />
<logger name="org.springframework.security" level="INFO" />
<logger name="org.springframework" level="INFO"/>
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springframework.orm" level="INFO"/>
<logger name="net.sf.ehcache" level="OFF"></logger>
<logger name="org.apache.http" level="OFF"></logger>
<logger name="org.apache.http.wire" level="OFF"></logger>
<logger name="org.apache.commons.beanutils" level="ERROR"></logger>-->
<logger name="org.apache.http" level="info"></logger>
<logger name="org.springframework" level="info"></logger>
<logger name="org.apache.http.wire" level="info"></logger>
<logger name="com.alibaba.nacos" level="info"></logger>
<logger name="org.hibernate" level="info"></logger>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="ROLL"/>
</root>
</configuration>
Loading…
Cancel
Save