Commit e691bc53 authored by linruibiao's avatar linruibiao

Merge branch 'develop' into 'master'

Develop See merge request !1
parents a0c723fd 0e76b1ac
...@@ -47,10 +47,10 @@ ...@@ -47,10 +47,10 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId> <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency> </dependency>
<dependency> <!--<dependency>-->
<groupId>org.springframework.boot</groupId> <!--<groupId>org.springframework.boot</groupId>-->
<artifactId>spring-boot-starter-data-jpa</artifactId> <!--<artifactId>spring-boot-starter-data-jpa</artifactId>-->
</dependency> <!--</dependency>-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
...@@ -96,12 +96,12 @@ ...@@ -96,12 +96,12 @@
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- influxdb架包 --> <!--&lt;!&ndash; influxdb架包 &ndash;&gt;-->
<dependency> <!--<dependency>-->
<groupId>org.influxdb</groupId> <!--<groupId>org.influxdb</groupId>-->
<artifactId>influxdb-java</artifactId> <!--<artifactId>influxdb-java</artifactId>-->
<version>${influxdb-java.version}</version> <!--<version>${influxdb-java.version}</version>-->
</dependency> <!--</dependency>-->
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
...@@ -195,6 +195,13 @@ ...@@ -195,6 +195,13 @@
<skip>true</skip> <skip>true</skip>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
......
...@@ -25,17 +25,14 @@ package com.syc.slm.common.core.constant; ...@@ -25,17 +25,14 @@ package com.syc.slm.common.core.constant;
*/ */
public interface CommonConstants { public interface CommonConstants {
/**
/** * 成功标记
* 成功标记 */
*/ Integer SUCCESS = 0;
Integer SUCCESS = 0;
/**
/** * 失败标记
* 失败标记 */
*/ Integer FAIL = 1;
Integer FAIL = 1;
} }
package com.syc.slm.common.core.constant;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* slm-bi
* 业务常量
*
* @author : lin
* @date : 2021-04-06 11:14
**/
public final class SlmConstants {
public static Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss").create();
public static Gson gsonLowerCaseWithUnderscores = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss").setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
/**
* 启用
*/
public static final Integer DATA_VALID = 1;
/**
* 禁用
*/
public static final Integer DATA_INVALID = 0;
/**
* 删除
*/
public static final Integer DATA_DELETED = -1;
}
package com.syc.slm.common.core.util;
import com.syc.slm.slmbi.exception.SysException;
import com.syc.slm.slmbi.function.Action0;
import java.util.function.Supplier;
/**
* slm-bi
* 统一方法调用返回
*
* @author : lin
* @date : 2021-04-06 09:39
**/
public final class NetResponseUtils {
public static <T> R<T> call(Supplier<T> x) {
try {
return R.ok(x.get());
} catch (Exception ex) {
ex.printStackTrace();
if (ex instanceof SysException) {
SysException e = (SysException) ex;
return R.failed(e.getMsg());
}
return R.failed("出错啦请联系管理员",ex.toString());
}
}
public static R<Object> call(Action0 x) {
try {
x.call();
return R.ok();
} catch (Exception ex) {
ex.printStackTrace();
if (ex instanceof SysException) {
SysException e = (SysException) ex;
return R.failed(e.getMsg());
}
return R.bad("出错啦请联系管理员",ex.toString());
}
}
}
...@@ -20,11 +20,14 @@ ...@@ -20,11 +20,14 @@
package com.syc.slm.common.core.util; package com.syc.slm.common.core.util;
import com.syc.slm.common.core.constant.CommonConstants; import com.syc.slm.common.core.constant.CommonConstants;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.slmbi.exception.SysException;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.*; import lombok.*;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.sound.midi.SysexMessage;
import java.io.Serializable; import java.io.Serializable;
/** /**
...@@ -53,6 +56,11 @@ public class R<T> implements Serializable { ...@@ -53,6 +56,11 @@ public class R<T> implements Serializable {
@ApiModelProperty(value = "返回信息") @ApiModelProperty(value = "返回信息")
private String msg; private String msg;
@Getter
@Setter
@ApiModelProperty(value = "调式异常")
private String debugMsg;
@Getter @Getter
@Setter @Setter
@ApiModelProperty(value = "数据") @ApiModelProperty(value = "数据")
...@@ -77,7 +85,9 @@ public class R<T> implements Serializable { ...@@ -77,7 +85,9 @@ public class R<T> implements Serializable {
public static <T> R<T> failed(String msg) { public static <T> R<T> failed(String msg) {
return restResult(null, CommonConstants.FAIL, msg); return restResult(null, CommonConstants.FAIL, msg);
} }
public static <T> R<T> failed(String msg,String debugMsg) {
return restResult(null, CommonConstants.FAIL, msg,debugMsg);
}
public static <T> R<T> failed(T data) { public static <T> R<T> failed(T data) {
return restResult(data, CommonConstants.FAIL, null); return restResult(data, CommonConstants.FAIL, null);
} }
...@@ -86,6 +96,10 @@ public class R<T> implements Serializable { ...@@ -86,6 +96,10 @@ public class R<T> implements Serializable {
return restResult(data, CommonConstants.FAIL, msg); return restResult(data, CommonConstants.FAIL, msg);
} }
public static <T> R<T> bad(String msg,String debugMsg) {
return failed(msg,debugMsg);
}
private static <T> R<T> restResult(T data, int code, String msg) { private static <T> R<T> restResult(T data, int code, String msg) {
R<T> apiResult = new R<>(); R<T> apiResult = new R<>();
apiResult.setCode(code); apiResult.setCode(code);
...@@ -93,5 +107,20 @@ public class R<T> implements Serializable { ...@@ -93,5 +107,20 @@ public class R<T> implements Serializable {
apiResult.setMsg(msg); apiResult.setMsg(msg);
return apiResult; return apiResult;
} }
private static <T> R<T> restResult(T data, int code, String msg,String debugMsg) {
R<T> apiResult = new R<>();
apiResult.setCode(code);
apiResult.setData(data);
apiResult.setMsg(msg);
apiResult.setDebugMsg(debugMsg);
return apiResult;
}
public T detach(){
if(this.code==1){
throw new SysException(this.msg);
}
return data;
}
} }
package com.syc.slm.common.core.util;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.slmbi.exception.SysException;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.lang.reflect.Type;
import java.util.Map;
/**
* slm-bi
* RestTemplate 远程调用工具类
* @author : lin
* @date : 2021-04-13 10:15
**/
public final class RestTemplateUtils {
private static final RestTemplate REST_TEMPLATE = new RestTemplate();
//#region ----------------------------------GET-------------------------------------------------------
/**
* GET请求调用方式
*
* @param url 请求URL
* @param responseType 返回对象类型
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> get(String url, Class<T> responseType) {
return REST_TEMPLATE.getForEntity(url, responseType);
}
/**
* GET请求调用方式
*
* @param url 请求URL
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> get(String url, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.getForEntity(url, responseType, uriVariables);
}
/**
* GET请求调用方式
*
* @param url 请求URL
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> get(String url, Class<T> responseType, Map<String, ?> uriVariables) {
return REST_TEMPLATE.getForEntity(url, responseType, uriVariables);
}
/**
* 带请求头的GET请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> get(String url, Map<String, String> headers, Class<T> responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return get(url, httpHeaders, responseType, uriVariables);
}
public static <TResult>TResult get(String url, Map<String, String> headerMap, final Type resultType, Map<String, ?> uriVariables) {
try {
ResponseEntity<String> response = get(url, headerMap, String.class, uriVariables);
if(response.getStatusCodeValue()==200){
if(resultType.equals(String.class)) {
return (TResult)response.getBody();
}
return SlmConstants.gson.fromJson(response.getBody(), resultType);
}
}
catch (Exception e) {
e.printStackTrace();
throw new SysException("出错啦,请联系管理员",e.toString());
}
return null;
}
/**
* 带请求头的GET请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> get(String url, HttpHeaders headers, Class<T> responseType, Object... uriVariables) {
HttpEntity<?> requestEntity = new HttpEntity<>(headers);
return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的GET请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> get(String url, Map<String, String> headers, Class<T> responseType, Map<String, ?> uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return get(url, httpHeaders, responseType, uriVariables);
}
/**
* 带请求头的GET请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> get(String url, HttpHeaders headers, Class<T> responseType, Map<String, ?> uriVariables) {
HttpEntity<?> requestEntity = new HttpEntity<>(headers);
return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables);
}
//#endregion
//#region ----------------------------------POST-------------------------------------------------------
/**
* POST请求调用方式
*
* @param url 请求URL
* @param responseType 返回对象类型
* @return
*/
public static <T> ResponseEntity<T> post(String url, Class<T> responseType) {
return REST_TEMPLATE.postForEntity(url, HttpEntity.EMPTY, responseType);
}
/**
* POST请求调用方式
*
* @param url 请求URL
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, Object requestBody, Class<T> responseType) {
return REST_TEMPLATE.postForEntity(url, requestBody, responseType);
}
/**
* POST请求调用方式
*
* @param url 请求URL
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, Object requestBody, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.postForEntity(url, requestBody, responseType, uriVariables);
}
/**
* POST请求调用方式
*
* @param url 请求URL
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
return REST_TEMPLATE.postForEntity(url, requestBody, responseType, uriVariables);
}
/**
* 带请求头的POST请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, Map<String, String> headers, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return post(url, httpHeaders, requestBody, responseType, uriVariables);
}
/**
* 带请求头的POST请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);
return post(url, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的POST请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, Map<String, String> headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return post(url, httpHeaders, requestBody, responseType, uriVariables);
}
/**
* 带请求头的POST请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);
return post(url, requestEntity, responseType, uriVariables);
}
/**
* 自定义请求头和请求体的POST请求调用方式
*
* @param url 请求URL
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.exchange(url, HttpMethod.POST, requestEntity, responseType, uriVariables);
}
/**
* 自定义请求头和请求体的POST请求调用方式
*
* @param url 请求URL
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> post(String url, HttpEntity<?> requestEntity, Class<T> responseType, Map<String, ?> uriVariables) {
return REST_TEMPLATE.exchange(url, HttpMethod.POST, requestEntity, responseType, uriVariables);
}
//#endregion
//#region ----------------------------------PUT-------------------------------------------------------
/**
* PUT请求调用方式
*
* @param url 请求URL
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, Class<T> responseType, Object... uriVariables) {
return put(url, HttpEntity.EMPTY, responseType, uriVariables);
}
/**
* PUT请求调用方式
*
* @param url 请求URL
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody);
return put(url, requestEntity, responseType, uriVariables);
}
/**
* PUT请求调用方式
*
* @param url 请求URL
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody);
return put(url, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的PUT请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, Map<String, String> headers, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return put(url, httpHeaders, requestBody, responseType, uriVariables);
}
/**
* 带请求头的PUT请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);
return put(url, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的PUT请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, Map<String, String> headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return put(url, httpHeaders, requestBody, responseType, uriVariables);
}
/**
* 带请求头的PUT请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);
return put(url, requestEntity, responseType, uriVariables);
}
/**
* 自定义请求头和请求体的PUT请求调用方式
*
* @param url 请求URL
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.exchange(url, HttpMethod.PUT, requestEntity, responseType, uriVariables);
}
/**
* 自定义请求头和请求体的PUT请求调用方式
*
* @param url 请求URL
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> put(String url, HttpEntity<?> requestEntity, Class<T> responseType, Map<String, ?> uriVariables) {
return REST_TEMPLATE.exchange(url, HttpMethod.PUT, requestEntity, responseType, uriVariables);
}
//#endregion
//#region ----------------------------------DELETE-------------------------------------------------------
/**
* DELETE请求调用方式
*
* @param url 请求URL
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Class<T> responseType, Object... uriVariables) {
return delete(url, HttpEntity.EMPTY, responseType, uriVariables);
}
/**
* DELETE请求调用方式
*
* @param url 请求URL
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Class<T> responseType, Map<String, ?> uriVariables) {
return delete(url, HttpEntity.EMPTY, responseType, uriVariables);
}
/**
* DELETE请求调用方式
*
* @param url 请求URL
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody);
return delete(url, requestEntity, responseType, uriVariables);
}
/**
* DELETE请求调用方式
*
* @param url 请求URL
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody);
return delete(url, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Map<String, String> headers, Class<T> responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return delete(url, httpHeaders, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, HttpHeaders headers, Class<T> responseType, Object... uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers);
return delete(url, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Map<String, String> headers, Class<T> responseType, Map<String, ?> uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return delete(url, httpHeaders, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, HttpHeaders headers, Class<T> responseType, Map<String, ?> uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers);
return delete(url, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Map<String, String> headers, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return delete(url, httpHeaders, requestBody, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Object... uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);
return delete(url, requestEntity, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, Map<String, String> headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return delete(url, httpHeaders, requestBody, responseType, uriVariables);
}
/**
* 带请求头的DELETE请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param requestBody 请求参数体
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);
return delete(url, requestEntity, responseType, uriVariables);
}
/**
* 自定义请求头和请求体的DELETE请求调用方式
*
* @param url 请求URL
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.exchange(url, HttpMethod.DELETE, requestEntity, responseType, uriVariables);
}
/**
* 自定义请求头和请求体的DELETE请求调用方式
*
* @param url 请求URL
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> delete(String url, HttpEntity<?> requestEntity, Class<T> responseType, Map<String, ?> uriVariables) {
return REST_TEMPLATE.exchange(url, HttpMethod.DELETE, requestEntity, responseType, uriVariables);
}
//#endregion
//#region ----------------------------------通用方法-------------------------------------------------------
/**
* 通用调用方式
*
* @param url 请求URL
* @param method 请求方法类型
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.exchange(url, method, requestEntity, responseType, uriVariables);
}
/**
* 通用调用方式
*
* @param url 请求URL
* @param method 请求方法类型
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,与Map中的key对应
* @return ResponseEntity 响应对象封装类
*/
public static <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Map<String, ?> uriVariables) {
return REST_TEMPLATE.exchange(url, method, requestEntity, responseType, uriVariables);
}
//#endregion
/**
* 获取RestTemplate实例对象,可自由调用其方法
*
* @return RestTemplate实例对象
*/
public static RestTemplate getRestTemplate() {
return REST_TEMPLATE;
}
}
\ No newline at end of file
package com.syc.slm.common.core.util;
import com.google.common.collect.Maps;
import com.syc.slm.slmbi.exception.SysException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* slm-bi
* ServletUtils 工具类
* @author : lin
* @date : 2021-04-13 10:15
**/
public final class ServletUtils {
/**
* 获取HttpServletRequest
* @return request
*/
public static HttpServletRequest getHttpServletRequest() {
RequestAttributes attr = RequestContextHolder.getRequestAttributes();
if(attr==null) {
throw new SysException("无法提取 request");
}
return ((ServletRequestAttributes) attr).getRequest();
}
public static Map<String, String> getHeaderMap(HttpServletRequest request){
Map<String,String> result = Maps.newHashMap();
Enumeration<String> names = request.getHeaderNames();
String name;
while(names.hasMoreElements()){
name = names.nextElement();
String val = request.getHeader(name);
if(StringUtils.isNotEmpty(val)) {
result.put(name, val);
}
}
return result;
}
}
package com.syc.slm.slmbi.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
* slm-bi
* Influxdb 配置
* @author : lin
* @date : 2021-03-25 10:50
**/
@Data
@Configuration
public class InfluxdbConfig {
@Value("${influxdb.host}")
public String host;
@Value("${influxdb.port}")
public String port;
@Value("${influxdb.username}")
public String username;
@Value("${influxdb.password}")
public String password;
}
package com.syc.slm.slmbi.config; package com.syc.slm.slmbi.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -20,4 +21,15 @@ public class MybatisPlusConfig { ...@@ -20,4 +21,15 @@ public class MybatisPlusConfig {
public PaginationInterceptor paginationInterceptor() { public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor(); return new PaginationInterceptor();
} }
// /**
// * 自动填充数据
// */
// @Bean
// @ConditionalOnMissingBean(MateMetaObjectHandler.class)
// public MateMetaObjectHandler mateMetaObjectHandler(){
// MateMetaObjectHandler metaObjectHandler = new MateMetaObjectHandler();
// log.info("MateMetaObjectHandler [{}]", metaObjectHandler);
// return metaObjectHandler;
// }
} }
package com.syc.slm.slmbi.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.common.core.util.ServletUtils;
import com.syc.slm.slmbi.entity.CurrentUser;
import com.syc.slm.slmbi.exception.SysException;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.nio.channels.SelectableChannel;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Map;
import java.util.function.Supplier;
/**
* mybatisplus自定义填充公共字段 ,即没有传的字段自动填充
* @author lin
* @date 2021-04-01 10:52:44
*/
@Component
@Slf4j
public class SysMetaObjectHandler implements MetaObjectHandler {
private static final String ID = "id";
private static final String APP_ID = "appId";
private static final String CREATOR = "creator";
private static final String CREATOR_NAME = "creatorName";
private static final String CREATE_TIME = "createTime";
private static final String UPDATER = "updater";
private static final String UPDATER_NAME = "updaterName";
private static final String UPDATE_TIME = "updateTime";
private static final String RECORD_STATUS = "recordStatus";
private CurrentUser userInfo(){
HttpServletRequest request = ServletUtils.getHttpServletRequest();
Map<String, String> headerMap = ServletUtils.getHeaderMap(request);
if(CollectionUtils.isEmpty(headerMap)){
throw new SysException("头部不能为空");
}
String token =headerMap.get("token");
if(StringUtils.isBlank(token)){
throw new SysException("token不能为空");
}
Object currentUser = request.getSession().getAttribute(token);
CurrentUser user =null;
if(ObjectUtils.isNotEmpty(currentUser)){
user= SlmConstants.gson.fromJson(currentUser.toString(),CurrentUser.class);
}
if(ObjectUtils.isEmpty(user)){
throw new SysException("获取不到当前用户");
}
return user;
}
/**
* 插入使用
*/
@Override
public void insertFill(MetaObject metaObject) {
CurrentUser user = userInfo();
fillValue(metaObject,
ID,
() -> (metaObject.getValue(ID) == null ? IdWorker.get32UUID() : metaObject.getValue(ID)));
fillValue(metaObject,
APP_ID,
() -> (metaObject.getValue(APP_ID) == null ? user.getAppId() : metaObject.getValue(APP_ID)));
fillValue(metaObject,
CREATOR,
() -> (metaObject.getValue(CREATOR) == null ? user.getUid() : metaObject.getValue(CREATOR)));
fillValue(metaObject,
CREATOR_NAME,
() -> (metaObject.getValue(CREATOR_NAME) == null ? user.getName() : metaObject.getValue(CREATOR_NAME)));
fillValue(metaObject,
CREATE_TIME,
() -> (metaObject.getValue(CREATE_TIME) == null ? new Date() : metaObject.getValue(CREATE_TIME)));
fillValue(metaObject,
RECORD_STATUS,
() -> (metaObject.getValue(RECORD_STATUS) == null ? 1 : metaObject.getValue(RECORD_STATUS)));
}
@Override
public void updateFill(MetaObject metaObject) {
CurrentUser user = userInfo();
setFieldValByName(UPDATER, user.getUid(), metaObject);
setFieldValByName(UPDATER_NAME, user.getName(),metaObject);
setFieldValByName(UPDATE_TIME, new Date(), metaObject);
}
private void fillValue(MetaObject metaObject, String fieldName, Supplier<?> valueSupplier) {
if (!metaObject.hasGetter(fieldName)) {
return;
}
Object sidObj = metaObject.getValue(fieldName);
if (sidObj == null && metaObject.hasSetter(fieldName) && valueSupplier != null) {
setFieldValByName(fieldName, valueSupplier.get(), metaObject);
}
}
}
package com.syc.slm.slmbi.controller;
import com.google.common.collect.Maps;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.common.core.util.NetResponseUtils;
import com.syc.slm.common.core.util.R;
import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.entity.CurrentUser;
import com.syc.slm.slmbi.exception.SysException;
import com.syc.slm.slmbi.function.Action0;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.View;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Map;
import java.util.function.Supplier;
/**
* slm-bi
* 抽取公用得controller父类
*
* @author : lin
* @date : 2021-04-06 09:09
**/
@Slf4j
public class BaseRestController {
/**
* 用户token
*/
protected String token;
/**
* 用户信息
*/
protected CurrentUser currentUser;
@Value("${dc_client.host}")
protected String dcClientHost;
@Value("${dc_client.interfaces.positionListUrl}")
protected String positionListUrl;
@Value("${dc_client.interfaces.deptListUrl}")
protected String deptListUrl;
@Value("${dc_client.interfaces.userTree}")
protected String userTree;
@Value("${dc_client.interfaces.variableList}")
protected String variableList;
@Value("${dc_client.interfaces.deviceList}")
protected String deviceList;
@Value("${dc_client.interfaces.deptsRoles}")
protected String deptsRoles;
@ModelAttribute
public void onInit(HttpServletRequest request) {
String uri = request.getRequestURI();
log.info("请求url--->>>>" + uri);
Map<String, String[]> parameterMap = request.getParameterMap();
log.info("请求参数--->>>>"+SlmConstants.gson.toJson(parameterMap));
Enumeration<String> headerNames = request.getHeaderNames();
Map<String,String> headers = Maps.newHashMap();
while (headerNames.hasMoreElements()){
String headerName = headerNames.nextElement();
Enumeration<String> headerValues = request.getHeaders(headerName);
while(headerValues.hasMoreElements()){
headers.put(headerName, headerValues.nextElement());
}
}
log.info("请求头参数--->>>>"+SlmConstants.gson.toJson(headers));
token=request.getHeader("token");
if(!uri.contains("tokens")) {
if (StringUtils.isEmpty(token)) {
throw new SysException("token不能为空");
}
log.info("获取用户信息");
NativeWebRequest webRequest = new ServletWebRequest(request);
Map<String, String> map = (Map<String, String>) webRequest.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
// Map<String, Object> map = (Map<String, Object>) webRequest.getAttribute(View.PATH_VARIABLES, RequestAttributes.SCOPE_REQUEST);
Map<String,String> heads = Maps.newHashMap();
heads.put("token",token);
Map<String,String> uriVariables =Maps.newHashMap();
uriVariables.put("appId",map.get("appId")+"");
String getUrl =dcClientHost+"/{appId}/users/user-info";
R<Map<String,Object>> result = RestTemplateUtils.get(getUrl, heads, new TypeToken<R<Map<String,Object>>>() {}.getType(), uriVariables);
Map<String,Object> userInfo= result.detach();
currentUser = new CurrentUser();
currentUser.setUid(userInfo.get("uid")+"");
currentUser.setPlatformId(userInfo.get("platform_id")+"");
currentUser.setName(userInfo.get("real_name")+"");
currentUser.setAppId(userInfo.get("app_id")+"");
currentUser.setToken(token);
request.getSession().setAttribute(token, SlmConstants.gson.toJson(currentUser));
}
}
R<Object> call(Action0 action) {
return NetResponseUtils.call(action);
}
<T> R<T> call(Supplier<T> supplier) {
return NetResponseUtils.call(supplier);
}
}
...@@ -5,6 +5,7 @@ import com.syc.slm.slmbi.service.DeptService; ...@@ -5,6 +5,7 @@ import com.syc.slm.slmbi.service.DeptService;
import com.syc.slm.slmbi.vo.DeptVo; import com.syc.slm.slmbi.vo.DeptVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -18,18 +19,20 @@ import java.util.List; ...@@ -18,18 +19,20 @@ import java.util.List;
* @author : lin * @author : lin
* @date : 2021-03-25 18:39 * @date : 2021-03-25 18:39
**/ **/
@RequestMapping("/departments") @RequestMapping("/{appId}/departments")
@RestController @RestController
@Api(value = "部门信息接口", description = "部门信息接口") @Api(value = "部门信息接口", tags = "部门信息接口")
public class DeptController { public class DeptController extends BaseRestController{
@Autowired @Autowired
private DeptService deptService; private DeptService deptService;
@GetMapping @GetMapping
@ApiOperation("部门查询") @ApiOperation("部门查询")
@ApiImplicitParam(name = "deptName", value = "部门名称") @ApiImplicitParams({@ApiImplicitParam(name = "deptName", value = "部门名称",dataTypeClass = String.class),
public R<List<DeptVo>> selectDeptList(@RequestParam(value = "deptName", required = false) String deptName) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)})
return R.ok(deptService.selectDeptList(deptName)); public R<List<DeptVo>> selectDeptList(@PathVariable String appId,
@RequestParam(value = "deptName", required = false) String deptName) {
return call(()->(deptService.selectPositionList(dcClientHost+deptListUrl,token, appId, deptName)));
} }
} }
...@@ -6,6 +6,7 @@ import com.syc.slm.slmbi.service.InstrumentPanelConfigService; ...@@ -6,6 +6,7 @@ import com.syc.slm.slmbi.service.InstrumentPanelConfigService;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo; import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -18,9 +19,9 @@ import org.springframework.web.bind.annotation.*; ...@@ -18,9 +19,9 @@ import org.springframework.web.bind.annotation.*;
* @date : 2021-03-25 19:09 * @date : 2021-03-25 19:09
**/ **/
@RequestMapping("/panel-configs") @RequestMapping("/{appId}/panel-configs")
@RestController @RestController
@Api(value = "仪表板样式以及数据配置") @Api(value = "仪表板样式以及数据配置", tags = "仪表板样式以及数据配置")
public class InstrumentPanelConfigController { public class InstrumentPanelConfigController {
@Autowired @Autowired
...@@ -28,20 +29,23 @@ public class InstrumentPanelConfigController { ...@@ -28,20 +29,23 @@ public class InstrumentPanelConfigController {
@PostMapping @PostMapping
@ApiOperation("保存仪表板样式以及数据配置") @ApiOperation("保存仪表板样式以及数据配置")
public R<String> saveInstrumentPanelConfig(@RequestBody InstrumentPanelConfigDTO config) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(instrumentPanelConfigService.saveConfig(config)); public R<String> saveInstrumentPanelConfig(@PathVariable String appId, @RequestBody InstrumentPanelConfigDTO config) {
return R.ok(instrumentPanelConfigService.saveConfig(appId,config));
} }
@PostMapping("/publish") @PostMapping("/publish")
@ApiOperation("保存发布仪表板样式以及数据配置") @ApiOperation("保存发布仪表板样式以及数据配置")
public R<String> publish(@RequestBody InstrumentPanelConfigDTO config) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(instrumentPanelConfigService.publish(config)); public R<String> publish(@PathVariable String appId, @RequestBody InstrumentPanelConfigDTO config) {
return R.ok(instrumentPanelConfigService.publish(appId,config));
} }
@GetMapping("/{panelId}") @GetMapping("/{panelId}")
@ApiOperation("根据仪表板id获取仪表板配置,并且获取到组件") @ApiOperation("根据仪表板id获取仪表板配置")
@ApiImplicitParam(name = "panelId", value = "仪表板id") @ApiImplicitParams({@ApiImplicitParam(name = "panelId", value = "仪表板id",dataTypeClass = String.class),
public R<InstrumentPanelConfigVo> getConfigByPanelId( @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)})
public R<InstrumentPanelConfigVo> getConfigByPanelId(@PathVariable String appId,
@PathVariable("panelId") String panelId) { @PathVariable("panelId") String panelId) {
return R.ok(instrumentPanelConfigService.getConfigByPanelId(panelId)); return R.ok(instrumentPanelConfigService.getConfigByPanelId(panelId));
} }
......
...@@ -3,15 +3,18 @@ package com.syc.slm.slmbi.controller; ...@@ -3,15 +3,18 @@ package com.syc.slm.slmbi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.syc.slm.common.core.util.R; import com.syc.slm.common.core.util.R;
import com.syc.slm.slmbi.dto.SaveInstrumentPanelDTO; import com.syc.slm.slmbi.dto.SaveInstrumentPanelDTO;
import com.syc.slm.slmbi.dto.SearchInstrumentPanelDTO; import com.syc.slm.slmbi.dto.QueryInstrumentPanelDTO;
import com.syc.slm.slmbi.service.InstrumentPanelService; import com.syc.slm.slmbi.service.InstrumentPanelService;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import com.syc.slm.slmbi.vo.InstrumentPanelVo; import com.syc.slm.slmbi.vo.InstrumentPanelVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
...@@ -22,9 +25,9 @@ import java.util.List; ...@@ -22,9 +25,9 @@ import java.util.List;
* @date : 2021-03-25 15:10 * @date : 2021-03-25 15:10
**/ **/
@RestController @RestController
@RequestMapping("/panels") @RequestMapping("/{appId}/panels")
@Api(value = "仪表板", description = "仪表板配置接口") @Api(value = "仪表板配置接口", tags = "仪表板配置接口")
public class InstrumentPanelController { public class InstrumentPanelController extends BaseRestController {
@Autowired @Autowired
private InstrumentPanelService instrumentPanelService; private InstrumentPanelService instrumentPanelService;
...@@ -37,55 +40,67 @@ public class InstrumentPanelController { ...@@ -37,55 +40,67 @@ public class InstrumentPanelController {
*/ */
@GetMapping @GetMapping
@ApiOperation("仪表板列表") @ApiOperation("仪表板列表")
public R<IPage<InstrumentPanelVo>> selectInstrumentPanelList(@RequestBody SearchInstrumentPanelDTO where) { @ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)
return R.ok(instrumentPanelService.selectInstrumentPanelList(where)); public R<IPage<InstrumentPanelVo>> selectInstrumentPanelList(@PathVariable String appId,
QueryInstrumentPanelDTO where) {
return call(() -> instrumentPanelService.selectInstrumentPanelList(appId, where));
} }
@PostMapping @PostMapping
@ApiOperation("新增仪表板") @ApiOperation("新增仪表板")
public R<String> saveInstrumentPanel(@RequestBody SaveInstrumentPanelDTO panel) { @ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)
return R.ok(instrumentPanelService.savePanel(panel)); public R<String> saveInstrumentPanel(@PathVariable String appId, @RequestBody SaveInstrumentPanelDTO panel) {
return call(() -> instrumentPanelService.savePanel(appId, panel));
} }
@PutMapping("/batch-publish") @PutMapping("/publish")
@ApiOperation("批量发布") @ApiOperation("批量发布")
@ApiImplicitParam(name = "ids", value = "仪表板id集合", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "ids",
public R<Boolean> batchPublish(@RequestBody List<String> ids) { value = "仪表板id集合",
return R.ok(instrumentPanelService.batchPublish(ids)); required = true,
dataTypeClass = Arrays.class),
@ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)})
public R<List<String>> batchPublish(@PathVariable String appId, @RequestParam List<String> ids) {
return call(() -> instrumentPanelService.batchPublish(ids));
} }
@PutMapping("/{id}/offline") @PutMapping("/{id}/offline")
@ApiOperation("下线") @ApiOperation("下线")
@ApiImplicitParam(name = "id", value = "仪表板id", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "仪表板id", required = true, dataTypeClass = String.class),
public R<String> offline(@PathVariable("id") String id) { @ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)})
return R.ok(instrumentPanelService.offline(id)); public R<String> offline(@PathVariable String appId, @PathVariable("id") String id) {
return call(() -> instrumentPanelService.offline(id));
} }
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@ApiOperation("删除仪表板") @ApiOperation("删除仪表板")
@ApiImplicitParam(name = "id", value = "仪表板id", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "仪表板id", required = true, dataTypeClass = String.class),
public R<String> delInstrumentPanel(@PathVariable("id") String id) { @ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)})
return R.ok(instrumentPanelService.delPanel(id)); public R<String> delInstrumentPanel(@PathVariable String appId, @PathVariable("id") String id) {
return call(() -> instrumentPanelService.delPanel(id));
} }
@PostMapping("/save-as") @PostMapping("/save-as")
@ApiOperation("另存为") @ApiOperation("另存为")
public R<String> saveAs(@RequestBody SaveInstrumentPanelDTO panelDTO) { @ApiImplicitParam(name = "id", value = "仪表板id", required = true, dataTypeClass = String.class)
return R.ok(instrumentPanelService.saveAsPanel(panelDTO)); public R<String> saveAs(@PathVariable String appId, @RequestBody SaveInstrumentPanelDTO panelDTO) {
return call(() -> instrumentPanelService.saveAsPanel(appId, panelDTO));
} }
@PostMapping("/{id}/show-recovery-btn") @PostMapping("/{id}/show-recovery-btn")
@ApiOperation("是否显示恢复按钮") @ApiOperation("是否显示恢复按钮")
@ApiImplicitParam(name = "id", value = "仪表板id", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "仪表板id", required = true, dataTypeClass = String.class),
public R<Boolean> showRecoveryBtn(@PathVariable("id") String id) { @ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)})
return R.ok(instrumentPanelService.showRecoveryBtn(id)); public R<Boolean> showRecoveryBtn(@PathVariable String appId, @PathVariable("id") String id) {
return call(() -> instrumentPanelService.showRecoveryBtn(id));
} }
@PutMapping("/{id}/recovery") @PutMapping("/{id}/recovery")
@ApiOperation("恢复按钮操作") @ApiOperation("恢复按钮操作")
@ApiImplicitParam(name = "id", value = "仪表板id", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "仪表板id", required = true, dataTypeClass = String.class),
public R<String> recoveryInstrumentPanel(@PathVariable("id") String id) { @ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)})
return R.ok(instrumentPanelService.recoveryPanel(id)); public R<InstrumentPanelConfigVo> recoveryInstrumentPanel(@PathVariable String appId, @PathVariable("id") String id) {
return call(() -> instrumentPanelService.recoveryPanel(id));
} }
} }
package com.syc.slm.slmbi.controller; package com.syc.slm.slmbi.controller;
import com.syc.slm.common.core.util.R; import com.syc.slm.common.core.util.R;
import com.syc.slm.slmbi.dto.CreateInstrumentPanelGroupDTO;
import com.syc.slm.slmbi.dto.InstrumentPanelGroupDTO; import com.syc.slm.slmbi.dto.InstrumentPanelGroupDTO;
import com.syc.slm.slmbi.service.InstrumentPanelGroupService; import com.syc.slm.slmbi.service.InstrumentPanelGroupService;
import com.syc.slm.slmbi.vo.InstrumentPanelGroupVo; import com.syc.slm.slmbi.vo.InstrumentPanelGroupVo;
import com.syc.slm.slmbi.vo.PanelGroupVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
...@@ -22,47 +22,43 @@ import java.util.List; ...@@ -22,47 +22,43 @@ import java.util.List;
* @date : 2021-03-25 15:07 * @date : 2021-03-25 15:07
**/ **/
@RestController @RestController
@RequestMapping("/groups") @RequestMapping("/{appId}/groups")
@Api(value = "仪表板分组") @Api(value = "仪表板分组", tags = "仪表板分组")
public class InstrumentPanelGroupController { public class InstrumentPanelGroupController extends BaseRestController{
@Autowired @Autowired
private InstrumentPanelGroupService instrumentPanelGroupService; private InstrumentPanelGroupService instrumentPanelGroupService;
@GetMapping
@ApiOperation("第一次进入页面,或者点击查询,获取全部分组下的仪表板数据,以及分组数据")
@ApiImplicitParam(name = "name", value = "分组名称或者仪表板名称")
public R<List<PanelGroupVo>> loadTrees(
@RequestParam(value = "name", required = false) String name) {
return R.ok(instrumentPanelGroupService.loadTrees(name));
}
@GetMapping("/children") @GetMapping
@ApiOperation("点击节点获取,该分组下的仪表板信息,以及分组数据") @ApiOperation("仪表板列表查询,仪表板分组增删改页面的分组树")
@ApiImplicitParams({@ApiImplicitParam(name = "groupId", value = "分组id", required = true), @ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "分组名称或者仪表板名称")}) @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class),
public R<List<PanelGroupVo>> children(@RequestParam("groupId") String groupId, @ApiImplicitParam(name = "name", value = "分组名称",dataTypeClass = String.class)
@RequestParam(value = "name", required = false) String name) { })
return R.ok(instrumentPanelGroupService.children(groupId, name)); public R<List<InstrumentPanelGroupVo>> selectGroupList(@PathVariable String appId, @RequestParam(required = false,value = "name") String name) {
return call(()->instrumentPanelGroupService.selectGroupList(appId,name));
} }
@PostMapping @PostMapping
@ApiOperation("保存仪表板分组") @ApiOperation("保存仪表板分组")
public R<String> saveGroup(@RequestBody InstrumentPanelGroupDTO group) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(instrumentPanelGroupService.saveGroup(group)); public R<String> saveGroup(@PathVariable String appId, @RequestBody CreateInstrumentPanelGroupDTO group) {
return call(()->instrumentPanelGroupService.saveGroup(group,appId));
} }
@PutMapping @PutMapping
@ApiOperation("更新仪表板分组") @ApiOperation("更新仪表板分组(一级分组是初始化得,不允许修改,其他分组修改必须传parentId)")
public R<String> updateGroup(@RequestBody InstrumentPanelGroupDTO group) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(instrumentPanelGroupService.updateGroup(group)); public R<String> updateGroup(@PathVariable String appId, @RequestBody InstrumentPanelGroupDTO group) {
return call(()->instrumentPanelGroupService.updateGroup(group,appId));
} }
@DeleteMapping("/{groupId}") @DeleteMapping("/{groupId}")
@ApiOperation("删除仪表板分组") @ApiOperation("删除仪表板分组")
public R<String> delGroup(@PathVariable String groupId) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(instrumentPanelGroupService.delGroup(groupId)); public R<String> delGroup(@PathVariable String appId, @PathVariable String groupId) {
return call(()->instrumentPanelGroupService.delGroup(groupId));
} }
} }
...@@ -6,10 +6,12 @@ import com.syc.slm.slmbi.service.InstrumentPanelPermissionService; ...@@ -6,10 +6,12 @@ import com.syc.slm.slmbi.service.InstrumentPanelPermissionService;
import com.syc.slm.slmbi.vo.InstrumentPanelPermissionVo; import com.syc.slm.slmbi.vo.InstrumentPanelPermissionVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
...@@ -19,39 +21,55 @@ import java.util.List; ...@@ -19,39 +21,55 @@ import java.util.List;
* @author : lin * @author : lin
* @date : 2021-03-25 18:54 * @date : 2021-03-25 18:54
**/ **/
@Api(value = "仪表板权限控制") @Api(value = "仪表板权限控制", tags = "仪表板权限控制")
@RestController @RestController
@RequestMapping("/panel-permissions") @RequestMapping("/{appId}/panel-permissions")
public class InstrumentPanelPermissionController { public class InstrumentPanelPermissionController extends BaseRestController {
@Autowired @Autowired
private InstrumentPanelPermissionService instrumentPanelPermissionService; private InstrumentPanelPermissionService instrumentPanelPermissionService;
@PostMapping @PostMapping
@ApiOperation("保存仪表板权限(列表的属性保存)") @ApiOperation("保存仪表板权限(列表的属性保存)")
public R<String> savePermission(@RequestBody List<InstrumentPanelPermissionDTO> permissions) { @ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)
return R.ok(instrumentPanelPermissionService.savePermission(permissions)); public R<String> savePermission(@PathVariable String appId, @RequestBody InstrumentPanelPermissionDTO permission) {
return call(() -> instrumentPanelPermissionService.savePermission(permission));
} }
@PostMapping("/{panelId}/to-copy") @GetMapping("/{panelId}/to-copy")
@ApiOperation("从其他仪表板复制配置") @ApiOperation("从其他仪表板复制配置")
@ApiImplicitParam(name = "panelId", value = "其他仪表板id", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "appId",
public R<List<InstrumentPanelPermissionVo>> saveCopyOtherPermission(@PathVariable String panelId) { value = "租户id",
return R.ok(instrumentPanelPermissionService.saveCopyOtherPermission(panelId)); required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "panelId", value = "其他仪表板id", required = true, dataTypeClass = String.class)})
public R<InstrumentPanelPermissionVo> saveCopyOtherPermission(@PathVariable String appId,
@PathVariable String panelId) {
return call(() -> (instrumentPanelPermissionService.saveCopyOtherPermission(panelId)));
} }
@PostMapping("/{panelId}/copy-to") @PostMapping("/copy-to")
@ApiOperation("将仪表板权限复制给其他仪表板") @ApiOperation("将仪表板权限复制给其他仪表板")
@ApiImplicitParam(name = "panelId", value = "其他仪表板id", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "appId",
public R<String> saveCopyToOtherPermission(@RequestBody List<InstrumentPanelPermissionDTO> permissions, value = "租户id",
@PathVariable String panelId) { required = true,
return R.ok(instrumentPanelPermissionService.saveCopyToOtherPermission(permissions, panelId)); dataTypeClass = String.class),
@ApiImplicitParam(name = "panelIds", value = "其他仪表板id", required = true, dataTypeClass = Arrays.class)})
public R<Object> saveCopyToOtherPermission(@PathVariable String appId,
@RequestBody InstrumentPanelPermissionDTO permission,
@RequestParam List<String> panelIds) {
return call(() -> instrumentPanelPermissionService.saveCopyToOtherPermission(permission, panelIds));
} }
@GetMapping("/{panelId}") @GetMapping("/{panelId}")
@ApiOperation("根据仪表板id获取仪表板权限") @ApiOperation("根据仪表板id获取仪表板权限")
@ApiImplicitParam(name = "panelId", value = "仪表板id", required = true) @ApiImplicitParams({@ApiImplicitParam(name = "appId",
public R<List<InstrumentPanelPermissionVo>> selectPermissionByPanelId(@PathVariable String panelId) { value = "租户id",
return R.ok(instrumentPanelPermissionService.selectPermissionByPanelId(panelId)); required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "panelId", value = "其他仪表板id", required = true, dataTypeClass = String.class)})
public R<InstrumentPanelPermissionVo> selectPermissionByPanelId(@PathVariable String appId,
@PathVariable String panelId) {
return call(() -> (instrumentPanelPermissionService.selectPermissionByPanelId(panelId)));
} }
} }
package com.syc.slm.slmbi.controller;
import com.syc.slm.common.core.util.R;
import com.syc.slm.slmbi.service.InstrumentPanelConfigService;
import com.syc.slm.slmbi.service.InstrumentPanelTreeService;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @author liangbin
* @date 2021/3/31
*/
@RestController
@RequestMapping("/{appId}/panel-tree")
@Api(value = "仪表板树接口", tags = "仪表板树接口")
public class InstrumentPanelTreeController extends BaseRestController {
@Autowired
private InstrumentPanelTreeService treeService;
@Autowired
private InstrumentPanelConfigService configService;
@GetMapping
@ApiOperation("显示已发布仪表板树==》(刚进入页面)")
@ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class)
public R<List<PanelTreeNodeVo>> loadTrees(@PathVariable String appId) {
return call(() -> (treeService.loadTrees(appId,dcClientHost+deptsRoles,currentUser)));
}
@GetMapping("/search")
@ApiOperation("显示已发布仪表板树==》(点击查询)")
@ApiImplicitParams({@ApiImplicitParam(name = "appId",
value = "租户id",
required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "name", value = "分组名称或者仪表板名称", dataTypeClass = String.class)})
public R<List<PanelTreeNodeVo>> loadTrees(@PathVariable String appId,
@RequestParam(value = "name", required = false) String name) {
return call(() -> (treeService.loadTrees(appId, name,dcClientHost+deptsRoles,currentUser)));
}
@GetMapping("/children")
@ApiOperation("点击节点,显示已发布仪表板树")
@ApiImplicitParams({@ApiImplicitParam(name = "appId",
value = "租户id",
required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "nodeId", value = "分组id", required = true, dataTypeClass = String.class),
@ApiImplicitParam(name = "name", value = "分组名称或者仪表板名称", dataTypeClass = String.class)})
public R<List<PanelTreeNodeVo>> children(@PathVariable String appId,
@RequestParam("nodeId") String nodeId,
@RequestParam(value = "name", required = false) String name) {
return call(() -> (treeService.children(nodeId, name,dcClientHost+deptsRoles,currentUser)));
}
@GetMapping("/children-panel")
@ApiOperation("点击节点,显示已发布仪表板配置")
@ApiImplicitParams({@ApiImplicitParam(name = "appId",
value = "租户id",
required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "panelId", value = "仪表板id", required = true, dataTypeClass = String.class)})
public R<InstrumentPanelConfigVo> childrenPanel(@PathVariable String appId, @RequestParam("nodeId") String nodeId) {
return call(() -> (configService.getPublishConfigByPanelId(nodeId)));
}
@GetMapping("/copy")
@ApiOperation("复制仪表板配置树")
@ApiImplicitParams({@ApiImplicitParam(name = "appId",
value = "租户id",
required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class),
@ApiImplicitParam(name = "name", value = "分组名称或者仪表板名称", dataTypeClass = String.class)})
public R<List<PanelTreeNodeVo>> copyTreeList(@PathVariable String appId,@RequestParam(value = "name", required = false) String name) {
return call(() -> (treeService.copyTreeList(appId,name)));
}
@GetMapping("/cite")
@ApiOperation("复用仪表板树")
@ApiImplicitParams({@ApiImplicitParam(name = "appId",
value = "租户id",
required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class),
@ApiImplicitParam(name = "name", value = "分组名称,仪表板名称,组件名称", dataTypeClass = String.class)})
public R<List<PanelTreeNodeVo>> cite(@PathVariable String appId,@RequestParam(value = "name", required = false) String name) {
return call(() -> (treeService.citeTreeList(appId,name)));
}
@GetMapping("/cite-assembly")
@ApiOperation("复用仪表板树点击组件获取配置(会返回一个map 优先从key为 wait_published 中匹配,如果找不到再从key 为published 中匹配 )")
@ApiImplicitParams({@ApiImplicitParam(name = "appId",
value = "租户id",
required = true,
dataTypeClass = String.class),
@ApiImplicitParam(name = "appId", value = "租户id", required = true, dataTypeClass = String.class),
@ApiImplicitParam(name = "panelId", value = "仪表板id", required = true, dataTypeClass = String.class)})
public R<Map<String,String>> assembly(@PathVariable String appId,@RequestParam(value = "panelId", required = false) String panelId) {
return call(() -> (treeService.assembly(appId,panelId)));
}
}
...@@ -5,7 +5,9 @@ import com.syc.slm.slmbi.service.PositionService; ...@@ -5,7 +5,9 @@ import com.syc.slm.slmbi.service.PositionService;
import com.syc.slm.slmbi.vo.PositionVo; import com.syc.slm.slmbi.vo.PositionVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.catalina.Host;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -18,19 +20,20 @@ import java.util.List; ...@@ -18,19 +20,20 @@ import java.util.List;
* @author : lin * @author : lin
* @date : 2021-03-25 17:26 * @date : 2021-03-25 17:26
**/ **/
@Api(value = "职位查询列表") @Api(value = "职位查询列表", tags = "职位查询列表")
@RestController @RestController
@RequestMapping("/positions") @RequestMapping("/{appId}/positions")
public class PositionController { public class PositionController extends BaseRestController{
@Autowired @Autowired
private PositionService positionWorkService; private PositionService positionWorkService;
@GetMapping @GetMapping
@ApiOperation("职位查询列表") @ApiOperation("职位查询列表")
@ApiImplicitParam(name = "positionName", value = "职位名称") @ApiImplicitParams({@ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class),
public R<List<PositionVo>> selectPositionList( @ApiImplicitParam(name = "positionName", value = "职位名称",dataTypeClass = String.class)})
public R<List<PositionVo>> selectPositionList(@PathVariable String appId,
@RequestParam(value = "positionName", required = false) String positionName) { @RequestParam(value = "positionName", required = false) String positionName) {
return R.ok(positionWorkService.selectPositionList(positionName)); return call(()->(positionWorkService.selectPositionList(dcClientHost+positionListUrl,token, appId, positionName)));
} }
} }
package com.syc.slm.slmbi.controller;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.google.common.collect.Maps;
import com.syc.slm.common.core.util.R;
import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.exception.SysException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sound.midi.SysexMessage;
import java.util.Map;
/**
* slm-bi
* 获取token
* @author : lin
* @date : 2021-04-14 16:17
**/
@RestController
@RequestMapping("/tokens")
@Api(value ="获取token",tags = "获取token")
public class TokenController extends BaseRestController{
@PostMapping
@ApiOperation("获取token")
@ApiImplicitParams({
@ApiImplicitParam(name = "account", value = "15865516442", required = true, dataTypeClass = String.class),
@ApiImplicitParam(name = "password", value = "123456", required = true, dataTypeClass = String.class),
@ApiImplicitParam(name = "origin", value = "0", required = true, dataTypeClass = String.class)
})
public R<Map<String,Object>> token(String account,String password,Integer origin){
return call(()->{
Map<String ,Object> maps = Maps.newHashMap();
String uri =dcClientHost+"/dc/user/token?account="+account+"&password="+password+"&origin="+origin;
ResponseEntity<Map> post = RestTemplateUtils.post(uri, Map.class);
if(ObjectUtils.isNotEmpty(post)){
Integer code = (int)post.getBody().get("code");
if(code!=0){
throw new SysException(post.getBody().get("msg")+"");
}
Map<String,Object> data = (Map<String,Object>)post.getBody().get("data");
maps.put("token",data.get("token"));
maps.put("appId",data.get("app_id"));
}
return maps;
});
}
}
...@@ -2,9 +2,11 @@ package com.syc.slm.slmbi.controller; ...@@ -2,9 +2,11 @@ package com.syc.slm.slmbi.controller;
import com.syc.slm.common.core.util.R; import com.syc.slm.common.core.util.R;
import com.syc.slm.slmbi.service.UserService; import com.syc.slm.slmbi.service.UserService;
import com.syc.slm.slmbi.vo.UserTreeVo;
import com.syc.slm.slmbi.vo.UserVo; import com.syc.slm.slmbi.vo.UserVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -18,19 +20,19 @@ import java.util.List; ...@@ -18,19 +20,19 @@ import java.util.List;
* @author : lin * @author : lin
* @date : 2021-03-25 18:45 * @date : 2021-03-25 18:45
**/ **/
@Api(value = "用户信息", description = "用户信息接口") @Api(value = "用户信息", tags = "用户信息接口")
@RestController @RestController
@RequestMapping("/users") @RequestMapping("/{appId}/users")
public class UserController { public class UserController extends BaseRestController{
@Autowired @Autowired
private UserService userService; private UserService userService;
@GetMapping @GetMapping
@ApiOperation("用户查询") @ApiOperation("用户查询,左边树调用部门树不要传入部门名称,然后右边用户的搜索在页面匹配就好了,一开始会返回所有部门的用户回去")
@ApiImplicitParam(name = "userName", value = "用户名称") @ApiImplicitParams({@ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)})
public R<List<UserVo>> selectUserList(@RequestParam(value = "userName", required = false) String userName) { public R<List<UserTreeVo>> selectUserList(@PathVariable String appId) {
return R.ok(userService.selectUserList(userName)); return call(()->(userService.selectUserList(appId,dcClientHost+userTree,token,null)));
} }
} }
package com.syc.slm.slmbi.controller; package com.syc.slm.slmbi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.Maps;
import com.syc.slm.common.core.util.R; import com.syc.slm.common.core.util.R;
import com.syc.slm.slmbi.dto.HistoryVariableDTO; import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.dto.RealTimeVariableDTO; import com.syc.slm.slmbi.dto.*;
import com.syc.slm.slmbi.dto.VariableDTO;
import com.syc.slm.slmbi.service.VariableService; import com.syc.slm.slmbi.service.VariableService;
import com.syc.slm.slmbi.vo.*; import com.syc.slm.slmbi.vo.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -26,40 +25,87 @@ import java.util.Map; ...@@ -26,40 +25,87 @@ import java.util.Map;
* @date : 2021-03-25 18:45 * @date : 2021-03-25 18:45
**/ **/
@RestController @RestController
@RequestMapping("/variables") @RequestMapping("/{appId}/variables")
@Api(description = "变量控件") @Api(description = "变量控件", tags = "变量控件")
public class VariableController { public class VariableController extends BaseRestController{
@Autowired @Autowired
private VariableService variableService; private VariableService variableService;
@GetMapping("/test")
public Map rest(){
Map<String,String> maps = Maps.newHashMap();
// @RequestParam(value = "token") String token,
// @RequestParam(value = "equipment_info_id", required = false) String equipmentInfoId,
// @RequestParam(value = "customer_id", required = false) String customerId,
// @RequestParam(value = "q_name", required = false) String qName,
// @RequestParam(value = "search_code", required = false, defaultValue = "false") boolean searchCode,
// @RequestParam(value = "search_model", required = false, defaultValue = "false") boolean searchModel,
// @RequestParam(value = "warranty_status", defaultValue = "0") int warrantStatus,
// @RequestParam(value = "page_num", required = false, defaultValue = "1") int pageNum,
// @RequestParam(value = "page_size", required = false, defaultValue = "15") int pageSize)
maps.put("token","345aa488a820448dbb069ea4295d2b15");
maps.put("appId","AAAAAA_9Cs4");
maps.put("equipment_info_id",null);
maps.put("customer_id",null);
maps.put("q_name",null);
maps.put("search_code",null);
maps.put("search_model",null);
maps.put("warranty_status",null);
maps.put("page_num",null);
maps.put("page_size",null);
Map<String,String> heads = Maps.newHashMap();
heads.put("token","345aa488a820448dbb069ea4295d2b15");
R<List<PanelTreeNodeVo>> newR = new R<>();
ResponseEntity<Map> rest = RestTemplateUtils.get(
"http://localhost:2400/dc/{appId}/equipment/info/name/pull?token={token}&equipment_info_id={equipment_info_id}&customer_id={customer_id}&q_name={q_name}&search_code={search_code}&search_model={search_model}&warranty_status={warranty_status}&page_num={page_num}&page_size={page_size}",
heads,
Map.class,
maps);
if (rest != null){
return rest.getBody();
}
return null;
}
@GetMapping @GetMapping
@ApiOperation("获取变量列表") @ApiOperation("获取变量列表")
public R<IPage<VariableVo>> getVariableList(@RequestBody VariableDTO variableDTO) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(variableService.getVariableList(variableDTO)); public R<IPage<VariableVo>> getVariableList(@PathVariable String appId, VariableDTO variableDTO) {
return call(()->variableService.getVariableList(variableDTO,appId,token,dcClientHost+variableList));
} }
@GetMapping("/real-time") @GetMapping("/real-time")
@ApiOperation("获取变量实时数据") @ApiOperation("获取变量实时数据")
public R<Map<String, List<Map<String, RealTimeVariableVo>>>> getVariableRealTimeDataList( @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
@RequestBody RealTimeVariableDTO variableDTO) { public R<Map<String, List<Map<String, RealTimeVariableVo>>>> getVariableRealTimeDataList(@PathVariable String appId,
return R.ok(variableService.getVariableRealTimeDataList(variableDTO)); RealTimeVariableDTO variableDTO) {
return call(()->(variableService.getVariableRealTimeDataList(variableDTO)));
} }
@GetMapping("/source") @GetMapping("/source")
@ApiOperation("获取变量来源列表") @ApiOperation("获取变量来源列表,默认值6")
public R<List<VariableSourceVo>> getVariableSourceList() { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(variableService.getVariableSourceList()); public R<List<VariableSourceVo>> getVariableSourceList(@PathVariable String appId) {
return call(()->variableService.getVariableSourceList());
} }
@GetMapping("/device") @GetMapping("/device")
@ApiOperation("获取变量所属设备列表") @ApiOperation("获取变量所属设备列表")
public R<List<VariableDeviceVo>> getVariableDeviceList() { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(variableService.getVariableDeviceList()); public R<IPage<VariableDeviceVo>> getVariableDeviceList(@PathVariable String appId, QueryPageDTO query) {
return call(()->(variableService.getVariableDeviceList(token,appId,dcClientHost+deviceList,query)));
} }
@GetMapping("/history") @GetMapping("/history")
@ApiOperation("获取变量历史数据") @ApiOperation("获取变量历史数据")
public R<Map<String, List<Map<String, HistoryVariableVo>>>> getVariableHistoryDataList(@RequestBody HistoryVariableDTO variableDTO) { @ApiImplicitParam(name = "appId", value = "租户id", required = true,dataTypeClass = String.class)
return R.ok(variableService.getVariableHistoryDataList(variableDTO)); public R<Map<String, List<Map<String, HistoryVariableVo>>>> getVariableHistoryDataList(@PathVariable String appId,
HistoryVariableDTO variableDTO) {
return call(()->(variableService.getVariableHistoryDataList(variableDTO)));
} }
} }
package com.syc.slm.slmbi.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.syc.slm.slmbi.entity.InstrumentPanelConfig;
import org.springframework.stereotype.Component;
/**
* 仪表板配置
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Component
public interface InstrumentPanelConfigMapper extends BaseMapper<InstrumentPanelConfig> {
}
package com.syc.slm.slmbi.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.syc.slm.slmbi.entity.InstrumentPanelDraft;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
/**
* 仪表板草稿
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Component
public interface InstrumentPanelDraftMapper extends BaseMapper<InstrumentPanelDraft> {
List<InstrumentPanelDraft> selectDraftList(@Param("appId") String appId,@Param("panelIds") Set<String> panelIds, @Param("officeIds") String officeIds, @Param(
"userId") String userId, @Param("roleId") String roleId);
}
package com.syc.slm.slmbi.dao; package com.syc.slm.slmbi.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.syc.slm.slmbi.entity.InstrumentPanelGroup; import com.syc.slm.slmbi.entity.InstrumentPanelGroup;
import com.syc.slm.slmbi.vo.InstrumentPanelGroupVo;
import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
/** /**
* slm-bi * slm-bi
* 仪表板分组 * 仪表板分组
...@@ -12,4 +20,19 @@ import org.springframework.stereotype.Component; ...@@ -12,4 +20,19 @@ import org.springframework.stereotype.Component;
**/ **/
@Component @Component
public interface InstrumentPanelGroupMapper extends BaseMapper<InstrumentPanelGroup> { public interface InstrumentPanelGroupMapper extends BaseMapper<InstrumentPanelGroup> {
/**
* 根据id 批量修改分组状态
* @param groupIds
* @param recordStatus
*/
void batchUpdateGroupByIds(@Param("groupIds") Set<String> groupIds,@Param("recordStatus") Integer recordStatus);
/**
* 根据分组名字匹配分组
* @param where
* @return
*/
List<InstrumentPanelGroupVo> selectGroupList(@Param("ew") LambdaQueryWrapper<InstrumentPanelGroup> where);
List<PanelTreeNodeVo> selectGroupByIds(@Param("finalPanelIds") Set<String> finalPanelIds, @Param("name") String name);
} }
package com.syc.slm.slmbi.dao; package com.syc.slm.slmbi.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.syc.slm.slmbi.entity.InstrumentPanel; import com.syc.slm.slmbi.entity.InstrumentPanel;
import com.syc.slm.slmbi.vo.InstrumentPanelVo;
import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
/** /**
* slm-bi * slm-bi
* 仪表板 * 仪表板
...@@ -12,4 +22,10 @@ import org.springframework.stereotype.Component; ...@@ -12,4 +22,10 @@ import org.springframework.stereotype.Component;
**/ **/
@Component @Component
public interface InstrumentPanelMapper extends BaseMapper<InstrumentPanel> { public interface InstrumentPanelMapper extends BaseMapper<InstrumentPanel> {
void batchUpdatePanelByIds(@Param("panelIds") Set<String> panelIds, @Param("recordStatus") Integer recordStatus);
IPage<InstrumentPanelVo> selectInstrumentPanelList(@Param("page") IPage<InstrumentPanelVo> page,
@Param("ew") Wrapper<InstrumentPanel> wrapper);
List<PanelTreeNodeVo> selectPanelByIds(@Param("finalPanelIds") Set<String> finalPanelIds, @Param("name") String name);
} }
package com.syc.slm.slmbi.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.syc.slm.slmbi.entity.InstrumentPanelPermission;
import org.springframework.stereotype.Component;
/**
* 仪表板权限
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Component
public interface InstrumentPanelPermissionMapper extends BaseMapper<InstrumentPanelPermission> {
}
package com.syc.slm.slmbi.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.syc.slm.slmbi.entity.InstrumentPanelTree;
import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
/**
* 仪表板树聚合表
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Component
public interface InstrumentPanelTreeMapper extends BaseMapper<InstrumentPanelTree> {
void batchUpdateTreeByIds(@Param("treeIds") Set<String> treeIds, @Param("recordStatus") Integer recordStatus);
}
package com.syc.slm.slmbi.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author liangbin
* @date 2021/3/31
*/
@ApiModel("新增仪表板分组DTO")
@Data
@EqualsAndHashCode(callSuper = true)
public class CreateInstrumentPanelGroupDTO extends InstrumentPanelGroupDTO {
@ApiModelProperty(value = "仪表板分组主键", hidden = true)
private String id;
}
package com.syc.slm.slmbi.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author liangbin
* @date 2021/3/31
*/
@ApiModel(value = "自定义权限DTO")
@Data
public class CustomPermissionDTO {
@ApiModelProperty(value = "自定义权限类型", required = true)
private String type;
@ApiModelProperty(value = "代表岗位、部门或个体用户id", required = true)
private String bizId;
@ApiModelProperty(value = "代表岗位,部门,个体用户名称")
private String bizName;
}
package com.syc.slm.slmbi.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* slm-bi
* 仪表板组件DTO
* @author : lin
* @date : 2021-04-07 11:35
**/
@ApiModel(value = "仪表板组件DTO")
@Data
@EqualsAndHashCode(callSuper = false)
public class InstrumentPanelAssemblyDTO {
@ApiModelProperty(value = "仪表板组件key", required = true)
private String key;
@ApiModelProperty(value = "仪表板组件名称", required = true)
private String name;
}
...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
/** /**
* slm-bi * slm-bi
* 仪表板样式,数据配置显示类 * 仪表板样式,数据配置显示类
...@@ -17,12 +19,17 @@ import lombok.EqualsAndHashCode; ...@@ -17,12 +19,17 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class InstrumentPanelConfigDTO { public class InstrumentPanelConfigDTO {
@ApiModelProperty(value = "仪表板id", required = true) @ApiModelProperty(value = "仪表板id", required = true)
private String instrumentPanelId; private String panelId;
@ApiModelProperty(value = "仪表板配置详情,包含了样式,数据配置", required = true) @ApiModelProperty(value = "仪表板配置详情,包含了样式,数据配置", required = true)
private String configDetails; private String configDetails;
@ApiModelProperty(value = "仪表板配置组件集合", required = true)
private List<InstrumentPanelAssemblyDTO> assemblys;
@ApiModelProperty(value = "访问权限", required = true) @ApiModelProperty(value = "访问权限", required = true)
private InstrumentPanelPermissionDTO visitPermission; private InstrumentPanelPermissionDTO permission;
@ApiModelProperty(value = "组件结构", required = true)
private String assembly;
} }
...@@ -16,9 +16,9 @@ import lombok.EqualsAndHashCode; ...@@ -16,9 +16,9 @@ import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class InstrumentPanelGroupDTO { public class InstrumentPanelGroupDTO {
@ApiModelProperty(value = "仪表板分组主键(保存非必填)", required = true) @ApiModelProperty(value = "仪表板分组主键", required = true)
private String id; private String id;
@ApiModelProperty(value = "仪表板分组父级主键", required = true) @ApiModelProperty(value = "仪表板分组父级主键,非顶级分组时必填")
private String parentId; private String parentId;
@ApiModelProperty(value = "仪表板分组名称", required = true) @ApiModelProperty(value = "仪表板分组名称", required = true)
private String name; private String name;
......
package com.syc.slm.slmbi.dto; package com.syc.slm.slmbi.dto;
import com.syc.slm.slmbi.enums.AccessType;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
/** /**
* slm-bi * slm-bi
* 仪表板权限 * 仪表板权限
...@@ -13,26 +16,25 @@ import lombok.EqualsAndHashCode; ...@@ -13,26 +16,25 @@ import lombok.EqualsAndHashCode;
* @date : 2021-03-25 19:05 * @date : 2021-03-25 19:05
**/ **/
@Data @Data
@ApiModel(value = "仪表板权限DTO",description = "仪表板权限DTO") @ApiModel(value = "仪表板权限DTO", description = "仪表板权限DTO")
@EqualsAndHashCode(callSuper=false) @EqualsAndHashCode(callSuper = false)
public class InstrumentPanelPermissionDTO { public class InstrumentPanelPermissionDTO {
@ApiModelProperty(value = "主键id") @ApiModelProperty(value = "仪表板主键id")
private String id; private String panelId;
@ApiModelProperty(value = "仪表板id",required = true)
private String instrumentPanelId; @ApiModelProperty(value = "仪表板名称", required = true)
@ApiModelProperty(value = "仪表板名称",required = true) private String panelName;
private String instrumentPanelName;
@ApiModelProperty(value = "仪表板分组id",required = true) @ApiModelProperty(value = "仪表板分组id", required = true)
private String instrumentPanelGroupId; private String groupId;
@ApiModelProperty(value = "仪表板分组名称",required = true)
private String instrumentPanelGroupName; @ApiModelProperty(value = "访问权限类型", required = true)
private String accessType;
@ApiModelProperty(value = "存储类型,1代表岗位,2代表部门,3 代表个体用户",required = true) @ApiModelProperty(value = "描述")
private Integer permissionType; private String description;
@ApiModelProperty(value = "代表岗位1,部门2,个体用户id 3")
private String bizId; @ApiModelProperty(value = "自定义权限配置,当访问类型为CUSTOM时必填")
@ApiModelProperty(value = "代表岗位,部门,个体用户名称") private List<CustomPermissionDTO> customPermissions;
private String bizName;
} }
...@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel; ...@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
...@@ -16,18 +17,19 @@ import java.util.Date; ...@@ -16,18 +17,19 @@ import java.util.Date;
**/ **/
@ApiModel(value = "查询仪表板列表DTO") @ApiModel(value = "查询仪表板列表DTO")
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = true)
public class SearchInstrumentPanelDTO { public class QueryInstrumentPanelDTO extends QueryPageDTO {
@ApiModelProperty(value = "仪表板名称") @ApiModelProperty(value = "仪表板名称,创建人名称,修改人名称")
private String name; private String name;
@ApiModelProperty(value = "仪表板归属分组") @ApiModelProperty(value = "仪表板归属分组")
private String groupId; private String groupId;
@ApiModelProperty(value = "创建人名称")
private String creatorName; @ApiModelProperty(value = "修改时间开始")
@ApiModelProperty(value = "修改人名称") @DateTimeFormat(pattern = "yyyy-MM-dd")
private String updaterName; private Date updateTimeBegin;
@ApiModelProperty(value = "修改时间") @ApiModelProperty(value = "修改时间结束")
private Date updateTime; @DateTimeFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "状态") private Date updateTimeEnd;
private Integer recordStatus; @ApiModelProperty(value = "发布状态")
private String published;
} }
package com.syc.slm.slmbi.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author liangbin
* @date 2021/3/31
*/
@ApiModel("分布查询参数")
@Data
public class QueryPageDTO {
@ApiModelProperty("页码")
private Integer current = 1;
@ApiModelProperty("每页大小")
private Integer size = 10;
}
package com.syc.slm.slmbi.dto; package com.syc.slm.slmbi.dto;
import com.syc.slm.slmbi.enums.StatisticsType;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -22,9 +23,9 @@ public class RealTimeVariableDTO { ...@@ -22,9 +23,9 @@ public class RealTimeVariableDTO {
@ApiModelProperty(value = "时间间隔,代表(天,时,分,秒)", required = true) @ApiModelProperty(value = "时间间隔,代表(天,时,分,秒)", required = true)
private Integer interval; private Integer interval;
@ApiModelProperty(value = "统计类型,代表(合计值,平均值,最大值,最小值)", required = true) @ApiModelProperty(value = "统计类型,代表(合计值,平均值,最大值,最小值)", required = true)
private Integer statisticsType; private StatisticsType statisticsType;
@ApiModelProperty(value = "变量集合ids", required = true) @ApiModelProperty(value = "变量集合ids", required = true)
private List<String> variableIds; private List<String> variableIds;
@ApiModelProperty(value = "以变量为维度是1 , 以时间为维度是2", required = true) @ApiModelProperty(value = "以变量为维度是1 , 以时间为维度是2", required = true)
private Integer dimension; private Integer dimension; //FIXME 考虑用枚举
} }
...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
/** /**
* slm-bi * slm-bi
* 保存仪表板DTO * 保存仪表板DTO
...@@ -18,6 +20,16 @@ import lombok.EqualsAndHashCode; ...@@ -18,6 +20,16 @@ import lombok.EqualsAndHashCode;
public class SaveInstrumentPanelDTO { public class SaveInstrumentPanelDTO {
@ApiModelProperty(value = "仪表板名称", required = true) @ApiModelProperty(value = "仪表板名称", required = true)
private String name; private String name;
@ApiModelProperty(value = "仪表板归属分组", required = true) @ApiModelProperty(value = "仪表板归属分组", required = true)
private String groupId; private String groupId;
@ApiModelProperty(value = "仪表板配置详情,包含了样式,数据配置", required = true)
private String configDetails;
@ApiModelProperty(value = "仪表板配置组件集合", required = true)
private List<InstrumentPanelAssemblyDTO> assemblys;
@ApiModelProperty(value = "访问权限", required = true)
private InstrumentPanelPermissionDTO permission;
} }
...@@ -15,7 +15,7 @@ import lombok.EqualsAndHashCode; ...@@ -15,7 +15,7 @@ import lombok.EqualsAndHashCode;
@Data @Data
@ApiModel(value = "变量DTO") @ApiModel(value = "变量DTO")
@EqualsAndHashCode(callSuper=false) @EqualsAndHashCode(callSuper=false)
public class VariableDTO { public class VariableDTO extends QueryPageDTO{
@ApiModelProperty(value = "变量来源") @ApiModelProperty(value = "变量来源")
private String sourceId; private String sourceId;
@ApiModelProperty(value = "所属设备") @ApiModelProperty(value = "所属设备")
...@@ -24,4 +24,5 @@ public class VariableDTO { ...@@ -24,4 +24,5 @@ public class VariableDTO {
private String variableName; private String variableName;
@ApiModelProperty(value = "描述") @ApiModelProperty(value = "描述")
private String description; private String description;
} }
package com.syc.slm.slmbi.entity; package com.syc.slm.slmbi.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
...@@ -17,23 +22,49 @@ import java.util.Date; ...@@ -17,23 +22,49 @@ import java.util.Date;
**/ **/
@ApiModel(description = "公共的实体类") @ApiModel(description = "公共的实体类")
@Data @Data
@EqualsAndHashCode(callSuper=true) @EqualsAndHashCode(callSuper = true)
public class BaseEntity<T extends Model<?>> extends Model<T> { public class BaseEntity<T extends Model<?>> extends Model<T> {
/**
* 主键
*/
@TableId
@ApiModelProperty(value = "主键")
protected String id;
/**
* 租户id
*/
@ApiModelProperty(value = "租户id")
@TableField(fill = FieldFill.INSERT)
protected String appId;
@ApiModelProperty(value = "创建人主键") @ApiModelProperty(value = "创建人主键")
private String creator; @TableField(fill = FieldFill.INSERT)
protected String creator;
@ApiModelProperty(value = "创建人名称") @ApiModelProperty(value = "创建人名称")
private String creatorName; @TableField(fill = FieldFill.INSERT)
protected String creatorName;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private String createTime; @TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
protected Date createTime;
@ApiModelProperty(value = "修改人主键") @ApiModelProperty(value = "修改人主键")
private String updater; @TableField(fill = FieldFill.UPDATE)
protected String updater;
@ApiModelProperty(value = "修改人名称") @ApiModelProperty(value = "修改人名称")
private String updaterName; @TableField(fill = FieldFill.UPDATE)
protected String updaterName;
@ApiModelProperty(value = "修改时间") @ApiModelProperty(value = "修改时间")
private Date updateTime; @TableField(fill = FieldFill.UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
protected Date updateTime;
@ApiModelProperty(value = "状态") @ApiModelProperty(value = "状态")
private Integer recordStatus; @TableField(fill = FieldFill.INSERT)
protected Integer recordStatus;
@ApiModelProperty(value = "描述") @ApiModelProperty(value = "描述")
private String description; protected String description;
@Override
protected Serializable pkVal() {
return id;
}
} }
package com.syc.slm.slmbi.entity;
import lombok.Data;
/**
* slm-bi
* 当前用户
* @author : lin
* @date : 2021-04-16 18:30
**/
@Data
public class CurrentUser {
private String uid;
private String appId;
private String platformId;
private String name;
private String token;
}
package com.syc.slm.slmbi.entity; package com.syc.slm.slmbi.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -15,16 +16,25 @@ import lombok.EqualsAndHashCode; ...@@ -15,16 +16,25 @@ import lombok.EqualsAndHashCode;
@ApiModel(description = "仪表板entity") @ApiModel(description = "仪表板entity")
@Data @Data
@EqualsAndHashCode(callSuper=true) @EqualsAndHashCode(callSuper=true)
@TableName("instrument_panel")
public class InstrumentPanel extends BaseEntity<InstrumentPanel>{ public class InstrumentPanel extends BaseEntity<InstrumentPanel>{
@ApiModelProperty(value = "仪表板主键")
private String id ;
@ApiModelProperty(value = "仪表板名称") @ApiModelProperty(value = "仪表板名称")
private String name; private String name;
@ApiModelProperty(value = "仪表板归属分组") @ApiModelProperty(value = "仪表板归属分组")
private String groupId; private String groupId;
@ApiModelProperty(value = "访问权限(公开 1,自定义 2,私有 3)") @ApiModelProperty(value = "访问权限")
private String visitPermission; private String accessPermission;
@ApiModelProperty(value = "发布状态")
private String published;
public InstrumentPanel() {
}
public InstrumentPanel(String id, String name, String groupId, String accessPermission, String published) {
super.id=id;
this.name = name;
this.groupId = groupId;
this.accessPermission = accessPermission;
this.published = published;
}
} }
...@@ -20,7 +20,9 @@ public class InstrumentPanelConfig extends BaseEntity<InstrumentPanelConfig>{ ...@@ -20,7 +20,9 @@ public class InstrumentPanelConfig extends BaseEntity<InstrumentPanelConfig>{
@ApiModelProperty(value = "主键id") @ApiModelProperty(value = "主键id")
private String id ; private String id ;
@ApiModelProperty(value = "仪表板id") @ApiModelProperty(value = "仪表板id")
private String instrumentPanelId; private String panelId;
@ApiModelProperty(value = "仪表板配置详情,包含了样式,数据配置") @ApiModelProperty(value = "仪表板配置详情,包含了样式,数据配置")
private String configDetails; private String configDetails;
@ApiModelProperty(value = "发布状态")
private String published;
} }
package com.syc.slm.slmbi.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 仪表板草稿
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Data
@TableName("instrument_panel_draft")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "仪表板草稿")
public class InstrumentPanelDraft extends BaseEntity<InstrumentPanelDraft> {
/**
* 仪表板名字
*/
@ApiModelProperty(value = "仪表板名字")
private String name;
/**
* 仪表板归属分组
*/
@ApiModelProperty(value = "仪表板归属分组")
private String groupId;
/**
* 访问权限
*/
@ApiModelProperty(value = "访问权限")
private String accessPermission;
/**
* 状态(发布,下线)
*/
@ApiModelProperty(value = "状态(发布,下线)")
private String published;
@ApiModelProperty(value = "仪表板id")
private String panelId;
}
package com.syc.slm.slmbi.entity; package com.syc.slm.slmbi.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -15,6 +16,7 @@ import lombok.EqualsAndHashCode; ...@@ -15,6 +16,7 @@ import lombok.EqualsAndHashCode;
@ApiModel(description = "仪表板分组entity") @ApiModel(description = "仪表板分组entity")
@Data @Data
@EqualsAndHashCode(callSuper=true) @EqualsAndHashCode(callSuper=true)
@TableName("instrument_panel_group")
public class InstrumentPanelGroup extends BaseEntity<InstrumentPanelGroup>{ public class InstrumentPanelGroup extends BaseEntity<InstrumentPanelGroup>{
@ApiModelProperty(value = "仪表板分组主键") @ApiModelProperty(value = "仪表板分组主键")
private String id; private String id;
......
package com.syc.slm.slmbi.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 仪表板权限
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Data
@TableName("instrument_panel_permission")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "仪表板权限")
public class InstrumentPanelPermission extends BaseEntity<InstrumentPanelPermission> {
/**
* 仪表板id
*/
@ApiModelProperty(value = "仪表板id")
private String panelId;
/**
* 业务id(岗位,部门,个体用户)
*/
@ApiModelProperty(value = "业务id(岗位,部门,个体用户)")
private String bizId;
/**
* 业务名称(岗位,部门,个体用户名称)
*/
@ApiModelProperty(value = "业务名称(岗位,部门,个体用户名称)")
private String bizName;
/**
* 业务归属类型
*/
@ApiModelProperty(value = "业务归属类型")
private String bizType;
/**
* 1代表第一版数据,2代表保存发布再次保存得数据
*/
@ApiModelProperty(value = "1代表第一版数据,2代表保存发布再次保存得数据")
private String published;
}
package com.syc.slm.slmbi.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 仪表板树聚合表
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Data
@TableName("instrument_panel_tree")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "仪表板树聚合表")
public class InstrumentPanelTree extends BaseEntity<InstrumentPanelTree> {
/**
* 节点全路径id
*/
@ApiModelProperty(value = "节点全路径id")
private String fullId;
@ApiModelProperty(value = "节点名字")
private String name;
/**
* 节点全路径
*/
@ApiModelProperty(value = "节点全路径")
private String fullName;
/**
* 节点类型
*/
@ApiModelProperty(value = "节点类型")
private String nodeType;
@ApiModelProperty(value = "组件key")
private String assemblyKey;
@ApiModelProperty(value = "父级id")
@TableField(exist = false)
private String parentId;
}
package com.syc.slm.slmbi.enums;
/**
* 访问权限类型
*
* @author liangbin
* @date 2021/3/31
*/
public enum AccessType {
// 公开
PUBLIC("public"),
// 私有
PRIVATE("private"),
// 自定义
CUSTOM("custom");
public String value;
AccessType(String v) {
value = v;
}}
package com.syc.slm.slmbi.enums;
/**
* 自定义权限的类型
*
* @author liangbin
* @date 2021/3/31
*/
public enum CustomPermissionType {
//岗位
POSITION("position"),
//部门
DEPARTMENT("department"),
//用户
USER("user");
public String value;
CustomPermissionType(String v){
value=v;
}
}
package com.syc.slm.slmbi.enums;
/**
* @author lin
* @date 2021/4/6
*/
public enum NodeType {
/**
* 仪表板
*/
PANEL("panel"),
/**
* 仪表板分组
*/
GROUP("group"),
/**
* 仪表板组件
*/
ASSEMBLY("assembly");
public String value;
NodeType(String v){
value = v;
}
}
package com.syc.slm.slmbi.enums;
/**
* @author lin
* @date 2021/4/7
*/
public enum PublishedStatus {
/**
* 发布
*/
PUBLISHED("published"),
/**
* 待发布
*/
WAIT_PUBLISHED("wait_published"),
/**
* 下线
*/
OFFLINE("offline"),
DRAFT("draft");
public String value;
PublishedStatus(String v) {
value = v;
}}
package com.syc.slm.slmbi.enums;
/**
* 统计类型
*
* @author liangbin
* @date 2021/3/31
*/
public enum StatisticsType {
// 合计值
SUM,
// 平均值
AVG,
// 最大值
MAX,
// 最小值
MIN;
public static void main(String[] args) {
System.out.println(StatisticsType.MAX.name());
}
}
package com.syc.slm.slmbi.exception;
import com.syc.slm.common.core.constant.CommonConstants;
import com.syc.slm.common.core.constant.SlmConstants;
import org.apache.commons.lang3.StringUtils;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
/**
* slm-bi
* 业务异常类
*
* @author : lin
* @date : 2021-04-06 09:14
**/
public class SysException extends RuntimeException {
private int code;
private String msg;
private Object data;
private String debugMsg;
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
public Object getData() {
return data;
}
public String getDebugMsg() {
return debugMsg;
}
public SysException(String msg) {
this(msg, null, null);
}
public SysException(String msg, String debugInfo) {
this.msg = msg;
this.debugMsg = debugInfo;
this.code = CommonConstants.FAIL;
}
public SysException(String msg, Exception originalException) {
this(msg, originalException, null);
}
private SysException(String msg, Exception originalException, Object pData) {
super(msg);
code = CommonConstants.FAIL;
this.msg = msg;
data = pData;
if (originalException != null) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintWriter writer = new PrintWriter(outputStream);
originalException.printStackTrace(writer);
debugMsg = new String(outputStream.toByteArray());
}
}
public SysException(int dwCode, String szMsg) {
this(dwCode, szMsg, null);
}
private SysException(int dwCode, String szMsg, Exception originalException) {
super(szMsg);
code = dwCode;
msg = szMsg;
if (originalException != null) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintWriter writer = new PrintWriter(outputStream);
originalException.printStackTrace(writer);
debugMsg = new String(outputStream.toByteArray());
}
}
@Override
public String toString() {
if (StringUtils.isNotEmpty(msg)) {
return msg;
}
if (StringUtils.isNotEmpty(debugMsg)) {
return debugMsg;
}
if (data != null) {
return SlmConstants.gson.toJson(data);
}
return code + "";
}
}
package com.syc.slm.slmbi.function;
import java.io.Serializable;
/**
* @author lin
* @date 2021/4/1
*/
@FunctionalInterface
public interface Action0 extends Serializable {
/**
* 调用
*/
void call();
}
package com.syc.slm.slmbi.function;
import java.io.Serializable;
/**
* @author lin
* @date 2021/4/1
*/
public interface Action1<T> extends Serializable {
void call(T t);
@SafeVarargs
static <T1>Action1<T1>[] of(Action1<T1>... funcs){
return funcs;
}
}
package com.syc.slm.slmbi.function;
import java.io.Serializable;
/**
* @author lin
* @date 2021/4/1
*/
public interface Action2<T1,T2> extends Serializable {
void call(T1 t1, T2 t2);
@SafeVarargs
static <T1,T2>Action2<T1,T2>[] of(Action2<T1, T2>... funcs){
return funcs;
}
}
package com.syc.slm.slmbi.function;
import java.io.Serializable;
/**
* @author lin
* @date 2021/4/1
*/
public interface Function2<T1,T2,R> extends Serializable {
R get(T1 t1, T2 t2);
@SafeVarargs
static <T1,T2>Function2<T1,T2,?>[] of(Function2<T1,T2,?>... funcs){
return funcs;
}
}
package com.syc.slm.slmbi.handler;
import com.syc.slm.common.core.util.R;
import com.syc.slm.slmbi.exception.SysException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
* slm-bi
* 全局业务异常处理
* @author : lin
* @date : 2021-04-16 17:34
**/
@ControllerAdvice
@Slf4j
public class SysExceptionHandler {
/**
* 业务异常
*
* @param e exception
* @return exception
*/
@ExceptionHandler(SysException.class)
@ResponseBody
public R<Object> handleSysException(SysException e, HttpServletRequest request) {
log.info(e.getMsg());
return R.bad(e.getMsg(),e.getDebugMsg());
}
}
...@@ -5,16 +5,20 @@ import com.syc.slm.slmbi.vo.DeptVo; ...@@ -5,16 +5,20 @@ import com.syc.slm.slmbi.vo.DeptVo;
import java.util.List; import java.util.List;
/** /**
* slm-bi * slm-bi
* 部门 * 变量
* *
* @author : lin * @author : lin
* @date : 2021-03-25 15:10 * @date : 2021-03-25 16:17
**/ **/
public interface DeptService { public interface DeptService {
/** /**
* 获取部门列表 * 获取部门列表
* @param uri
* @param token
* @param appId
* @param deptName * @param deptName
* @return * @return
*/ */
List<DeptVo> selectDeptList(String deptName); List<DeptVo> selectPositionList(String uri, String token, String appId, String deptName);
} }
package com.syc.slm.slmbi.service;
import com.syc.slm.slmbi.config.InfluxdbConfig;
import okhttp3.OkHttpClient;
import org.apache.http.ssl.SSLContexts;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.net.ssl.*;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* 创建时间:2018-01-28
* <p>修改时间:2018-01-28
* <p>类说明:TOTO
*
* @author luke
* @version 1.0
*/
@Component
public class InfluxService {
private static final String PORT ="8635";
@Autowired
private InfluxdbConfig influxdbConfig;
private InfluxDB influxdb;
@PostConstruct
private void init() {
if (PORT.equals(influxdbConfig.port)) {
// 华为云: https + getBuilder
influxdb = InfluxDBFactory.connect(String.format("https://%s:%s", influxdbConfig.host, influxdbConfig.port),
influxdbConfig.username,
influxdbConfig.password,
getBuilder());
} else {
influxdb = InfluxDBFactory.connect(String.format("http://%s:%s", influxdbConfig.host, influxdbConfig.port),
influxdbConfig.username,
influxdbConfig.password);
}
}
/**
* 插入
*
* @param measurement 表
* @param tags 标签
* @param fields 字段
*/
public void insert(String database, String measurement, Map<String, String> tags, Map<String, Object> fields) {
Point.Builder builder = Point.measurement(measurement);
builder.tag(tags);
builder.fields(fields);
influxdb.write(database, "", builder.build());
}
/**
* 批量插入
*
* @param measurement 表
* @param tagsList 标签
* @param fieldsList 字段
*/
public void insert(String database,
String measurement,
List<Map<String, String>> tagsList,
List<Map<String, Object>> fieldsList) {
BatchPoints.Builder bpBuilder = BatchPoints.database(database);
if (fieldsList != null && fieldsList.size() > 0) {
for (int i = 0; i < fieldsList.size(); i++) {
Point.Builder builder = Point.measurement(measurement);
builder.tag(tagsList.get(i));
builder.fields(fieldsList.get(i));
bpBuilder.point(builder.build());
}
}
influxdb.write(bpBuilder.build());
}
/**
* 按时间插入数据
*
* @param measurement 表
* @param tags 标签
* @param fields 字段
*/
public void insertByTime(String database,
String measurement,
Map<String, String> tags,
Map<String, Object> fields,
long time) {
Point.Builder builder = Point.measurement(measurement);
builder.tag(tags);
builder.fields(fields);
builder.time(time, TimeUnit.MILLISECONDS);
influxdb.write(database, "", builder.build());
}
/**
* 查询
*
* @param command 查询语句
* @return
*/
public QueryResult query(String database, String command) {
return influxdb.query(new Query(command, database));
}
/**
* 免除SSL
*
* @return
*/
private static OkHttpClient.Builder getBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(defaultSslSocketFactory(), defaultTrustManager());
builder.hostnameVerifier(noopHostnameVerifier());
return builder;
}
private static X509TrustManager defaultTrustManager() {
return new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
};
}
private static SSLSocketFactory defaultSslSocketFactory() {
try {
SSLContext sslcontext = SSLContexts.createDefault();
sslcontext.init(null, new TrustManager[] {defaultTrustManager()}, new SecureRandom());
return sslcontext.getSocketFactory();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static HostnameVerifier noopHostnameVerifier() {
return (s, sslSession) -> true;
}
}
package com.syc.slm.slmbi.service; package com.syc.slm.slmbi.service;
import com.sun.istack.NotNull; import com.baomidou.mybatisplus.extension.service.IService;
import com.syc.slm.slmbi.dto.InstrumentPanelConfigDTO; import com.syc.slm.slmbi.dto.InstrumentPanelConfigDTO;
import com.syc.slm.slmbi.entity.InstrumentPanelConfig;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo; import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/** /**
* slm-bi * slm-bi
* 仪表板配置 * 仪表板配置
...@@ -11,7 +16,15 @@ import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo; ...@@ -11,7 +16,15 @@ import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
* @author : lin * @author : lin
* @date : 2021-03-25 15:10 * @date : 2021-03-25 15:10
**/ **/
public interface InstrumentPanelConfigService { public interface InstrumentPanelConfigService extends IService<InstrumentPanelConfig>{
/**
* 根据仪表板id获取对应已发布配置
* @param instrumentPanelId
* @return
*/
InstrumentPanelConfigVo getPublishConfigByPanelId(@NotNull String instrumentPanelId);
/** /**
* 根据仪表板id获取对应配置 * 根据仪表板id获取对应配置
...@@ -19,16 +32,62 @@ public interface InstrumentPanelConfigService { ...@@ -19,16 +32,62 @@ public interface InstrumentPanelConfigService {
* @return * @return
*/ */
InstrumentPanelConfigVo getConfigByPanelId(@NotNull String instrumentPanelId); InstrumentPanelConfigVo getConfigByPanelId(@NotNull String instrumentPanelId);
/** /**
* 保存发布仪表板配置 * 保存发布仪表板配置
* @param appId
* @param config * @param config
* @return * @return
*/ */
String publish(InstrumentPanelConfigDTO config); String publish(String appId,InstrumentPanelConfigDTO config);
/** /**
* 保存仪表板配置 * 保存仪表板配置
* @param appId
* @param config * @param config
* @return * @return
*/ */
String saveConfig(InstrumentPanelConfigDTO config); String saveConfig(String appId,InstrumentPanelConfigDTO config);
/**
* 根据仪表板id删除仪表板配置
* @param panelId
* @param publishedStatus
*/
void delConfig(@NotNull String panelId,String publishedStatus);
/**
* 根据仪表板详情保存仪表盘配置
* @param panelId
* @param configDetails
* @param publishStatus
*/
void savePanelConfig(String panelId,String configDetails,String publishStatus);
/**
* 发布仪表板把对应配置状态修改为发布
* @param ids
*/
void publishConfigByPanelIds(List<String> ids);
/**
* 根据仪表板id以及状态获取仪表板配置
* @param panelId
* @param publishStatus
* @return
*/
List<InstrumentPanelConfig> getConfigByPanelIdAndPublishStatus(String panelId,String publishStatus);
/**
* 下线仪表盘配置
* @param panelId
* @param publishStatus
*/
void offlineConfig(String panelId, String publishStatus);
/**
* 根据仪表id获取仪表板配置
* @param panelId
*/
Map<String,String> getAssemblyConfig(@NotNull String panelId);
} }
package com.syc.slm.slmbi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.syc.slm.slmbi.entity.InstrumentPanel;
import com.syc.slm.slmbi.entity.InstrumentPanelDraft;
import java.util.List;
import java.util.Set;
/**
* 仪表板草稿
*
* @author lin
* @date 2021-04-01 10:52:44
*/
public interface InstrumentPanelDraftService extends IService<InstrumentPanelDraft> {
/**
* 发布仪表板生成仪表板草稿
* @param panels
*/
void saveDrafts(List<InstrumentPanel> panels);
/**
* 根据仪表板id获取 仪表板草稿
* @param panelIds
* @return
*/
List<InstrumentPanelDraft> getByIds(Set<String> panelIds);
/**
* 获取仪表板信息
* @param appId
* @param panelIds
* @param officeIds
* @param userId
* @param roleId
* @return
*/
List<InstrumentPanelDraft> selectDraftList(String appId,Set<String> panelIds, String officeIds, String userId, String roleId);
/**
* 根据仪表板id获取 仪表板草稿
* @param panelId
* @return
*/
InstrumentPanelDraft getByPanelId(String panelId);
}
...@@ -4,10 +4,11 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,10 +4,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.syc.slm.slmbi.dto.InstrumentPanelGroupDTO; import com.syc.slm.slmbi.dto.InstrumentPanelGroupDTO;
import com.syc.slm.slmbi.entity.InstrumentPanelGroup; import com.syc.slm.slmbi.entity.InstrumentPanelGroup;
import com.syc.slm.slmbi.vo.InstrumentPanelGroupVo; import com.syc.slm.slmbi.vo.InstrumentPanelGroupVo;
import com.syc.slm.slmbi.vo.PanelGroupVo; import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import lombok.NonNull; import lombok.NonNull;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* slm-bi * slm-bi
...@@ -20,12 +21,15 @@ public interface InstrumentPanelGroupService extends IService<InstrumentPanelGro ...@@ -20,12 +21,15 @@ public interface InstrumentPanelGroupService extends IService<InstrumentPanelGro
/** /**
* 查询仪表板分组 * 查询仪表板分组
* @param appId
* @param name
* @return * @return
*/ */
List<InstrumentPanelGroupVo> selectGroupList(); List<InstrumentPanelGroupVo> selectGroupList(String appId, String name);
/** /**
* 删除仪表板分组 * 删除仪表板分组
*
* @param groupId * @param groupId
* @return * @return
*/ */
...@@ -34,29 +38,24 @@ public interface InstrumentPanelGroupService extends IService<InstrumentPanelGro ...@@ -34,29 +38,24 @@ public interface InstrumentPanelGroupService extends IService<InstrumentPanelGro
/** /**
* 修改仪表板分组 * 修改仪表板分组
* @param group * @param group
* @param appId
* @return * @return
*/ */
String updateGroup(InstrumentPanelGroupDTO group); String updateGroup(@NonNull InstrumentPanelGroupDTO group,String appId);
/** /**
* 保存仪表板分组 * 保存仪表板分组
* @param group * @param group
* @param appId
* @return * @return
*/ */
String saveGroup(InstrumentPanelGroupDTO group); String saveGroup(@NonNull InstrumentPanelGroupDTO group,String appId);
/** /**
* 加载仪表板树 * 根据分组id集合 已经名称批量查询仪表板分组
* @param name * @param finalPanelIds
* @return
*/
List<PanelGroupVo> loadTrees(String name);
/**
* 查询下一节点分组
* @param groupId
* @param name * @param name
* @return * @return
*/ */
List<PanelGroupVo> children(String groupId, String name); List<PanelTreeNodeVo> selectGroupByIds(Set<String> finalPanelIds,String name);
} }
package com.syc.slm.slmbi.service; package com.syc.slm.slmbi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.syc.slm.slmbi.dto.CustomPermissionDTO;
import com.syc.slm.slmbi.dto.InstrumentPanelPermissionDTO; import com.syc.slm.slmbi.dto.InstrumentPanelPermissionDTO;
import com.syc.slm.slmbi.entity.InstrumentPanelPermission;
import com.syc.slm.slmbi.vo.CustomPermissionVo;
import com.syc.slm.slmbi.vo.InstrumentPanelPermissionVo; import com.syc.slm.slmbi.vo.InstrumentPanelPermissionVo;
import lombok.NonNull; import lombok.NonNull;
import java.util.List; import java.util.List;
/** /**
* slm-bi * slm-bi
* 仪表板权限 * 仪表板权限控制
* *
* @author : lin * @author : lin
* @date : 2021-03-25 15:10 * @date : 2021-03-25 18:54
**/ **/
public interface InstrumentPanelPermissionService { public interface InstrumentPanelPermissionService extends IService<InstrumentPanelPermission> {
/** /**
* 保存仪表板权限 * 保存仪表板权限
* *
* @param permissions * @param permissions
* @return * @return
*/ */
String savePermission(List<InstrumentPanelPermissionDTO> permissions); String savePermission(InstrumentPanelPermissionDTO permissions);
/** /**
* 从其他仪表板复制配置 * 从其他仪表板复制配置
...@@ -27,16 +31,16 @@ public interface InstrumentPanelPermissionService { ...@@ -27,16 +31,16 @@ public interface InstrumentPanelPermissionService {
* @param instrumentPanelId * @param instrumentPanelId
* @return * @return
*/ */
List<InstrumentPanelPermissionVo> saveCopyOtherPermission(@NonNull String instrumentPanelId); InstrumentPanelPermissionVo saveCopyOtherPermission(@NonNull String instrumentPanelId);
/** /**
* 将仪表板权限复制给其他仪表板 * 将仪表板权限复制给其他仪表板
* *
* @param permissions * @param permissions
* @param otherInstrumentPanelId * @param otherInstrumentPanelIds
* @return * @return
*/ */
String saveCopyToOtherPermission(List<InstrumentPanelPermissionDTO> permissions, String otherInstrumentPanelId); void saveCopyToOtherPermission(InstrumentPanelPermissionDTO permissions, List<String> otherInstrumentPanelIds);
/** /**
* 根据仪表板id获取仪表板权限 * 根据仪表板id获取仪表板权限
...@@ -44,5 +48,49 @@ public interface InstrumentPanelPermissionService { ...@@ -44,5 +48,49 @@ public interface InstrumentPanelPermissionService {
* @param instrumentPanelId * @param instrumentPanelId
* @return * @return
*/ */
List<InstrumentPanelPermissionVo> selectPermissionByPanelId(@NonNull String instrumentPanelId); InstrumentPanelPermissionVo selectPermissionByPanelId(@NonNull String instrumentPanelId);
/**
* 根据仪表板id删除仪表板权限
* @param panelId
* @param publishStatus
*/
void delPermissionByPanelId(@NonNull String panelId,String publishStatus);
/**
* 根据仪表板id获取已经发布的配置
* @param panelId
* @param publishStatus
* @return
*/
List<CustomPermissionVo> getPublishPermissionByPanelId(@NonNull String panelId,@NonNull String publishStatus);
/**
* 根据仪表板详情保存仪表板配置
* @param customPermissions
* @param panelId
* @param accessType
* @param publishStatus
*/
void savePanelPermission(List<CustomPermissionDTO> customPermissions,String panelId,String accessType,String publishStatus);
/**
* 批量发布把对应配置状态更改为发布状态
* @param ids
*/
void publishPermissionByPanelIds(List<String> ids);
/**
* 根据仪表板id 以及 状态获取仪表板对应权限
* @param panelId
* @param publishStatus
* @return
*/
List<InstrumentPanelPermission> getPermissionByPanelIdAndPublishStatus(String panelId, String publishStatus);
/**
* 下线仪表板对应权限
* @param panelId
*/
void offlinePermission(String panelId);
} }
...@@ -3,11 +3,15 @@ package com.syc.slm.slmbi.service; ...@@ -3,11 +3,15 @@ package com.syc.slm.slmbi.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.syc.slm.slmbi.dto.SaveInstrumentPanelDTO; import com.syc.slm.slmbi.dto.SaveInstrumentPanelDTO;
import com.syc.slm.slmbi.dto.SearchInstrumentPanelDTO; import com.syc.slm.slmbi.dto.QueryInstrumentPanelDTO;
import com.syc.slm.slmbi.entity.InstrumentPanel; import com.syc.slm.slmbi.entity.InstrumentPanel;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import com.syc.slm.slmbi.vo.InstrumentPanelVo; import com.syc.slm.slmbi.vo.InstrumentPanelVo;
import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import lombok.NonNull;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* slm-bi * slm-bi
...@@ -23,7 +27,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> { ...@@ -23,7 +27,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> {
* @param where * @param where
* @return * @return
*/ */
IPage<InstrumentPanelVo> selectInstrumentPanelList(SearchInstrumentPanelDTO where); IPage<InstrumentPanelVo> selectInstrumentPanelList(String appId,QueryInstrumentPanelDTO where);
/** /**
* 保存仪表板 * 保存仪表板
...@@ -31,7 +35,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> { ...@@ -31,7 +35,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> {
* @param panel * @param panel
* @return * @return
*/ */
String savePanel(SaveInstrumentPanelDTO panel); String savePanel(String appId,SaveInstrumentPanelDTO panel);
/** /**
* 批量推送 * 批量推送
...@@ -39,7 +43,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> { ...@@ -39,7 +43,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> {
* @param ids * @param ids
* @return * @return
*/ */
Boolean batchPublish(List<String> ids); List<String> batchPublish(List<String> ids);
/** /**
* 删除仪表板 * 删除仪表板
...@@ -55,7 +59,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> { ...@@ -55,7 +59,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> {
* @param instrumentPanelDTO * @param instrumentPanelDTO
* @return * @return
*/ */
String saveAsPanel(SaveInstrumentPanelDTO instrumentPanelDTO); String saveAsPanel(String appId,SaveInstrumentPanelDTO instrumentPanelDTO);
/** /**
* 是否显示恢复按钮 * 是否显示恢复按钮
...@@ -71,7 +75,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> { ...@@ -71,7 +75,7 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> {
* @param id * @param id
* @return * @return
*/ */
String recoveryPanel(String id); InstrumentPanelConfigVo recoveryPanel(String id);
/** /**
* 下线 * 下线
...@@ -80,4 +84,23 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> { ...@@ -80,4 +84,23 @@ public interface InstrumentPanelService extends IService<InstrumentPanel> {
* @return * @return
*/ */
String offline(String id); String offline(String id);
/**
* 批量更新仪表板状态
* @param panelIds
* @param recordStatus
*/
void batchUpdatePanelByIds(Set<String> panelIds, Integer recordStatus);
/**
* 检验仪表板是否重复
* @param appId
* @param panelId
* @param panelName
*/
void checkName(@NonNull String appId,String panelId,@NonNull String panelName);
List<InstrumentPanel> getByIds(Set<String> panelIds);
List<PanelTreeNodeVo> selectPanelByIds(Set<String> finalPanelIds,String name);
} }
package com.syc.slm.slmbi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.syc.slm.slmbi.dto.InstrumentPanelAssemblyDTO;
import com.syc.slm.slmbi.entity.CurrentUser;
import com.syc.slm.slmbi.entity.InstrumentPanelTree;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 仪表板树聚合表
*
* @author lin
* @date 2021-04-01 10:52:44
*/
public interface InstrumentPanelTreeService extends IService<InstrumentPanelTree> {
void batchUpdateTreeByIds(Set<String> treeIds, Integer recordStatus);
/**
* 初始化仪表板树
*
* @param nodeId
* @param nodeType
* @param bizId
* @param bizName
*/
void initTree(String nodeId, String nodeType, String bizId, String bizName);
/**
* 根据仪表板id删除仪表板树
*
* @param panelId
*/
void delTreeByPanelId(String panelId);
/**
* 根据仪表板详情保存仪表板组件树
*
* @param tree
* @param assembly
* @param panelId
*/
void savePanelAssemblyTree(InstrumentPanelTree tree, List<InstrumentPanelAssemblyDTO> assembly, String panelId);
/**
* 根据fullId 删除仪表板树
* @param fullId
*/
void delTreeByPanelFullId(String fullId);
/**
* 更新仪表板树
* @param panelId
* @param panelName
* @param groupId
*/
void updatePanelTreeFullName(String panelId,String panelName,String groupId) ;
/**
* 加载树
* @param appId
* @param name
* @return
*/
List<PanelTreeNodeVo> loadTrees(String appId, String name, String uri,CurrentUser user);
/**
* 加载树
* @param appId
* @return
*/
List<PanelTreeNodeVo> loadTrees(String appId,String uri,CurrentUser user);
/**
* 加载树节点下一节点
* @param groupId
* @param name
* @return
*/
List<PanelTreeNodeVo> children(String groupId, String name,String uri,CurrentUser user);
/**
* 根据仪表板分组id更新 fullId fullName
* @param groupId
* @param panelId
* @param panelName
*/
void updateFullNameByGroupId(String groupId, String panelId, String panelName);
/**
* 复制仪表板配置显示的仪表板树
* @param appId
* @param name
* @return
*/
List<PanelTreeNodeVo> copyTreeList(String appId,String name);
/**
* 复用仪表板树
* @param appId
* @param name
* @return
*/
List<PanelTreeNodeVo> citeTreeList(String appId, String name);
/**
* 点击仪表板组件获取对应配置
* @param appId
* @param panelId
* @return
*/
Map<String, String> assembly(String appId, String panelId);
}
...@@ -13,8 +13,10 @@ import java.util.List; ...@@ -13,8 +13,10 @@ import java.util.List;
public interface PositionService { public interface PositionService {
/** /**
* 获取岗位 * 获取岗位
* @param token
* @param appId
* @param name * @param name
* @return * @return
*/ */
List<PositionVo> selectPositionList(String name); List<PositionVo> selectPositionList(String uri ,String token,String appId,String name);
} }
package com.syc.slm.slmbi.service; package com.syc.slm.slmbi.service;
import com.syc.slm.slmbi.vo.UserVo; import com.syc.slm.slmbi.vo.UserTreeVo;
import java.util.List; import java.util.List;
/** /**
...@@ -11,10 +11,14 @@ import java.util.List; ...@@ -11,10 +11,14 @@ import java.util.List;
* @date : 2021-03-25 16:17 * @date : 2021-03-25 16:17
**/ **/
public interface UserService { public interface UserService {
/** /**
* 获取用户 * 获取用户
* @param appId
* @param uri
* @param token
* @param userName * @param userName
* @return * @return
*/ */
List<UserVo> selectUserList(String userName); List<UserTreeVo> selectUserList(String appId,String uri,String token,String userName);
} }
...@@ -2,6 +2,7 @@ package com.syc.slm.slmbi.service; ...@@ -2,6 +2,7 @@ package com.syc.slm.slmbi.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.syc.slm.slmbi.dto.HistoryVariableDTO; import com.syc.slm.slmbi.dto.HistoryVariableDTO;
import com.syc.slm.slmbi.dto.QueryPageDTO;
import com.syc.slm.slmbi.dto.RealTimeVariableDTO; import com.syc.slm.slmbi.dto.RealTimeVariableDTO;
import com.syc.slm.slmbi.dto.VariableDTO; import com.syc.slm.slmbi.dto.VariableDTO;
import com.syc.slm.slmbi.vo.*; import com.syc.slm.slmbi.vo.*;
...@@ -22,7 +23,7 @@ public interface VariableService { ...@@ -22,7 +23,7 @@ public interface VariableService {
* @param variableDTO * @param variableDTO
* @return * @return
*/ */
IPage<VariableVo> getVariableList(VariableDTO variableDTO); IPage<VariableVo> getVariableList(VariableDTO variableDTO,String appId,String token,String uri);
/** /**
* 获取变量来源 * 获取变量来源
...@@ -32,9 +33,13 @@ public interface VariableService { ...@@ -32,9 +33,13 @@ public interface VariableService {
/** /**
* 获取变量所属设备 * 获取变量所属设备
* @param token
* @param appId
* @param uri
* @param queryPageDTO
* @return * @return
*/ */
List<VariableDeviceVo> getVariableDeviceList(); IPage<VariableDeviceVo> getVariableDeviceList(String token,String appId,String uri, QueryPageDTO queryPageDTO);
/** /**
* 获取实时数据 * 获取实时数据
......
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.syc.slm.slmbi.vo.DeptVo; import com.google.common.collect.Maps;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.util.R;
import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.service.DeptService; import com.syc.slm.slmbi.service.DeptService;
import com.syc.slm.slmbi.vo.DeptVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* slm-bi * slm-bi
...@@ -14,9 +20,21 @@ import java.util.List; ...@@ -14,9 +20,21 @@ import java.util.List;
* @date : 2021-03-25 18:41 * @date : 2021-03-25 18:41
**/ **/
@Service @Service
@Slf4j
public class DeptServiceImpl implements DeptService { public class DeptServiceImpl implements DeptService {
@Override @Override
public List<DeptVo> selectDeptList(String deptName) { public List<DeptVo> selectPositionList(String uri, String token, String appId, String deptName) {
return null; log.info("部门查询uri:---------------->"+uri);
log.info("部门查询token:---------------->"+token);
Map<String,String> heads = Maps.newHashMap();
heads.put("token",token);
Map<String,String> uriVariables =Maps.newHashMap();
uriVariables.put("deptName",deptName);
uriVariables.put("appId",appId);
R<List<DeptVo>> result = RestTemplateUtils.get(uri, heads, new TypeToken<R<List<DeptVo>>>() {}.getType(), uriVariables);
return result.detach();
} }
} }
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Maps;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.slmbi.dao.InstrumentPanelConfigMapper;
import com.syc.slm.slmbi.dto.InstrumentPanelConfigDTO; import com.syc.slm.slmbi.dto.InstrumentPanelConfigDTO;
import com.syc.slm.slmbi.service.InstrumentPanelConfigService; import com.syc.slm.slmbi.dto.InstrumentPanelPermissionDTO;
import com.syc.slm.slmbi.entity.*;
import com.syc.slm.slmbi.enums.PublishedStatus;
import com.syc.slm.slmbi.exception.SysException;
import com.syc.slm.slmbi.service.*;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo; import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import com.syc.slm.slmbi.vo.InstrumentPanelVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yaml.snakeyaml.events.Event;
import javax.validation.constraints.NotNull;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/** /**
* slm-bi * slm-bi
...@@ -12,22 +40,321 @@ import org.springframework.stereotype.Service; ...@@ -12,22 +40,321 @@ import org.springframework.stereotype.Service;
* @author : lin * @author : lin
* @date : 2021-03-25 19:11 * @date : 2021-03-25 19:11
**/ **/
@Slf4j
@Service @Service
public class InstrumentPanelConfigServiceImpl implements InstrumentPanelConfigService { public class InstrumentPanelConfigServiceImpl extends ServiceImpl<InstrumentPanelConfigMapper, InstrumentPanelConfig>
implements InstrumentPanelConfigService {
@Autowired
private InstrumentPanelPermissionService permissionService;
@Autowired
private InstrumentPanelService panelService;
@Autowired
private InstrumentPanelTreeService treeService;
@Autowired
private InstrumentPanelDraftService draftService;
@Override
@Transactional(readOnly = true)
public InstrumentPanelConfigVo getPublishConfigByPanelId(@NotNull String instrumentPanelId) {
return getInstrumentPanelConfigVo(instrumentPanelId, PublishedStatus.PUBLISHED);
}
@Override @Override
@Transactional(readOnly = true)
public InstrumentPanelConfigVo getConfigByPanelId(String instrumentPanelId) { public InstrumentPanelConfigVo getConfigByPanelId(String instrumentPanelId) {
return null; InstrumentPanelDraft draft = draftService.getByPanelId(instrumentPanelId);
return getInstrumentPanelConfigVo(instrumentPanelId,
ObjectUtils.isNotEmpty(draft) ? PublishedStatus.PUBLISHED :
PublishedStatus.WAIT_PUBLISHED);
} }
@Override @Override
public String publish(InstrumentPanelConfigDTO config) { @Transactional(rollbackFor = Exception.class)
return null; public String publish(String appId, InstrumentPanelConfigDTO config) {
InstrumentPanelPermissionDTO permission = config.getPermission();
checkAll(appId, config, permission);
InstrumentPanel panel = panelService.getById(config.getPanelId());
fillPanelProp(permission, panel, PublishedStatus.PUBLISHED.value);
log.info("删除仪表板配置详情");
delConfig(config.getPanelId(), null);
log.info("保存配置详情");
savePanelConfig(panel.getId(), config.getConfigDetails(), PublishedStatus.PUBLISHED.value);
log.info("删除仪表板权限信息");
permissionService.delPermissionByPanelId(config.getPanelId(), null);
log.info("保存权限信息");
permissionService.savePanelPermission(permission.getCustomPermissions(),panel.getId(), permission.getAccessType(),PublishedStatus.PUBLISHED.value);
log.info("更新仪表板树");
updateTree(config, panel);
InstrumentPanelDraft draft = draftService.getByPanelId(panel.getId());
if (ObjectUtils.isNotEmpty(draft)) {
String beforeId =draft.getId();
BeanUtils.copyProperties(panel, draft);
draft.setId(beforeId);
draft.setPanelId(panel.getId());
draftService.updateById(draft);
} else {
InstrumentPanelDraft df = new InstrumentPanelDraft();
BeanUtils.copyProperties(panel, df);
df.setId(IdWorker.get32UUID());
df.setPanelId(panel.getId());
df.setPublished(PublishedStatus.PUBLISHED.value);
draftService.save(df);
}
panelService.updateById(panel);
return panel.getId();
} }
@Override @Override
public String saveConfig(InstrumentPanelConfigDTO config) { @Transactional(rollbackFor = Exception.class)
public String saveConfig(String appId, InstrumentPanelConfigDTO config) {
InstrumentPanelPermissionDTO permission = config.getPermission();
checkAll(appId, config, permission);
InstrumentPanel panel = panelService.getById(config.getPanelId());
fillPanelProp(permission, panel,PublishedStatus.WAIT_PUBLISHED.value);
//判断是否有发布版本
InstrumentPanelDraft draft = draftService.getByPanelId(panel.getId());
if (ObjectUtils.isNotEmpty(draft)) {
log.info("删除待发布配置详情");
delConfig(panel.getId(),PublishedStatus.WAIT_PUBLISHED.value);
log.info("删除仪表板权限信息");
permissionService.delPermissionByPanelId(config.getPanelId(), PublishedStatus.WAIT_PUBLISHED.value);
log.info("更新发布版本的groupId");
draft.setGroupId(permission.getGroupId());
draftService.updateById(draft);
} else {
//修改
log.info("删除仪表板配置详情");
delConfig(config.getPanelId(), null);
log.info("删除仪表板权限信息");
permissionService.delPermissionByPanelId(config.getPanelId(), null);
}
log.info("保存配置详情");
savePanelConfig(panel.getId(), config.getConfigDetails(), PublishedStatus.WAIT_PUBLISHED.value);
log.info("保存权限信息");
permissionService.savePanelPermission(permission.getCustomPermissions(),panel.getId(),permission.getAccessType(),PublishedStatus.WAIT_PUBLISHED.value);
log.info("更新仪表板树");
updateTree(config, panel);
panelService.updateById(panel);
return config.getPanelId();
}
private void checkAll(String appId, InstrumentPanelConfigDTO config, InstrumentPanelPermissionDTO permission) {
if (ObjectUtils.isEmpty(permission)) {
throw new SysException("权限必填");
}
if (StringUtils.isEmpty(permission.getPanelName())) {
throw new SysException("仪表板名字必填");
}
if (StringUtils.isEmpty(permission.getGroupId())) {
throw new SysException("仪表板分组必填");
}
log.info("校验仪表板名称是否重复");
panelService.checkName(appId, config.getPanelId(), permission.getPanelName());
}
@Override
public void delConfig(@NotNull String panelId, String publishedStatus) {
List<InstrumentPanelConfig> configs = getConfigByPanelIdAndPublishStatus(panelId,publishedStatus);
if (CollectionUtils.isNotEmpty(configs)) {
configs.forEach(x -> {
x.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(x);
});
}
}
@Override
public void savePanelConfig(String panelId, String configDetails, String publishStatus) {
InstrumentPanelConfig panelConfig = new InstrumentPanelConfig();
panelConfig.setId(IdWorker.get32UUID());
panelConfig.setPanelId(panelId);
panelConfig.setPublished(publishStatus);
try {
panelConfig.setConfigDetails(URLEncoder.encode(configDetails, StandardCharsets.UTF_8.name()));
} catch (Exception e) {
e.printStackTrace();
throw new SysException("仪表板配置详情加密异常");
}
baseMapper.insert(panelConfig);
}
@Override
public void publishConfigByPanelIds(List<String> ids) {
LambdaQueryWrapper<InstrumentPanelConfig> where = new LambdaQueryWrapper<>();
where.eq(InstrumentPanelConfig::getRecordStatus, SlmConstants.DATA_VALID);
where.in(InstrumentPanelConfig::getPanelId, ids);
List<InstrumentPanelConfig> configs = baseMapper.selectList(where);
if (CollectionUtils.isNotEmpty(configs)) {
Map<String, List<InstrumentPanelConfig>> configMaps = configs.stream().collect(Collectors.groupingBy(InstrumentPanelConfig::getPanelId));
if(CollectionUtils.isNotEmpty(configMaps)){
configMaps.forEach((k,v)->{
List<InstrumentPanelConfig> waitPublishConfigs = configs.stream().filter(x -> PublishedStatus.WAIT_PUBLISHED.value.equals(x.getPublished())).collect(Collectors.toList());
List<InstrumentPanelConfig> publishConfigs = configs.stream().filter(x -> PublishedStatus.PUBLISHED.value.equals(x.getPublished())).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(waitPublishConfigs)){
waitPublishConfigs.forEach(x -> {
x.setPublished(PublishedStatus.PUBLISHED.value);
baseMapper.updateById(x);
});
if(CollectionUtils.isNotEmpty(publishConfigs)){
publishConfigs.forEach(x -> {
x.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(x);
});
}
}
});
}
}
}
@Override
@Transactional(readOnly = true)
public List<InstrumentPanelConfig> getConfigByPanelIdAndPublishStatus(String panelId, String publishStatus) {
LambdaQueryWrapper<InstrumentPanelConfig> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.eq(InstrumentPanelConfig::getPanelId, panelId);
if(publishStatus!=null) {
where.eq(InstrumentPanelConfig::getPublished, publishStatus);
}
return baseMapper.selectList(where);
}
@Override
public void offlineConfig(String panelId, String publishStatus) {
List<InstrumentPanelConfig> configs = getConfigByPanelIdAndPublishStatus(panelId, publishStatus);
InstrumentPanelConfig waitConfig = configs.stream()
.filter(x -> PublishedStatus.WAIT_PUBLISHED.value.equals(x.getPublished()))
.findFirst()
.orElse(null);
if(ObjectUtils.isNotEmpty(waitConfig)){
InstrumentPanelConfig publishConfig =
configs.stream().filter(x -> PublishedStatus.PUBLISHED.value.equals(x.getPublished())).findFirst().orElse(null);
if(ObjectUtils.isNotEmpty(publishConfig)){
publishConfig.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(publishConfig);
}
}else{
InstrumentPanelConfig pushConfig = configs.stream()
.filter(x -> PublishedStatus.PUBLISHED.value.equals(x.getPublished()))
.findFirst()
.orElse(null);
if(ObjectUtils.isNotEmpty(pushConfig)){
InstrumentPanelConfig config = new InstrumentPanelConfig();
BeanUtils.copyProperties(pushConfig,config);
config.setPublished(PublishedStatus.WAIT_PUBLISHED.value);
config.setId(IdWorker.get32UUID());
baseMapper.insert(config);
pushConfig.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(pushConfig);
}
}
}
@Override
@Transactional
public Map<String, String> getAssemblyConfig(@NotNull String panelId) {
Map<String,String> maps = Maps.newHashMap();
LambdaQueryWrapper<InstrumentPanelConfig> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.eq(InstrumentPanelConfig::getPanelId, panelId);
List<InstrumentPanelConfig> configs = baseMapper.selectList(where);
if(CollectionUtils.isNotEmpty(configs)){
InstrumentPanelConfig waitConfig = configs.stream()
.filter(x -> PublishedStatus.WAIT_PUBLISHED.value.equals(x.getPublished()))
.findFirst()
.orElse(null);
if(ObjectUtils.isNotEmpty(waitConfig)){
try {
maps.put(PublishedStatus.WAIT_PUBLISHED.value,URLDecoder.decode(waitConfig.getConfigDetails(),StandardCharsets.UTF_8.name()));
}catch (Exception e){
e.printStackTrace();
}
}
InstrumentPanelConfig publishConfig = configs.stream()
.filter(x -> PublishedStatus.PUBLISHED.value.equals(x.getPublished()))
.findFirst()
.orElse(null);
if(ObjectUtils.isNotEmpty(publishConfig)){
try {
maps.put(PublishedStatus.PUBLISHED.value,URLDecoder.decode(publishConfig.getConfigDetails(),StandardCharsets.UTF_8.name()));
}catch (Exception e){
e.printStackTrace();
}
}
}
return maps;
}
private InstrumentPanelConfigVo getInstrumentPanelConfigVo(String instrumentPanelId, PublishedStatus published) {
LambdaQueryWrapper<InstrumentPanelConfig> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.eq(InstrumentPanelConfig::getPanelId, instrumentPanelId);
where.eq(InstrumentPanelConfig::getPublished, published.value);
InstrumentPanelConfig config = baseMapper.selectOne(where);
if(ObjectUtils.isNotEmpty(config)) {
InstrumentPanelConfigVo vo = new InstrumentPanelConfigVo();
BeanUtils.copyProperties(config, vo);
if (ObjectUtils.isNotEmpty(vo)) {
try {
vo.setConfigDetails(URLDecoder.decode(vo.getConfigDetails(), StandardCharsets.UTF_8.name()));
} catch (Exception e) {
e.printStackTrace();
throw new SysException("仪表板配置详情解密异常");
}
vo.setPermissions(permissionService.getPublishPermissionByPanelId(instrumentPanelId, published.value));
InstrumentPanelVo panelVo = new InstrumentPanelVo();
if (PublishedStatus.PUBLISHED.value.equals(published.value)) {
InstrumentPanelDraft panel = draftService.getById(instrumentPanelId);
BeanUtils.copyProperties(panel, panelVo);
} else {
InstrumentPanel panel = panelService.getById(instrumentPanelId);
BeanUtils.copyProperties(panel, panelVo);
}
vo.setPanel(panelVo);
return vo;
}
}
return null; return null;
} }
private void fillPanelProp(InstrumentPanelPermissionDTO permission, InstrumentPanel panel,String publishStatus) {
panel.setGroupId(permission.getGroupId());
panel.setName(permission.getPanelName());
panel.setAccessPermission(permission.getAccessType());
panel.setDescription(permission.getDescription());
panel.setPublished(publishStatus);
}
private void updateTree(InstrumentPanelConfigDTO config, InstrumentPanel panel) {
log.info("更新仪表盘树");
InstrumentPanelTree tree = treeService.getById(config.getPanelId());
String beforeFullId = tree.getFullId();
treeService.updatePanelTreeFullName(panel.getId(), panel.getName(), panel.getGroupId());
log.info("查找仪表盘配置组件树并删除");
treeService.delTreeByPanelFullId(beforeFullId);
log.info("重新构建组件树");
treeService.savePanelAssemblyTree(tree, config.getAssemblys(), panel.getId());
}
} }
package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.slmbi.dao.InstrumentPanelDraftMapper;
import com.syc.slm.slmbi.entity.BaseEntity;
import com.syc.slm.slmbi.entity.InstrumentPanel;
import com.syc.slm.slmbi.entity.InstrumentPanelDraft;
import com.syc.slm.slmbi.service.InstrumentPanelDraftService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 仪表板草稿
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Service
public class InstrumentPanelDraftServiceImpl extends ServiceImpl<InstrumentPanelDraftMapper, InstrumentPanelDraft>
implements InstrumentPanelDraftService {
@Override
public void saveDrafts(List<InstrumentPanel> panels) {
if (CollectionUtils.isNotEmpty(panels)) {
List<InstrumentPanelDraft> drafts = SlmConstants.gson.fromJson(SlmConstants.gson.toJson(panels), new TypeToken<List<InstrumentPanelDraft>>() {
}.getType());
if (CollectionUtils.isNotEmpty(drafts)) {
List<InstrumentPanelDraft> panelDrafts = getByIds(panels.stream().map(InstrumentPanel::getId).collect(Collectors.toSet()));
Map<String, String> maps = CollectionUtils.isNotEmpty(panelDrafts) ? panelDrafts.stream().collect(
Collectors.toMap(InstrumentPanelDraft::getPanelId, BaseEntity::getId)) : Maps.newHashMap();
drafts.forEach(x -> {
x.setPanelId(x.getId());
if (maps.containsKey(x.getId())) {
x.setId(maps.get(x.getId()));
baseMapper.updateById(x);
} else {
x.setId(IdWorker.get32UUID());
baseMapper.insert(x);
}
});
}
}
}
@Override
public List<InstrumentPanelDraft> getByIds(Set<String> panelIds) {
LambdaQueryWrapper<InstrumentPanelDraft> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.in(InstrumentPanelDraft::getPanelId, panelIds);
return baseMapper.selectList(where);
}
@Override
public List<InstrumentPanelDraft> selectDraftList(String appId, Set<String> panelIds, String officeIds, String userId, String roleId) {
return baseMapper.selectDraftList(appId, panelIds, officeIds, userId, roleId);
}
@Override
public InstrumentPanelDraft getByPanelId(String panelId) {
List<InstrumentPanelDraft> drafts = getByIds(Sets.newHashSet(panelId));
return CollectionUtils.isNotEmpty(drafts)?drafts.get(0):null;
}
}
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.syc.slm.common.core.util.R; import com.google.common.collect.Lists;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.slmbi.dao.InstrumentPanelGroupMapper; import com.syc.slm.slmbi.dao.InstrumentPanelGroupMapper;
import com.syc.slm.slmbi.dto.InstrumentPanelGroupDTO; import com.syc.slm.slmbi.dto.InstrumentPanelGroupDTO;
import com.syc.slm.slmbi.entity.BaseEntity;
import com.syc.slm.slmbi.entity.InstrumentPanelGroup; import com.syc.slm.slmbi.entity.InstrumentPanelGroup;
import com.syc.slm.slmbi.entity.InstrumentPanelTree;
import com.syc.slm.slmbi.enums.NodeType;
import com.syc.slm.slmbi.exception.SysException;
import com.syc.slm.slmbi.function.Action2;
import com.syc.slm.slmbi.service.InstrumentPanelGroupService; import com.syc.slm.slmbi.service.InstrumentPanelGroupService;
import com.syc.slm.slmbi.service.InstrumentPanelService;
import com.syc.slm.slmbi.service.InstrumentPanelTreeService;
import com.syc.slm.slmbi.vo.InstrumentPanelGroupVo; import com.syc.slm.slmbi.vo.InstrumentPanelGroupVo;
import com.syc.slm.slmbi.vo.PanelGroupVo; import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import lombok.NonNull; import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* slm-bi * slm-bi
...@@ -21,35 +39,195 @@ import java.util.List; ...@@ -21,35 +39,195 @@ import java.util.List;
* @author : lin * @author : lin
* @date : 2021-03-25 15:43 * @date : 2021-03-25 15:43
**/ **/
@Slf4j
@Service @Service
public class InstrumentPanelGroupServiceImpl extends ServiceImpl<InstrumentPanelGroupMapper, InstrumentPanelGroup> implements InstrumentPanelGroupService { public class InstrumentPanelGroupServiceImpl extends ServiceImpl<InstrumentPanelGroupMapper, InstrumentPanelGroup>
implements InstrumentPanelGroupService {
@Autowired
private InstrumentPanelTreeService treeService;
@Autowired
private InstrumentPanelService panelService;
@Override @Override
public List<InstrumentPanelGroupVo> selectGroupList() { @Transactional(readOnly = true)
return null; public List<InstrumentPanelGroupVo> selectGroupList(String appId,String name) {
LambdaQueryWrapper<InstrumentPanelGroup> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getAppId, appId);
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
List<InstrumentPanelGroupVo> allGroups=baseMapper.selectGroupList(where);
List<InstrumentPanelGroupVo> filteredGroups=allGroups;
Map<String, InstrumentPanelGroupVo> allMap=allGroups.stream().collect(Collectors.toMap(InstrumentPanelGroupVo::getId, x->x));
Map<String, InstrumentPanelGroupVo> filteredMap=allMap;
where.like(InstrumentPanelGroup::getName, name);
if(StringUtils.isNotEmpty(name)){
filteredGroups=baseMapper.selectGroupList(where);
filteredMap=filteredGroups.stream().collect(Collectors.toMap(InstrumentPanelGroupVo::getId, x->x));
}
Stack<InstrumentPanelGroupVo> stack=new Stack<>();
stack.addAll(filteredGroups);
while(!stack.isEmpty()){
InstrumentPanelGroupVo group = stack.pop();
String parentId=group.getParentId();
if(StringUtils.isNotEmpty(parentId)) {
InstrumentPanelGroupVo pGroup = Optional.ofNullable(filteredMap.get(parentId)).orElse(allMap.get(parentId));
filteredMap.putIfAbsent(parentId, pGroup);
stack.add(pGroup);
}
}
return Lists.newArrayList(filteredMap.values());
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public String delGroup(@NonNull String groupId) { public String delGroup(@NonNull String groupId) {
return null; InstrumentPanelGroup group = baseMapper.selectById(groupId);
} if (group.getRecordStatus().equals(SlmConstants.DATA_DELETED)) {
throw new SysException("该分组已经被删除,请重新刷新页面进行操作!");
}
group.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(group);
@Override log.info("删除仪表板树本身");
public String updateGroup(InstrumentPanelGroupDTO group) { InstrumentPanelTree tree = treeService.getById(groupId);
return null; tree.setRecordStatus(SlmConstants.DATA_DELETED);
treeService.updateById(tree);
log.info("查询该仪表板树下的子节点");
List<InstrumentPanelTree> children = getInstrumentPanelTrees.apply(tree.getFullId());
if (CollectionUtils.isNotEmpty(children)) {
Set<String> childrenIds = children.stream().map(BaseEntity::getId).collect(Collectors.toSet());
log.info("删除该仪表板树下的子节点");
treeService.batchUpdateTreeByIds(childrenIds, SlmConstants.DATA_DELETED);
log.info("删除子分组");
delChildrenGroups.accept(children);
log.info("删除各个分组下的仪表板");
delPanelByIds.accept(children);
}
return groupId;
} }
@Override @Override
public String saveGroup(InstrumentPanelGroupDTO group) { @Transactional(rollbackFor = Exception.class)
return null; public String updateGroup(@NonNull InstrumentPanelGroupDTO group,String appId) {
if(StringUtils.isEmpty(group.getName())){
throw new SysException("仪表板分组名称必填");
}
if(StringUtils.isEmpty(group.getParentId())){
throw new SysException("父级分组必填");
}
log.info("检查分组名字是否重复");
checkedRepeatName.call(group,appId);
InstrumentPanelGroup entity = new InstrumentPanelGroup();
BeanUtils.copyProperties(group, entity);
baseMapper.updateById(entity);
log.info("更新分组在仪表盘树中的全路径");
InstrumentPanelTree tree = treeService.getById(entity.getId());
String beforeFullName = tree.getFullName();
String beforeFullId = tree.getFullId();
InstrumentPanelTree panelTree = treeService.getById(group.getParentId());
tree.setFullName(panelTree.getFullName() + "." + entity.getName());
tree.setFullId(panelTree.getFullId() + "." + entity.getId());
tree.setName(entity.getName());
treeService.updateById(tree);
log.info("重新构建该分组下的仪表板树全路径");
List<InstrumentPanelTree> children = getInstrumentPanelTrees.apply(beforeFullId);
children.forEach(x -> {
x.setFullId(x.getFullId().replace(beforeFullId, tree.getFullId()));
x.setFullName(tree.getFullName()+"." + x.getFullName()
.substring(beforeFullName.length()+1));
treeService.updateById(x);
});
return tree.getId();
} }
@Override @Override
public List<PanelGroupVo> loadTrees(String name) { @Transactional(rollbackFor = Exception.class)
return null; public String saveGroup(@NonNull InstrumentPanelGroupDTO group,String appId) {
if(StringUtils.isEmpty(group.getName())){
throw new SysException("仪表板分组名称必填");
}
log.info("校验名字是否重复");
checkedRepeatName.call(group,appId);
log.info("新增仪表板分组");
InstrumentPanelGroup entity = new InstrumentPanelGroup();
BeanUtils.copyProperties(group, entity);
entity.setId(IdWorker.get32UUID());
baseMapper.insert(entity);
log.info("构建仪表板树 聚合表");
InstrumentPanelTree tree = new InstrumentPanelTree();
tree.setId(entity.getId());
if (StringUtils.isNotEmpty(group.getParentId())) {
InstrumentPanelTree panelTree = treeService.getById(group.getParentId());
if (SlmConstants.DATA_DELETED.equals(panelTree.getRecordStatus())) {
throw new SysException(panelTree.getName() + ",已不存在,请刷新页面");
}
tree.setFullId(panelTree.getFullId() + "." + entity.getId());
tree.setFullName(panelTree.getFullName() + "." + entity.getName());
} else {
//顶级分组
log.info("重新构建该分组下的仪表板树全路径");
tree.setFullId(entity.getId());
tree.setFullName(entity.getName());
}
tree.setNodeType(NodeType.GROUP.value);
tree.setName(entity.getName());
treeService.save(tree);
return entity.getId();
} }
@Override @Override
public List<PanelGroupVo> children(String groupId, String name) { public List<PanelTreeNodeVo> selectGroupByIds(Set<String> finalPanelIds,String name) {
return null; return baseMapper.selectGroupByIds(finalPanelIds,name);
} }
private Action2<InstrumentPanelGroupDTO,String> checkedRepeatName=(group,appId)-> {
LambdaQueryWrapper<InstrumentPanelGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(InstrumentPanelGroup::getName, group.getName());
wrapper.eq(BaseEntity::getAppId, appId);
wrapper.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
if (StringUtils.isNotEmpty(group.getId())) {
wrapper.ne(InstrumentPanelGroup::getId, group.getId());
}
if (baseMapper.selectCount(wrapper) > 0) {
throw new SysException("仪表板分组名字:" + group.getName() + "已存在!");
}
};
private Consumer<List<InstrumentPanelTree>> delChildrenGroups = (trees) -> {
Set<String> groupIds = trees.stream()
.filter(x -> NodeType.GROUP.value.equals(x.getNodeType()))
.map(BaseEntity::getId)
.collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(groupIds)) {
if (CollectionUtils.isNotEmpty(groupIds)) {
baseMapper.batchUpdateGroupByIds(groupIds, SlmConstants.DATA_DELETED);
}
}
};
private Consumer<List<InstrumentPanelTree>> delPanelByIds = (trees) -> {
Set<String> panelIds = trees.stream()
.filter(x -> NodeType.PANEL.value.equals(x.getNodeType()))
.map(BaseEntity::getId)
.collect(Collectors.toSet());
if(CollectionUtils.isNotEmpty(panelIds)) {
panelService.batchUpdatePanelByIds(panelIds, SlmConstants.DATA_DELETED);
}
};
private Function<String, List<InstrumentPanelTree>> getInstrumentPanelTrees = (fullId) -> {
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.likeRight(InstrumentPanelTree::getFullId, fullId + ".");
return treeService.list(where);
};
} }
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Sets;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.slmbi.dao.InstrumentPanelPermissionMapper;
import com.syc.slm.slmbi.dto.CustomPermissionDTO;
import com.syc.slm.slmbi.dto.InstrumentPanelPermissionDTO; import com.syc.slm.slmbi.dto.InstrumentPanelPermissionDTO;
import com.syc.slm.slmbi.entity.InstrumentPanel;
import com.syc.slm.slmbi.entity.InstrumentPanelConfig;
import com.syc.slm.slmbi.entity.InstrumentPanelPermission;
import com.syc.slm.slmbi.enums.AccessType;
import com.syc.slm.slmbi.enums.PublishedStatus;
import com.syc.slm.slmbi.exception.SysException;
import com.syc.slm.slmbi.service.InstrumentPanelPermissionService; import com.syc.slm.slmbi.service.InstrumentPanelPermissionService;
import com.syc.slm.slmbi.service.InstrumentPanelService;
import com.syc.slm.slmbi.service.InstrumentPanelTreeService;
import com.syc.slm.slmbi.vo.CustomPermissionVo;
import com.syc.slm.slmbi.vo.InstrumentPanelPermissionVo; import com.syc.slm.slmbi.vo.InstrumentPanelPermissionVo;
import lombok.NonNull; import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* slm-bi * slm-bi
...@@ -16,28 +42,201 @@ import java.util.List; ...@@ -16,28 +42,201 @@ import java.util.List;
* @date : 2021-03-25 19:04 * @date : 2021-03-25 19:04
**/ **/
@Service @Service
public class InstrumentPanelPermissionImpl implements InstrumentPanelPermissionService { @Slf4j
public class InstrumentPanelPermissionImpl
extends ServiceImpl<InstrumentPanelPermissionMapper, InstrumentPanelPermission>
implements InstrumentPanelPermissionService {
@Autowired
private InstrumentPanelService panelService;
@Autowired
private InstrumentPanelTreeService treeService;
@Override
@Transactional(rollbackFor = Exception.class)
public String savePermission(InstrumentPanelPermissionDTO permissions) {
log.info("判断仪表板的名称是否重复");
if (StringUtils.isBlank(permissions.getPanelName())) {
throw new SysException("仪表板名称必填");
}
if (StringUtils.isBlank(permissions.getPanelId())) {
throw new SysException("仪表板id必填,请联系管理员");
}
if (StringUtils.isBlank(permissions.getGroupId())) {
throw new SysException("仪表板groupId必填,请联系管理员");
}
InstrumentPanel panel = panelService.getById(permissions.getPanelId());
panel.setName(permissions.getPanelName());
panel.setGroupId(permissions.getGroupId());
panel.setAccessPermission(permissions.getAccessType());
panel.setDescription(permissions.getDescription());
log.info("删除原本的权限");
delPermissionByPanelId(permissions.getPanelId(), PublishedStatus.WAIT_PUBLISHED.value);
savePanelPermission(permissions.getCustomPermissions(),permissions.getPanelId(),permissions.getAccessType(),PublishedStatus.WAIT_PUBLISHED.value);
log.info("更新仪表板的名称跟分组");
treeService.updateFullNameByGroupId(permissions.getGroupId(),permissions.getPanelId(),permissions.getPanelName());
panelService.updateById(panel);
return permissions.getPanelId();
}
@Override
public InstrumentPanelPermissionVo saveCopyOtherPermission(@NonNull String instrumentPanelId) {
return selectPermissionByPanelId(instrumentPanelId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveCopyToOtherPermission(InstrumentPanelPermissionDTO permissions, List<String> otherInstrumentPanelIds) {
if(CollectionUtils.isEmpty(otherInstrumentPanelIds)){
throw new SysException("其他仪表板id必填,请联系管理员");
}
if(StringUtils.isBlank(permissions.getAccessType())){
throw new SysException("访问权限类型必填");
}
List<InstrumentPanel> panels = panelService.getByIds(Sets.newHashSet(otherInstrumentPanelIds));
if(CollectionUtils.isEmpty(panels)){
throw new SysException("查找不到对应的仪表板,请联系管理员");
}
panels.forEach(panel->{
panel.setAccessPermission(permissions.getAccessType());
panel.setDescription(permissions.getDescription());
log.info("删除原本的权限");
delPermissionByPanelId(panel.getId(), PublishedStatus.WAIT_PUBLISHED.value);
log.info("插入现有的权限");
savePanelPermission(permissions.getCustomPermissions(), panel.getId(), panel.getAccessPermission(), PublishedStatus.WAIT_PUBLISHED.value);
log.info("更新访问权限");
panelService.updateById(panel);
});
}
@Override
@Transactional(readOnly = true)
public InstrumentPanelPermissionVo selectPermissionByPanelId(@NonNull String instrumentPanelId) {
InstrumentPanelPermissionVo vo = new InstrumentPanelPermissionVo();
InstrumentPanel panel = panelService.getById(instrumentPanelId);
vo.setAccessType(panel.getAccessPermission());
vo.setDescription(panel.getDescription());
List<CustomPermissionVo> vos = getPublishPermissionByPanelId(instrumentPanelId, PublishedStatus.WAIT_PUBLISHED.value);
if(CollectionUtils.isEmpty(vos)){
vos = getPublishPermissionByPanelId(instrumentPanelId, PublishedStatus.PUBLISHED.value);
}
vo.setCustomPermissions(vos);
return vo;
}
@Override
public void delPermissionByPanelId(@NonNull String panelId, String publishStatus) {
List<InstrumentPanelPermission> permissions =getPermissionByPanelIdAndPublishStatus(panelId,publishStatus);
if (CollectionUtils.isNotEmpty(permissions)) {
permissions.forEach(x -> {
x.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(x);
});
}
}
@Override @Override
public String savePermission(List<InstrumentPanelPermissionDTO> permissions){ @Transactional(readOnly = true)
//判断仪表板的名称是否重复 public List<CustomPermissionVo> getPublishPermissionByPanelId(@NonNull String panelId,
//删除原本的权限 @NonNull String publishStatus) {
//插入现有的权限 List<InstrumentPanelPermission> permissions = getPermissionByPanelIdAndPublishStatus(panelId,publishStatus);
//更新仪表板的名称跟分组 return CollectionUtils.isNotEmpty(permissions) ? SlmConstants.gson.fromJson(SlmConstants.gson.toJson(permissions), new TypeToken<List<CustomPermissionVo>>() {}.getType()) : null;
return null;
} }
@Override @Override
public List<InstrumentPanelPermissionVo> saveCopyOtherPermission(@NonNull String instrumentPanelId) { public void savePanelPermission(List<CustomPermissionDTO> customPermissions,
return null; String panelId,
String accessType,
String publishStatus) {
if (CollectionUtils.isNotEmpty(customPermissions)) {
if (AccessType.CUSTOM.value.equals(accessType)) {
if (CollectionUtils.isNotEmpty(customPermissions)) {
customPermissions.forEach(x -> {
InstrumentPanelPermission p = new InstrumentPanelPermission();
p.setId(IdWorker.get32UUID());
p.setBizId(x.getBizId());
p.setBizName(x.getBizName());
p.setBizType(x.getType());
p.setPanelId(panelId);
p.setPublished(publishStatus);
baseMapper.insert(p);
});
}
}
}
} }
@Override @Override
public String saveCopyToOtherPermission(List<InstrumentPanelPermissionDTO> permissions, String otherInstrumentPanelId) { public void publishPermissionByPanelIds(List<String> ids) {
return null; LambdaQueryWrapper<InstrumentPanelPermission> where = new LambdaQueryWrapper<>();
where.in(InstrumentPanelPermission::getPanelId, ids);
where.eq(InstrumentPanelPermission::getRecordStatus, SlmConstants.DATA_VALID);
List<InstrumentPanelPermission> permissions = baseMapper.selectList(where);
Map<String, List<InstrumentPanelPermission>> permissionMaps = permissions.stream().collect(Collectors.groupingBy(InstrumentPanelPermission::getPanelId));
if(CollectionUtils.isNotEmpty(permissionMaps)){
permissionMaps.forEach((k,v)->{
List<InstrumentPanelPermission> waitings = permissions.stream().filter(x -> PublishedStatus.WAIT_PUBLISHED.value.equals(x.getPublished())).collect(Collectors.toList());
List<InstrumentPanelPermission> publishs = permissions.stream().filter(x -> PublishedStatus.PUBLISHED.value.equals(x.getPublished())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(waitings)) {
waitings.forEach(x -> {
x.setPublished(PublishedStatus.PUBLISHED.value);
baseMapper.updateById(x);
});
if (CollectionUtils.isNotEmpty(publishs)) {
publishs.forEach(x -> {
x.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(x);
});
}
}
});
}
} }
@Override @Override
public List<InstrumentPanelPermissionVo> selectPermissionByPanelId(@NonNull String instrumentPanelId) { public List<InstrumentPanelPermission> getPermissionByPanelIdAndPublishStatus(String panelId, String publishStatus) {
return null; LambdaQueryWrapper<InstrumentPanelPermission> where = new LambdaQueryWrapper<>();
where.eq(InstrumentPanelPermission::getPanelId, panelId);
where.eq(InstrumentPanelPermission::getRecordStatus, SlmConstants.DATA_VALID);
if(publishStatus!=null) {
where.eq(InstrumentPanelPermission::getPublished, publishStatus);
}
return baseMapper.selectList(where);
}
@Override
public void offlinePermission(String panelId) {
List<InstrumentPanelPermission> permissions = getPermissionByPanelIdAndPublishStatus(panelId,null);
long waitP = permissions.stream().filter(x -> PublishedStatus.WAIT_PUBLISHED.value.equals(x.getPublished())).count();
List<InstrumentPanelPermission> publish = permissions.stream().filter(x -> PublishedStatus.PUBLISHED.value.equals(x.getPublished())).collect(Collectors.toList());
if(waitP>0){
if(CollectionUtils.isNotEmpty(publish)){
publish.forEach(x->{
x.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(x);
});
}
}else{
if(CollectionUtils.isNotEmpty(publish)){
publish.forEach(push->{
InstrumentPanelPermission p = new InstrumentPanelPermission();
BeanUtils.copyProperties(push, p);
p.setPublished(PublishedStatus.WAIT_PUBLISHED.value);
p.setId(IdWorker.get32UUID());
baseMapper.insert(p);
push.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(push);
});
}
}
} }
} }
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.slmbi.dao.InstrumentPanelMapper; import com.syc.slm.slmbi.dao.InstrumentPanelMapper;
import com.syc.slm.slmbi.dto.QueryInstrumentPanelDTO;
import com.syc.slm.slmbi.dto.SaveInstrumentPanelDTO; import com.syc.slm.slmbi.dto.SaveInstrumentPanelDTO;
import com.syc.slm.slmbi.dto.SearchInstrumentPanelDTO; import com.syc.slm.slmbi.entity.BaseEntity;
import com.syc.slm.slmbi.entity.InstrumentPanel; import com.syc.slm.slmbi.entity.InstrumentPanel;
import com.syc.slm.slmbi.service.InstrumentPanelService; import com.syc.slm.slmbi.entity.InstrumentPanelDraft;
import com.syc.slm.slmbi.entity.InstrumentPanelTree;
import com.syc.slm.slmbi.enums.AccessType;
import com.syc.slm.slmbi.enums.NodeType;
import com.syc.slm.slmbi.enums.PublishedStatus;
import com.syc.slm.slmbi.exception.SysException;
import com.syc.slm.slmbi.service.*;
import com.syc.slm.slmbi.vo.InstrumentPanelConfigVo;
import com.syc.slm.slmbi.vo.InstrumentPanelVo; import com.syc.slm.slmbi.vo.InstrumentPanelVo;
import com.syc.slm.slmbi.vo.PanelTreeNodeVo;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* slm-bi * slm-bi
...@@ -19,46 +42,255 @@ import java.util.List; ...@@ -19,46 +42,255 @@ import java.util.List;
* @author : lin * @author : lin
* @date : 2021-03-25 16:17 * @date : 2021-03-25 16:17
**/ **/
@Slf4j
@Service @Service
public class InstrumentPanelServiceImpl extends ServiceImpl<InstrumentPanelMapper, InstrumentPanel> public class InstrumentPanelServiceImpl extends ServiceImpl<InstrumentPanelMapper, InstrumentPanel>
implements InstrumentPanelService { implements InstrumentPanelService {
@Autowired
private InstrumentPanelTreeService treeService;
@Autowired
private InstrumentPanelPermissionService permissionService;
@Autowired
private InstrumentPanelConfigService configService;
@Autowired
private InstrumentPanelDraftService draftService;
@Override @Override
public IPage<InstrumentPanelVo> selectInstrumentPanelList(SearchInstrumentPanelDTO where) { @Transactional(readOnly = true)
return null; public IPage<InstrumentPanelVo> selectInstrumentPanelList(String appId, QueryInstrumentPanelDTO query) {
IPage<InstrumentPanelVo> page = new Page<>(query.getCurrent(), query.getSize());
QueryWrapper<InstrumentPanel> where = new QueryWrapper<>();
if(StringUtils.isEmpty(appId)){
throw new SysException("appId必须传入");
}
where.eq("p.app_id", appId);
if(StringUtils.isEmpty(query.getGroupId())){
throw new SysException("必须选择需要查询的仪表板分组");
}
where.eq("p.group_id", query.getGroupId());
where.eq("p.record_status", SlmConstants.DATA_VALID);
if (StringUtils.isNotEmpty(query.getName())) {
where.and(x->x.like("p.name", query.getName()).or().like("p.creator_name", query.getName()).or().like("p.updater_name", query.getName()));
}
if (StringUtils.isNotEmpty(query.getPublished())) {
where.eq("p.published", query.getPublished());
}
if (query.getUpdateTimeBegin() != null) {
where.ge("p.update_time", query.getUpdateTimeBegin());
}
if (query.getUpdateTimeEnd() != null) {
where.le("p.update_time", query.getUpdateTimeEnd());
}
IPage<InstrumentPanelVo> response = baseMapper.selectInstrumentPanelList(page, where);
if(ObjectUtils.isNotEmpty(response)){
if(CollectionUtils.isNotEmpty(response.getRecords())){
Set<String> ids = response.getRecords()
.stream()
.filter(x -> "未发布".equals(x.getPublished()))
.map(BaseEntity::getId)
.collect(Collectors.toSet());
if(CollectionUtils.isNotEmpty(ids)){
List<InstrumentPanelDraft> drafts = draftService.getByIds(ids);
if(CollectionUtils.isNotEmpty(drafts)){
Set<String> draftIds = drafts.stream().map(InstrumentPanelDraft::getPanelId).collect(Collectors.toSet());
response.getRecords().forEach(x->{
if(draftIds.contains(x.getId())){
x.setHasWaitPublish("有未发布版本");
}
});
}
}
}
}
return response;
} }
@Override @Override
public String savePanel(SaveInstrumentPanelDTO panel) { @Transactional(rollbackFor = Exception.class)
return null; public String savePanel(String appId, SaveInstrumentPanelDTO panel) {
log.info("保存仪表板");
return savePanelData(appId, panel);
} }
@Override @Override
public Boolean batchPublish(List<String> ids) { @Transactional(rollbackFor = Exception.class)
return null; public List<String> batchPublish(List<String> ids) {
if (CollectionUtils.isEmpty(ids)) {
throw new SysException("请选择你要操作的数据");
}
List<InstrumentPanel> panels = baseMapper.selectBatchIds(ids);
if (CollectionUtils.isNotEmpty(panels)) {
panels.forEach(x -> {
x.setPublished(PublishedStatus.PUBLISHED.value);
baseMapper.updateById(x);
});
log.info("修改配置状态为发布状态");
configService.publishConfigByPanelIds(ids);
log.info("修改权限状态为发布状态");
permissionService.publishPermissionByPanelIds(ids);
log.info("复制一份草稿");
draftService.saveDrafts(panels);
}
return ids;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public String delPanel(String id) { public String delPanel(String id) {
return null; if (StringUtils.isEmpty(id)) {
throw new SysException("请选择你要操作的数据");
}
InstrumentPanel panel = baseMapper.selectById(id);
if (SlmConstants.DATA_DELETED.equals(panel.getRecordStatus())) {
throw new SysException("该数据已被删除,请刷新页面");
}
panel.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(panel);
log.info("删除该仪表板下的配置");
delAllSetting(id);
log.info("删除仪表板草稿表");
InstrumentPanelDraft draft =draftService.getByPanelId(id);
draft.setRecordStatus(SlmConstants.DATA_DELETED);
draftService.updateById(draft);
return id;
} }
@Override @Override
public String saveAsPanel(SaveInstrumentPanelDTO instrumentPanelDTO) { @Transactional(rollbackFor = Exception.class)
return null; public String saveAsPanel(String appId, SaveInstrumentPanelDTO panel) {
log.info("仪表板另存为");
return savePanelData(appId, panel);
} }
@Override @Override
@Transactional(readOnly = true)
public Boolean showRecoveryBtn(String id) { public Boolean showRecoveryBtn(String id) {
return null; return draftService.getByPanelId(id) != null;
} }
@Override @Override
public String recoveryPanel(String id) { @Transactional(readOnly = true)
return null; public InstrumentPanelConfigVo recoveryPanel(String id) {
return configService.getPublishConfigByPanelId(id);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public String offline(String id) { public String offline(String id) {
return null; if (StringUtils.isBlank(id)) {
throw new SysException("请选择你要操作的数据");
}
InstrumentPanel panel = baseMapper.selectById(id);
if (ObjectUtils.isEmpty(panel)) {
throw new SysException("该数据已不存在,请刷新页面");
}
if (SlmConstants.DATA_DELETED.equals(panel.getRecordStatus())) {
throw new SysException("该数据已被删除,请刷新页面");
}
if(PublishedStatus.WAIT_PUBLISHED.value.equals(panel.getPublished())){
throw new SysException("该仪表板已被下线,请刷新页面");
}
panel.setPublished(PublishedStatus.WAIT_PUBLISHED.value);
baseMapper.updateById(panel);
log.info("删除草稿");
InstrumentPanelDraft draft = draftService.getByPanelId(panel.getId());
if(ObjectUtils.isNotEmpty(draft)){
draft.setRecordStatus(SlmConstants.DATA_DELETED);
draftService.updateById(draft);
}
log.info("更新仪表板配置为待发布状态");
configService.offlineConfig(panel.getId(), null);
log.info("更新仪表板权限为待发布状态");
permissionService.offlinePermission(panel.getId());
return id;
} }
@Override
public void batchUpdatePanelByIds(Set<String> panelIds, Integer recordStatus) {
if (CollectionUtils.isNotEmpty(panelIds)) {
baseMapper.batchUpdatePanelByIds(panelIds, recordStatus);
}
}
@Override
public void checkName(@NonNull String appId, String panelId, @NonNull String panelName) {
LambdaQueryWrapper<InstrumentPanel> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(InstrumentPanel::getName, panelName);
wrapper.eq(InstrumentPanel::getAppId, appId);
wrapper.eq(InstrumentPanel::getRecordStatus, SlmConstants.DATA_VALID);
if (StringUtils.isNotEmpty(panelId)) {
wrapper.ne(InstrumentPanel::getId, panelId);
}
if (baseMapper.selectCount(wrapper) > 0) {
throw new SysException("仪表板名字:" + panelName + "已存在!");
}
}
@Override
public List<InstrumentPanel> getByIds(Set<String> panelIds) {
return baseMapper.selectBatchIds(panelIds);
}
@Override
public List<PanelTreeNodeVo> selectPanelByIds(Set<String> finalPanelIds,String name) {
return baseMapper.selectPanelByIds(finalPanelIds,name);
}
private String savePanelData(String appId, SaveInstrumentPanelDTO panel) {
if (StringUtils.isEmpty(panel.getName())) {
throw new SysException("仪表板名字必填");
}
if (StringUtils.isEmpty(panel.getGroupId())) {
throw new SysException("仪表板分组必填");
}
log.info("检查仪表板名称是否重复");
this.checkName(appId, null, panel.getName());
log.info("保存仪表板访问权限");
String panelId = IdWorker.get32UUID();
String accessType = AccessType.PUBLIC.value;
if (ObjectUtils.isNotEmpty(panel.getPermission()) && StringUtils.isNotEmpty(panel.getPermission().getAccessType())) {
accessType = panel.getPermission().getAccessType();
permissionService.savePanelPermission(panel.getPermission().getCustomPermissions(),panelId,panel.getPermission().getAccessType(),PublishedStatus.WAIT_PUBLISHED.value);
}
InstrumentPanel entity = new InstrumentPanel(panelId,panel.getName(),panel.getGroupId(),accessType,PublishedStatus.WAIT_PUBLISHED.value);
log.info("保存仪表板配置");
if (StringUtils.isNotEmpty(panel.getConfigDetails())) {
configService.savePanelConfig(panelId, panel.getConfigDetails(), PublishedStatus.WAIT_PUBLISHED.value);
}
log.info("初始化仪表板树");
treeService.initTree(entity.getGroupId(),NodeType.PANEL.value,entity.getId(),entity.getName());
if (CollectionUtils.isNotEmpty(panel.getAssemblys())) {
InstrumentPanelTree tree = treeService.getById(entity.getId());
log.info("保存仪表板组件树");
treeService.savePanelAssemblyTree(tree, panel.getAssemblys(), entity.getId());
} else {
log.info("前端没有构建组件树");
}
log.info("保存仪表板数据");
baseMapper.insert(entity);
return panelId;
}
private void delAllSetting(String id) {
log.info("删除仪表板对应权限");
permissionService.delPermissionByPanelId(id, null);
log.info("删除仪表板对应配置");
configService.delConfig(id, null);
log.info("删除仪表板树");
treeService.delTreeByPanelId(id);
}
} }
package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.common.core.util.R;
import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.dao.InstrumentPanelTreeMapper;
import com.syc.slm.slmbi.dto.InstrumentPanelAssemblyDTO;
import com.syc.slm.slmbi.entity.*;
import com.syc.slm.slmbi.enums.NodeType;
import com.syc.slm.slmbi.enums.PublishedStatus;
import com.syc.slm.slmbi.exception.SysException;
import com.syc.slm.slmbi.service.*;
import com.syc.slm.slmbi.vo.*;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.filefilter.FalseFileFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 仪表板树聚合表
*
* @author lin
* @date 2021-04-01 10:52:44
*/
@Service
@Slf4j
public class InstrumentPanelTreeServiceImpl extends ServiceImpl<InstrumentPanelTreeMapper, InstrumentPanelTree>
implements InstrumentPanelTreeService {
@Autowired
private InstrumentPanelDraftService draftService;
@Autowired
private InstrumentPanelGroupService groupService;
@Autowired
private InstrumentPanelConfigService configService;
@Autowired
private InstrumentPanelService panelService;
@Override
public void batchUpdateTreeByIds(Set<String> treeIds, Integer recordStatus) {
if (CollectionUtils.isNotEmpty(treeIds)) {
baseMapper.batchUpdateTreeByIds(treeIds, recordStatus);
}
}
@Override
public void initTree(String nodeId, String nodeType, String bizId, String bizName) {
InstrumentPanelTree panelTree = baseMapper.selectById(nodeId);
InstrumentPanelTree tree = new InstrumentPanelTree();
tree.setId(bizId);
tree.setNodeType(nodeType);
tree.setFullName(panelTree.getFullName() + "." + bizName);
tree.setFullId(panelTree.getFullId() + "." + bizId);
tree.setName(bizName);
baseMapper.insert(tree);
}
@Override
public void delTreeByPanelId(String panelId) {
InstrumentPanelTree tree = baseMapper.selectById(panelId);
tree.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(tree);
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.likeRight(InstrumentPanelTree::getFullId, tree.getFullId() + ".");
List<InstrumentPanelTree> list = baseMapper.selectList(where);
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(x -> {
x.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(x);
});
}
}
@Override
public void savePanelAssemblyTree(InstrumentPanelTree tree,List<InstrumentPanelAssemblyDTO> assembly,String panelId) {
if (CollectionUtils.isNotEmpty(assembly)) {
assembly.forEach(x->{
if(StringUtils.isBlank(x.getName()) || StringUtils.isBlank(x.getKey())){
log.info("不要传入空得组件树");
}else {
InstrumentPanelTree t = new InstrumentPanelTree();
t.setId(IdWorker.get32UUID());
t.setNodeType(NodeType.ASSEMBLY.value);
t.setFullId(tree.getFullId() + "." + t.getId());
t.setFullName(tree.getFullName() + "." + x.getName());
t.setAssemblyKey(x.getKey());
t.setName(x.getName());
baseMapper.insert(t);
}
});
}
}
@Override
public void delTreeByPanelFullId(String fullId) {
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.likeRight(InstrumentPanelTree::getFullId, fullId + ".");
List<InstrumentPanelTree> trees = baseMapper.selectList(where);
if (CollectionUtils.isNotEmpty(trees)) {
trees.forEach(x -> {
x.setRecordStatus(SlmConstants.DATA_DELETED);
baseMapper.updateById(x);
});
}
}
@Override
public void updatePanelTreeFullName(String panelId, String panelName, String groupId) {
InstrumentPanelTree groupTree = baseMapper.selectById(groupId);
InstrumentPanelTree tree = baseMapper.selectById(panelId);
tree.setFullName(groupTree.getFullName() + "." + panelName);
tree.setFullId(groupTree.getFullId() + "." + panelId);
tree.setName(panelName);
baseMapper.updateById(tree);
}
@Override
public List<PanelTreeNodeVo> loadTrees(String appId, String name,String uri,CurrentUser user) {
if(StringUtils.isBlank(name)){
return loadTrees(appId,uri,user);
}
List<PanelTreeNodeVo> lists = Lists.newArrayList();
R<Map<String, String>> result = setDeptAndRole(user, uri);
Map<String, String> detach = result.detach();
String userId=user.getUid();
String officeIds=detach.get("deptIds");
String roleId=detach.get("roleIds");
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getAppId, appId);
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.eq(InstrumentPanelTree::getNodeType, NodeType.PANEL.value);
if (StringUtils.isNotBlank(name)) {
where.like(InstrumentPanelTree::getFullName, name);
}
List<InstrumentPanelTree> trees = baseMapper.selectList(where);
if (CollectionUtils.isNotEmpty(trees)) {
Set<String> panelIds = trees.stream().map(BaseEntity::getId).collect(Collectors.toSet());
List<InstrumentPanelDraft> panels = draftService.selectDraftList(appId, panelIds, officeIds, userId, roleId);
if (CollectionUtils.isNotEmpty(panels)) {
Set<String> publishIds = panels.stream().map(InstrumentPanelDraft::getPanelId).collect(Collectors.toSet());
Set<String[]> finalPanelArrays = trees.stream()
.filter(x -> publishIds.contains(x.getId()))
.map(x -> x.getFullId().split("[.]"))
.collect(Collectors.toSet());
Set<String> finalPanelIds = Sets.newHashSet();
finalPanelArrays.forEach(x-> finalPanelIds.addAll(Arrays.asList(x)));
List<PanelTreeNodeVo> panelTreeNodeVos = panelService.selectPanelByIds(finalPanelIds,name);
if (CollectionUtils.isNotEmpty(panelTreeNodeVos)) {
lists.addAll(panelTreeNodeVos);
}
List<PanelTreeNodeVo> groupTreeNodeVos = groupService.selectGroupByIds(finalPanelIds,null);
if (CollectionUtils.isNotEmpty(groupTreeNodeVos)) {
if(CollectionUtils.isEmpty(panelTreeNodeVos) && StringUtils.isNotBlank(name)){
Set<String> groupIds = groupTreeNodeVos.stream().filter(x -> x.getName().contains(name)).map(PanelTreeNodeVo::getId).collect(Collectors.toSet());
List<InstrumentPanelTree> groupTrees = baseMapper.selectBatchIds(groupIds);
groupIds.clear();
groupTrees.forEach(x->{
if(x.getFullId().contains(".")){
groupIds.addAll(Arrays.asList(x.getFullId().split("[.]")));
}else{
groupIds.add(x.getFullId());
}
});
groupTreeNodeVos= groupService.selectGroupByIds(groupIds,null);
}
lists.addAll(groupTreeNodeVos);
}
}
}
return lists;
}
@Override
public List<PanelTreeNodeVo> loadTrees(String appId,String uri,CurrentUser user) {
List<PanelTreeNodeVo> lists = Lists.newArrayList();
R<Map<String, String>> result = setDeptAndRole(user, uri);
Map<String, String> detach = result.detach();
String userId=user.getUid();
String officeIds=detach.get("deptIds");
String roleId=detach.get("roleIds");
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getAppId, appId);
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.eq(InstrumentPanelTree::getNodeType, NodeType.PANEL.value);
List<InstrumentPanelTree> trees = baseMapper.selectList(where);
if (CollectionUtils.isNotEmpty(trees)) {
Set<String> panelIds = trees.stream().map(BaseEntity::getId).collect(Collectors.toSet());
List<InstrumentPanelDraft> panels = draftService.selectDraftList(appId,panelIds,officeIds,userId,roleId);
if(CollectionUtils.isNotEmpty(panels)) {
Set<String> publishIds = panels.stream().map(InstrumentPanelDraft::getPanelId).collect(Collectors.toSet());
Set<String[]> finalPanelArrays = trees.stream()
.filter(x -> publishIds.contains(x.getId()))
.map(x -> x.getFullId().split("[.]"))
.collect(Collectors.toSet());
Set<String> finalPanelIds = Sets.newHashSet();
finalPanelArrays.forEach(x -> {
if (x.length > 3) {
for (int i = 0; i < x.length; i++) {
if (i == 2) {
break;
}
finalPanelIds.add(x[i]);
}
}
});
List<PanelTreeNodeVo> groupTreeNodeVos = groupService.selectGroupByIds(finalPanelIds,null);
if (CollectionUtils.isNotEmpty(groupTreeNodeVos)) {
lists.addAll(groupTreeNodeVos);
}
List<PanelTreeNodeVo> panelTreeNodeVos = panelService.selectPanelByIds(finalPanelIds,null);
if (CollectionUtils.isNotEmpty(panelTreeNodeVos)) {
lists.addAll(panelTreeNodeVos);
} else {
if (CollectionUtils.isNotEmpty(groupTreeNodeVos)) {
String groupId = groupTreeNodeVos.stream().filter(x->StringUtils.isNotBlank(x.getParentId())).findFirst().get().getId();
boolean flag = true;
int num =0;
while (flag) {
if(num>10){
break;
}
num++;
List<PanelTreeNodeVo> childrenNodes = this.children(groupId, null,uri,user);
if(CollectionUtils.isEmpty(childrenNodes)){
flag=false;
}
long count = childrenNodes.stream()
.filter(x -> NodeType.PANEL.value.equals(x.getNodeType()))
.count();
if (count == 0) {
lists.addAll(childrenNodes);
groupId = childrenNodes.stream()
.filter(x -> NodeType.GROUP.value.equals(x.getNodeType()))
.findFirst()
.get()
.getId();
} else {
flag = false;
lists.addAll(childrenNodes);
}
}
}
}
}
}
return lists;
}
@Override
@Transactional(readOnly = true)
public List<PanelTreeNodeVo> children(String groupId, String name,String uri,CurrentUser user) {
List<PanelTreeNodeVo> lists = Lists.newArrayList();
R<Map<String, String>> result = setDeptAndRole(user, uri);
Map<String, String> detach = result.detach();
String userId=user.getUid();
String officeIds=detach.get("deptIds");
String roleId=detach.get("roleIds");
InstrumentPanelTree tree = baseMapper.selectById(groupId);
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.likeRight(InstrumentPanelTree::getFullId, tree.getFullId() + ".");
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
if (StringUtils.isNotBlank(name)) {
where.like(InstrumentPanelTree::getFullName, name);
}
where.eq(InstrumentPanelTree::getNodeType, NodeType.PANEL.value);
List<InstrumentPanelTree> trees = baseMapper.selectList(where);
if (CollectionUtils.isNotEmpty(trees)) {
Set<String> panelIds = trees.stream().map(BaseEntity::getId).collect(Collectors.toSet());
List<InstrumentPanelDraft> panels = draftService.selectDraftList(tree.getAppId(),
panelIds,
officeIds,
userId,
roleId);
if (CollectionUtils.isNotEmpty(panels)) {
Set<String> publishIds = panels.stream().map(InstrumentPanelDraft::getPanelId).collect(Collectors.toSet());
Set<String> finalPanelIds = trees.stream().filter(x -> publishIds.contains(x.getId())).map(x -> {
String fullId = x.getFullId();
fullId = fullId.replace(tree.getFullId() + ".", "");
if (fullId.contains(".")) {
return fullId.substring(0, fullId.indexOf("."));
} else {
return fullId;
}
}).collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(finalPanelIds)) {
List<PanelTreeNodeVo> panelTreeNodeVos = panelService.selectPanelByIds(finalPanelIds, name);
if (CollectionUtils.isNotEmpty(panelTreeNodeVos)) {
lists.addAll(panelTreeNodeVos);
finalPanelIds.addAll(panelTreeNodeVos.stream()
.filter(x -> !groupId.equals(x.getParentId()))
.map(PanelTreeNodeVo::getParentId)
.collect(Collectors.toSet()));
}
List<PanelTreeNodeVo> groupTreeNodeVos = groupService.selectGroupByIds(finalPanelIds, name);
if (CollectionUtils.isNotEmpty(groupTreeNodeVos)) {
lists.addAll(groupTreeNodeVos);
}
}
}
}
return lists;
}
@Override
public void updateFullNameByGroupId(String groupId, String panelId, String panelName) {
InstrumentPanelTree group = baseMapper.selectById(groupId);
InstrumentPanelTree panelTree = baseMapper.selectById(panelId);
String beforeFullName = panelTree.getFullName();
String beforeFullId = panelTree.getFullId();
log.info("更新自身的树状结构");
panelTree.setFullName(group.getFullName()+"."+panelName);
panelTree.setFullId(group.getFullId()+"."+panelId);
panelTree.setName(panelName);
baseMapper.updateById(panelTree);
if(ObjectUtils.isNotEmpty(group)){
log.info("更新组件的树状结构");
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
where.likeRight(InstrumentPanelTree::getFullId, beforeFullId+".");
List<InstrumentPanelTree> trees = baseMapper.selectList(where);
if(CollectionUtils.isNotEmpty(trees)){
trees.forEach(x->{
x.setFullId(x.getFullId().replace(beforeFullId, panelTree.getFullId()));
String name = x.getFullName().substring(beforeFullName.length()+1);
x.setFullName(panelTree.getFullName()+"." + name);
x.setName(name);
baseMapper.updateById(x);
});
}
}
}
@Override
@Transactional(readOnly = true)
public List<PanelTreeNodeVo> copyTreeList(String appId,String name) {
return getCopyAndCiteTrees(appId, name, false);
}
@Override
@Transactional(readOnly = true)
public List<PanelTreeNodeVo> citeTreeList(String appId, String name) {
return getCopyAndCiteTrees(appId, name, true);
}
@Override
public Map<String, String> assembly(String appId, String panelId) {
return configService.getAssemblyConfig(panelId);
}
private List<PanelTreeNodeVo> getCopyAndCiteTrees(String appId, String name,boolean showAssembly) {
LambdaQueryWrapper<InstrumentPanelTree> where = new LambdaQueryWrapper<>();
where.eq(BaseEntity::getAppId, appId);
where.eq(BaseEntity::getRecordStatus, SlmConstants.DATA_VALID);
if(!showAssembly){
where.eq(InstrumentPanelTree::getNodeType, NodeType.ASSEMBLY.value);
}
List<InstrumentPanelTree> allGroups=baseMapper.selectList(where);
List<InstrumentPanelTree> filteredTrees=allGroups;
Map<String, InstrumentPanelTree> allMaps=allGroups.stream().collect(Collectors.toMap(InstrumentPanelTree::getFullId, x->x));
Map<String, InstrumentPanelTree> filteredMaps=allMaps;
where.like(InstrumentPanelTree::getName, name);
if(StringUtils.isNotBlank(name)){
filteredTrees=baseMapper.selectList(where);
filteredMaps=filteredTrees.stream().collect(Collectors.toMap(InstrumentPanelTree::getFullId, x->x));
}
Stack<InstrumentPanelTree> stack=new Stack<>();
stack.addAll(filteredTrees);
while(!stack.isEmpty()){
InstrumentPanelTree tree = stack.pop();
String fullId=tree.getFullId();
int lastDot=fullId.lastIndexOf(".");
String pid=fullId;
while(lastDot>0){
pid=pid.substring(0, lastDot);
InstrumentPanelTree pTree= Optional.ofNullable(filteredMaps.get(pid)).orElse(allMaps.get(pid));
if(pTree!=null){
tree.setParentId(pid.substring(pid.lastIndexOf(".")+1));
filteredMaps.putIfAbsent(pid, pTree);
stack.add(pTree);
break;
}
lastDot=pid.lastIndexOf(".");
}
}
return CollectionUtils.isNotEmpty(filteredMaps.values())?SlmConstants.gson.fromJson(SlmConstants.gson.toJson(filteredMaps.values()), new TypeToken<List<PanelTreeNodeVo>>() {}.getType()):
Lists.newArrayList();
}
private R<Map<String,String>> setDeptAndRole(CurrentUser user,String uri){
Map<String,String> heads = Maps.newHashMap();
heads.put("token",user.getToken());
Map<String,String> uriVariables =Maps.newHashMap();
uriVariables.put("appId",user.getAppId());
return RestTemplateUtils.get(uri, heads, new TypeToken<R<Map<String,String>>>() {}.getType(), uriVariables);
}
}
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.common.core.util.R;
import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.vo.PositionVo; import com.syc.slm.slmbi.vo.PositionVo;
import com.syc.slm.slmbi.service.PositionService; import com.syc.slm.slmbi.service.PositionService;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* slm-bi * slm-bi
...@@ -15,8 +24,16 @@ import java.util.List; ...@@ -15,8 +24,16 @@ import java.util.List;
**/ **/
@Service @Service
public class PositionServiceImpl implements PositionService { public class PositionServiceImpl implements PositionService {
@Override @Override
public List<PositionVo> selectPositionList(String name) { public List<PositionVo> selectPositionList(String uri ,String token,String appId,String name) {
return null; Map<String,String> heads = Maps.newHashMap();
heads.put("token",token);
Map<String,String> uriVariables =Maps.newHashMap();
uriVariables.put("positionName",name);
uriVariables.put("appId",appId);
R<List<PositionVo>> result = RestTemplateUtils.get(uri, heads, new TypeToken<R<List<PositionVo>>>() {}.getType(), uriVariables);
return result.detach();
} }
} }
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.syc.slm.slmbi.vo.UserVo; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.google.common.collect.Maps;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.common.core.util.R;
import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.service.UserService; import com.syc.slm.slmbi.service.UserService;
import com.syc.slm.slmbi.vo.DeptVo;
import com.syc.slm.slmbi.vo.UserTreeVo;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* slm-bi * slm-bi
...@@ -16,7 +25,13 @@ import java.util.List; ...@@ -16,7 +25,13 @@ import java.util.List;
@Service @Service
public class UserServiceImpl implements UserService { public class UserServiceImpl implements UserService {
@Override @Override
public List<UserVo> selectUserList(String userName) { public List<UserTreeVo> selectUserList(String appId,String uri,String token,String userName) {
return null; Map<String,String> heads = Maps.newHashMap();
heads.put("token",token);
Map<String,String> uriVariables =Maps.newHashMap();
uriVariables.put("userName",userName);
uriVariables.put("appId",appId);
R<List<UserTreeVo>> result = RestTemplateUtils.get(uri, heads, new TypeToken<R<List<UserTreeVo>>>() {}.getType(), uriVariables);
return result.detach();
} }
} }
package com.syc.slm.slmbi.service.impl; package com.syc.slm.slmbi.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.reflect.TypeToken;
import com.syc.slm.common.core.constant.SlmConstants;
import com.syc.slm.common.core.util.R;
import com.syc.slm.common.core.util.RestTemplateUtils;
import com.syc.slm.slmbi.dto.HistoryVariableDTO; import com.syc.slm.slmbi.dto.HistoryVariableDTO;
import com.syc.slm.slmbi.dto.QueryPageDTO;
import com.syc.slm.slmbi.dto.RealTimeVariableDTO; import com.syc.slm.slmbi.dto.RealTimeVariableDTO;
import com.syc.slm.slmbi.dto.VariableDTO; import com.syc.slm.slmbi.dto.VariableDTO;
import com.syc.slm.slmbi.service.VariableService; import com.syc.slm.slmbi.service.VariableService;
import com.syc.slm.slmbi.vo.*; import com.syc.slm.slmbi.vo.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -21,22 +31,93 @@ import java.util.Map; ...@@ -21,22 +31,93 @@ import java.util.Map;
@Service @Service
public class VariableServiceImpl implements VariableService { public class VariableServiceImpl implements VariableService {
@Override @Override
public IPage<VariableVo> getVariableList(VariableDTO variableDTO) { public IPage<VariableVo> getVariableList(VariableDTO variableDTO,String appId,String token,String uri) {
return null; IPage<VariableVo> page = new Page<>(variableDTO.getCurrent(),variableDTO.getSize());
Map<String,String> p = Maps.newHashMap();
p.put("appId",appId);
p.put("token",token);
p.put("from",null);
p.put("varType",null);
p.put("type",null);
p.put("equipmentId",null);
p.put("customerId",null);
p.put("name",variableDTO.getVariableName());
p.put("desc",variableDTO.getDescription());
p.put("unit",null);
p.put("keyword",null);
p.put("isCustomer",null);
p.put("current",variableDTO.getCurrent()+"");
p.put("size",variableDTO.getSize()+"");
Map<String,String> heads = Maps.newHashMap();
heads.put("token",token);
R<Map<String, Object>> result = RestTemplateUtils.get(uri, heads, new TypeToken<R<Map<String, Object>>>() {
}.getType(), p);
Map<String, Object> detach = result.detach();
if (CollectionUtils.isNotEmpty(detach)) {
List<VariableVo> vos = SlmConstants.gsonLowerCaseWithUnderscores.fromJson(SlmConstants.gson.toJson(detach.get("datas")),
new TypeToken<List<VariableVo>>() {
}.getType());
page.setTotal((new BigDecimal(detach.get("total") + "")).longValue());
page.setRecords(vos);
}
return page;
} }
@Override @Override
public List<VariableSourceVo> getVariableSourceList() { public List<VariableSourceVo> getVariableSourceList() {
return null; List<VariableSourceVo> vos = Lists.newArrayList();
VariableSourceVo vo = new VariableSourceVo();
vo.setSourceId("6");
vo.setSourceName("请选择变量来源");
VariableSourceVo vo1 = new VariableSourceVo();
vo1.setSourceId("1");
vo1.setSourceName("基础采集点");
VariableSourceVo vo2 = new VariableSourceVo();
vo2.setSourceId("4");
vo2.setSourceName("配置变量/dc公式");
vos.add(vo);
vos.add(vo1);
vos.add(vo2);
return vos;
} }
@Override @Override
public List<VariableDeviceVo> getVariableDeviceList() { public IPage<VariableDeviceVo> getVariableDeviceList(String token,String appId,String uri, QueryPageDTO queryPageDTO) {
return null;
IPage<VariableDeviceVo> page = new Page<>(queryPageDTO.getCurrent(), queryPageDTO.getSize());
Map<String, String> p = Maps.newHashMap();
p.put("appId", appId);
p.put("token", token);
p.put("equipment_info_id", null);
p.put("customer_id", null);
p.put("q_name", null);
p.put("search_code", null);
p.put("search_model", null);
p.put("warranty_status", null);
p.put("page_num", queryPageDTO.getCurrent() + "");
p.put("page_size", queryPageDTO.getSize() + "");
Map<String, String> heads = Maps.newHashMap();
heads.put("token", token);
R<Map<String, Object>> result = RestTemplateUtils.get(uri, heads, new TypeToken<R<Map<String, Object>>>() {
}.getType(), p);
Map<String, Object> detach = result.detach();
if (CollectionUtils.isNotEmpty(detach)) {
List<VariableDeviceVo> vos = SlmConstants.gsonLowerCaseWithUnderscores.fromJson(SlmConstants.gson.toJson(detach.get("result")),
new TypeToken<List<VariableDeviceVo>>() {
}.getType());
page.setTotal((new BigDecimal(detach.get("total") + "")).longValue());
page.setRecords(vos);
}
return page;
} }
@Override @Override
public Map<String, List<Map<String, RealTimeVariableVo>>> getVariableRealTimeDataList(RealTimeVariableDTO variableDTO) { public Map<String, List<Map<String, RealTimeVariableVo>>> getVariableRealTimeDataList(RealTimeVariableDTO variableDTO) {
return null; return null;
} }
......
package com.syc.slm.slmbi.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* slm-bi
* 自定义权限Vo
* @author : lin
* @date : 2021-04-07 17:52
**/
@ApiModel(value = "自定义权限Vo")
@Data
public class CustomPermissionVo {
@ApiModelProperty(value = "自定义权限类型", required = true)
private String type;
@ApiModelProperty(value = "代表岗位、部门或个体用户id", required = true)
private String bizId;
@ApiModelProperty(value = "代表岗位,部门,个体用户名称")
private String bizName;
}
...@@ -19,7 +19,11 @@ public class DeptVo { ...@@ -19,7 +19,11 @@ public class DeptVo {
@ApiModelProperty(value = "部门id") @ApiModelProperty(value = "部门id")
private String id; private String id;
@ApiModelProperty(value = "部门名称") @ApiModelProperty(value = "部门名称")
private String deptName; private String name;
@ApiModelProperty(value = "部门父级id") @ApiModelProperty(value = "部门父级id")
private String parentId; private String parentNodeId;
private String platformId;
private String appId;
} }
...@@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; ...@@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* slm-bi * slm-bi
* 仪表板样式,数据配置显示类 * 仪表板样式,数据配置显示类
...@@ -17,7 +18,11 @@ import java.util.Map; ...@@ -17,7 +18,11 @@ import java.util.Map;
**/ **/
@Data @Data
@ApiModel(value = "仪表板样式,数据配置显示类Vo", description = "仪表板样式,数据配置显示类Vo") @ApiModel(value = "仪表板样式,数据配置显示类Vo", description = "仪表板样式,数据配置显示类Vo")
@EqualsAndHashCode(callSuper=true) @EqualsAndHashCode(callSuper = true)
public class InstrumentPanelConfigVo extends InstrumentPanelConfig { public class InstrumentPanelConfigVo extends InstrumentPanelConfig {
@ApiModelProperty(value = "自定义权限类型", required = true)
private List<CustomPermissionVo> permissions;
@ApiModelProperty(value = "仪表板信息", required = true)
private InstrumentPanelVo panel;
} }
...@@ -20,11 +20,9 @@ import java.util.List; ...@@ -20,11 +20,9 @@ import java.util.List;
public class InstrumentPanelGroupVo { public class InstrumentPanelGroupVo {
@ApiModelProperty(value = "分组主键") @ApiModelProperty(value = "分组主键")
private Integer id; private String id;
@ApiModelProperty(value = "父级id") @ApiModelProperty(value = "父级id")
private String parentId; private String parentId;
@ApiModelProperty(value = "分组名称") @ApiModelProperty(value = "分组名称")
private String groupName; private String name;
@ApiModelProperty(value = "分组归属下的仪表板")
List<InstrumentPanelVo> instrumentPanels;
} }
package com.syc.slm.slmbi.vo; package com.syc.slm.slmbi.vo;
import com.syc.slm.slmbi.dto.CustomPermissionDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
/** /**
* slm-bi * slm-bi
* 仪表板权限vo * 仪表板权限vo
...@@ -16,10 +19,12 @@ import lombok.EqualsAndHashCode; ...@@ -16,10 +19,12 @@ import lombok.EqualsAndHashCode;
@ApiModel(value = "仪表板权限Vo",description = "仪表板权限Vo") @ApiModel(value = "仪表板权限Vo",description = "仪表板权限Vo")
@EqualsAndHashCode(callSuper=false) @EqualsAndHashCode(callSuper=false)
public class InstrumentPanelPermissionVo { public class InstrumentPanelPermissionVo {
@ApiModelProperty(value = "存储类型,1代表岗位,2代表部门,3 代表个体用户") @ApiModelProperty(value = "访问权限类型", required = true)
private Integer permissionType; private String accessType;
@ApiModelProperty(value = "代表岗位,部门,个体用户id")
private String bizId; @ApiModelProperty(value = "描述", required = true)
@ApiModelProperty(value = "代表岗位,部门,个体用户名称") private String description;
private String bizName;
@ApiModelProperty(value = "自定义权限配置,当访问类型为CUSTOM时必填")
private List<CustomPermissionVo> customPermissions;
} }
...@@ -17,6 +17,8 @@ import lombok.EqualsAndHashCode; ...@@ -17,6 +17,8 @@ import lombok.EqualsAndHashCode;
@ApiModel(value = "仪表板显示类vo",description = "仪表板显示类vo") @ApiModel(value = "仪表板显示类vo",description = "仪表板显示类vo")
@EqualsAndHashCode(callSuper=true) @EqualsAndHashCode(callSuper=true)
public class InstrumentPanelVo extends InstrumentPanel { public class InstrumentPanelVo extends InstrumentPanel {
@ApiModelProperty(value = "仪表板下对应的配置") @ApiModelProperty("分组名称")
InstrumentPanelConfigVo instrumentPanelConfig; private String groupName;
@ApiModelProperty("是否有待发布版本,有值就有,空就没有")
private String hasWaitPublish;
} }
package com.syc.slm.slmbi.vo;
/**
* 仪表板树节点类型
*
* @author liangbin
* @date 2021/3/31
*/
public enum PanelTreeNodeType {
// 分组
GROUP,
// 仪表板
PANEL;
}
...@@ -15,16 +15,16 @@ import lombok.EqualsAndHashCode; ...@@ -15,16 +15,16 @@ import lombok.EqualsAndHashCode;
@Data @Data
@ApiModel(value = "仪表板分组tree vo") @ApiModel(value = "仪表板分组tree vo")
@EqualsAndHashCode(callSuper=false) @EqualsAndHashCode(callSuper = false)
public class PanelGroupVo { public class PanelTreeNodeVo {
@ApiModelProperty(value = "分组或者仪表板主键") @ApiModelProperty(value = "分组或者仪表板主键")
private Integer id; private String id;
@ApiModelProperty(value = "父级id") @ApiModelProperty(value = "父级id")
private String parentId; private String parentId;
@ApiModelProperty(value = "分组名称") @ApiModelProperty(value = "节点名称")
private String groupName; private String name;
@ApiModelProperty(value = "仪表板名称") @ApiModelProperty(value = "节点类型")
private String panelName; private String nodeType;
@ApiModelProperty(value = "1 分组,2 仪表板") @ApiModelProperty(value = "组件对应key,分组跟仪表板该字段为空")
private Integer type; private String assemblyKey;
} }
...@@ -19,5 +19,13 @@ public class PositionVo { ...@@ -19,5 +19,13 @@ public class PositionVo {
@ApiModelProperty(value = "职位id") @ApiModelProperty(value = "职位id")
private String id; private String id;
@ApiModelProperty(value = "职位名称") @ApiModelProperty(value = "职位名称")
private String positionName; private String name;
@ApiModelProperty(value = "角色code")
private String code;
@ApiModelProperty(value = "平台id")
private String platformId;
@ApiModelProperty(value = "租户id")
private String appId;
} }
package com.syc.slm.slmbi.vo;
import lombok.Data;
/**
* data-center
*
* @author : lin
* @date : 2021-04-14 14:53
**/
@Data
public class UserTreeVo {
private String id;
private String name;
private String nodeType;
private String parentId;
}
...@@ -16,8 +16,25 @@ import lombok.EqualsAndHashCode; ...@@ -16,8 +16,25 @@ import lombok.EqualsAndHashCode;
@ApiModel(value = "变量所属设备vo",description = "变量所属设备vo") @ApiModel(value = "变量所属设备vo",description = "变量所属设备vo")
@EqualsAndHashCode(callSuper=false) @EqualsAndHashCode(callSuper=false)
public class VariableDeviceVo { public class VariableDeviceVo {
@ApiModelProperty(value = "设备Id")
private String deviceId;
@ApiModelProperty(value = "简称")
private String breviaryName;
@ApiModelProperty(value = "质保时间")
private Long warrantyTime;
private String ancestorName;
@ApiModelProperty(value = "设备编号")
private String code;
@ApiModelProperty(value = "质保状态 1保内; 2保外;3未知;")
private String warrantyStatus;
@ApiModelProperty(value = "设备名称") @ApiModelProperty(value = "设备名称")
private String deviceName; private String name;
private String pline;
@ApiModelProperty(value = "设备Id")
private String id;
@ApiModelProperty(value = "设备位置")
private String position;
@ApiModelProperty(value = "设备Id")
private String modelNo;
} }
package com.syc.slm.slmbi.vo; package com.syc.slm.slmbi.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -16,22 +17,32 @@ import lombok.EqualsAndHashCode; ...@@ -16,22 +17,32 @@ import lombok.EqualsAndHashCode;
@ApiModel(value = "变量vo",description = "变量vo") @ApiModel(value = "变量vo",description = "变量vo")
@EqualsAndHashCode(callSuper=false) @EqualsAndHashCode(callSuper=false)
public class VariableVo { public class VariableVo {
@ApiModelProperty(value = "变量来源") @ApiModelProperty(value = "所属设备id")
private String sourceName; private String equipmentId;
@ApiModelProperty(value = "变量名称") @ApiModelProperty(value = "所属设备名称")
private String variableName; private String equipmentName;
@ApiModelProperty(value = "描述") @ApiModelProperty(value = "所属设备编号")
private String description; private String equipmentCode;
@ApiModelProperty(value = "数据类型")
private String type;
// @ApiModelProperty(value = "")
private String cusVariableType;
@ApiModelProperty(value = "单位") @ApiModelProperty(value = "单位")
private String unit; private String unit;
@ApiModelProperty(value = "数据类型")
private String dataType;
@ApiModelProperty(value = "变量类型") @ApiModelProperty(value = "变量类型")
private String variableType; private Integer varType;
@ApiModelProperty(value = "所属客户") @ApiModelProperty(value = "变量名称")
private String customer; private String name;
@ApiModelProperty(value = "所属设备") @ApiModelProperty(value = "来源")
private String deviceId; private Integer from;
@ApiModelProperty(value = "设备编号") @ApiModelProperty(value = "变量id")
private String deviceCode; private String id;
@ApiModelProperty(value = "所属客户名称")
private String customerName;
@ApiModelProperty(value = "所属客户id")
private String customerId;
@ApiModelProperty(value = "描述")
private String desc;
} }
spring:
datasource:
username: syc_dev
password: Test123!
url: jdbc:mysql://${MYSQL_HOST:116.63.67.122}:${MYSQL_PORT:3306}/${MYSQL_DB:slm_bi}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true
dc_client:
host: http://apidev.sycdev.com/dc
interfaces:
positionListUrl: /{appId}/positions?positionName={positionName}
deptListUrl: /{appId}/departments?deptName={deptName}
userTree: /{appId}/users/list?userName={userName}
variableList: /{appId}/variables/slm/tag/list?token={token}&from={from}&varType={varType}&type={type}&equipmentId={equipmentId}&customerId={customerId}&name={name}&desc={desc}&unit={unit}&keyword={keyword}&isCustomer={isCustomer}&current={current}&size={size}
deviceList: /{appId}/variables/device?token={token}&equipment_info_id={equipment_info_id}&q_name={q_name}&search_code={search_code}&warranty_status={warranty_status}&page_num={page_num}&page_size={page_size}
deptsRoles: /{appId}/users/depts-roles
\ No newline at end of file
spring:
datasource:
username: root
password: root
url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:slm_bi}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true
dc_client:
host: http://localhost:2400/dc
interfaces:
positionListUrl: /{appId}/positions?positionName={positionName}
deptListUrl: /{appId}/departments?deptName={deptName}
userTree : /{appId}/users/list?userName={userName}
variableList : /{appId}/variables/slm/tag/list?token={token}&from={from}&varType={varType}&type={type}&equipmentId={equipmentId}&customerId={customerId}&name={name}&desc={desc}&unit={unit}&keyword={keyword}&isCustomer={isCustomer}&current={current}&size={size}
deviceList : /{appId}/variables/device?token={token}&equipment_info_id={equipment_info_id}&q_name={q_name}&search_code={search_code}&warranty_status={warranty_status}&page_num={page_num}&page_size={page_size}
deptsRoles : /{appId}/users/depts-roles
\ No newline at end of file
influxdb:
host: 139.159.254.185
port: 8086
username: syc
password: syc
spring: spring:
application:
name: slm-bi
profiles:
active:
- local
freemarker: freemarker:
cache: false cache: false
template-loader-path: classpath:/templates/ftl/ template-loader-path: classpath:/templates/ftl/
...@@ -27,9 +26,6 @@ spring: ...@@ -27,9 +26,6 @@ spring:
pool-name: HikariCP pool-name: HikariCP
max-lifetime: 1800000 max-lifetime: 1800000
connection-timeout: 30000 connection-timeout: 30000
username: root
password: root
url: jdbc:mysql://${MYSQL_HOST:slm-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:slmx}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true
messages: messages:
basename: i18n/messages,i18n/sys basename: i18n/messages,i18n/sys
...@@ -48,4 +44,7 @@ mybatis-plus: ...@@ -48,4 +44,7 @@ mybatis-plus:
server: server:
servlet: servlet:
context-path: /bi context-path: /bi
port: 2022 port: 2022
\ No newline at end of file logging:
level:
com.syc.slm.slmbi.mapper: debug
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.syc.slm.slmbi.dao.InstrumentPanelConfigMapper">
<resultMap id="instrumentPanelConfigMap" type="com.syc.slm.slmbi.entity.InstrumentPanelConfig">
<id property="id" column="id"/>
<result property="panelId" column="panel_id"/>
<result property="configDetails" column="config_details"/>
<result property="published" column="published"/>
<result property="appId" column="app_id"/>
<result property="creator" column="creator"/>
<result property="creatorName" column="creator_name"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updaterName" column="updater_name"/>
<result property="updateTime" column="update_time"/>
<result property="recordStatus" column="record_status"/>
<result property="description" column="description"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.syc.slm.slmbi.dao.InstrumentPanelDraftMapper">
<resultMap id="instrumentPanelDraftMap" type="com.syc.slm.slmbi.entity.InstrumentPanelDraft">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="groupId" column="group_id"/>
<result property="accessPermission" column="access_permission"/>
<result property="published" column="published"/>
<result property="appId" column="app_id"/>
<result property="creator" column="creator"/>
<result property="creatorName" column="creator_name"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updaterName" column="updater_name"/>
<result property="updateTime" column="update_time"/>
<result property="recordStatus" column="record_status"/>
<result property="description" column="description"/>
</resultMap>
<select id="selectDraftList" resultType="com.syc.slm.slmbi.entity.InstrumentPanelDraft">
select * from instrument_panel_draft where panel_id in
<if test="panelIds!=null">
(
<foreach collection="panelIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
and access_permission='public' and record_status=1
union ALL
select * from instrument_panel_draft where panel_id in
<if test="panelIds!=null">
(
<foreach collection="panelIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
and access_permission='private' and record_status=1 and IFNULL(updater,creator)=#{userId}
union ALL
select * from instrument_panel_draft where panel_id in
<if test="panelIds!=null">
(
<foreach collection="panelIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
and access_permission='custom' and record_status=1 and check_panel_permissions(#{appId},id,#{officeIds},#{userId},#{roleId})>0
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.syc.slm.slmbi.dao.InstrumentPanelGroupMapper">
<resultMap id="instrumentPanelGroupMap" type="com.syc.slm.slmbi.entity.InstrumentPanelGroup">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="parentId" column="parent_id"/>
<result property="appId" column="app_id"/>
<result property="creator" column="creator"/>
<result property="creatorName" column="creator_name"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updaterName" column="updater_name"/>
<result property="updateTime" column="update_time"/>
<result property="recordStatus" column="record_status"/>
<result property="description" column="description"/>
</resultMap>
<delete id="batchUpdateGroupByIds">
update instrument_panel_group set record_status =#{recordStatus}
<if test="groupIds!=null">
where id IN (
<foreach collection="groupIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
</delete>
<select id="selectGroupList" resultType="com.syc.slm.slmbi.vo.InstrumentPanelGroupVo">
select id,`name`,parent_id from instrument_panel_group
${ew.customSqlSegment}
</select>
<select id="selectGroupByIds" resultType="com.syc.slm.slmbi.vo.PanelTreeNodeVo">
select id,`name`,parent_id,'group' node_type from instrument_panel_group
<if test="finalPanelIds!=null">
where id IN (
<foreach collection="finalPanelIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
<if test="name!=null">
and `name` like '%${name}%'
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.syc.slm.slmbi.dao.InstrumentPanelMapper">
<resultMap id="instrumentPanelMap" type="com.syc.slm.slmbi.entity.InstrumentPanel">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="groupId" column="group_id"/>
<result property="accessPermission" column="access_permission"/>
<result property="published" column="published"/>
<result property="appId" column="app_id"/>
<result property="creator" column="creator"/>
<result property="creatorName" column="creator_name"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updaterName" column="updater_name"/>
<result property="updateTime" column="update_time"/>
<result property="recordStatus" column="record_status"/>
<result property="description" column="description"/>
</resultMap>
<update id="batchUpdatePanelByIds">
update instrument_panel set record_status =#{recordStatus}
<if test="panelIds!=null">
where id IN (
<foreach collection="panelIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
</update>
<select id="selectInstrumentPanelList" resultType="com.syc.slm.slmbi.vo.InstrumentPanelVo">
select
p.id,
p.name,
p.group_id,
g.name group_name,
if(p.published='published','已发布','未发布') published,
p.creator_name,
p.updater_name,
p.update_time
from instrument_panel p
join instrument_panel_group g on p.group_id =g.id
${ew.customSqlSegment}
</select>
<select id="selectPanelByIds" resultType="com.syc.slm.slmbi.vo.PanelTreeNodeVo">
select
id,
`name`,
group_id parent_id,
'panel' node_type
from instrument_panel
<if test="finalPanelIds!=null">
where id IN (
<foreach collection="finalPanelIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
<if test="name!=null">
and `name` like '%${name}%'
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.syc.slm.slmbi.dao.InstrumentPanelPermissionMapper">
<resultMap id="instrumentPanelPermissionMap" type="com.syc.slm.slmbi.entity.InstrumentPanelPermission">
<id property="id" column="id"/>
<result property="panelId" column="panel_id"/>
<result property="bizId" column="biz_id"/>
<result property="bizName" column="biz_name"/>
<result property="bizType" column="biz_type"/>
<result property="published" column="published"/>
<result property="appId" column="app_id"/>
<result property="creator" column="creator"/>
<result property="creatorName" column="creator_name"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updaterName" column="updater_name"/>
<result property="updateTime" column="update_time"/>
<result property="recordStatus" column="record_status"/>
<result property="description" column="description"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.syc.slm.slmbi.dao.InstrumentPanelTreeMapper">
<resultMap id="instrumentPanelTreeMap" type="com.syc.slm.slmbi.entity.InstrumentPanelTree">
<id property="id" column="id"/>
<result property="fullName" column="full_name"/>
<result property="nodeType" column="node_type"/>
<result property="appId" column="app_id"/>
<result property="creator" column="creator"/>
<result property="creatorName" column="creator_name"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updaterName" column="updater_name"/>
<result property="updateTime" column="update_time"/>
<result property="recordStatus" column="record_status"/>
<result property="description" column="description"/>
</resultMap>
<update id="batchUpdateTreeByIds">
update instrument_panel_tree set record_status =#{recordStatus}
<if test="treeIds!=null">
where id IN (
<foreach collection="treeIds" item="id" separator=",">
#{id}
</foreach>
)
</if>
</update>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment