2f1de599 by luqingwu

init

0 parents
Showing 1000 changed files with 4247 additions and 0 deletions

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4">
3 <component name="CompilerConfiguration">
4 <wildcardResourcePatterns>
5 <entry name="!?*.java" />
6 <entry name="!?*.form" />
7 <entry name="!?*.class" />
8 <entry name="!?*.groovy" />
9 <entry name="!?*.scala" />
10 <entry name="!?*.flex" />
11 <entry name="!?*.kt" />
12 <entry name="!?*.clj" />
13 <entry name="!?*.aj" />
14 <entry name="!*.mps" />
15 <entry name="!*.mpsr" />
16 <entry name="!*.model" />
17 </wildcardResourcePatterns>
18 <annotationProcessing>
19 <profile default="true" name="Default" enabled="true" />
20 <profile name="Maven default annotation processors profile" enabled="true">
21 <sourceOutputDir name="target/generated-sources/annotations" />
22 <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
23 <outputRelativeToContentRoot value="true" />
24 <module name="risk.resource.service" />
25 <module name="manage.boot" />
26 <module name="base.support.biz" />
27 <module name="brain.common" />
28 <module name="base.support.service" />
29 <module name="data.source.biz" />
30 <module name="picture.boot" />
31 <module name="risk.resource.biz" />
32 <module name="data.source.service" />
33 </profile>
34 </annotationProcessing>
35 <bytecodeTargetLevel>
36 <module name="brain.boot" target="11" />
37 </bytecodeTargetLevel>
38 </component>
39 </project>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4">
3 <component name="Encoding">
4 <file url="file://$PROJECT_DIR$" charset="UTF-8" />
5 <file url="file://$PROJECT_DIR$/brain.biz" charset="UTF-8" />
6 <file url="file://$PROJECT_DIR$/brain.biz/base-support-biz" charset="UTF-8" />
7 <file url="file://$PROJECT_DIR$/brain.biz/data-source-biz" charset="UTF-8" />
8 <file url="file://$PROJECT_DIR$/brain.biz/risk-resource-biz" charset="UTF-8" />
9 <file url="file://$PROJECT_DIR$/brain.boot" charset="UTF-8" />
10 <file url="file://$PROJECT_DIR$/brain.boot" charset="UTF-8" />
11 <file url="file://$PROJECT_DIR$/brain.boot" charset="UTF-8" />
12 <file url="file://$PROJECT_DIR$/brain.boot/manage-boot" charset="UTF-8" />
13 <file url="file://$PROJECT_DIR$/brain.boot/manage.boot" charset="UTF-8" />
14 <file url="file://$PROJECT_DIR$/brain.boot/picture-boot" charset="UTF-8" />
15 <file url="file://$PROJECT_DIR$/brain.boot/picture.boot" charset="UTF-8" />
16 <file url="file://$PROJECT_DIR$/brain.common" charset="UTF-8" />
17 <file url="file://$PROJECT_DIR$/brain.service" charset="UTF-8" />
18 <file url="file://$PROJECT_DIR$/brain.service/base-support-service" charset="UTF-8" />
19 <file url="file://$PROJECT_DIR$/brain.service/data-source-service" charset="UTF-8" />
20 <file url="file://$PROJECT_DIR$/brain.service/risk-resource-service" charset="UTF-8" />
21 </component>
22 </project>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4">
3 <component name="ExternalStorageConfigurationManager" enabled="true" />
4 <component name="MavenProjectsManager">
5 <option name="originalFiles">
6 <list>
7 <option value="$PROJECT_DIR$/pom.xml" />
8 </list>
9 </option>
10 <option name="ignoredFiles">
11 <set>
12 <option value="$PROJECT_DIR$/brain.boot/pom.xml" />
13 </set>
14 </option>
15 </component>
16 <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
17 <output url="file://$PROJECT_DIR$/out" />
18 </component>
19 </project>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4">
3 <component name="ProjectModuleManager">
4 <modules>
5 <module fileurl="file://$PROJECT_DIR$/brain.boot/brain.boot.iml" filepath="$PROJECT_DIR$/brain.boot/brain.boot.iml" />
6 </modules>
7 </component>
8 </project>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4">
3 <component name="VcsDirectoryMappings">
4 <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5 </component>
6 </project>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <parent>
6 <artifactId>brain-biz</artifactId>
7 <groupId>brain</groupId>
8 <version>1.0</version>
9 </parent>
10 <modelVersion>4.0.0</modelVersion>
11
12 <artifactId>base-support-biz</artifactId>
13
14 <dependencies>
15 <dependency>
16 <groupId>org.springframework.boot</groupId>
17 <artifactId>spring-boot-starter-quartz</artifactId>
18 </dependency>
19 <dependency>
20 <groupId>org.springframework.boot</groupId>
21 <artifactId>spring-boot-starter-mail</artifactId>
22 </dependency>
23 <dependency>
24 <groupId>org.springframework.boot</groupId>
25 <artifactId>spring-boot-starter-actuator</artifactId>
26 </dependency>
27 </dependencies>
28
29 </project>
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.annotation;
2
3 import com.baomidou.mybatisplus.annotation.TableField;
4 import org.springframework.data.annotation.Transient;
5
6 import java.io.Serializable;
7 import java.util.List;
8 import java.util.Map;
9
10 public abstract class BaseEntity<T> implements Serializable {
11
12 /**
13 * 自定义SQL(SQL标识,SQL内容)
14 */
15 @TableField(exist = false)
16 protected Map<String, String> sqlMap;
17 /**
18 * 条数
19 */
20 @TableField(exist = false)
21 protected String pageSize;
22 /**
23 * 位置
24 */
25 @TableField(exist = false)
26 protected String pageNo;
27
28 /**
29 * ids
30 */
31 @TableField(exist = false)
32 protected List<String> ids;
33
34
35 public Map<String, String> getSqlMap() {
36 return sqlMap;
37 }
38
39 public void setSqlMap(Map<String, String> sqlMap) {
40 this.sqlMap = sqlMap;
41 }
42
43 public String getPageSize() {
44 return pageSize;
45 }
46
47 public void setPageSize(String pageSize) {
48 this.pageSize = pageSize;
49 }
50
51 public String getPageNo() {
52 return pageNo;
53 }
54
55 public void setPageNo(String pageNo) {
56 this.pageNo = pageNo;
57 }
58
59 public List<String> getIds() {
60 return ids;
61 }
62
63 public void setIds(List<String> ids) {
64 this.ids = ids;
65 }
66 }
1 package brain.base.support.biz.annotation;
2
3 import brain.common.system.util.UserUtil;
4 import com.alibaba.fastjson.JSON;
5 import com.baomidou.mybatisplus.annotation.TableName;
6 import org.aspectj.lang.JoinPoint;
7 import org.aspectj.lang.ProceedingJoinPoint;
8 import org.aspectj.lang.annotation.*;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 import org.springframework.core.NamedThreadLocal;
12 import org.springframework.stereotype.Component;
13
14 import java.lang.reflect.Method;
15 import java.text.SimpleDateFormat;
16 import java.util.HashMap;
17 import java.util.Map;
18
19 /**
20 * 数据过滤aop
21 */
22 @Aspect
23 @Component
24 public class DataAspect {
25 private final Logger logger = LoggerFactory.getLogger(DataAspect.class);
26 private static final ThreadLocal<Long> startTimeThreadLocal =
27 new NamedThreadLocal<Long>("ThreadLocal StartTime");
28
29 //Controller层切点
30 @Pointcut("@annotation(brain.base.support.biz.annotation.DataFilter)")
31 private void pointCutMethod() {
32
33 }
34 /**
35 * 前置通知 用于拦截Service层注入数据过滤
36 *
37 * @param
38 */
39 @Around("pointCutMethod()") // 使用上面定义的切入点
40 public Object process(ProceedingJoinPoint point) throws Throwable {
41 logger.info("aop数据过滤已经拦截该方法:{}",point.getSignature().getName());
42 String classType = point.getTarget().getClass().getName();
43 Class c = Class.forName(classType);
44 //访问目标方法的参数:
45 Object[] args = point.getArgs();
46 Map<String, String> map = new HashMap<>();
47 map.put("dsf",dataScopeFilter());
48 boolean flag = false;
49 for(int i = 0;i < args.length;i++){
50 if(args[i] instanceof BaseEntity){
51 args[i].getClass().getMethod("setSqlMap",Map.class).invoke(args[i],map);
52 flag = true;
53 break;
54 }
55 }
56 if(flag == false){
57 logger.error("未找到符合过滤条件的参数类型,参数需要继承BaseEntity");
58 }
59 //用改变后的参数执行目标方法
60 Object returnValue = point.proceed(args);
61 return returnValue;
62 }
63
64 /**
65 * 数据过滤sql
66 * @return
67 */
68 public String dataScopeFilter(){
69 StringBuffer stringBuffer = new StringBuffer();
70 stringBuffer.append(" and (");
71 stringBuffer.append("u.org_code like concat('"+ UserUtil.getUser().getOrgCode()+"','%')");
72 stringBuffer.append(" or u.org_code = '" + UserUtil.getUser().getOrgCode()+"'");
73 stringBuffer.append(")");
74 return stringBuffer.toString();
75 }
76
77 }
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.annotation;
2
3 import java.lang.annotation.*;
4 import java.util.HashMap;
5
6 /**
7 * Created by Administrator on 2018/2/28 0028.
8 */
9 @Target({ElementType.PARAMETER, ElementType.METHOD})
10 @Retention(RetentionPolicy.RUNTIME)
11 @Documented
12 public @interface DataFilter {
13 /**
14 * 主表及关联表如(sys_office,enter_info)别名
15 * "a":主表
16 * "o":主表中office_id关联的sys_office表
17 * "enter":主表中enter_id关联的企业表
18 * "office":主表-》enter_info表-》归属机构(主管部门)sys_office
19 * "area":主表-》enter_info表-》归属区域 sys_area
20 */
21 /*String[] tableName() default {"a","o","enter","office","area"};*/
22
23 String primary() default "a";
24 String prmOffice() default "o";
25 String enter() default "enter";
26 String entOfiice() default "office";
27 String entArea() default "area";
28
29 /**
30 * 数据过滤类型,用于多个数据过滤区分
31 * @return
32 */
33 String type() default "default";
34 }
1 package brain.base.support.biz.aqsc.entity;
2
3 import com.baomidou.mybatisplus.annotation.TableName;
4 import lombok.AllArgsConstructor;
5 import lombok.Data;
6 import lombok.NoArgsConstructor;
7
8 import java.io.Serializable;
9
10 @Data
11 @NoArgsConstructor
12 @AllArgsConstructor
13 @TableName("aqsc_xwy_area_wg")
14 public class AqscXwyAreaWg implements Serializable {
15
16 private static final long serialVersionUID = 3669307686927454046L;
17
18 private String id;
19
20 private String codeArea;
21
22 private String wgname;
23 }
1 package brain.base.support.biz.aqsc.entity;
2
3 import com.baomidou.mybatisplus.annotation.IdType;
4 import com.baomidou.mybatisplus.annotation.TableId;
5 import com.baomidou.mybatisplus.annotation.TableName;
6 import io.swagger.annotations.ApiModelProperty;
7 import lombok.AllArgsConstructor;
8 import lombok.Data;
9 import lombok.NoArgsConstructor;
10
11 import java.io.Serializable;
12
13 @Data
14 @NoArgsConstructor
15 @AllArgsConstructor
16 @TableName("aqsc_xwy_category")
17 public class AqscXwyCategory implements Serializable {
18
19 private static final long serialVersionUID = 2619107924632317900L;
20
21 @TableId(type = IdType.UUID)
22 private String id;
23
24 @ApiModelProperty(value = "父级节点")
25 private String pid;
26
27 @ApiModelProperty(value = "类型名称")
28 private String name;
29
30 @ApiModelProperty(value = "是否有子节点")
31 private String hasChild;
32
33 @ApiModelProperty(value = "图层url")
34 private String url;
35
36 @ApiModelProperty(value = "单位")
37 private String unit;
38
39 @ApiModelProperty(value = "地理信息类型")
40 private String geotype;
41
42 @ApiModelProperty(value = "数据源")
43 private String db;
44
45 @ApiModelProperty(value = "数据集名称")
46 private String datasetname;
47
48 @ApiModelProperty(value = "图层类型")
49 private String layerType;
50
51 @ApiModelProperty(value = "别名")
52 private String alias;
53
54 @ApiModelProperty(value = "显示的表头字段")
55 private String showField;
56
57 @ApiModelProperty(value = "显示的列表字段")
58 private String showFieldTitle;
59
60 @ApiModelProperty(value = "显示的列表名称")
61 private String showHeader;
62
63 @ApiModelProperty(value = "显示的图表字段")
64 private String chartField;
65
66 @ApiModelProperty(value = "是否显示四色图 0否 1是")
67 private Short sign;
68
69 @ApiModelProperty(value = "地图pop提示框字段")
70 private String mapPopField;
71
72 @ApiModelProperty(value = "地图pop提示框名称")
73 private String mapPopName;
74
75 @ApiModelProperty(value = "图标url")
76 private String iconUrl;
77
78 @ApiModelProperty(value = "sqlText")
79 private String sqlText;
80
81 @ApiModelProperty(value = "排序")
82 private Integer sort;
83
84 @ApiModelProperty(value = "组件")
85 private String assembly;
86
87 @ApiModelProperty(value = "主键字段")
88 private String key;
89
90 @ApiModelProperty(value = "主键类型")
91 private String keyType;
92
93 @ApiModelProperty(value = "数量sql")
94 private String sqlNum;
95
96 @ApiModelProperty(value = "列表排序字段")
97 private String sortKey;
98
99 @ApiModelProperty(value = "组件详情类型")
100 private String assemblyDetail;
101
102 @ApiModelProperty(value = "是否是周边分析")
103 private String isAnalysis;
104
105
106
107 }
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.aqsc.entity;
2
3 import lombok.Data;
4
5 import java.util.ArrayList;
6 import java.util.List;
7
8 @Data
9 public class AqscXwyCategoryTree extends AqscXwyCategory {
10
11 List<AqscXwyCategoryTree> children = new ArrayList<AqscXwyCategoryTree>();
12
13 int num;
14 }
1 package brain.base.support.biz.aqsc.entity;
2
3 import com.baomidou.mybatisplus.annotation.IdType;
4 import com.baomidou.mybatisplus.annotation.TableId;
5 import com.baomidou.mybatisplus.annotation.TableName;
6 import io.swagger.annotations.ApiModel;
7 import io.swagger.annotations.ApiModelProperty;
8 import lombok.AllArgsConstructor;
9 import lombok.Data;
10 import lombok.NoArgsConstructor;
11
12 import java.io.Serializable;
13
14 /**
15 * @Describe 企业基础数据
16 * @Author congxin
17 * @Date 2021/3/5 15:57
18 */
19 @Data
20 @NoArgsConstructor
21 @AllArgsConstructor
22 @TableName("aqsc_xwy_company")
23 @ApiModel(value="企业详情")
24 public class AqscXwyCompany implements Serializable {
25
26 private static final long serialVersionUID = -393578847262863652L;
27
28 @TableId(type = IdType.UUID)
29 private String id;
30
31 private String siteid;
32
33 private String codeArea;
34
35 private String wgid;
36
37 private String jdname;
38
39 private String qymc;
40
41 private String titleCode;
42
43 @ApiModelProperty(value = "企业名称")
44 private String companyName;
45
46 @ApiModelProperty(value = "企业地址(实际)")
47 private String companyAddress;
48
49 @ApiModelProperty(value = "法定代表人")
50 private String legalRep;
51
52 @ApiModelProperty(value = "法定代表人联系手机")
53 private String legalRepPhone;
54
55 @ApiModelProperty(value = "统一社会信用代码")
56 private String socialCode;
57
58 @ApiModelProperty(value = "从业人数")
59 private String engagedNum;
60
61 @ApiModelProperty(value = "建筑面积(平方米)")
62 private String buildArea;
63
64 @ApiModelProperty(value = "经营范围")
65 private String natureBusiness;
66
67 @ApiModelProperty(value = "是否租赁厂房")
68 private String isFactoryLeased;
69
70 @ApiModelProperty(value = "是否民房")
71 private String isPrivateHouse;
72
73 @ApiModelProperty(value = "是否村集体用房")
74 private String isVillageHouse;
75
76 @ApiModelProperty(value = "违章建筑")
77 private String illegalConstruction;
78
79 @ApiModelProperty(value = "经营状态")
80 private String operationStatus;
81
82 @ApiModelProperty(value = "安全风险四色分类级别")
83 private String riskLevel;
84
85 @ApiModelProperty(value = "危化品情况")
86 private String hazardChem;
87
88 @ApiModelProperty(value = "企业成立日期")
89 private String establishment;
90
91 @ApiModelProperty(value = "企业规模")
92 private String enterpriseScale;
93
94 @ApiModelProperty(value = "企业经度(天地图)")
95 private String longitude;
96
97 @ApiModelProperty(value = "企业维度(天地图)")
98 private String latitude;
99
100 @ApiModelProperty(value = "企业性质")
101 private String natureEnterprise;
102
103 @ApiModelProperty(value = "行业类型")
104 private String industryType;
105
106 @ApiModelProperty(value = "经营地址是否一致")
107 private String isAddressConfirm;
108
109 @ApiModelProperty(value = "经营内容是否一致")
110 private String isContentConfirm;
111
112 @ApiModelProperty(value = "厂房结构")
113 private String plantStructure;
114
115 @ApiModelProperty(value = "建筑违章情况")
116 private String constructViola;
117
118 @ApiModelProperty(value = "是否自建厂房")
119 private String isSelfFactory;
120
121 @ApiModelProperty(value = "出租人及电话(若租赁厂房)")
122 private String lessorTelephone;
123
124 @ApiModelProperty(value = "三级标准化")
125 private String threeLevelStanda;
126
127 @ApiModelProperty(value = "小微标准化")
128 private String microEnterprises;
129
130 @ApiModelProperty(value = "风险管控建立")
131 private String riskManagement;
132
133 @ApiModelProperty(value = "安全“三同时”")
134 private String safetyThreeSimul;
135
136 @ApiModelProperty(value = "涉尘企业三方会审")
137 private String ustRelatedEnterprises;
138
139 @ApiModelProperty(value = "安全评价(安评)")
140 private String safetyAssess;
141
142 @ApiModelProperty(value = "环保评价(环评)")
143 private String environmentAssess;
144
145 @ApiModelProperty(value = "涉及危险工序")
146 private String dangerInvolved;
147
148 @ApiModelProperty(value = "主要生产工艺")
149 private String process;
150
151 @ApiModelProperty(value = "是否有员工宿舍")
152 private String isStaffDormitory;
153
154 @ApiModelProperty(value = "是否涉及特种设备")
155 private String isEquipInvolved;
156
157 @ApiModelProperty(value = "三场所三企业")
158 private String threeEnter;
159
160 @ApiModelProperty(value = "年产值(万元)")
161 private String annual;
162
163 }
1 package brain.base.support.biz.aqsc.entity;
2
3 import com.baomidou.mybatisplus.annotation.TableName;
4 import io.swagger.annotations.ApiModel;
5 import lombok.AllArgsConstructor;
6 import lombok.Data;
7 import lombok.NoArgsConstructor;
8 import org.jeecgframework.poi.excel.annotation.Excel;
9
10 /**
11 * @author 胡庆安
12 * @version V1.0
13 * @Package brain.base.support.biz.aqsc.entity
14 * @date 2021/3/19 14:04
15 * @Copyright © 2010-2021 爬山虎科技(扬州)有限公司
16 */
17 @Data
18 @NoArgsConstructor
19 @AllArgsConstructor
20 @TableName("aqsc_xwy_company_code")
21 @ApiModel(value="小微园")
22 public class AqscXwyCompanyCode {
23
24 @Excel(name = "smid", width = 20)
25 private String smid ;
26
27 @Excel(name = "companycode", width = 20)
28 private String companyCode;
29 }
1 package brain.base.support.biz.aqsc.entity;
2
3 import com.baomidou.mybatisplus.annotation.TableName;
4 import io.swagger.annotations.ApiModel;
5 import lombok.AllArgsConstructor;
6 import lombok.Data;
7 import lombok.NoArgsConstructor;
8 import org.jeecgframework.poi.excel.annotation.Excel;
9
10 /**
11 * @author 胡庆安
12 * @version V1.0
13 * @Package brain.base.support.biz.aqsc.entity
14 * @date 2021/3/12 14:20
15 * @Copyright © 2010-2021 爬山虎科技(扬州)有限公司
16 */
17 @Data
18 @NoArgsConstructor
19 @AllArgsConstructor
20 @TableName("aqsc_xwy_grid")
21 @ApiModel(value="小微园网格")
22 public class AqscXwyGrid {
23
24 @Excel(name = "FID", width = 20)
25 private String fId;
26
27 @Excel(name = "OBJECTID", width = 20)
28 private String objectId;
29
30 @Excel(name = "SZS", width = 20)
31 private String szs;
32 @Excel(name = "SZQX", width = 20)
33 private String szqx;
34 @Excel(name = "SZZ", width = 20)
35 private String szz;
36 @Excel(name = "SZSQ", width = 20)
37 private String szsq;
38 @Excel(name = "NAME", width = 20)
39 private String name;
40 @Excel(name = "DEPICT", width = 20)
41 private String depict;
42 @Excel(name = "MAP_LEVEL", width = 20)
43 private String mapLevel;
44 @Excel(name = "CENTER_X", width = 20)
45 private String centerX;
46 @Excel(name = "CENTER_Y", width = 20)
47 private String centerY;
48
49
50 @Excel(name = "OID_1", width = 20)
51 private String oid_1;
52 @Excel(name = "AREACODE", width = 20)
53 private String areaCode;
54 @Excel(name = "ADCODE", width = 20)
55 private String adCode;
56
57 @Excel(name = "Shape_Leng", width = 20)
58 private String shapeLeng;
59 @Excel(name = "Shape_Area", width = 20)
60 private String shapeArea;
61
62 }
1 package brain.base.support.biz.aqsc.entity;
2
3 import lombok.Data;
4
5 @Data
6 public class Colum{
7
8 private String note;
9
10 private String key;
11
12 }
1 package brain.base.support.biz.aqsc.entity;
2
3 import lombok.AllArgsConstructor;
4 import lombok.Data;
5 import lombok.NoArgsConstructor;
6
7 import java.util.List;
8
9 @Data
10 public class Colums{
11
12 private String tablename;
13
14 private List<Colum> colums;
15
16
17 }
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.aqsc.mapper;
2
3 import brain.base.support.biz.aqsc.entity.AqscXwyAreaWg;
4 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 import org.apache.ibatis.annotations.Mapper;
6
7 @Mapper
8 public interface AqscXwyAreaWgMapper extends BaseMapper<AqscXwyAreaWg> {
9 }
1 package brain.base.support.biz.aqsc.mapper;
2
3 import brain.base.support.biz.aqsc.entity.AqscXwyCategory;
4 import brain.base.support.biz.aqsc.entity.AqscXwyCategoryTree;
5 import brain.base.support.biz.aqsc.entity.Colums;
6 import brain.base.support.biz.system.model.TreeSelectModel;
7 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
8 import org.apache.ibatis.annotations.Mapper;
9 import org.apache.ibatis.annotations.Param;
10
11 import java.util.List;
12 import java.util.Map;
13
14 @Mapper
15 public interface AqscXwyCategoryMapper extends BaseMapper<AqscXwyCategory> {
16
17 /**
18 * @Describe 获取 险情分类字典 通过主键
19 * @Author congxin
20 * @Date 2020/11/17 9:06
21 */
22 List<TreeSelectModel> selectCategoryTreeModel(@Param("id") String id);
23
24 /**
25 * @Describe 计算子节点的数量
26 * @Author congxin
27 * @Date 2020/11/17 13:27
28 */
29 Integer countChildNodeNum(@Param("id") String id);
30
31 /**
32 * @Describe 修改是否有子节点属性
33 * @Author congxin
34 * @Date 2020/11/17 13:27
35 */
36 void updateHasChildStatus(@Param("id") String id, @Param("value") String value);
37
38 /**
39 * @Describe 删除数据
40 * @Author congxin
41 * @Date 2020/11/17 14:03
42 */
43 void deleteOne(@Param("id") String id);
44
45 /**
46 * @Describe 检索数据
47 * @Author congxin
48 * @Date 2020/11/17 14:03
49 */
50 List<AqscXwyCategoryTree> selectByCond(@Param("id") String id);
51
52 /**
53 * @Describe 根据表名 即配置的sql 获取数量
54 * @Author congxin
55 * @Date 2021/3/10 18:53
56 * @Return
57 */
58 Integer countNum(@Param("datasetname") String datasetname, @Param("sql_text") String sql_text);
59
60 /**
61 * @Describe 根据表名 即配置的sql 获取数据列表
62 * @Author congxin
63 * @Date 2021/3/10 18:53
64 * @param datasetname 数据库
65 * @param sql_text 查询sql
66 * @Return
67 */
68 List<Map<String, Object>> queryDataList(@Param("datasetname") String datasetname, @Param("sql_text") String sql_text, @Param("orderby") String orderby);
69
70 /**
71 * @Describe 根据表名 关联字段,关联值获取列表
72 * @Author congxin
73 * @Date 2021/3/10 18:53
74 * @param datasetname 数据库
75 * @param key 关联字段
76 * @param value 关联字段value
77 * @Return
78 */
79 List<Map<String, Object>> queryDataListByKey(@Param("datasetname") String datasetname, @Param("key") String key, @Param("value") String value, @Param("likeValue") String likeValue);
80
81 /**
82 * @Describe 根据表名 关联字段,关联值获取列表
83 * @Author congxin
84 * @Date 2021/3/10 18:53
85 * @param datasetname 数据库
86 * @Return
87 */
88 List<Map<String, Object>> queryDataListByMap(@Param("datasetname") String datasetname, @Param("param") Map param);
89
90 /**
91 * 获取单条详情记录
92 * @param datasetname 表名
93 * @param id 主键id 类型varchar
94 * @return
95 */
96 Map<String, Object> queryDataVarcharId(@Param("datasetname") String datasetname, @Param("id") String id, @Param("key") String key);
97
98 /**
99 * 获取单条详情记录
100 * @param datasetname 表名
101 * @param id 主键id 类型int
102 * @return
103 */
104 Map<String, Object> queryDataIntegerId(@Param("datasetname") String datasetname, @Param("id") Integer id, @Param("key") String key);
105
106 /**
107 * 获取表的所有字段名和注释
108 * @param datasetname 表名
109 * @return
110 */
111 List<Colums> getTableField(@Param("datasetnames") List<String> datasetname, @Param("district_code") String districtCode);
112
113 /**
114 * 获取表的所有字段名和注释
115 * @param datasetname 表名
116 * @return
117 */
118 List<Map<String, Object>> getTableFieldMap(@Param("datasetnames") List<String> datasetname, @Param("district_code") String districtCode);
119
120 /**
121 * @Describe 检索表单的主键名称即类型
122 * @Author congxin
123 * @Date 2021/3/12 15:49
124 * @Return
125 */
126 Map<String, Object> selectTableKey(@Param("datasetname") String datasetname);
127
128 /**
129 * @Describe 通过categoryId 删除对应的授权区县
130 * @Author congxin
131 * @Date 2021/3/16 11:47
132 * @Return
133 */
134 void deleteCategoryDistrict(@Param("categoryId") String categoryId);
135
136 /**
137 * 菜单授权
138 * @param list
139 */
140 void addCategoryDistrict(@Param("list") List<Map<String, Object>> list);
141
142 /**
143 * 获取已经授权的分类字典
144 * @param id
145 * @return
146 */
147 List<String> getCategoryDistrictId(String id);
148
149 /**
150 * @Describe 修改表单的数据
151 * @Author congxin
152 * @Date 2021/3/17 11:40
153 * @param tablename :表单
154 * @param idkey :主键key
155 * @param idvalue 主键值 :
156 * @param fields :字段key和值
157 * @Return
158 */
159 Integer updateData(@Param("tablename") String tablename, @Param("idkey") String idkey, @Param("idvalue") String idvalue, @Param("fields") Map<String, Object> fields);
160
161 /**
162 * @Describe 添加表单的数据
163 * @Author congxin
164 * @Date 2021/3/17 11:40
165 * @param tablename :表单
166 * @param fields :字段key和值
167 * @Return
168 */
169 Integer insertData(@Param("tablename") String tablename, @Param("fields") Map<String, Object> fields);
170
171 /**
172 * @Describe 删除数据
173 * @Author congxin
174 * @Date 2021/3/17 15:31
175 * @Return
176 */
177 void deleteData(@Param("tablename") String tablename, @Param("idkey") String idkey, @Param("idvalue") Object idvalue);
178
179 List<String> countNumSql(@Param("countsql") String countsql);
180
181 List<Map<String, Object>> queryDataListByMap2(@Param("tablename") String tablename, @Param("smid") String smid);
182 }
1 package brain.base.support.biz.aqsc.mapper;
2
3 import brain.base.support.biz.aqsc.entity.AqscXwyCompanyCode;
4 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 import org.apache.ibatis.annotations.Mapper;
6
7 @Mapper
8 public interface AqscXwyCompanyCodeMapper extends BaseMapper<AqscXwyCompanyCode> {
9 }
1 package brain.base.support.biz.aqsc.mapper;
2
3 import brain.base.support.biz.aqsc.entity.AqscXwyGrid;
4 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 import org.apache.ibatis.annotations.Mapper;
6
7 @Mapper
8 public interface AqscXwyGridMapper extends BaseMapper<AqscXwyGrid> {
9 }
1 package brain.base.support.biz.aqsc.service;
2
3 import brain.base.support.biz.aqsc.entity.AqscXwyCategory;
4 import brain.base.support.biz.system.model.TreeSelectModel;
5 import com.baomidou.mybatisplus.extension.service.IService;
6 import com.sun.istack.Nullable;
7
8 import javax.validation.constraints.NotNull;
9 import java.util.List;
10 import java.util.Map;
11
12 /**
13 * 小微园 后端填报管理
14 * @Author congxin
15 */
16 public interface IAqscXwyCategoryBackService extends IService<AqscXwyCategory> {
17
18 /**
19 * @Describe 分类字典树
20 * @Author congxin
21 * @Date 2021/3/16 14:39
22 * @Return
23 */
24 List<TreeSelectModel> getXwyTree(String param, String mess);
25
26 /**
27 * @Describe 通过资源目录树获取记录数据
28 * @Author congxin
29 * @Date 2021/3/16 16:20
30 * @Return
31 */
32 Map<String, Object> selectAllDataByCategoryId(@NotNull String categoryId, @Nullable String name) throws Exception;
33
34 /**
35 * @Describe 获取配置的需要填报的表单字段
36 * @Author congxin
37 * @Date 2021/3/17 10:08
38 * @Return
39 */
40 List<Map<String, Object>> selectTemplateFileds(@NotNull String categoryId) throws Exception;
41
42 /**
43 * @Describe 修改数据
44 * @Author congxin
45 * @Date 2021/3/17 10:08
46 * @Return
47 */
48 void updateTemplate(@NotNull String categoryId, @NotNull Map<String, Object> record) throws Exception;
49
50 /**
51 * @Describe 新增数据
52 * @Author congxin
53 * @Date 2021/3/17 10:08
54 * @Return
55 */
56 void addTemplate(@NotNull String categoryId, @NotNull Map<String, Object> record) throws Exception;
57
58 /**
59 * @Describe 删除
60 * @Author congxin
61 * @Date 2021/3/17 15:30
62 * @Return
63 */
64 void deleteTemplate(@NotNull String categoryId, @NotNull String id) throws Exception;
65
66 /**
67 * @Describe 获取网格片区
68 * @Author congxin
69 * @Date 2021/3/17 16:20
70 * @Return
71 */
72 Object getWGArea(String categoryId) throws Exception;
73
74 }
1 package brain.base.support.biz.aqsc.service;
2
3
4 import brain.base.support.biz.aqsc.entity.AqscXwyCategory;
5 import brain.base.support.biz.system.model.TreeSelectModel;
6 import com.baomidou.mybatisplus.extension.service.IService;
7
8 import java.util.List;
9
10 public interface IAqscXwyCategoryService extends IService<AqscXwyCategory> {
11
12 /**
13 * @Describe 检索 海事险情分类字典 树结构
14 * @Author congxin
15 * @Date 2020/11/17 9:04
16 */
17 List<TreeSelectModel> selectCategoryTreeModel();
18
19 /**
20 * @Describe 添加数据
21 * @Author congxin
22 * @Date 2020/11/17 13:22
23 */
24 void saveOne(AqscXwyCategory category);
25
26 /**
27 * @Describe 修改数据
28 * @Author congxin
29 * @Date 2020/11/17 13:22
30 */
31 void updateOne(AqscXwyCategory category);
32
33 /**
34 * @Describe 删除数据
35 * @Author congxin
36 * @Date 2020/11/17 13:22
37 */
38 void deleteOne(String id);
39
40 /**
41 * @Describe 修改hasChild的状态
42 * @Author congxin
43 * @Date 2020/11/17 13:51
44 */
45 void updateHasChildStatus(String id);
46
47 /**
48 * @Describe 授权区县
49 * @Author congxin
50 * @Date 2021/3/16 11:37
51 * @param categoryId :
52 * @param districtIds :
53 * @Return
54 */
55 void saveCategoryDistrictId(String categoryId, String districtIds);
56
57 /**
58 * @Describe 根据catagoryId 获取区域权限
59 * @Author congxin
60 * @Date 2021/3/16 13:53
61 * @Return
62 */
63 List<String> getDistrictIds(String id);
64 }
1 package brain.base.support.biz.aqsc.service.impl;
2
3 import brain.base.support.biz.aqsc.entity.AqscXwyCategory;
4 import brain.base.support.biz.aqsc.mapper.AqscXwyCategoryMapper;
5 import brain.base.support.biz.aqsc.service.IAqscXwyCategoryService;
6 import brain.base.support.biz.system.model.TreeSelectModel;
7 import brain.common.util.UUIDGenerator;
8 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
9 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Service;
12 import org.springframework.transaction.annotation.Transactional;
13 import org.springframework.util.StringUtils;
14
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Map;
19
20 @Service
21 public class AqscXwyCategoryServiceImpl extends ServiceImpl<AqscXwyCategoryMapper, AqscXwyCategory> implements IAqscXwyCategoryService {
22
23 /**
24 * 根节点
25 */
26 private static final String rootId = "0";
27
28 @Autowired
29 AqscXwyCategoryMapper aqscXwyCategoryMapper;
30
31 @Override
32 public List<TreeSelectModel> selectCategoryTreeModel() {
33 List<TreeSelectModel> treeSelectModel = aqscXwyCategoryMapper.selectCategoryTreeModel(rootId); // 获取主节点
34 if( treeSelectModel != null && treeSelectModel.size() > 0) buildTreeModel(treeSelectModel);
35 return treeSelectModel;
36 }
37
38 @Override
39 public void saveOne(AqscXwyCategory category) {
40 // 判断是否为根节点
41 if( category.getPid() == null ) category.setPid(rootId);
42 // 添加数据
43 aqscXwyCategoryMapper.insert(category);
44 // 修改是否有hashChild字段值
45 if( rootId != category.getPid() ) updateHasChildStatus( category.getPid() );
46 }
47
48 @Override
49 public void updateOne(AqscXwyCategory category) {
50 // 判断是否为根节点
51 if( category.getPid() == null ) category.setPid(rootId);
52
53 AqscXwyCategory record = aqscXwyCategoryMapper.selectById(category.getId());
54 if(record == null) throw new RuntimeException("检索不到该数据");
55
56 aqscXwyCategoryMapper.updateById(category);// 更新
57
58 if(category.getPid() == record.getPid()) return; // 更新前后父节点相同
59 if( rootId != category.getPid() ) updateHasChildStatus( category.getPid() );
60 if( rootId != record.getPid() ) updateHasChildStatus( record.getPid() );
61 }
62
63 @Override
64 public void deleteOne(String id) {
65 // 检索数据
66 AqscXwyCategory record = aqscXwyCategoryMapper.selectById( id );
67 if(record == null) throw new RuntimeException("检索不到该数据");
68 // 删除
69 aqscXwyCategoryMapper.deleteOne(id);
70 // 更新父类hasChild状态
71 if( rootId != record.getPid() ) updateHasChildStatus(record.getPid());
72 }
73
74 /**
75 * @Describe 修改hasChild的状态
76 * @Author congxin
77 * @Date 2020/11/17 13:51
78 */
79 @Override
80 public void updateHasChildStatus( String id ){
81 Integer count = aqscXwyCategoryMapper.countChildNodeNum(id); // 获取是否还有子节点
82 if( count != null && count > 0 ){
83 aqscXwyCategoryMapper.updateHasChildStatus(id, "1");
84 } else {
85 aqscXwyCategoryMapper.updateHasChildStatus(id, "0");
86 }
87 }
88
89 /**
90 * @Describe 遍历节点获取子节点数据
91 * @Author congxin
92 * @Date 2020/11/17 9:17
93 */
94 private void buildTreeModel(List<TreeSelectModel> parentModels){
95 parentModels.parallelStream().forEach( model -> {
96 List<TreeSelectModel> treeSelectModels = aqscXwyCategoryMapper.selectCategoryTreeModel(model.getKey());
97 if(treeSelectModels != null && treeSelectModels.size() > 0) buildTreeModel( treeSelectModels );
98 model.setChildren(treeSelectModels);
99 });
100 }
101
102 @Override
103 @Transactional
104 public void saveCategoryDistrictId(String categoryId, String districtIds) {
105 addCategoryDistrictWithChild(categoryId, districtIds);
106 }
107
108 @Override
109 public List<String> getDistrictIds(String id) {
110 return aqscXwyCategoryMapper.getCategoryDistrictId(id);
111 }
112
113 /**
114 * 递归新增当前节点和当前节点的子节点的授权
115 * @param categoryId
116 * @param districtIds
117 */
118 private void addCategoryDistrictWithChild(String categoryId, String districtIds) {
119 List<Map<String, Object>> params = new ArrayList<>(){{
120 for (String districtId : districtIds.split(",")) {
121 if(!StringUtils.isEmpty(districtId)){
122 Map<String, Object> param = new HashMap<>();
123 param.put("id", UUIDGenerator.generate());
124 param.put("category_id", categoryId);
125 param.put("district_id", districtId);
126 add(param);
127 }
128 }
129 }};
130 // 删除 categoryId 删除的对应的授权
131 aqscXwyCategoryMapper.deleteCategoryDistrict(categoryId);
132 if(params != null && params.size() > 0) aqscXwyCategoryMapper.addCategoryDistrict(params);
133 List<AqscXwyCategory> childList = aqscXwyCategoryMapper.selectList(new LambdaQueryWrapper<AqscXwyCategory>().eq(AqscXwyCategory::getPid, categoryId));
134 if(childList.size()>0){
135 for (AqscXwyCategory temp : childList) {
136 addCategoryDistrictWithChild(temp.getId(),districtIds);
137 }
138 }
139 }
140
141 }
1 package brain.base.support.biz.aqsc.vo;
2
3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty;
5 import lombok.AllArgsConstructor;
6 import lombok.Data;
7 import lombok.NoArgsConstructor;
8
9 @Data
10 @AllArgsConstructor
11 @NoArgsConstructor
12 @ApiModel(value="小微园区企业列表")
13 public class AqscCompanyVo {
14
15 @ApiModelProperty(value = "主键")
16 private String id;
17
18 @ApiModelProperty(value = "企业名称")
19 private String companyName;
20
21 @ApiModelProperty(value = "企业地址")
22 private String companyAddress;
23
24 @ApiModelProperty(value = "统一社会信用代码")
25 private String socialCode;
26
27 @ApiModelProperty(value = "企业类型")
28 private String industryType;
29 }
1 package brain.base.support.biz.config;//package brain.base.support.biz.config;
2 //
3 //import brain.base.support.biz.system.util.MinioUtil;
4 //import lombok.extern.slf4j.Slf4j;
5 //import org.springframework.beans.factory.annotation.Value;
6 //import org.springframework.context.annotation.Bean;
7 //import org.springframework.context.annotation.Configuration;
8 //
9 ///**
10 // * Minio文件上传配置文件
11 // */
12 //@Slf4j
13 //@Configuration
14 //public class MinioConfig {
15 // @Value(value = "${jeecg.minio.minio_url}")
16 // private String minioUrl;
17 // @Value(value = "${jeecg.minio.minio_name}")
18 // private String minioName;
19 // @Value(value = "${jeecg.minio.minio_pass}")
20 // private String minioPass;
21 // @Value(value = "${jeecg.minio.bucketName}")
22 // private String bucketName;
23 //
24 // @Bean
25 // public void initMinio(){
26 // if(!minioUrl.startsWith("http")){
27 // minioUrl = "http://" + minioUrl;
28 // }
29 // if(!minioUrl.endsWith("/")){
30 // minioUrl = minioUrl.concat("/");
31 // }
32 // MinioUtil.setMinioUrl(minioUrl);
33 // MinioUtil.setMinioName(minioName);
34 // MinioUtil.setMinioPass(minioPass);
35 // MinioUtil.setBucketName(bucketName);
36 // }
37 //
38 //}
1 package brain.base.support.biz.coverage.entity;
2
3 import java.io.Serializable;
4 import java.util.Date;
5 import java.math.BigDecimal;
6
7 import brain.common.annotation.Dict;
8 import com.baomidou.mybatisplus.annotation.IdType;
9 import com.baomidou.mybatisplus.annotation.TableId;
10 import com.baomidou.mybatisplus.annotation.TableName;
11 import lombok.Data;
12 import com.fasterxml.jackson.annotation.JsonFormat;
13 import org.springframework.format.annotation.DateTimeFormat;
14 import org.jeecgframework.poi.excel.annotation.Excel;
15
16
17 /**
18 * @Description: 图层管理
19 * @Author: jeecg-boot
20 * @Date: 2019-12-20
21 * @Version: V1.0
22 */
23 @Data
24 @TableName("coverage")
25 public class Coverage implements Serializable {
26 private static final long serialVersionUID = 1L;
27
28 /**主键*/
29 @TableId(type = IdType.ID_WORKER_STR)
30 private String id;
31 /**创建人*/
32 @Excel(name = "创建人", width = 15)
33 private String createBy;
34 /**创建日期*/
35 @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
36 @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
37 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
38 private Date createTime;
39 /**更新人*/
40 @Excel(name = "更新人", width = 15)
41 private String updateBy;
42 /**更新日期*/
43 @Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
44 @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
45 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
46 private Date updateTime;
47 /**所属部门*/
48 @Excel(name = "所属部门", width = 15)
49 private String sysOrgCode;
50 /**图层名称*/
51 @Excel(name = "图层名称", width = 15)
52 private String name;
53 /**图层类型*/
54 @Excel(name = "图层类型", width = 15)
55 @Dict(dicCode = "id",dictTable="sys_category",dicText="name")
56 private String type;
57 /**图层地址*/
58 @Excel(name = "图层地址", width = 15)
59 private String url;
60 }
1 package brain.base.support.biz.coverage.entity;
2
3 import com.baomidou.mybatisplus.annotation.IdType;
4 import com.baomidou.mybatisplus.annotation.TableId;
5 import com.baomidou.mybatisplus.annotation.TableName;
6 import lombok.Data;
7
8 @Data
9 @TableName("sys_depart_category")
10 public class SysDepartCategory {
11
12 @TableId(type = IdType.UUID)
13 private String id;
14
15 private String departId;
16
17 private String categoryId;
18
19 public SysDepartCategory(String departId, String categoryId){
20 this.departId = departId;
21 this.categoryId = categoryId;
22 }
23 }
1 package brain.base.support.biz.coverage.entity;
2
3 import com.baomidou.mybatisplus.annotation.IdType;
4 import com.baomidou.mybatisplus.annotation.TableId;
5 import com.baomidou.mybatisplus.annotation.TableName;
6 import lombok.Data;
7
8 @Data
9 @TableName("sys_role_category")
10 public class SysRoleCategory {
11
12 @TableId(type = IdType.UUID)
13 private String id;
14
15 private String roleId;
16
17 private String categoryId;
18
19 public SysRoleCategory(String roleId,String categoryId){
20 this.roleId = roleId;
21 this.categoryId = categoryId;
22 }
23 }
1 package brain.base.support.biz.coverage.mapper;
2
3
4 import brain.base.support.biz.coverage.entity.Coverage;
5 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6
7 /**
8 * @Description: 图层管理
9 * @Author: jeecg-boot
10 * @Date: 2019-12-20
11 * @Version: V1.0
12 */
13 public interface CoverageMapper extends BaseMapper<Coverage> {
14
15 }
1 package brain.base.support.biz.coverage.mapper;
2
3 import brain.base.support.biz.coverage.entity.SysDepartCategory;
4 import brain.base.support.biz.system.entity.SysCategory;
5 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6 import org.apache.ibatis.annotations.Param;
7
8 import java.util.List;
9
10 /**
11 * 部门分类mapper
12 * @author liuhui
13 */
14 public interface SysDepartCategoryMapper extends BaseMapper<SysDepartCategory> {
15
16 /**
17 * @Describe 获取区县账号的 目录树
18 * @Author congxin
19 * @Date 2020/7/30 13:56
20 * @Return
21 */
22 List<SysCategory> getQuXianUserSysCategory(@Param("orgCode") String orgCode);
23 }
1 package brain.base.support.biz.coverage.mapper;
2
3 import brain.base.support.biz.coverage.entity.SysRoleCategory;
4 import brain.base.support.biz.system.entity.SysCategory;
5 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6 import org.apache.ibatis.annotations.Param;
7 import java.util.List;
8 import java.util.Map;
9
10 public interface SysRoleCategoryMapper extends BaseMapper<SysRoleCategory> {
11
12 List<SysCategory> getCategoryList(@Param("code") String code);
13
14 /**
15 * @Describe
16 * @Author congxin
17 * @Date 2020/6/4 12:59
18 * @Return
19 */
20 List<SysCategory> getCategoryListByPid(@Param("pid") String pid, @Param("code") String code);
21
22 List<SysCategory> getMonitorCategory();
23
24 SysCategory getMonitorCameraDetail(@Param("name") String name);
25
26 List<SysCategory> getCategoryByPid(@Param("code") String code);
27
28 List<SysCategory> getMonitorCamera();
29
30 List<Map<String,Object>> getCompanyVideo(@Param("district") String district, @Param("code") String code, @Param("cameraName") String cameraName,
31 @Param("tablename") String tablename, @Param("username") String username);
32
33 List<String> getDistrictName(@Param("list") List<String> list);
34
35 String getCityCode(@Param("name") String name);
36
37 /**
38 * @Describe 获取用户收藏的视频目录
39 * @Author congxin
40 * @Date 2020/8/3 13:32
41 */
42 List<Map<String,Object>> getUserCompanyVideo(@Param("district") String district, @Param("code") String code, @Param("cameraName") String cameraName,
43 @Param("tablename") String tablename, @Param("userVideos") List<Integer> userVideos, @Param("username") String username);
44
45 /**
46 * @Describe 获取用户收藏的smids
47 * @Author congxin
48 * @Date 2020/8/3 13:44
49 */
50 List<Integer> getUserVideoSmids(@Param("username") String username);
51
52 /**
53 * @Describe 检索用户收藏数据
54 * @Author congxin
55 * @Date 2020/8/3 16:00
56 */
57 List<Map<String, Object>> selectUserVideo(@Param("username") String username, @Param("smid") Integer smid);
58
59 /**
60 * @Describe 添加用户收藏数据
61 * @Author congxin
62 * @Date 2020/8/3 16:00
63 */
64 void addUserVideo(@Param("username") String username, @Param("smid") Integer smid);
65
66 /**
67 * @Describe 删除用户收藏数据
68 * @Author congxin
69 * @Date 2020/8/3 16:05
70 */
71 void deleteUserVideo(@Param("username") String username, @Param("smid") Integer smid);
72 }
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.coverage.mapper.CoverageMapper">
4
5 </mapper>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.coverage.mapper.SysDepartCategoryMapper">
4
5 <!-- 根据角色ID查询分类信息 -->
6 <select id="getQuXianUserSysCategory" resultType="brain.base.support.biz.system.entity.SysCategory">
7
8 select id ,
9 pid ,
10 case when name = '安全风险源' then concat(name,'_',table_name) else name end as name,
11 has_child from sys_category
12 where is_write = '1'
13 and id in (
14 SELECT category_id from sys_depart_category where depart_id = (
15 SELECT id from sys_depart where org_code = #{orgCode}
16 )
17 ) and pid = '0'
18
19 </select>
20
21 </mapper>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.coverage.mapper.SysRoleCategoryMapper">
4
5 <!-- 根据角色ID查询分类信息 -->
6 <select id="getCategoryList" resultType="brain.base.support.biz.system.entity.SysCategory">
7 select c.*,wz_name,lc_name,lw_name,oh_name,dt_name,lq_name,ra_name,
8 lg_name,yj_name,wc_name,py_name,ts_name,cn_name,jk_name,oj_name
9 from
10 (select a.* from sys_category a
11 join (select category_id from sys_category_district where district_id = (select concat(id,'') from city where code =#{code})) b
12 on a.id = b.category_id
13 where a.type = 0) c left join sys_category_remark d on c.id = d.pid order by c.order_num asc
14 </select>
15
16 <!-- 根据角色ID查询分类信息 -->
17 <select id="getCategoryListByPid" resultType="brain.base.support.biz.system.entity.SysCategory">
18 select c.*,wz_name,lc_name,lw_name,oh_name,dt_name,lq_name,ra_name,
19 lg_name,yj_name,wc_name,py_name,ts_name,cn_name,jk_name,oj_name
20 from
21 (select a.* from sys_category a
22 join (select category_id from sys_category_district where district_id = (select concat(id,'') from city where code =#{code})) b
23 on a.id = b.category_id
24 where a.type = 0) c left join sys_category_remark d on c.id = d.pid
25 where c.pid = #{pid}
26 order by c.order_num asc
27 </select>
28
29 <select id="getMonitorCategory" parameterType="String" resultType="brain.base.support.biz.system.entity.SysCategory">
30 select * from sys_category where type = 1
31 order by order_num asc
32 </select>
33
34 <select id="getMonitorCamera" parameterType="String" resultType="brain.base.support.biz.system.entity.SysCategory">
35 select * from sys_category where type = 2
36 order by order_num asc
37 </select>
38
39 <select id="getMonitorCameraDetail" parameterType="String" resultType="brain.base.support.biz.system.entity.SysCategory">
40 select * from sys_category where type = 2 and name = #{name} limit 1
41 </select>
42
43 <select id="getCompanyVideo" parameterType="String" resultType="java.util.Map">
44 select
45 wl.smid,
46 wl.video_url,
47 wl.longitude,
48 wl.latitude,
49 wl.name,
50 wl.parents_name,
51 wl.district
52 ,uw.smid as collection_smid from "WLGZ_VIDEO" as wl
53 Left join user_wlgz_video as uw on wl.smid = uw.smid and uw.username = #{username}
54 <where>
55 and wl.tablename = #{tablename}
56 <if test="district=='3303' and code!='' and code!=null">
57 and wl.district_code = #{code}
58 </if>
59 <if test="district!='3303'">
60 and wl.district_code =#{district}
61 <if test="code!='' and code!=null">
62 and wl.street_code = #{code}
63 </if>
64 </if>
65 <if test="cameraName!=null and cameraName!=''">
66 and wl.name like concat('%',#{cameraName},'%')
67 </if>
68 and wl.flag = '0'
69 </where>
70 order by wl.name
71 </select>
72
73 <select id="getCityCode" resultType="String">
74 select code from city where name = #{name}
75 </select>
76
77 <select id="getDistrictName" resultType="String">
78 select name from city where code in
79 <foreach collection="list" item="item" open="(" separator="," close=")">
80 #{item}
81 </foreach>
82 order by order_num
83 </select>
84
85 <select id="getCategoryByPid" parameterType="String" resultType="brain.base.support.biz.system.entity.SysCategory">
86 select a.* from sys_category a
87 join (select category_id from sys_category_district where district_id = (select concat(id,'') from city where code =#{code})) b
88 on a.id = b.category_id
89 where a.type = 0 and a.geotype = 'point' and a.is_analysis = '1' and a.num>0
90 order by a.order_num asc
91 </select>
92
93 <select id="getUserCompanyVideo" parameterType="String" resultType="java.util.Map">
94 select wl.*,uw.smid as collection_smid from "WLGZ_VIDEO" as wl
95 Left join user_wlgz_video as uw on wl.smid = uw.smid and uw.username = #{username}
96 <where>
97 and wl.tablename = #{tablename}
98 <if test="district=='3303' and code!='' and code!=null">
99 and wl.district_code = #{code}
100 </if>
101 <if test="district!='3303'">
102 and wl.district_code =#{district}
103 <if test="code!='' and code!=null">
104 and wl.street_code = #{code}
105 </if>
106 </if>
107 <if test="cameraName!=null and cameraName!=''">
108 and wl.name like concat('%',#{cameraName},'%')
109 </if>
110 <if test="userVideos != null">
111 and wl.smid in (
112 <foreach collection="userVideos" separator="," item="item">
113 ${item}
114 </foreach>
115 )
116 </if>
117 and wl.flag = '0'
118 </where>
119 order by wl.name
120 </select>
121
122 <!--获取用户收藏的smids-->
123 <select id="getUserVideoSmids" parameterType="String" resultType="java.lang.Integer">
124 select smid from user_wlgz_video where username = #{username}
125 </select>
126
127 <!--检索用户收藏数据-->
128 <select id="selectUserVideo" resultType="java.util.Map">
129 select * from user_wlgz_video where username = #{username} and smid = ${smid}
130 </select>
131
132 <!--检索用户收藏数据-->
133 <insert id="addUserVideo" >
134 INSERT INTO user_wlgz_video ( username, smid) values ( #{username,jdbcType=VARCHAR}, ${smid} )
135 </insert>
136
137 <!--检索用户收藏数据-->
138 <delete id="deleteUserVideo">
139 delete from user_wlgz_video where username = #{username,jdbcType=VARCHAR} and smid = ${smid}
140 </delete>
141
142 </mapper>
1 package brain.base.support.biz.coverage.service;
2
3
4 import brain.base.support.biz.coverage.entity.Coverage;
5 import com.baomidou.mybatisplus.extension.service.IService;
6
7 /**
8 * @Description: 图层管理
9 * @Author: jeecg-boot
10 * @Date: 2019-12-20
11 * @Version: V1.0
12 */
13 public interface ICoverageService extends IService<Coverage> {
14
15 }
1 package brain.base.support.biz.coverage.service;
2
3
4 import brain.base.support.biz.coverage.entity.SysDepartCategory;
5 import brain.base.support.biz.system.model.TreeModel;
6 import com.baomidou.mybatisplus.extension.service.IService;
7
8 import java.util.List;
9
10 public interface ISysDepartCategoryService extends IService<SysDepartCategory> {
11
12 void saveDepartCategory(String departId, String categoryIds, String lastCategoryIds);
13
14 // List<Map<String,Object>> getDepartCategoryByDepartId(List<String> departIds);
15 //
16 // List<Map<String,Object>> getMonitorCategory();
17
18 /**
19 * @Describe 获取区县账号的 目录树
20 * @Author congxin
21 * @Date 2020/7/30 13:56
22 * @Return
23 */
24 List<TreeModel> getQuXianUserSysCategory();
25 }
1 package brain.base.support.biz.coverage.service;
2
3 import brain.base.support.biz.coverage.entity.SysRoleCategory;
4 import brain.base.support.biz.system.entity.SysCategory;
5 import com.baomidou.mybatisplus.extension.service.IService;
6 import com.sun.istack.NotNull;
7
8 import java.util.List;
9 import java.util.Map;
10
11
12 public interface ISysRoleCategoryService extends IService<SysRoleCategory> {
13
14 void saveRoleCategory(String roleId, String categoryIds, String lastCategoryIds);
15
16 List<Map<String,Object>> getcategoryList();
17
18 /**
19 * @Describe
20 * @Author congxin
21 * @Date 2020/6/4 13:08
22 * @Return
23 */
24 List<Map<String,Object>> getcategoryListByPid(String Pid, SysCategory category);
25
26 List<Map<String,Object>> getMonitorCategory();
27
28 List<Map<String,Object>> getCategoryByPid();
29
30 List<Map<String, Object>> getMonitorCamera(String code, String name);
31
32 /**
33 * @Describe 获取智慧工地 监控视频
34 * @Author congxin
35 * @Date 2020/6/3 19:29
36 * @Return
37 */
38 List<Map<String, Object>> getBuildMonitorCamera(List<SysCategory> sysCategories);
39
40 List<Map<String,Object>> getCameraDetail(String datatype, String district, String cameraName, Boolean is_collection);
41
42 List<Map<String,Object>> getAllMonitorCamera(String name);
43
44
45 /**
46 * @Describe 获取用户收藏的视频目录(一,二级目录)
47 * @Author congxin
48 * @Date 2020/8/3 13:20
49 */
50 List<Map<String, Object>> getMonitorUserCamera(String code, String name);
51
52 /**
53 * @Describe 获取所有用户收藏的视频目录(所有层级)
54 * @Author congxin
55 * @Date 2020/8/3 16:26
56 */
57 List<Map<String,Object>> getAllUserMonitorCamera(String name);
58
59 /**
60 * @Describe 添加收藏
61 * @Author congxin
62 * @Date 2020/8/3 15:55
63 */
64 void addUserVideo(@NotNull Integer smid);
65
66 /**
67 * @Describe 删除收藏
68 * @Author congxin
69 * @Date 2020/8/3 16:09
70 */
71 void deleteUserVideo(@NotNull Integer smid);
72 }
1 package brain.base.support.biz.coverage.service.impl;
2
3 import brain.base.support.biz.coverage.entity.Coverage;
4 import brain.base.support.biz.coverage.mapper.CoverageMapper;
5 import brain.base.support.biz.coverage.service.ICoverageService;
6 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 import org.springframework.stereotype.Service;
8
9
10 /**
11 * @Description: 图层管理
12 * @Author: jeecg-boot
13 * @Date: 2019-12-20
14 * @Version: V1.0
15 */
16 @Service
17 public class CoverageServiceImpl extends ServiceImpl<CoverageMapper, Coverage> implements ICoverageService {
18
19 }
1 package brain.base.support.biz.coverage.service.impl;
2
3 import brain.base.support.biz.coverage.entity.SysDepartCategory;
4 import brain.base.support.biz.coverage.mapper.SysDepartCategoryMapper;
5 import brain.base.support.biz.coverage.service.ISysDepartCategoryService;
6 import brain.base.support.biz.system.entity.SysCategory;
7 import brain.base.support.biz.system.mapper.SysCategoryMapper;
8 import brain.base.support.biz.system.model.TreeModel;
9 import brain.common.system.util.UserUtil;
10 import brain.common.util.oConvertUtils;
11 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
12 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
13 import org.springframework.beans.factory.annotation.Autowired;
14 import org.springframework.stereotype.Service;
15
16 import java.util.*;
17
18 @Service
19 public class SysDepartCategoryServiceImpl extends ServiceImpl<SysDepartCategoryMapper, SysDepartCategory> implements ISysDepartCategoryService {
20
21 @Autowired
22 SysDepartCategoryMapper sysDepartCategoryMapper;
23 @Autowired
24 SysCategoryMapper sysCategoryMapper;
25
26 @Override
27 public void saveDepartCategory(String departId, String categoryIds, String lastCategoryIds) {
28 List<String> add = getDiff(lastCategoryIds,categoryIds);
29 if(add!=null && add.size()>0) {
30 List<SysDepartCategory> list = new ArrayList<>();
31 for (String p : add) {
32 if(oConvertUtils.isNotEmpty(p)) {
33 SysDepartCategory roleCategory = new SysDepartCategory(departId, p);
34 list.add(roleCategory);
35 }
36 }
37 this.saveBatch(list);
38 }
39
40 List<String> delete = getDiff(categoryIds,lastCategoryIds);
41 if(delete!=null && delete.size()>0) {
42 for (String categoryId : delete) {
43 this.remove(new QueryWrapper<SysDepartCategory>().lambda().eq(SysDepartCategory::getDepartId, departId).eq(SysDepartCategory::getCategoryId, categoryId));
44 }
45 }
46 }
47
48 @Override
49 public List<TreeModel> getQuXianUserSysCategory() {
50 List<TreeModel> res = new ArrayList<TreeModel>();
51
52 List<SysCategory> quXianUserSysCategory = sysDepartCategoryMapper.getQuXianUserSysCategory(UserUtil.getUser().getOrgCode());// 查询一级目录
53 if(quXianUserSysCategory == null || quXianUserSysCategory.size() == 0) return res;
54
55 quXianUserSysCategory.forEach( category -> {
56 TreeModel tree = new TreeModel( category.getId(), "0".equals(category.getPid()) ? null : category.getPid(), category.getName(), "1".equals( category.getHasChild() ) ? false : true, true);
57 getChildData(tree);
58 res.add(tree);
59 });
60
61
62 return res;
63 }
64
65 private void getChildData(TreeModel tree){
66
67 List<SysCategory> sysCategories = sysCategoryMapper.selectByPidWithWrite(tree.getKey());
68 if( sysCategories != null && sysCategories.size() >0){
69
70 sysCategories.forEach( category -> {
71 TreeModel model = new TreeModel(category.getId(), "0".equals(category.getPid()) ? null : category.getPid(), category.getName(), "1".equals(category.getHasChild()) ? false : true);
72 getChildData(model);
73 tree.getChildren().add( model );
74 });
75 }
76 }
77
78
79 /**
80 * 从diff中找出main中没有的元素
81 * @param main
82 * @param diff
83 * @return
84 */
85 private List<String> getDiff(String main, String diff){
86 if(oConvertUtils.isEmpty(diff)) {
87 return null;
88 }
89 if(oConvertUtils.isEmpty(main)) {
90 return Arrays.asList(diff.split(","));
91 }
92
93 String[] mainArr = main.split(",");
94 String[] diffArr = diff.split(",");
95 Map<String, Integer> map = new HashMap<>();
96 for (String string : mainArr) {
97 map.put(string, 1);
98 }
99 List<String> res = new ArrayList<String>();
100 for (String key : diffArr) {
101 if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) {
102 res.add(key);
103 }
104 }
105 return res;
106 }
107 }
1 package brain.base.support.biz.graphreport.entity;
2
3 import lombok.Data;
4
5 import javax.validation.constraints.NotEmpty;
6
7 /**
8 * 图形报表配置信息
9 *
10 * @author gaopan
11 */
12 @Data
13 public class GraphHead {
14
15 @NotEmpty(message = "id不能为空")
16 private String id;
17
18 @NotEmpty(message = "code不能为空")
19 private String code;
20
21 @NotEmpty(message = "name不能为空")
22 private String name;
23
24 @NotEmpty(message = "dataType不能为空")
25 private String dataType;
26
27 private String dataSource;
28
29 @NotEmpty(message = "body不能为空")
30 private String body;
31
32 public GraphHead() {
33 }
34
35 public GraphHead(@NotEmpty(message = "id不能为空") String id, @NotEmpty(message = "code不能为空") String code, @NotEmpty(message = "name不能为空") String name, @NotEmpty(message = "dataType不能为空") String dataType, String dataSource, @NotEmpty(message = "body不能为空") String body) {
36 this.id = id;
37 this.code = code;
38 this.name = name;
39 this.dataType = dataType;
40 this.dataSource = dataSource;
41 this.body = body;
42 }
43 }
1 package brain.base.support.biz.graphreport.exception;
2
3 public class GraphreportDataSourceException extends RuntimeException {
4
5 public GraphreportDataSourceException() {
6 }
7
8 public GraphreportDataSourceException(String message) {
9 super(message);
10 }
11
12 public GraphreportDataSourceException(String message, Throwable cause) {
13 super(message, cause);
14 }
15
16 public GraphreportDataSourceException(Throwable cause) {
17 super(cause);
18 }
19
20 public GraphreportDataSourceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
21 super(message, cause, enableSuppression, writableStackTrace);
22 }
23
24 }
1 package brain.base.support.biz.graphreport.exception;
2
3 /**
4 * @author gaopan
5 */
6 public class GraphreportException extends RuntimeException {
7
8 public GraphreportException() {
9 }
10
11 public GraphreportException(String message) {
12 super(message);
13 }
14
15 public GraphreportException(String message, Throwable cause) {
16 super(message, cause);
17 }
18
19 public GraphreportException(Throwable cause) {
20 super(cause);
21 }
22
23 public GraphreportException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
24 super(message, cause, enableSuppression, writableStackTrace);
25 }
26
27 }
1 package brain.base.support.biz.graphreport.handle;
2
3
4 import brain.base.support.biz.graphreport.entity.GraphHead;
5 import brain.base.support.biz.graphreport.type.DataType;
6 import brain.base.support.biz.graphreport.vo.GraphData;
7
8 import java.util.List;
9 import java.util.Map;
10
11 /**
12 * @author gaopan
13 */
14 public interface GenerateGraphHandle {
15
16 /**
17 * 判断是否是当前类处理
18 *
19 * @param type
20 * @return
21 */
22 boolean isSupport(DataType type);
23
24 /**
25 * 生成图形报表数据
26 *
27 * @param head
28 * @param param
29 * @return
30 */
31 List<GraphData> generateGraph(GraphHead head, Map<String, Object> param);
32
33 }
1 package brain.base.support.biz.graphreport.handle.impl;
2
3 import brain.base.support.biz.graphreport.entity.GraphHead;
4 import brain.base.support.biz.graphreport.handle.GenerateGraphHandle;
5 import brain.base.support.biz.graphreport.type.DataType;
6 import brain.base.support.biz.graphreport.vo.GraphData;
7 import com.alibaba.fastjson.JSONObject;
8 import org.springframework.stereotype.Component;
9
10 import java.util.List;
11 import java.util.Map;
12
13 /**
14 * @author gaopan
15 */
16 @Component
17 public class JsonGenerateGraphHandle implements GenerateGraphHandle {
18 @Override
19 public boolean isSupport(DataType type) {
20 return DataType.JSON.equals(type);
21 }
22
23 @Override
24 public List<GraphData> generateGraph(GraphHead head, Map<String, Object> param) {
25 String json = head.getBody();
26 List<GraphData> result = JSONObject.parseArray(json, GraphData.class);
27 return result;
28 }
29 }
1 package brain.base.support.biz.graphreport.handle.impl;
2
3 import brain.base.support.biz.graphreport.entity.GraphHead;
4 import brain.base.support.biz.graphreport.exception.GraphreportException;
5 import brain.base.support.biz.graphreport.handle.GenerateGraphHandle;
6 import brain.base.support.biz.graphreport.type.DataType;
7 import brain.base.support.biz.graphreport.vo.GraphData;
8 import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
9 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.jdbc.BadSqlGrammarException;
12 import org.springframework.jdbc.core.BeanPropertyRowMapper;
13 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
14 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
15 import org.springframework.stereotype.Component;
16 import org.springframework.util.CollectionUtils;
17 import org.springframework.util.StringUtils;
18
19 import javax.sql.DataSource;
20 import java.sql.SQLException;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24
25 /**
26 * @author gaopan
27 */
28 @Component
29 public class SqlGenerateGraphHandle implements GenerateGraphHandle {
30
31
32 private DataSource dataSource;
33
34 @Override
35 public boolean isSupport(DataType type) {
36 return DataType.SQL.equals(type);
37 }
38
39 /**
40 * 查询数据
41 *
42 * @param head
43 * @param param
44 * @return
45 */
46 @Override
47 public List<GraphData> generateGraph(GraphHead head, Map<String, Object> param) {
48 String sql = head.getBody();
49 try {
50 List<GraphData> data = this.getJdbcTemplate(head.getDataSource()).query(sql, param, new BeanPropertyRowMapper(GraphData.class));
51 return data;
52 }catch (BadSqlGrammarException e){
53 throw new GraphreportException(String.format("sql或者查询参数不正确!%s",e.getMessage()),e);
54 }
55 }
56
57 /**
58 * 根据数据源名称获取JdbcTemplate,后面有空再抽出去写
59 *
60 * @param dataSourceName
61 * @return
62 */
63 private NamedParameterJdbcTemplate getJdbcTemplate(String dataSourceName) {
64 if(!StringUtils.isEmpty(dataSourceName)){
65 DynamicDataSourceContextHolder.push(dataSourceName);
66 }
67 return new NamedParameterJdbcTemplate(dataSource);
68
69
70 }
71
72 /**
73 * 设置数据源创建jdbcTemplate
74 *
75 * @param dataSource
76 */
77 @Autowired
78 public void setDataSource(List<DataSource> dataSource) {
79 dataSource.forEach(ds->{
80
81 //如果是spring多数据源或者mybatis多数据源则使用多数据源dataSource,用于数据源切换
82 if(ds instanceof AbstractRoutingDataSource){
83 this.dataSource = ds;
84 }
85 });
86 if(this.dataSource==null){
87 this.dataSource = dataSource.get(0);
88 }
89 }
90
91 }
1 package brain.base.support.biz.graphreport.service;
2
3
4 import brain.base.support.biz.graphreport.vo.GraphResult;
5
6 import javax.validation.constraints.NotEmpty;
7 import java.util.Map;
8
9 /**
10 * @author gaopan
11 */
12 public interface GraphreportService {
13
14 /**
15 * 获取图表需要的数据
16 *
17 * @param code 获取配置的主键
18 * @param param 查询参数
19 * @return
20 */
21 GraphResult getChartsData(@NotEmpty String code, Map<String, Object> param);
22
23 }
1 package brain.base.support.biz.graphreport.service.impl;
2
3 import brain.base.support.biz.graphreport.entity.GraphHead;
4 import brain.base.support.biz.graphreport.exception.GraphreportException;
5 import brain.base.support.biz.graphreport.handle.GenerateGraphHandle;
6 import brain.base.support.biz.graphreport.service.GraphreportService;
7 import brain.base.support.biz.graphreport.type.DataType;
8 import brain.base.support.biz.graphreport.vo.GraphData;
9 import brain.base.support.biz.graphreport.vo.GraphResult;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Service;
12
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.Map;
16 import java.util.Optional;
17
18 /**
19 * @author gaopan
20 */
21 @Service
22 public class GraphreportServiceImpl implements GraphreportService {
23
24 @Autowired
25 private List<GenerateGraphHandle> generateGraphHandles;
26
27 @Override
28 public GraphResult getChartsData(String code, Map<String, Object> param) {
29
30 GraphHead head = this.getGraphHead(code);
31 if (head == null) {
32 throw new GraphreportException(String.format("通过key:%s无法查询到配置信息!", code));
33 }
34 GenerateGraphHandle handle = this.getGraphHandles(head.getDataType());
35 if (handle == null) {
36 throw new GraphreportException(String.format("没有可以处理%s类型的方法!", head.getDataType()));
37 }
38 List<GraphData> data = handle.generateGraph(head, param);
39
40 return new GraphResult(head, data);
41 }
42
43 /**
44 * 获取配置,暂未写完,可以改成从数据库读取
45 * @param code
46 * @return
47 */
48 private GraphHead getGraphHead(String code) {
49
50 List<GraphHead> list = new ArrayList<>();
51
52 //TODO start 测试
53 GraphHead head = new GraphHead("1","testJson","测试json", DataType.JSON.getCode(),null,"[{\"name\":\"星期一\",\"value\":2330},{\"name\":\"星期二\",\"value\":2440}]");
54 GraphHead head2 = new GraphHead("2","testSql","测试sql",DataType.SQL.getCode(),"db2","select town as name,count(1) as value from cangnan where smid=cast(:id as int) group by town");
55 list.add(head);
56 list.add(head2);
57 //TODO end
58
59 Optional<GraphHead> optional = list.stream().filter(h->code.equals(h.getCode())).findFirst();
60 return optional.isEmpty()?null:optional.get();
61 }
62
63 private GenerateGraphHandle getGraphHandles(String type) {
64 for (GenerateGraphHandle handle : generateGraphHandles) {
65 if (handle.isSupport(DataType.getByCode(type))) {
66 return handle;
67 }
68 }
69 return null;
70 }
71
72 }
1 package brain.base.support.biz.graphreport.type;
2
3 /**
4 * 图形报表数据源类型
5 *
6 * @author gaopan
7 */
8 public enum DataType {
9
10 SQL("sql"),
11 JSON("json");
12
13 private String code;
14
15 DataType(String code) {
16 this.code = code;
17 }
18
19 public static DataType getByCode(String code) {
20 for (DataType dataType : values()) {
21 if (dataType.code.equals(code)) {
22 return dataType;
23 }
24 }
25 return null;
26 }
27
28 public String getCode() {
29 return code;
30 }
31
32 }
1 package brain.base.support.biz.graphreport.vo;
2
3 import lombok.Data;
4
5 /**
6 * 图形报表图表数据
7 *
8 * @author gaopan
9 */
10 @Data
11 public class GraphData {
12
13 private String code;
14
15 private String name;
16
17 private String value;
18
19 }
1 package brain.base.support.biz.graphreport.vo;
2
3 import brain.base.support.biz.graphreport.entity.GraphHead;
4 import lombok.Data;
5
6 import java.util.List;
7
8 /**
9 * 图形报表结果
10 *
11 * @author gaopan
12 */
13 @Data
14 public class GraphResult {
15
16 private GraphHead head;
17
18 private List<GraphData> data;
19
20 public GraphResult() {
21 }
22
23 public GraphResult(GraphHead head, List<GraphData> data) {
24 this.head = head;
25 this.data = data;
26 }
27
28 }
1 package brain.base.support.biz.message.entity;
2
3 import lombok.Data;
4
5 import java.io.Serializable;
6
7 /**
8 * 发送消息实体
9 */
10 @Data
11 public class MsgParams implements Serializable {
12
13 private static final long serialVersionUID = 1L;
14 /*消息类型*/
15 private String msgType;
16 /*消息接收方*/
17 private String receiver;
18 /*消息模板码*/
19 private String templateCode;
20 /*测试数据*/
21 private String testData;
22
23 }
1 package brain.base.support.biz.message.entity;
2
3 import brain.common.annotation.Dict;
4 import brain.common.system.base.entity.JeecgEntity;
5 import com.baomidou.mybatisplus.annotation.TableName;
6 import com.fasterxml.jackson.annotation.JsonFormat;
7 import lombok.Data;
8 import lombok.EqualsAndHashCode;
9 import lombok.experimental.Accessors;
10 import org.jeecgframework.poi.excel.annotation.Excel;
11 import org.springframework.format.annotation.DateTimeFormat;
12
13 /**
14 * @Description: 消息
15 * @Author: jeecg-boot
16 * @Date: 2019-04-09
17 * @Version: V1.0
18 */
19 @Data
20 @EqualsAndHashCode(callSuper = false)
21 @Accessors(chain = true)
22 @TableName("sys_sms")
23 public class SysMessage extends JeecgEntity {
24 /**推送内容*/
25 @Excel(name = "推送内容", width = 15)
26 private String esContent;
27 /**推送所需参数Json格式*/
28 @Excel(name = "推送所需参数Json格式", width = 15)
29 private String esParam;
30 /**接收人*/
31 @Excel(name = "接收人", width = 15)
32 private String esReceiver;
33 /**推送失败原因*/
34 @Excel(name = "推送失败原因", width = 15)
35 private String esResult;
36 /**发送次数*/
37 @Excel(name = "发送次数", width = 15)
38 private Integer esSendNum;
39 /**推送状态 0未推送 1推送成功 2推送失败*/
40 @Excel(name = "推送状态 0未推送 1推送成功 2推送失败", width = 15)
41 @Dict(dicCode = "msgSendStatus")
42 private String esSendStatus;
43 /**推送时间*/
44 @Excel(name = "推送时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
45 @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
46 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
47 private java.util.Date esSendTime;
48 /**消息标题*/
49 @Excel(name = "消息标题", width = 15)
50 private String esTitle;
51 /**推送方式:1短信 2邮件 3微信*/
52 @Excel(name = "推送方式:1短信 2邮件 3微信", width = 15)
53 @Dict(dicCode = "msgType")
54 private String esType;
55 /**备注*/
56 @Excel(name = "备注", width = 15)
57 private String remark;
58 }
1 package brain.base.support.biz.message.entity;
2
3 import brain.common.system.base.entity.JeecgEntity;
4 import com.baomidou.mybatisplus.annotation.TableName;
5 import lombok.Data;
6 import lombok.EqualsAndHashCode;
7 import lombok.experimental.Accessors;
8 import org.jeecgframework.poi.excel.annotation.Excel;
9
10 /**
11 * @Description: 消息模板
12 * @Author: jeecg-boot
13 * @Date: 2019-04-09
14 * @Version: V1.0
15 */
16 @Data
17 @EqualsAndHashCode(callSuper = false)
18 @Accessors(chain = true)
19 @TableName("sys_sms_template")
20 public class SysMessageTemplate extends JeecgEntity {
21 /**模板CODE*/
22 @Excel(name = "模板CODE", width = 15)
23 private String templateCode;
24 /**模板标题*/
25 @Excel(name = "模板标题", width = 30)
26 private String templateName;
27 /**模板内容*/
28 @Excel(name = "模板内容", width = 50)
29 private String templateContent;
30 /**模板测试json*/
31 @Excel(name = "模板测试json", width = 15)
32 private String templateTestJson;
33 /**模板类型*/
34 @Excel(name = "模板类型", width = 15)
35 private String templateType;
36 }
1 package brain.base.support.biz.message.handle;
2
3 public interface ISendMsgHandle {
4
5 void SendMsg(String es_receiver, String es_title, String es_content);
6 }
1 package brain.base.support.biz.message.handle.enums;
2
3 /**
4 * 推送状态枚举
5 */
6 public enum SendMsgStatusEnum {
7
8 //推送状态 0未推送 1推送成功 2推送失败
9 WAIT("0"), SUCCESS("1"), FAIL("2");
10
11 private String code;
12
13 private SendMsgStatusEnum(String code) {
14 this.code = code;
15 }
16
17 public String getCode() {
18 return code;
19 }
20
21 public void setStatusCode(String code) {
22 this.code = code;
23 }
24
25 }
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.message.handle.enums;
2
3
4 import brain.common.util.oConvertUtils;
5
6 /**
7 * 发送消息类型枚举
8 */
9 public enum SendMsgTypeEnum {
10
11 //推送方式:1短信 2邮件 3微信
12 SMS("1", "brain.base.support.biz.message.handle.impl.SmsSendMsgHandle"),
13 EMAIL("2", "brain.base.support.biz.message.handle.impl.EmailSendMsgHandle"),
14 WX("3","brain.base.support.biz.message.handle.impl.WxSendMsgHandle");
15
16 private String type;
17
18 private String implClass;
19
20 private SendMsgTypeEnum(String type, String implClass) {
21 this.type = type;
22 this.implClass = implClass;
23 }
24
25 public String getType() {
26 return type;
27 }
28
29 public void setType(String type) {
30 this.type = type;
31 }
32
33 public String getImplClass() {
34 return implClass;
35 }
36
37 public void setImplClass(String implClass) {
38 this.implClass = implClass;
39 }
40
41 public static SendMsgTypeEnum getByType(String type) {
42 if (oConvertUtils.isEmpty(type)) {
43 return null;
44 }
45 for (SendMsgTypeEnum val : values()) {
46 if (val.getType().equals(type)) {
47 return val;
48 }
49 }
50 return null;
51 }
52 }
1 package brain.base.support.biz.message.handle.impl;
2
3 import brain.base.support.biz.message.handle.ISendMsgHandle;
4 import brain.common.util.SpringContextUtils;
5 import org.springframework.mail.SimpleMailMessage;
6 import org.springframework.mail.javamail.JavaMailSender;
7
8 public class EmailSendMsgHandle implements ISendMsgHandle {
9
10 @Override
11 public void SendMsg(String es_receiver, String es_title, String es_content) {
12 JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");
13 SimpleMailMessage message = new SimpleMailMessage();
14 // 设置发送方邮箱地址
15 message.setFrom("2897976540@qq.com");
16 message.setTo(es_receiver);
17 message.setSubject(es_title);
18 message.setText(es_content);
19 mailSender.send(message);
20
21 }
22 }
1 package brain.base.support.biz.message.handle.impl;
2
3
4 import brain.base.support.biz.message.handle.ISendMsgHandle;
5
6 public class SmsSendMsgHandle implements ISendMsgHandle {
7
8 @Override
9 public void SendMsg(String es_receiver, String es_title, String es_content) {
10 // TODO Auto-generated method stub
11 System.out.println("发短信");
12 }
13
14 }
1 package brain.base.support.biz.message.handle.impl;
2
3
4 import brain.base.support.biz.message.handle.ISendMsgHandle;
5
6 public class WxSendMsgHandle implements ISendMsgHandle {
7
8 @Override
9 public void SendMsg(String es_receiver, String es_title, String es_content) {
10 // TODO Auto-generated method stub
11 System.out.println("发微信消息模板");
12 }
13
14 }
1 package brain.base.support.biz.message.job;
2
3 import brain.base.support.biz.message.entity.SysMessage;
4 import brain.base.support.biz.message.handle.ISendMsgHandle;
5 import brain.base.support.biz.message.handle.enums.SendMsgStatusEnum;
6 import brain.base.support.biz.message.handle.enums.SendMsgTypeEnum;
7 import brain.base.support.biz.message.service.ISysMessageService;
8 import brain.common.util.DateUtils;
9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 import lombok.extern.slf4j.Slf4j;
11 import org.quartz.Job;
12 import org.quartz.JobExecutionContext;
13 import org.quartz.JobExecutionException;
14 import org.springframework.beans.factory.annotation.Autowired;
15
16 import java.util.List;
17
18 /**
19 * 发送消息任务
20 */
21
22 @Slf4j
23 public class SendMsgJob implements Job {
24
25 @Autowired
26 private ISysMessageService sysMessageService;
27
28 @Override
29 public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
30
31 log.info(String.format(" Jeecg-Boot 发送消息任务 SendMsgJob ! 时间:" + DateUtils.getTimestamp()));
32
33 // 1.读取消息中心数据,只查询未发送的和发送失败不超过次数的
34 QueryWrapper<SysMessage> queryWrapper = new QueryWrapper<SysMessage>();
35 queryWrapper.eq("es_send_status", SendMsgStatusEnum.WAIT.getCode())
36 .or(i -> i.eq("es_send_status", SendMsgStatusEnum.FAIL.getCode()).lt("es_send_num", 6));
37 List<SysMessage> sysMessages = sysMessageService.list(queryWrapper);
38 System.out.println(sysMessages);
39 // 2.根据不同的类型走不通的发送实现类
40 for (SysMessage sysMessage : sysMessages) {
41 ISendMsgHandle sendMsgHandle = null;
42 try {
43 if (sysMessage.getEsType().equals(SendMsgTypeEnum.EMAIL.getType())) {
44 sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.EMAIL.getImplClass()).newInstance();
45 } else if (sysMessage.getEsType().equals(SendMsgTypeEnum.SMS.getType())) {
46 sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.SMS.getImplClass()).newInstance();
47 } else if (sysMessage.getEsType().equals(SendMsgTypeEnum.WX.getType())) {
48 sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.WX.getImplClass()).newInstance();
49 }
50 } catch (Exception e) {
51 log.error(e.getMessage(),e);
52 }
53 Integer sendNum = sysMessage.getEsSendNum();
54 try {
55 sendMsgHandle.SendMsg(sysMessage.getEsReceiver(), sysMessage.getEsTitle(),
56 sysMessage.getEsContent().toString());
57 // 发送消息成功
58 sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode());
59 } catch (Exception e) {
60 // 发送消息出现异常
61 sysMessage.setEsSendStatus(SendMsgStatusEnum.FAIL.getCode());
62 }
63 sysMessage.setEsSendNum(++sendNum);
64 // 发送结果回写到数据库
65 sysMessageService.updateById(sysMessage);
66 }
67
68 }
69
70 }
1 package brain.base.support.biz.message.mapper;
2
3
4 import brain.base.support.biz.message.entity.SysMessage;
5 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6
7 /**
8 * @Description: 消息
9 * @Author: jeecg-boot
10 * @Date: 2019-04-09
11 * @Version: V1.0
12 */
13 public interface SysMessageMapper extends BaseMapper<SysMessage> {
14
15 }
1 package brain.base.support.biz.message.mapper;
2
3 import brain.base.support.biz.message.entity.SysMessageTemplate;
4 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 import org.apache.ibatis.annotations.Select;
6
7 import java.util.List;
8
9 /**
10 * @Description: 消息模板
11 * @Author: jeecg-boot
12 * @Date: 2019-04-09
13 * @Version: V1.0
14 */
15 public interface SysMessageTemplateMapper extends BaseMapper<SysMessageTemplate> {
16 @Select("SELECT * FROM SYS_SMS_TEMPLATE WHERE TEMPLATE_CODE = #{code}")
17 List<SysMessageTemplate> selectByCode(String code);
18 }
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.message.mapper.SysMessageMapper">
4
5 </mapper>
...\ No newline at end of file ...\ No newline at end of file
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.message.mapper.SysMessageTemplateMapper">
4
5 </mapper>
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.message.service;
2
3
4 import brain.base.support.biz.message.entity.SysMessage;
5 import brain.common.system.base.service.JeecgService;
6
7 /**
8 * @Description: 消息
9 * @Author: jeecg-boot
10 * @Date: 2019-04-09
11 * @Version: V1.0
12 */
13 public interface ISysMessageService extends JeecgService<SysMessage> {
14
15 }
1 package brain.base.support.biz.message.service;
2
3
4 import brain.base.support.biz.message.entity.SysMessageTemplate;
5 import brain.common.system.base.service.JeecgService;
6
7 import java.util.List;
8
9 /**
10 * @Description: 消息模板
11 * @Author: jeecg-boot
12 * @Date: 2019-04-09
13 * @Version: V1.0
14 */
15 public interface ISysMessageTemplateService extends JeecgService<SysMessageTemplate> {
16 List<SysMessageTemplate> selectByCode(String code);
17 }
1 package brain.base.support.biz.message.service.impl;
2
3 import brain.base.support.biz.message.entity.SysMessage;
4 import brain.base.support.biz.message.mapper.SysMessageMapper;
5 import brain.base.support.biz.message.service.ISysMessageService;
6 import brain.common.system.base.service.impl.JeecgServiceImpl;
7 import org.springframework.stereotype.Service;
8
9 /**
10 * @Description: 消息
11 * @Author: jeecg-boot
12 * @Date: 2019-04-09
13 * @Version: V1.0
14 */
15 @Service
16 public class SysMessageServiceImpl extends JeecgServiceImpl<SysMessageMapper, SysMessage> implements ISysMessageService {
17
18 }
1 package brain.base.support.biz.message.service.impl;
2
3 import brain.base.support.biz.message.entity.SysMessageTemplate;
4 import brain.base.support.biz.message.mapper.SysMessageTemplateMapper;
5 import brain.base.support.biz.message.service.ISysMessageTemplateService;
6 import brain.common.system.base.service.impl.JeecgServiceImpl;
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.stereotype.Service;
9
10 import java.util.List;
11
12 /**
13 * @Description: 消息模板
14 * @Author: jeecg-boot
15 * @Date: 2019-04-09
16 * @Version: V1.0
17 */
18 @Service
19 public class SysMessageTemplateServiceImpl extends JeecgServiceImpl<SysMessageTemplateMapper, SysMessageTemplate> implements ISysMessageTemplateService {
20
21 @Autowired
22 private SysMessageTemplateMapper sysMessageTemplateMapper;
23
24
25 @Override
26 public List<SysMessageTemplate> selectByCode(String code) {
27 return sysMessageTemplateMapper.selectByCode(code);
28 }
29 }
1 package brain.base.support.biz.message.util;
2
3 import brain.base.support.biz.message.entity.SysMessage;
4 import brain.base.support.biz.message.entity.SysMessageTemplate;
5 import brain.base.support.biz.message.handle.enums.SendMsgStatusEnum;
6 import brain.base.support.biz.message.service.ISysMessageService;
7 import brain.base.support.biz.message.service.ISysMessageTemplateService;
8 import com.alibaba.fastjson.JSONObject;
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.stereotype.Component;
11
12 import java.util.Date;
13 import java.util.List;
14 import java.util.Map;
15
16 /**
17 * 消息生成工具
18 */
19
20 @Component
21 public class PushMsgUtil {
22
23 @Autowired
24 private ISysMessageService sysMessageService;
25
26 @Autowired
27 private ISysMessageTemplateService sysMessageTemplateService;
28
29 /**
30 * @param msgType 消息类型 1短信 2邮件 3微信
31 * @param templateCode 消息模板码
32 * @param map 消息参数
33 * @param sentTo 接收消息方
34 */
35 public boolean sendMessage(String msgType, String templateCode, Map<String, String> map, String sentTo) {
36 List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
37 SysMessage sysMessage = new SysMessage();
38 if (sysSmsTemplates.size() > 0) {
39 SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
40 sysMessage.setEsType(msgType);
41 sysMessage.setEsReceiver(sentTo);
42 //模板标题
43 String title = sysSmsTemplate.getTemplateName();
44 //模板内容
45 String content = sysSmsTemplate.getTemplateContent();
46 if(map!=null) {
47 for (Map.Entry<String, String> entry : map.entrySet()) {
48 String str = "${" + entry.getKey() + "}";
49 title = title.replace(str, entry.getValue());
50 content = content.replace(str, entry.getValue());
51 }
52 }
53 sysMessage.setEsTitle(title);
54 sysMessage.setEsContent(content);
55 sysMessage.setEsParam(JSONObject.toJSONString(map));
56 sysMessage.setEsSendTime(new Date());
57 sysMessage.setEsSendStatus(SendMsgStatusEnum.WAIT.getCode());
58 sysMessage.setEsSendNum(0);
59 if(sysMessageService.save(sysMessage)) {
60 return true;
61 }
62 }
63 return false;
64 }
65 }
1 package brain.base.support.biz.message.websocket;
2
3 import brain.common.vo.Result;
4 import com.alibaba.fastjson.JSONObject;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.web.bind.annotation.PostMapping;
7 import org.springframework.web.bind.annotation.RequestBody;
8 import org.springframework.web.bind.annotation.RequestMapping;
9 import org.springframework.web.bind.annotation.RestController;
10
11 @RestController
12 @RequestMapping("webSocketApi")
13 public class TestController {
14
15 @Autowired
16 private WebSocket webSocket;
17
18 @PostMapping("/sendAll")
19 public Result<String> sendAll(@RequestBody JSONObject jsonObject) {
20 Result<String> result = new Result<String>();
21 String message = jsonObject.getString("message");
22 JSONObject obj = new JSONObject();
23 obj.put("cmd", "topic");
24 obj.put("msgId", "M0001");
25 obj.put("msgTxt", message);
26 webSocket.sendAllMessage(obj.toJSONString());
27 result.setResult("群发!");
28 return result;
29 }
30
31 @PostMapping("/sendUser")
32 public Result<String> sendUser(@RequestBody JSONObject jsonObject) {
33 Result<String> result = new Result<String>();
34 String userId = jsonObject.getString("userId");
35 String message = jsonObject.getString("message");
36 JSONObject obj = new JSONObject();
37 obj.put("cmd", "user");
38 obj.put("userId", userId);
39 obj.put("msgId", "M0001");
40 obj.put("msgTxt", message);
41 webSocket.sendOneMessage(userId, obj.toJSONString());
42 result.setResult("单发");
43 return result;
44 }
45
46 }
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.message.websocket;
2
3 import lombok.extern.slf4j.Slf4j;
4 import org.springframework.stereotype.Component;
5
6 import javax.websocket.OnClose;
7 import javax.websocket.OnMessage;
8 import javax.websocket.OnOpen;
9 import javax.websocket.Session;
10 import javax.websocket.server.PathParam;
11 import javax.websocket.server.ServerEndpoint;
12 import java.util.HashMap;
13 import java.util.Map;
14 import java.util.concurrent.CopyOnWriteArraySet;
15
16 @Component
17 @Slf4j
18 @ServerEndpoint("/websocket/{userId}")
19 //此注解相当于设置访问URL
20 public class WebSocket {
21
22 private Session session;
23
24 private static CopyOnWriteArraySet<WebSocket> webSockets =new CopyOnWriteArraySet<>();
25 private static Map<String, Session> sessionPool = new HashMap<String, Session>();
26
27 @OnOpen
28 public void onOpen(Session session, @PathParam(value="userId") String userId) {
29 try {
30 this.session = session;
31 webSockets.add(this);
32 sessionPool.put(userId, session);
33 log.info("【websocket消息】有新的连接,总数为:"+webSockets.size());
34 } catch (Exception e) {
35 }
36 }
37
38 @OnClose
39 public void onClose() {
40 try {
41 webSockets.remove(this);
42 log.info("【websocket消息】连接断开,总数为:"+webSockets.size());
43 } catch (Exception e) {
44 }
45 }
46
47 @OnMessage
48 public void onMessage(String message) {
49 log.info("【websocket消息】收到客户端消息:"+message);
50 }
51
52 // 此为广播消息
53 public void sendAllMessage(String message) {
54 log.info("【websocket消息】广播消息:"+message);
55 for(WebSocket webSocket : webSockets) {
56 try {
57 if(webSocket.session.isOpen()) {
58 webSocket.session.getAsyncRemote().sendText(message);
59 }
60 } catch (Exception e) {
61 e.printStackTrace();
62 }
63 }
64 }
65
66 // 此为单点消息
67 public void sendOneMessage(String userId, String message) {
68 Session session = sessionPool.get(userId);
69 if (session != null&&session.isOpen()) {
70 try {
71 log.info("【websocket消息】 单点消息:"+message);
72 session.getAsyncRemote().sendText(message);
73 } catch (Exception e) {
74 e.printStackTrace();
75 }
76 }
77 }
78
79 // 此为单点消息(多人)
80 public void sendMoreMessage(String[] userIds, String message) {
81 for(String userId:userIds) {
82 Session session = sessionPool.get(userId);
83 if (session != null&&session.isOpen()) {
84 try {
85 log.info("【websocket消息】 单点消息:"+message);
86 session.getAsyncRemote().sendText(message);
87 } catch (Exception e) {
88 e.printStackTrace();
89 }
90 }
91 }
92
93 }
94
95 }
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.monitor.domain;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 public class RedisInfo {
7
8 private static Map<String, String> map = new HashMap<>();
9
10 static {
11 map.put("redis_version", "Redis 服务器版本");
12 map.put("redis_git_sha1", "Git SHA1");
13 map.put("redis_git_dirty", "Git dirty flag");
14 map.put("os", "Redis 服务器的宿主操作系统");
15 map.put("arch_bits", " 架构(32 或 64 位)");
16 map.put("multiplexing_api", "Redis 所使用的事件处理机制");
17 map.put("gcc_version", "编译 Redis 时所使用的 GCC 版本");
18 map.put("process_id", "服务器进程的 PID");
19 map.put("run_id", "Redis 服务器的随机标识符(用于 Sentinel 和集群)");
20 map.put("tcp_port", "TCP/IP 监听端口");
21 map.put("uptime_in_seconds", "自 Redis 服务器启动以来,经过的秒数");
22 map.put("uptime_in_days", "自 Redis 服务器启动以来,经过的天数");
23 map.put("lru_clock", " 以分钟为单位进行自增的时钟,用于 LRU 管理");
24 map.put("connected_clients", "已连接客户端的数量(不包括通过从属服务器连接的客户端)");
25 map.put("client_longest_output_list", "当前连接的客户端当中,最长的输出列表");
26 map.put("client_longest_input_buf", "当前连接的客户端当中,最大输入缓存");
27 map.put("blocked_clients", "正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量");
28 map.put("used_memory", "由 Redis 分配器分配的内存总量,以字节(byte)为单位");
29 map.put("used_memory_human", "以人类可读的格式返回 Redis 分配的内存总量");
30 map.put("used_memory_rss", "从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致");
31 map.put("used_memory_peak", " Redis 的内存消耗峰值(以字节为单位)");
32 map.put("used_memory_peak_human", "以人类可读的格式返回 Redis 的内存消耗峰值");
33 map.put("used_memory_lua", "Lua 引擎所使用的内存大小(以字节为单位)");
34 map.put("mem_fragmentation_ratio", "sed_memory_rss 和 used_memory 之间的比率");
35 map.put("mem_allocator", "在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc");
36
37 map.put("redis_build_id", "redis_build_id");
38 map.put("redis_mode", "运行模式,单机(standalone)或者集群(cluster)");
39 map.put("atomicvar_api", "atomicvar_api");
40 map.put("hz", "redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。");
41 map.put("executable", "server脚本目录");
42 map.put("config_file", "配置文件目录");
43 map.put("client_biggest_input_buf", "当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值");
44 map.put("used_memory_rss_human", "以人类可读的方式返回 Redis 已分配的内存总量");
45 map.put("used_memory_peak_perc", "内存使用率峰值");
46 map.put("total_system_memory", "系统总内存");
47 map.put("total_system_memory_human", "以人类可读的方式返回系统总内存");
48 map.put("used_memory_lua_human", "以人类可读的方式返回Lua 引擎所使用的内存大小");
49 map.put("maxmemory", "最大内存限制,0表示无限制");
50 map.put("maxmemory_human", "以人类可读的方式返回最大限制内存");
51 map.put("maxmemory_policy", "超过内存限制后的处理策略");
52 map.put("loading", "服务器是否正在载入持久化文件");
53 map.put("rdb_changes_since_last_save", "离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化");
54 map.put("rdb_bgsave_in_progress", "服务器是否正在创建rdb文件");
55 map.put("rdb_last_save_time", "离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件");
56 map.put("rdb_last_bgsave_status", "最近一次rdb持久化是否成功");
57 map.put("rdb_last_bgsave_time_sec", "最近一次成功生成rdb文件耗时秒数");
58 map.put("rdb_current_bgsave_time_sec", "如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数");
59 map.put("aof_enabled", "是否开启了aof");
60 map.put("aof_rewrite_in_progress", "标识aof的rewrite操作是否在进行中");
61 map.put("aof_rewrite_scheduled", "rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite ");
62
63 map.put("aof_last_rewrite_time_sec", "最近一次aof rewrite耗费的时长");
64 map.put("aof_current_rewrite_time_sec", "如果rewrite操作正在进行,则记录所使用的时间,单位秒");
65 map.put("aof_last_bgrewrite_status", "上次bgrewrite aof操作的状态");
66 map.put("aof_last_write_status", "上次aof写入状态");
67
68 map.put("total_commands_processed", "redis处理的命令数");
69 map.put("total_connections_received", "新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置");
70 map.put("instantaneous_ops_per_sec", "redis当前的qps,redis内部较实时的每秒执行的命令数");
71 map.put("total_net_input_bytes", "redis网络入口流量字节数");
72 map.put("total_net_output_bytes", "redis网络出口流量字节数");
73
74 map.put("instantaneous_input_kbps", "redis网络入口kps");
75 map.put("instantaneous_output_kbps", "redis网络出口kps");
76 map.put("rejected_connections", "拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数");
77 map.put("sync_full", "主从完全同步成功次数");
78
79 map.put("sync_partial_ok", "主从部分同步成功次数");
80 map.put("sync_partial_err", "主从部分同步失败次数");
81 map.put("expired_keys", "运行以来过期的key的数量");
82 map.put("evicted_keys", "运行以来剔除(超过了maxmemory后)的key的数量");
83 map.put("keyspace_hits", "命中次数");
84 map.put("keyspace_misses", "没命中次数");
85 map.put("pubsub_channels", "当前使用中的频道数量");
86 map.put("pubsub_patterns", "当前使用的模式的数量");
87 map.put("latest_fork_usec", "最近一次fork操作阻塞redis进程的耗时数,单位微秒");
88 map.put("role", "实例的角色,是master or slave");
89 map.put("connected_slaves", "连接的slave实例个数");
90 map.put("master_repl_offset", "主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟");
91 map.put("repl_backlog_active", "复制积压缓冲区是否开启");
92 map.put("repl_backlog_size", "复制积压缓冲大小");
93 map.put("repl_backlog_first_byte_offset", "复制缓冲区里偏移量的大小");
94 map.put("repl_backlog_histlen", "此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小");
95 map.put("used_cpu_sys", "将所有redis主进程在核心态所占用的CPU时求和累计起来");
96 map.put("used_cpu_user", "将所有redis主进程在用户态所占用的CPU时求和累计起来");
97 map.put("used_cpu_sys_children", "将后台进程在核心态所占用的CPU时求和累计起来");
98 map.put("used_cpu_user_children", "将后台进程在用户态所占用的CPU时求和累计起来");
99 map.put("cluster_enabled", "实例是否启用集群模式");
100 map.put("db0", "db0的key的数量,以及带有生存期的key的数,平均存活时间");
101
102 }
103
104 private String key;
105 private String value;
106 private String description;
107
108 public String getKey() {
109 return key;
110 }
111
112 public void setKey(String key) {
113 this.key = key;
114 this.description = map.get(this.key);
115 }
116
117 public String getValue() {
118 return value;
119 }
120
121 public void setValue(String value) {
122 this.value = value;
123 }
124
125 public String getDescription() {
126 return description;
127 }
128
129 public void setDescription(String description) {
130 this.description = description;
131 }
132
133 @Override
134 public String toString() {
135 return "RedisInfo{" + "key='" + key + '\'' + ", value='" + value + '\'' + ", desctiption='" + description + '\'' + '}';
136 }
137 }
1 package brain.base.support.biz.monitor.exception;
2
3 /**
4 * Redis 连接异常
5 */
6 public class RedisConnectException extends Exception {
7
8 private static final long serialVersionUID = 1639374111871115063L;
9
10 public RedisConnectException(String message) {
11 super(message);
12 }
13 }
1 package brain.base.support.biz.monitor.service;
2
3
4
5
6 import brain.base.support.biz.monitor.domain.RedisInfo;
7 import brain.base.support.biz.monitor.exception.RedisConnectException;
8
9 import java.util.List;
10 import java.util.Map;
11
12 public interface RedisService {
13
14 /**
15 * 获取 redis 的详细信息
16 *
17 * @return List
18 */
19 List<RedisInfo> getRedisInfo() throws RedisConnectException;
20
21 /**
22 * 获取 redis key 数量
23 *
24 * @return Map
25 */
26 Map<String, Object> getKeysSize() throws RedisConnectException;
27
28 /**
29 * 获取 redis 内存信息
30 *
31 * @return Map
32 */
33 Map<String, Object> getMemoryInfo() throws RedisConnectException;
34
35 }
1 package brain.base.support.biz.monitor.service.impl;
2
3 import org.springframework.boot.actuate.health.Health;
4 import org.springframework.boot.actuate.health.HealthIndicator;
5 import org.springframework.stereotype.Component;
6
7 /**
8 * 功能说明:自定义邮件检测
9 *
10 * @author: 李波
11 * @email: 503378406@qq.com
12 * @date: 2019-06-29
13 */
14 @Component
15 public class MailHealthIndicator implements HealthIndicator {
16
17
18 @Override
19 public Health health() {
20 int errorCode = check();
21 if (errorCode != 0) {
22 return Health.down().withDetail("Error Code", errorCode) .build();
23 }
24 return Health.up().build();
25 }
26 int check(){
27 //可以实现自定义的数据库检测逻辑
28 return 0;
29 }
30 }
1 package brain.base.support.biz.monitor.service.impl;
2
3 import brain.base.support.biz.monitor.domain.RedisInfo;
4 import brain.base.support.biz.monitor.exception.RedisConnectException;
5 import brain.base.support.biz.monitor.service.RedisService;
6 import brain.common.util.oConvertUtils;
7 import lombok.extern.slf4j.Slf4j;
8
9 import org.springframework.data.redis.connection.RedisConnectionFactory;
10 import org.springframework.stereotype.Service;
11
12 import javax.annotation.Resource;
13 import java.util.*;
14
15 /**
16 * Redis 监控信息获取
17 *
18 * @Author MrBird
19 */
20 @Service("redisService")
21 @Slf4j
22 public class RedisServiceImpl implements RedisService {
23
24 @Resource
25 private RedisConnectionFactory redisConnectionFactory;
26
27 /**
28 * Redis详细信息
29 */
30 @Override
31 public List<RedisInfo> getRedisInfo() throws RedisConnectException {
32 Properties info = redisConnectionFactory.getConnection().info();
33 List<RedisInfo> infoList = new ArrayList<>();
34 RedisInfo redisInfo = null;
35 for (Map.Entry<Object, Object> entry : info.entrySet()) {
36 redisInfo = new RedisInfo();
37 redisInfo.setKey(oConvertUtils.getString(entry.getKey()));
38 redisInfo.setValue(oConvertUtils.getString(entry.getValue()));
39 infoList.add(redisInfo);
40 }
41 return infoList;
42 }
43
44 @Override
45 public Map<String, Object> getKeysSize() throws RedisConnectException {
46 Long dbSize = redisConnectionFactory.getConnection().dbSize();
47 Map<String, Object> map = new HashMap<>();
48 map.put("create_time", System.currentTimeMillis());
49 map.put("dbSize", dbSize);
50
51 log.info("--getKeysSize--: " + map.toString());
52 return map;
53 }
54
55 @Override
56 public Map<String, Object> getMemoryInfo() throws RedisConnectException {
57 Map<String, Object> map = null;
58 Properties info = redisConnectionFactory.getConnection().info();
59 for (Map.Entry<Object, Object> entry : info.entrySet()) {
60 String key = oConvertUtils.getString(entry.getKey());
61 if ("used_memory".equals(key)) {
62 map = new HashMap<>();
63 map.put("used_memory", entry.getValue());
64 map.put("create_time", System.currentTimeMillis());
65 }
66 }
67 log.info("--getMemoryInfo--: " + map.toString());
68 return map;
69 }
70 }
1 package brain.base.support.biz.ngalain.aop;
2
3 import org.aspectj.lang.ProceedingJoinPoint;
4 import org.aspectj.lang.annotation.Around;
5 import org.aspectj.lang.annotation.Pointcut;
6 import org.slf4j.Logger;
7 import org.slf4j.LoggerFactory;
8 import org.springframework.web.context.request.RequestAttributes;
9 import org.springframework.web.context.request.RequestContextHolder;
10 import org.springframework.web.context.request.ServletRequestAttributes;
11
12 import javax.servlet.http.HttpServletRequest;
13
14 ;
15
16
17 // 暂时注释掉,提高系统性能
18 //@Aspect //定义一个切面
19 //@Configuration
20 public class LogRecordAspect {
21 private static final Logger logger = LoggerFactory.getLogger(LogRecordAspect.class);
22
23 // 定义切点Pointcut
24 @Pointcut("execution(public * org.jeecg.modules.*.*.*Controller.*(..))")
25 public void excudeService() {
26 }
27
28 @Around("excudeService()")
29 public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
30 RequestAttributes ra = RequestContextHolder.getRequestAttributes();
31 ServletRequestAttributes sra = (ServletRequestAttributes) ra;
32 HttpServletRequest request = sra.getRequest();
33
34 String url = request.getRequestURL().toString();
35 String method = request.getMethod();
36 String uri = request.getRequestURI();
37 String queryString = request.getQueryString();
38 logger.info("请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString);
39
40 // result的值就是被拦截方法的返回值
41 Object result = pjp.proceed();
42
43 logger.info("请求结束,controller的返回值是 " + result);
44 return result;
45 }
46 }
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.ngalain.mapper;
2
3 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 import org.apache.ibatis.annotations.Param;
5
6 import java.util.List;
7 import java.util.Map;
8
9 public interface NgAlainMapper extends BaseMapper {
10 public List<Map<String, String>> getDictByTable(@Param("table") String table, @Param("key") String key, @Param("value") String value);
11
12 }
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.ngalain.mapper.NgAlainMapper">
4 <select id="getDictByTable" parameterType="String" resultType="java.util.HashMap">
5 select ${key} as "label",${value} as "value" from ${table}
6 </select>
7 </mapper>
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.ngalain.service;
2
3 import com.alibaba.fastjson.JSONArray;
4
5 import java.util.List;
6 import java.util.Map;
7
8 public interface NgAlainService {
9 public JSONArray getMenu(String id) throws Exception;
10 public JSONArray getJeecgMenu(String id) throws Exception;
11 public List<Map<String, String>> getDictByTable(String table, String key, String value);
12 }
1 package brain.base.support.biz.ngalain.service.impl;
2
3 import brain.base.support.biz.ngalain.mapper.NgAlainMapper;
4 import brain.base.support.biz.ngalain.service.NgAlainService;
5 import brain.base.support.biz.system.entity.SysPermission;
6 import brain.base.support.biz.system.service.ISysPermissionService;
7 import brain.common.util.oConvertUtils;
8 import com.alibaba.fastjson.JSONArray;
9 import com.alibaba.fastjson.JSONObject;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.beans.factory.annotation.Value;
12 import org.springframework.stereotype.Service;
13 import org.springframework.transaction.annotation.Transactional;
14
15 import java.util.Base64;
16 import java.util.List;
17 import java.util.Map;
18
19 @Service("ngAlainService")
20 @Transactional
21 public class NgAlainServiceImpl implements NgAlainService {
22 @Autowired
23 private ISysPermissionService sysPermissionService;
24 @Autowired
25 private NgAlainMapper mapper;
26 @Value("${spring.application.name}")
27 private String productCode;
28 @Override
29 public JSONArray getMenu(String id) throws Exception {
30 return getJeecgMenu(id);
31 }
32 @Override
33 public JSONArray getJeecgMenu(String id) throws Exception {
34 List<SysPermission> metaList = sysPermissionService.queryByUser(id,productCode);
35 JSONArray jsonArray = new JSONArray();
36 getPermissionJsonArray(jsonArray, metaList, null);
37 JSONArray menulist= parseNgAlain(jsonArray);
38 JSONObject jeecgMenu = new JSONObject();
39 jeecgMenu.put("text", "jeecg菜单");
40 jeecgMenu.put("group",true);
41 jeecgMenu.put("children", menulist);
42 JSONArray jeecgMenuList=new JSONArray();
43 jeecgMenuList.add(jeecgMenu);
44 return jeecgMenuList;
45 }
46
47 @Override
48 public List<Map<String, String>> getDictByTable(String table, String key, String value) {
49 return this.mapper.getDictByTable(table,key,value);
50 }
51
52 private JSONArray parseNgAlain(JSONArray jsonArray) {
53 JSONArray menulist=new JSONArray();
54 for (Object object : jsonArray) {
55 JSONObject jsonObject= (JSONObject) object;
56 String path= (String) jsonObject.get("path");
57 JSONObject meta= (JSONObject) jsonObject.get("meta");
58 JSONObject menu=new JSONObject();
59 menu.put("text",meta.get("title"));
60 menu.put("reuse",true);
61 if (jsonObject.get("children")!=null){
62 JSONArray child= parseNgAlain((JSONArray) jsonObject.get("children"));
63 menu.put("children",child);
64 JSONObject icon=new JSONObject();
65 icon.put("type", "icon");
66 icon.put("value", meta.get("icon"));
67 menu.put("icon",icon);
68 }else {
69 menu.put("link",path);
70 }
71 menulist.add(menu);
72 }
73 return menulist;
74 }
75
76 /**
77 * 获取菜单JSON数组
78 * @param jsonArray
79 * @param metaList
80 * @param parentJson
81 */
82 private void getPermissionJsonArray(JSONArray jsonArray, List<SysPermission> metaList, JSONObject parentJson) {
83 for (SysPermission permission : metaList) {
84 if(permission.getMenuType()==null) {
85 continue;
86 }
87 String tempPid = permission.getParentId();
88 JSONObject json = getPermissionJsonObject(permission);
89 if(parentJson==null && oConvertUtils.isEmpty(tempPid)) {
90 jsonArray.add(json);
91 if(!permission.isLeaf()) {
92 getPermissionJsonArray(jsonArray, metaList, json);
93 }
94 }else if(parentJson!=null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))){
95 if(permission.getMenuType()==0) {
96 JSONObject metaJson = parentJson.getJSONObject("meta");
97 if(metaJson.containsKey("permissionList")) {
98 metaJson.getJSONArray("permissionList").add(json);
99 }else {
100 JSONArray permissionList = new JSONArray();
101 permissionList.add(json);
102 metaJson.put("permissionList", permissionList);
103 }
104
105 }else if(permission.getMenuType()==1) {
106 if(parentJson.containsKey("children")) {
107 parentJson.getJSONArray("children").add(json);
108 }else {
109 JSONArray children = new JSONArray();
110 children.add(json);
111 parentJson.put("children", children);
112 }
113
114 if(!permission.isLeaf()) {
115 getPermissionJsonArray(jsonArray, metaList, json);
116 }
117 }
118 }
119
120
121 }
122 }
123 private JSONObject getPermissionJsonObject(SysPermission permission) {
124 JSONObject json = new JSONObject();
125 //类型(0:一级菜单 1:子菜单 2:按钮)
126 if(permission.getMenuType()==2) {
127 json.put("action", permission.getPerms());
128 json.put("describe", permission.getName());
129 }else if(permission.getMenuType()==0||permission.getMenuType()==1) {
130 json.put("id", permission.getId());
131 if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {
132 String url= new String(Base64.getUrlEncoder().encode(permission.getUrl().getBytes()));
133 json.put("path", "/sys/link/" +url.replaceAll("=",""));
134 }else {
135 json.put("path", permission.getUrl());
136 }
137
138 //重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用)
139 json.put("name", urlToRouteName(permission.getUrl()));
140
141 //是否隐藏路由,默认都是显示的
142 if(permission.isHidden()) {
143 json.put("hidden",true);
144 }
145 //聚合路由
146 if(permission.isAlwaysShow()) {
147 json.put("alwaysShow",true);
148 }
149 json.put("component", permission.getComponent());
150 JSONObject meta = new JSONObject();
151 meta.put("title", permission.getName());
152 if(oConvertUtils.isEmpty(permission.getParentId())) {
153 //一级菜单跳转地址
154 json.put("redirect",permission.getRedirect());
155 meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));
156 }else {
157 meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));
158 }
159 if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {
160 meta.put("url", permission.getUrl());
161 }
162 json.put("meta", meta);
163 }
164
165 return json;
166 }
167 /**
168 * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-)
169 * 举例: URL = /isystem/role
170 * RouteName = isystem-role
171 * @return
172 */
173 private String urlToRouteName(String url) {
174 if(oConvertUtils.isNotEmpty(url)) {
175 if(url.startsWith("/")) {
176 url = url.substring(1);
177 }
178 url = url.replace("/", "-");
179 return url;
180 }else {
181 return null;
182 }
183 }
184 }
1 package brain.base.support.biz.quartz.entity;
2
3 import java.io.Serializable;
4
5 import org.jeecgframework.poi.excel.annotation.Excel;
6 import org.springframework.format.annotation.DateTimeFormat;
7
8 import com.baomidou.mybatisplus.annotation.IdType;
9 import com.baomidou.mybatisplus.annotation.TableField;
10 import com.baomidou.mybatisplus.annotation.TableId;
11 import com.baomidou.mybatisplus.annotation.TableName;
12 import com.fasterxml.jackson.annotation.JsonFormat;
13
14 import lombok.Data;
15
16 /**
17 * @Description: 定时任务在线管理
18 * @Author: jeecg-boot
19 * @Date: 2019-01-02
20 * @Version: V1.0
21 */
22 @Data
23 @TableName("sys_quartz_job")
24 public class QuartzJob implements Serializable {
25 private static final long serialVersionUID = 1L;
26
27 /**id*/
28 @TableId(type = IdType.UUID)
29 private String id;
30 /**创建人*/
31 private String createBy;
32 /**创建时间*/
33 @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
34 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
35 private java.util.Date createTime;
36 /**删除状态*/
37 private Integer delFlag;
38 /**修改人*/
39 private String updateBy;
40 /**修改时间*/
41 @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
42 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
43 private java.util.Date updateTime;
44 /**任务类名*/
45 @Excel(name="任务类名",width=40)
46 private String jobClassName;
47 /**cron表达式*/
48 @Excel(name="cron表达式",width=30)
49 private String cronExpression;
50 /**参数*/
51 @Excel(name="参数",width=15)
52 private String parameter;
53 /**描述*/
54 @Excel(name="描述",width=40)
55 private String description;
56 /**状态 0正常 -1停止*/
57 @Excel(name="状态",width=15)
58 private Integer status;
59
60 }
1 package brain.base.support.biz.quartz.job;
2
3 import brain.common.util.DateUtils;
4 import org.quartz.Job;
5 import org.quartz.JobExecutionContext;
6 import org.quartz.JobExecutionException;
7
8 import lombok.extern.slf4j.Slf4j;
9
10 /**
11 * 示例不带参定时任务
12 *
13 * @Author Scott
14 */
15 @Slf4j
16 public class SampleJob implements Job {
17
18 @Override
19 public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
20
21 log.info(String.format(" Jeecg-Boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp()));
22 }
23 }
1 package brain.base.support.biz.quartz.job;
2
3 import brain.common.util.DateUtils;
4 import org.quartz.Job;
5 import org.quartz.JobExecutionContext;
6 import org.quartz.JobExecutionException;
7
8 import lombok.extern.slf4j.Slf4j;
9
10 /**
11 * 示例带参定时任务
12 *
13 * @Author Scott
14 */
15 @Slf4j
16 public class SampleParamJob implements Job {
17
18 /**
19 * 若参数变量名修改 QuartzJobController中也需对应修改
20 */
21 private String parameter;
22
23 public void setParameter(String parameter) {
24 this.parameter = parameter;
25 }
26
27 @Override
28 public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
29
30 log.info(String.format("welcome %s! Jeecg-Boot 带参数定时任务 SampleParamJob ! 时间:" + DateUtils.now(), this.parameter));
31 }
32 }
1 package brain.base.support.biz.quartz.mapper;
2
3 import java.util.List;
4
5 import brain.base.support.biz.quartz.entity.QuartzJob;
6 import org.apache.ibatis.annotations.Param;
7
8 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
9
10 /**
11 * @Description: 定时任务在线管理
12 * @Author: jeecg-boot
13 * @Date: 2019-01-02
14 * @Version: V1.0
15 */
16 public interface QuartzJobMapper extends BaseMapper<QuartzJob> {
17
18 public List<QuartzJob> findByJobClassName(@Param("jobClassName") String jobClassName);
19
20 }
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.quartz.mapper.QuartzJobMapper">
4
5 <!-- 根据jobClassName查询 -->
6 <select id="findByJobClassName" resultType="brain.base.support.biz.quartz.entity.QuartzJob">
7 select * from sys_quartz_job where job_class_name = #{jobClassName}
8 </select>
9 </mapper>
...\ No newline at end of file ...\ No newline at end of file
1 package brain.base.support.biz.quartz.service;
2
3 import java.util.List;
4
5 import brain.base.support.biz.quartz.entity.QuartzJob;
6 import org.quartz.SchedulerException;
7
8 import com.baomidou.mybatisplus.extension.service.IService;
9
10 /**
11 * @Description: 定时任务在线管理
12 * @Author: jeecg-boot
13 * @Date: 2019-04-28
14 * @Version: V1.1
15 */
16 public interface IQuartzJobService extends IService<QuartzJob> {
17
18 List<QuartzJob> findByJobClassName(String jobClassName);
19
20 boolean saveAndScheduleJob(QuartzJob quartzJob);
21
22 boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException;
23
24 boolean deleteAndStopJob(QuartzJob quartzJob);
25
26 boolean resumeJob(QuartzJob quartzJob);
27 }
1 package brain.base.support.biz.quartz.service.impl;
2
3 import java.util.List;
4
5
6 import brain.base.support.biz.quartz.entity.QuartzJob;
7 import brain.base.support.biz.quartz.mapper.QuartzJobMapper;
8 import brain.base.support.biz.quartz.service.IQuartzJobService;
9 import brain.common.constant.CommonConstant;
10 import brain.common.exception.JeecgBootException;
11 import org.quartz.CronScheduleBuilder;
12 import org.quartz.CronTrigger;
13 import org.quartz.Job;
14 import org.quartz.JobBuilder;
15 import org.quartz.JobDetail;
16 import org.quartz.JobKey;
17 import org.quartz.Scheduler;
18 import org.quartz.SchedulerException;
19 import org.quartz.TriggerBuilder;
20 import org.quartz.TriggerKey;
21 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.stereotype.Service;
23
24 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
25
26 import lombok.extern.slf4j.Slf4j;
27
28 /**
29 * @Description: 定时任务在线管理
30 * @Author: jeecg-boot
31 * @Date: 2019-04-28
32 * @Version: V1.1
33 */
34 @Slf4j
35 @Service
36 public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob> implements IQuartzJobService {
37 @Autowired
38 private QuartzJobMapper quartzJobMapper;
39 @Autowired
40 private Scheduler scheduler;
41
42 @Override
43 public List<QuartzJob> findByJobClassName(String jobClassName) {
44 return quartzJobMapper.findByJobClassName(jobClassName);
45 }
46
47 /**
48 * 保存&启动定时任务
49 */
50 @Override
51 public boolean saveAndScheduleJob(QuartzJob quartzJob) {
52 if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) {
53 // 定时器添加
54 this.schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter());
55 }
56 // DB设置修改
57 quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0);
58 return this.save(quartzJob);
59 }
60
61 /**
62 * 恢复定时任务
63 */
64 @Override
65 public boolean resumeJob(QuartzJob quartzJob) {
66 schedulerDelete(quartzJob.getJobClassName().trim());
67 schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter());
68 quartzJob.setStatus(CommonConstant.STATUS_NORMAL);
69 return this.updateById(quartzJob);
70 }
71
72 /**
73 * 编辑&启停定时任务
74 * @throws SchedulerException
75 */
76 @Override
77 public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException {
78 if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) {
79 schedulerDelete(quartzJob.getJobClassName().trim());
80 schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter());
81 }else{
82 scheduler.pauseJob(JobKey.jobKey(quartzJob.getJobClassName().trim()));
83 }
84 return this.updateById(quartzJob);
85 }
86
87 /**
88 * 删除&停止删除定时任务
89 */
90 @Override
91 public boolean deleteAndStopJob(QuartzJob job) {
92 schedulerDelete(job.getJobClassName().trim());
93 boolean ok = this.removeById(job.getId());
94 return ok;
95 }
96
97 /**
98 * 添加定时任务
99 *
100 * @param jobClassName
101 * @param cronExpression
102 * @param parameter
103 */
104 private void schedulerAdd(String jobClassName, String cronExpression, String parameter) {
105 try {
106 // 启动调度器
107 scheduler.start();
108
109 // 构建job信息
110 JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(jobClassName).usingJobData("parameter", parameter).build();
111
112 // 表达式调度构建器(即任务执行的时间)
113 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
114
115 // 按新的cronExpression表达式构建一个新的trigger
116 CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(jobClassName).withSchedule(scheduleBuilder).build();
117
118 scheduler.scheduleJob(jobDetail, trigger);
119 } catch (SchedulerException e) {
120 throw new JeecgBootException("创建定时任务失败", e);
121 } catch (RuntimeException e) {
122 throw new JeecgBootException(e.getMessage(), e);
123 }catch (Exception e) {
124 throw new JeecgBootException("后台找不到该类名:" + jobClassName, e);
125 }
126 }
127
128 /**
129 * 删除定时任务
130 *
131 * @param jobClassName
132 */
133 private void schedulerDelete(String jobClassName) {
134 try {
135 scheduler.pauseTrigger(TriggerKey.triggerKey(jobClassName));
136 scheduler.unscheduleJob(TriggerKey.triggerKey(jobClassName));
137 scheduler.deleteJob(JobKey.jobKey(jobClassName));
138 } catch (Exception e) {
139 log.error(e.getMessage(), e);
140 throw new JeecgBootException("删除定时任务失败");
141 }
142 }
143
144 private static Job getClass(String classname) throws Exception {
145 Class<?> class1 = Class.forName(classname);
146 return (Job) class1.newInstance();
147 }
148
149 }
1 package brain.base.support.biz.smoke.entity;
2
3 import java.io.Serializable;
4 import java.util.Date;
5 import com.baomidou.mybatisplus.annotation.IdType;
6 import com.baomidou.mybatisplus.annotation.TableId;
7 import com.baomidou.mybatisplus.annotation.TableName;
8 import com.baomidou.mybatisplus.annotation.TableField;
9 import io.swagger.annotations.ApiModel;
10 import io.swagger.annotations.ApiModelProperty;
11 import lombok.Data;
12 import lombok.EqualsAndHashCode;
13 import lombok.experimental.Accessors;
14 import com.fasterxml.jackson.annotation.JsonFormat;
15 import org.springframework.format.annotation.DateTimeFormat;
16 import org.jeecgframework.poi.excel.annotation.Excel;
17
18 /**
19 * @Description: 烟感警报设备
20 * @Author: jeecg-boot
21 * @Date: 2021-03-05
22 * @Version: V1.0
23 */
24 @Data
25 @TableName("smoke_alarm_device")
26 @EqualsAndHashCode(callSuper = false)
27 @Accessors(chain = true)
28 @ApiModel(value="smoke_alarm_device对象", description="烟感警报设备")
29 public class SmokeAlarmDevice {
30
31 /**id*/
32 @TableId(type = IdType.AUTO)
33 @ApiModelProperty(value = "id")
34 private Integer id;
35 /**记录id*/
36 @Excel(name = "记录id", width = 15)
37 @ApiModelProperty(value = "记录id")
38 private String recId;
39 /**告警业务ID*/
40 @Excel(name = "告警业务ID", width = 15)
41 @ApiModelProperty(value = "告警业务ID")
42 private Integer alarmBizId;
43 /**告警业务名称*/
44 @Excel(name = "告警业务名称", width = 15)
45 @ApiModelProperty(value = "告警业务名称")
46 private String alarmBizName;
47 /**告警触发值*/
48 @Excel(name = "告警触发值", width = 15)
49 @ApiModelProperty(value = "告警触发值")
50 private String value;
51 /**告警等级*/
52 @Excel(name = "告警等级", width = 15)
53 @ApiModelProperty(value = "告警等级")
54 private Integer grade;
55 /**告警开始时间*/
56 @Excel(name = "告警开始时间", width = 15)
57 @ApiModelProperty(value = "告警开始时间")
58 private String startTime;
59 /**createTime*/
60 @Excel(name = "createTime", width = 15)
61 @ApiModelProperty(value = "createTime")
62 private String createTime;
63 /**updateTime*/
64 @Excel(name = "updateTime", width = 15)
65 @ApiModelProperty(value = "updateTime")
66 private String updateTime;
67 /**烟感编号*/
68 @Excel(name = "烟感编号", width = 15)
69 @ApiModelProperty(value = "烟感编号")
70 private String smokeNo;
71 /**设备名称*/
72 @Excel(name = "设备名称", width = 15)
73 @ApiModelProperty(value = "设备名称")
74 private String deviceName;
75 /**pointX*/
76 @Excel(name = "pointX", width = 15)
77 @ApiModelProperty(value = "pointX")
78 private Float pointX;
79 /**pointY*/
80 @Excel(name = "pointY", width = 15)
81 @ApiModelProperty(value = "pointY")
82 private Float pointY;
83 /**最高告警等级:0为正常,其他值都为告警*/
84 @Excel(name = "最高告警等级:0为正常,其他值都为告警", width = 15)
85 @ApiModelProperty(value = "最高告警等级:0为正常,其他值都为告警")
86 private Integer alarmState;
87 /**第一联系人*/
88 @Excel(name = "第一联系人", width = 15)
89 @ApiModelProperty(value = "第一联系人")
90 private String property;
91 /**设备地址*/
92 @Excel(name = "设备地址", width = 15)
93 @ApiModelProperty(value = "设备地址")
94 private String addr;
95 /**examineState*/
96 @Excel(name = "examineState", width = 15)
97 @ApiModelProperty(value = "examineState")
98 private String examineState;
99 /**enableTime*/
100 @Excel(name = "enableTime", width = 15)
101 @ApiModelProperty(value = "enableTime")
102 private String enableTime;
103 /**本地最近一次更新时间*/
104 @Excel(name = "本地最近一次更新时间", width = 15)
105 @ApiModelProperty(value = "本地最近一次更新时间")
106 private String localupdatetime;
107 }
1 package brain.base.support.biz.smoke.entity;
2
3 import java.io.Serializable;
4 import java.util.Date;
5 import com.baomidou.mybatisplus.annotation.IdType;
6 import com.baomidou.mybatisplus.annotation.TableId;
7 import com.baomidou.mybatisplus.annotation.TableName;
8 import com.baomidou.mybatisplus.annotation.TableField;
9 import io.swagger.annotations.ApiModel;
10 import io.swagger.annotations.ApiModelProperty;
11 import lombok.Data;
12 import lombok.EqualsAndHashCode;
13 import lombok.experimental.Accessors;
14 import com.fasterxml.jackson.annotation.JsonFormat;
15 import org.springframework.format.annotation.DateTimeFormat;
16 import org.jeecgframework.poi.excel.annotation.Excel;
17
18 /**
19 * @Description: 烟感警报历史记录
20 * @Author: jeecg-boot
21 * @Date: 2021-03-05
22 * @Version: V1.0
23 */
24 @Data
25 @TableName("smoke_alarm_device_his")
26 @EqualsAndHashCode(callSuper = false)
27 @Accessors(chain = true)
28 @ApiModel(value="smoke_alarm_device_his对象", description="烟感警报历史记录")
29 public class SmokeAlarmDeviceHis {
30
31 /**id*/
32 @TableId(type = IdType.AUTO)
33 @ApiModelProperty(value = "id")
34 private Integer id;
35 /**记录id*/
36 @Excel(name = "记录id", width = 15)
37 @ApiModelProperty(value = "记录id")
38 private String recId;
39 /**告警业务ID*/
40 @Excel(name = "告警业务ID", width = 15)
41 @ApiModelProperty(value = "告警业务ID")
42 private Integer alarmBizId;
43 /**告警业务名称*/
44 @Excel(name = "告警业务名称", width = 15)
45 @ApiModelProperty(value = "告警业务名称")
46 private String alarmBizName;
47 /**告警触发值*/
48 @Excel(name = "告警触发值", width = 15)
49 @ApiModelProperty(value = "告警触发值")
50 private String value;
51 /**告警等级*/
52 @Excel(name = "告警等级", width = 15)
53 @ApiModelProperty(value = "告警等级")
54 private Integer grade;
55 /**告警开始时间*/
56 @Excel(name = "告警开始时间", width = 15)
57 @ApiModelProperty(value = "告警开始时间")
58 private String startTime;
59 /**createTime*/
60 @Excel(name = "createTime", width = 15)
61 @ApiModelProperty(value = "createTime")
62 private String createTime;
63 /**updateTime*/
64 @Excel(name = "updateTime", width = 15)
65 @ApiModelProperty(value = "updateTime")
66 private String updateTime;
67 /**烟感编号*/
68 @Excel(name = "烟感编号", width = 15)
69 @ApiModelProperty(value = "烟感编号")
70 private String smokeNo;
71 /**设备名称*/
72 @Excel(name = "设备名称", width = 15)
73 @ApiModelProperty(value = "设备名称")
74 private String deviceName;
75 /**pointX*/
76 @Excel(name = "pointX", width = 15)
77 @ApiModelProperty(value = "pointX")
78 private Float pointX;
79 /**pointY*/
80 @Excel(name = "pointY", width = 15)
81 @ApiModelProperty(value = "pointY")
82 private Float pointY;
83 /**最高告警等级:0为正常,其他值都为告警*/
84 @Excel(name = "最高告警等级:0为正常,其他值都为告警", width = 15)
85 @ApiModelProperty(value = "最高告警等级:0为正常,其他值都为告警")
86 private Integer alarmState;
87 /**第一联系人*/
88 @Excel(name = "第一联系人", width = 15)
89 @ApiModelProperty(value = "第一联系人")
90 private String property;
91 /**设备地址*/
92 @Excel(name = "设备地址", width = 15)
93 @ApiModelProperty(value = "设备地址")
94 private String addr;
95 /**examineState*/
96 @Excel(name = "examineState", width = 15)
97 @ApiModelProperty(value = "examineState")
98 private String examineState;
99 /**enableTime*/
100 @Excel(name = "enableTime", width = 15)
101 @ApiModelProperty(value = "enableTime")
102 private String enableTime;
103 /**告警结束时间*/
104 @Excel(name = "告警结束时间", width = 15)
105 @ApiModelProperty(value = "告警结束时间")
106 private String endTime;
107 /**本地最近一次更新时间*/
108 @Excel(name = "本地最近一次更新时间", width = 15)
109 @ApiModelProperty(value = "本地最近一次更新时间")
110 private String localupdatetime;
111 }
1 package brain.base.support.biz.smoke.entity;
2
3 import java.io.Serializable;
4 import java.util.Date;
5 import com.baomidou.mybatisplus.annotation.IdType;
6 import com.baomidou.mybatisplus.annotation.TableId;
7 import com.baomidou.mybatisplus.annotation.TableName;
8 import com.baomidou.mybatisplus.annotation.TableField;
9 import io.swagger.annotations.ApiModel;
10 import io.swagger.annotations.ApiModelProperty;
11 import lombok.Data;
12 import lombok.EqualsAndHashCode;
13 import lombok.experimental.Accessors;
14 import com.fasterxml.jackson.annotation.JsonFormat;
15 import org.jeecgframework.poi.excel.annotation.ExcelIgnore;
16 import org.springframework.format.annotation.DateTimeFormat;
17 import org.jeecgframework.poi.excel.annotation.Excel;
18
19 /**
20 * @Description: 烟感设备
21 * @Author: jeecg-boot
22 * @Date: 2021-03-05
23 * @Version: V1.0
24 */
25 @Data
26 @TableName("smoke_device")
27 @EqualsAndHashCode(callSuper = false)
28 @Accessors(chain = true)
29 @ApiModel(value="smoke_device对象", description="烟感设备")
30 public class SmokeDevice {
31
32 /**id*/
33 @TableId(type = IdType.AUTO)
34 @ApiModelProperty(value = "id")
35 private Integer id;
36 /**设备id*/
37 @Excel(name = "设备id", width = 15)
38 @ApiModelProperty(value = "设备id")
39 private Integer deviceId;
40 /**设备名称*/
41 @Excel(name = "设备名称", width = 15)
42 @ApiModelProperty(value = "设备名称")
43 private String deviceName;
44 /**设备完整区域路径*/
45 @Excel(name = "设备完整区域路径", width = 15)
46 @ApiModelProperty(value = "设备完整区域路径")
47 private String path;
48 /**设备地址*/
49 @Excel(name = "设备地址", width = 15)
50 @ApiModelProperty(value = "设备地址")
51 private String addr;
52 /**安装地址*/
53 @Excel(name = "安装地址", width = 15)
54 @ApiModelProperty(value = "安装地址")
55 private String location;
56 /**经度*/
57 @Excel(name = "经度", width = 15)
58 @ApiModelProperty(value = "经度")
59 private Float pointX;
60 /**纬度*/
61 @Excel(name = "纬度", width = 15)
62 @ApiModelProperty(value = "纬度")
63 private Float pointY;
64 /**districtCode*/
65 @Excel(name = "districtCode", width = 15)
66 @ApiModelProperty(value = "districtCode")
67 private String districtCode;
68 /**streetCode*/
69 @Excel(name = "streetCode", width = 15)
70 @ApiModelProperty(value = "streetCode")
71 private String streetCode;
72 /**设备状态:
73 notEnabled : 未启用
74 defending : 布防
75 disarmed : 撤防
76 disabled : 停用
77 deleted : 删除*/
78 @Excel(name = "设备状态: notEnabled : 未启用 defending : 布防 disarmed : 撤防 disabled : 停用 deleted : 删除", width = 15)
79 @ApiModelProperty(value = "设备状态: notEnabled : 未启用 defending : 布防 disarmed : 撤防 disabled : 停用 deleted : 删除")
80 private String deviceState;
81 /**最高告警等级:0为正常,其他值都为告警*/
82 @Excel(name = "最高告警等级:0为正常,其他值都为告警", width = 15)
83 @ApiModelProperty(value = "最高告警等级:0为正常,其他值都为告警")
84 private Integer alarmState;
85 /**所属单位id*/
86 @Excel(name = "所属单位id", width = 15)
87 @ApiModelProperty(value = "所属单位id")
88 private Integer coId;
89 /**所属单位名称*/
90 @Excel(name = "所属单位名称", width = 15)
91 @ApiModelProperty(value = "所属单位名称")
92 private String coName;
93 /**是否失联
94 * 0为正常
95 * 1为离线
96 * 2为失联
97 */
98 @Excel(name = "是否失联* 0为正常 * 1为离线 * 2为失联 ", width = 15)
99 @ApiModelProperty(value = "是否失联 * 0为正常 * 1为离线 * 2为失联 ")
100 private Integer lost;
101 /**烟感编号*/
102 @Excel(name = "烟感编号", width = 15)
103 @ApiModelProperty(value = "烟感编号")
104 private String smokeNo;
105 /**第一联系人*/
106 @Excel(name = "第一联系人", width = 15)
107 @ApiModelProperty(value = "第一联系人")
108 private String property;
109 /**烟感图片-全景图*/
110 @Excel(name = "烟感图片-全景图", width = 15)
111 @ApiModelProperty(value = "烟感图片-全景图")
112 private String picsPanorama;
113 /**烟感图片-烟感图*/
114 @Excel(name = "烟感图片-烟感图", width = 15)
115 @ApiModelProperty(value = "烟感图片-烟感图")
116 private String picsSmoke;
117 /**烟感图片-安装图*/
118 @Excel(name = "烟感图片-安装图", width = 15)
119 @ApiModelProperty(value = "烟感图片-安装图")
120 private String picsInstall;
121 /**本地更新时间*/
122 @Excel(name = "本地更新时间", width = 15)
123 @ApiModelProperty(value = "本地更新时间")
124 private String localupdatetime;
125
126 @ExcelIgnore
127 @ApiModelProperty(value = "分类")
128 private String datatype;
129
130 @ExcelIgnore
131 @ApiModelProperty(value = "企业名称")
132 private String qymc;
133 }
1 package brain.base.support.biz.smoke.mapper;
2
3 import java.util.List;
4
5 import brain.base.support.biz.smoke.entity.SmokeAlarmDeviceHis;
6 import org.apache.ibatis.annotations.Param;
7 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
8
9 /**
10 * @Description: 烟感警报历史记录
11 * @Author: jeecg-boot
12 * @Date: 2021-03-05
13 * @Version: V1.0
14 */
15 public interface SmokeAlarmDeviceHisMapper extends BaseMapper<SmokeAlarmDeviceHis> {
16
17 }
1 package brain.base.support.biz.smoke.mapper;
2
3 import java.util.List;
4
5 import brain.base.support.biz.smoke.entity.SmokeAlarmDevice;
6 import org.apache.ibatis.annotations.Param;
7 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
8
9 /**
10 * @Description: 烟感警报设备
11 * @Author: jeecg-boot
12 * @Date: 2021-03-05
13 * @Version: V1.0
14 */
15 public interface SmokeAlarmDeviceMapper extends BaseMapper<SmokeAlarmDevice> {
16
17 }
1 package brain.base.support.biz.smoke.mapper;
2
3 import java.util.List;
4
5 import brain.base.support.biz.smoke.entity.SmokeDevice;
6 import org.apache.ibatis.annotations.Mapper;
7 import org.apache.ibatis.annotations.Param;
8 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
9
10 /**
11 * @Description: 烟感设备
12 * @Author: jeecg-boot
13 * @Date: 2021-03-05
14 * @Version: V1.0
15 */
16 public interface SmokeDeviceMapper2 extends BaseMapper<SmokeDevice> {
17
18 }
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="brain.base.support.biz.smoke.mapper.SmokeAlarmDeviceHisMapper">
4
5 </mapper>
...\ No newline at end of file ...\ No newline at end of file