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.

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