提交 08daed85 作者: 方治民

合并分支 'dev_fzm' 到 'merge_dev'

Dev fzm

查看合并请求 chemical-kesai/kshg-api!20
...@@ -38,3 +38,4 @@ out/ ...@@ -38,3 +38,4 @@ out/
node_modules node_modules
logs/ logs/
.jpb/
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PersistenceUnitSettings">
<persistence-units>
<persistence-unit name="Default">
<packages>
<package value="com.yiring.common.config" />
</packages>
</persistence-unit>
</persistence-units>
</component>
</project>
\ No newline at end of file
...@@ -29,9 +29,8 @@ ...@@ -29,9 +29,8 @@
- [x] [conventional-changelog](https://www.cnblogs.com/mengfangui/p/12634845.html) - [x] [conventional-changelog](https://www.cnblogs.com/mengfangui/p/12634845.html)
- [x] 用户及权限模块(目录/菜单/按钮),预览初始化权限配置 [SQL 脚本](./basic-auth/src/main/resources/init-test-mysql.sql) - [x] 用户及权限模块(目录/菜单/按钮),预览初始化权限配置 [SQL 脚本](./basic-auth/src/main/resources/init-test-mysql.sql)
- [x] 通用文件上传模块 - [x] 通用文件上传模块
- [ ] 通用字典管理模块 - [x] 通用字典管理模块
- [ ] XXL-JOB 定时任务模块 - [x] XXL-JOB 定时任务模块
- [x] @Convert 处理 Raw JSON 数据格式转换
- [ ] 扩展 PostgresDialect 实现时序查询函数 - [ ] 扩展 PostgresDialect 实现时序查询函数
--- ---
......
...@@ -13,6 +13,8 @@ dependencies { ...@@ -13,6 +13,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-amqp' implementation 'org.springframework.boot:spring-boot-starter-amqp'
implementation "org.springframework.boot:spring-boot-starter-websocket" implementation "org.springframework.boot:spring-boot-starter-websocket"
implementation "org.springframework.boot:spring-boot-starter-reactor-netty" implementation "org.springframework.boot:spring-boot-starter-reactor-netty"
implementation "org.springframework.cloud:spring-cloud-starter-openfeign"
implementation "org.springframework.cloud:spring-cloud-commons"
// 💬 Mock/Test Env // 💬 Mock/Test Env
runtimeOnly 'com.h2database:h2' runtimeOnly 'com.h2database:h2'
// 💬 Prod/Dev Env // 💬 Prod/Dev Env
...@@ -70,7 +72,10 @@ dependencies { ...@@ -70,7 +72,10 @@ dependencies {
// myexcel // myexcel
implementation "com.github.liaochong:myexcel:${myexcelVersion}" implementation "com.github.liaochong:myexcel:${myexcelVersion}"
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign // feign-okhttp
implementation "org.springframework.cloud:spring-cloud-starter-openfeign:${openfeignVersion}" implementation "io.github.openfeign:feign-okhttp:${feignOkhttpVersion}"
// xxl-job
implementation "com.xuxueli:xxl-job-core:${xxlJobVersion}"
} }
...@@ -6,6 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; ...@@ -6,6 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters; import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@EnableJpaRepositories(basePackages = Application.BASE_PACKAGES) @EnableJpaRepositories(basePackages = Application.BASE_PACKAGES)
...@@ -14,6 +15,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories; ...@@ -14,6 +15,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
basePackages = Application.BASE_PACKAGES basePackages = Application.BASE_PACKAGES
) )
@EnableFeignClients @EnableFeignClients
@EnableJpaAuditing
@SpringBootApplication(scanBasePackages = Application.BASE_PACKAGES) @SpringBootApplication(scanBasePackages = Application.BASE_PACKAGES)
public class Application { public class Application {
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.config;
import cn.hutool.core.util.StrUtil;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import javax.annotation.Resource;
import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job 配置
*/
@Slf4j
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@Configuration
@ConfigurationProperties(prefix = "xxl.job")
public class XxlJobConfig {
@Resource
InetUtils inetUtils;
String adminAddresses;
String accessToken;
String executorAppName;
String executorAddress;
String executorIp;
Integer executorPort = 9999;
String executorLogPath;
Integer executorLogRetentionDays = 30;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job init: {}", adminAddresses);
if (StrUtil.isBlank(executorIp)) {
executorIp = inetUtils.findFirstNonLoopbackAddress().getHostAddress();
}
if (StrUtil.isBlank(executorAddress)) {
executorAddress = "http://" + executorIp + ":" + executorPort;
}
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(executorAppName);
xxlJobSpringExecutor.setAddress(executorAddress);
xxlJobSpringExecutor.setIp(executorIp);
xxlJobSpringExecutor.setPort(executorPort);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(executorLogPath);
xxlJobSpringExecutor.setLogRetentionDays(executorLogRetentionDays);
return xxlJobSpringExecutor;
}
}
...@@ -12,4 +12,9 @@ public interface RedisKey { ...@@ -12,4 +12,9 @@ public interface RedisKey {
* STOMP 在线用户关键数据 * STOMP 在线用户关键数据
*/ */
String STOMP_ONLINE_USERS = "STOMP_ONLINE_USERS"; String STOMP_ONLINE_USERS = "STOMP_ONLINE_USERS";
/**
* 地图信息
*/
String ZY_MAP_AREAS = "ZY_MAP_AREAS";
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.constant.alarm;
import com.yiring.app.vo.CodeNameVo;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
/**
* 围栏类别枚举
* @author tml
* @version 1.0
* @date 2022/4/27 13:36
*/
public enum FenceTypeEnum {
/**
* 普通围栏
*/
ORDINARY(1, "普通围栏"),
/**
* 特殊作业
*/
SPECIAL(2, "特殊作业"),
/**
* 重大危险源
*/
DANGEROUS(3, "重大危险源");
private static final List<CodeNameVo> LIST;
public static final int MIN = 1;
public static final int MAX = 3;
public static final int TOTAL = 3;
static {
LIST = new ArrayList<>();
for (FenceTypeEnum item : values()) {
LIST.add(CodeNameVo.builder().code(item.code).name(item.name).build());
}
}
@Getter
private final Integer code;
@Getter
private final String name;
FenceTypeEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
/**
* 根据key获取value
* @param code 围栏类别key
* @return 围栏类别
*/
public static String getByCode(Integer code) {
if (code != null) {
for (FenceTypeEnum item : values()) {
if (item.code.equals(code)) {
return item.name;
}
}
}
return "未知围栏类别";
}
/**
* 获取所有围栏类别
* @return 所有围栏类别集合
*/
public static List<CodeNameVo> getAll() {
return LIST;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.constant.alarm;
import com.yiring.app.vo.CodeNameVo;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
/**
* 通知方式枚举
* @author tml
* @version 1.0
* @date 2022/5/5 16:05
*/
public enum InformMannerEnum {
/**
* app消息通知
*/
APP(1, "app消息"),
/**
* 短信通知
*/
MESSAGES(2, "短信通知"),
/**
* 电话通知
*/
PHONE(3, "电话通知");
@Getter
private final Integer code;
@Getter
private final String name;
private static final List<CodeNameVo> LIST;
static {
LIST = new ArrayList<CodeNameVo>();
for (InformMannerEnum item : values()) {
LIST.add(new CodeNameVo(item.code, item.name));
}
}
InformMannerEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public static String getByCode(Integer code) {
for (InformMannerEnum item : values()) {
if (item.getCode().equals(code)) {
return item.getName();
}
}
return "未知通知类型";
}
public static List<CodeNameVo> getAll() {
return LIST;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.constant.alarm;
import com.yiring.app.vo.CodeNameVo;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
/**
* 关联参数枚举
* @author tml
* @version 1.0
* @date 2022/4/27 13:43
*/
public enum RelevanceParamEnum {
/**
* 最大人数
*/
MAX_PEOPLE_NUMBER(1, "最多人数"),
/**
* 最小人数
*/
MIN_PEOPLE_NUMBER(2, "最少人数"),
/**
* 允许进入人员
*/
ALLOW_ENTRANCE(3, "允许进入人员"),
/**
* 不允许离开人员
*/
NOT_ALLOW_LEAVE(4, "不允许离开人员"),
/**
* 静止时长
*/
STATIC_DURATION(5, "静止时长(分钟)"),
/**
* 滞留时长
*/
RETENTION_DURATION(6, "滞留时长(分钟)"),
/**
* 触发报警距离
*/
TRIGGER_ALARM_DISTANCE(7, "触发报警距离");
private static final List<CodeNameVo> LIST;
public static final int MIN = 1;
public static final int MAX = 7;
public static final int TOTAL = 7;
static {
LIST = new ArrayList<>();
for (RelevanceParamEnum item : values()) {
LIST.add(CodeNameVo.builder().code(item.code).name(item.name).build());
}
}
@Getter
private final Integer code;
@Getter
private final String name;
RelevanceParamEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
/**
* 根据key获取value
* @param code 关联参数key
* @return 关联参数
*/
public static String getByCode(Integer code) {
if (code != null) {
for (RelevanceParamEnum item : values()) {
if (item.code.equals(code)) {
return item.name;
}
}
}
return "未知关联参数";
}
/**
* 获取所有关联参数
* @return 所有关联参数集合
*/
public static List<CodeNameVo> getAll() {
return LIST;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.constant.rehearsal;
import com.yiring.app.vo.CodeNameVo;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
/**
* 演练计划状态枚举(1:未启动, 2:进行中, 3:已结束)
* @author tml
* @version 1.0
* @date 2022/5/9 17:29
*/
public enum RehearsalPlanStatusEnum {
/**
*未启动
*/
UN_START(1, "未启动"),
/**
*进行中
*/
RUNNING(2, "进行中"),
/**
* 已结束
*/
END(3, "已结束");
@Getter
private final Integer code;
@Getter
private final String name;
private static final List<CodeNameVo> LIST;
static {
LIST = new ArrayList<>();
for (RehearsalPlanStatusEnum item : values()) {
LIST.add(new CodeNameVo(item.getCode(), item.getName()));
}
}
RehearsalPlanStatusEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public static List<CodeNameVo> getAll() {
return LIST;
}
public static String getByCode(Integer code) {
for (RehearsalPlanStatusEnum item : values()) {
if (item.getCode().equals(code)) {
return item.getName();
}
}
return "未知状态";
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.constant.rehearsal;
import com.yiring.app.vo.CodeNameVo;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
/**
* 演练计划风险等级枚举(1:红色风险, 2:橙色风险, 3:黄色风险, 4:蓝色风险)
* @author tml
* @version 1.0
* @date 2022/5/9 17:28
*/
public enum RiskLevelEnum {
/**
* 红色风险
*/
RED(1, "红色风险"),
/**
* 橙色风险
*/
ORANGE(2, "橙色风险"),
/**
* 黄色风险
*/
YELLOW(3, "黄色风险"),
/**
* 蓝色风险
*/
BLUE(4, "蓝色风险");
@Getter
private final Integer code;
@Getter
private final String name;
private static final List<CodeNameVo> LIST;
static {
LIST = new ArrayList<>();
for (RiskLevelEnum item : values()) {
LIST.add(new CodeNameVo(item.getCode(), item.getName()));
}
}
RiskLevelEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public static List<CodeNameVo> getAll() {
return LIST;
}
public static String getByCode(Integer code) {
for (RiskLevelEnum item : values()) {
if (item.getCode().equals(code)) {
return item.getName();
}
}
return "未知风险";
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check;
import com.yiring.common.core.Result;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:21
*/
public interface IParamInitStrategy<T> {
/**
* 校验参数
* @param param 参数
* @return 是否成功
*/
Result<String> paramInit(T param);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.fence;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.common.core.Result;
import org.springframework.stereotype.Component;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:08
*/
@Component
public class DangerousStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public DangerousStrategy() {
Integer fenceType = RelevanceParamEnum.MAX_PEOPLE_NUMBER.getCode();
LocationFenceTypeContext.register(fenceType, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
//TODO
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.fence;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.RuleParam;
import com.yiring.common.core.Result;
import org.springframework.stereotype.Component;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:15
*/
@Component
public class DefaultStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public DefaultStrategy() {
Integer fenceType = 0;
LocationFenceTypeContext.register(fenceType, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
ruleParam.setVoiceId(null);
ruleParam.setVoiceName(null);
ruleParam.setPlayEquipmentId(null);
ruleParam.setPlayEquipmentName(null);
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.fence;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.common.core.Result;
import java.util.concurrent.ConcurrentHashMap;
import lombok.extern.slf4j.Slf4j;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:09
*/
@Slf4j
public class LocationFenceTypeContext {
private final IParamInitStrategy<LocationFenceRuleAddParam> checkStrategy;
private static final ConcurrentHashMap<Integer, IParamInitStrategy<LocationFenceRuleAddParam>> FENCE_TYPE_MAP = new ConcurrentHashMap<>(
4
);
public static void register(Integer relevanceParam, IParamInitStrategy<LocationFenceRuleAddParam> strategy) {
FENCE_TYPE_MAP.put(relevanceParam, strategy);
}
public LocationFenceTypeContext(Integer relevanceParam) {
if (relevanceParam == null || relevanceParam > FenceTypeEnum.MAX || relevanceParam < FenceTypeEnum.MIN) {
log.warn("报警类型的关联参数异常, relevanceParam:[{}]", relevanceParam);
throw new RuntimeException("报警类型的关联参数异常");
}
IParamInitStrategy<LocationFenceRuleAddParam> strategy = FENCE_TYPE_MAP.get(relevanceParam);
if (strategy == null) {
strategy = FENCE_TYPE_MAP.get(0);
}
this.checkStrategy = strategy;
}
public Result<String> paramInit(LocationFenceRuleAddParam param) {
return checkStrategy.paramInit(param);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.RuleParam;
import com.yiring.app.param.location.rule.TimeAndUserParam;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:32
*/
@Component
public class AllowEntranceStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public AllowEntranceStrategy() {
Integer relevanceParam = RelevanceParamEnum.ALLOW_ENTRANCE.getCode();
LocationFenceRuleContext.register(relevanceParam, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
List<TimeAndUserParam> timeAndUser = ruleParam.getTimeAndUser();
if (CollectionUtils.isEmpty(timeAndUser)) {
return Result.no(Status.EXPECTATION_FAILED, "请至少配置一条允许进入人员的规则");
}
for (TimeAndUserParam item : timeAndUser) {
if (CollectionUtils.isEmpty(item.getUser())) {
return Result.no(Status.EXPECTATION_FAILED, "请至少配置一个允许进入的人员");
}
}
ruleParam.setDuration(-1);
ruleParam.setDistance(-1);
ruleParam.setTimeAndNumber(new ArrayList<>());
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.design.check.fence.LocationFenceTypeContext;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.concurrent.ConcurrentHashMap;
import lombok.extern.slf4j.Slf4j;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:36
*/
@Slf4j
public class LocationFenceRuleContext {
private final IParamInitStrategy<LocationFenceRuleAddParam> checkStrategy;
private static final ConcurrentHashMap<Integer, IParamInitStrategy<LocationFenceRuleAddParam>> RULE_MAP = new ConcurrentHashMap<>(
10
);
public static void register(Integer relevanceParam, IParamInitStrategy<LocationFenceRuleAddParam> strategy) {
RULE_MAP.put(relevanceParam, strategy);
}
public LocationFenceRuleContext(Integer relevanceParam) {
if (
relevanceParam == null || relevanceParam > RelevanceParamEnum.MAX || relevanceParam < RelevanceParamEnum.MIN
) {
log.warn("报警类型的关联参数异常, relevanceParam:[{}]", relevanceParam);
throw new RuntimeException("报警类型的关联参数异常");
}
this.checkStrategy = RULE_MAP.get(relevanceParam);
}
public Result<String> paramInit(LocationFenceRuleAddParam param) {
Result<String> result = new LocationFenceTypeContext(param.getFenceType()).paramInit(param);
if (Status.OK.value() != result.getStatus()) {
return result;
}
return checkStrategy.paramInit(param);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.*;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
/**
* 最多人数校验
* @author tml
* @version 1.0
* @date 2022/4/29 9:28
*/
@Component
public class MaxPeopleNumberStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public MaxPeopleNumberStrategy() {
Integer relevanceParam = RelevanceParamEnum.MAX_PEOPLE_NUMBER.getCode();
LocationFenceRuleContext.register(relevanceParam, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
List<TimeAndNumberParam> timeAndNumber = ruleParam.getTimeAndNumber();
if (CollectionUtils.isEmpty(timeAndNumber)) {
return Result.no(Status.EXPECTATION_FAILED, "请至少配置一条最多人数的规则");
}
for (TimeAndNumberParam item : timeAndNumber) {
if (item.getNumber() == null || item.getNumber() < 0) {
item.setNumber(0);
}
if (item.getBeginTime() == null || item.getEndTime() == null) {
item.setBeginTime(null);
item.setEndTime(null);
}
}
//将时间和距离都设为-1
ruleParam.setDuration(-1);
ruleParam.setDistance(-1);
ArrayList<TimeAndUserParam> list = new ArrayList<>();
ruleParam.setTimeAndUser(list);
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.RuleParam;
import com.yiring.app.param.location.rule.TimeAndNumberParam;
import com.yiring.app.param.location.rule.TimeAndUserParam;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:31
*/
@Component
public class MinPeopleNumberStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public MinPeopleNumberStrategy() {
Integer relevanceParam = RelevanceParamEnum.MIN_PEOPLE_NUMBER.getCode();
LocationFenceRuleContext.register(relevanceParam, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
List<TimeAndNumberParam> timeAndNumber = ruleParam.getTimeAndNumber();
if (CollectionUtils.isEmpty(timeAndNumber)) {
return Result.no(Status.EXPECTATION_FAILED, "请至少配置一条最小人数的规则");
}
for (TimeAndNumberParam item : timeAndNumber) {
if (item.getNumber() == null || item.getNumber() < 0) {
item.setNumber(0);
}
if (item.getBeginTime() == null || item.getEndTime() == null) {
item.setBeginTime(null);
item.setEndTime(null);
}
}
//将时间和距离都设为-1
ruleParam.setDuration(-1);
ruleParam.setDistance(-1);
ArrayList<TimeAndUserParam> list = new ArrayList<>();
ruleParam.setTimeAndUser(list);
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.RuleParam;
import com.yiring.app.param.location.rule.TimeAndUserParam;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:32
*/
@Component
public class NotAllowLeaveStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public NotAllowLeaveStrategy() {
Integer relevanceParam = RelevanceParamEnum.NOT_ALLOW_LEAVE.getCode();
LocationFenceRuleContext.register(relevanceParam, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
List<TimeAndUserParam> timeAndUser = ruleParam.getTimeAndUser();
if (CollectionUtils.isEmpty(timeAndUser)) {
return Result.no(Status.EXPECTATION_FAILED, "请至少配置一条不允许离开人员的规则");
}
for (TimeAndUserParam item : timeAndUser) {
if (CollectionUtils.isEmpty(item.getUser())) {
return Result.no(Status.EXPECTATION_FAILED, "请至少配置一个不允许离开的人员");
}
}
ruleParam.setDuration(-1);
ruleParam.setDistance(-1);
ruleParam.setTimeAndNumber(new ArrayList<>());
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.RuleParam;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.ArrayList;
import org.springframework.stereotype.Component;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:33
*/
@Component
public class RetentionDurationStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public RetentionDurationStrategy() {
Integer relevanceParam = RelevanceParamEnum.RETENTION_DURATION.getCode();
LocationFenceRuleContext.register(relevanceParam, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
if (ruleParam.getDuration() == null || ruleParam.getDuration() < 0) {
return Result.no(Status.EXPECTATION_FAILED, "滞留时长异常");
}
ruleParam.setDistance(-1);
ruleParam.setTimeAndUser(new ArrayList<>());
ruleParam.setTimeAndNumber(new ArrayList<>());
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.RuleParam;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.ArrayList;
import org.springframework.stereotype.Component;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:32
*/
@Component
public class StaticDurationStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public StaticDurationStrategy() {
Integer relevanceParam = RelevanceParamEnum.STATIC_DURATION.getCode();
LocationFenceRuleContext.register(relevanceParam, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
if (ruleParam.getDuration() == null || ruleParam.getDuration() < 0) {
return Result.no(Status.EXPECTATION_FAILED, "静止时长异常");
}
ruleParam.setDistance(-1);
ruleParam.setTimeAndUser(new ArrayList<>());
ruleParam.setTimeAndNumber(new ArrayList<>());
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.design.check.rule;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.design.check.IParamInitStrategy;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.RuleParam;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import java.util.ArrayList;
import org.springframework.stereotype.Component;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:33
*/
@Component
public class TriggerAlarmDistanceStrategy implements IParamInitStrategy<LocationFenceRuleAddParam> {
public TriggerAlarmDistanceStrategy() {
Integer relevanceParam = RelevanceParamEnum.TRIGGER_ALARM_DISTANCE.getCode();
LocationFenceRuleContext.register(relevanceParam, this);
}
@Override
public Result<String> paramInit(LocationFenceRuleAddParam param) {
RuleParam ruleParam = param.getRuleParam();
if (ruleParam.getDistance() == null || ruleParam.getDistance() < 0) {
return Result.no(Status.EXPECTATION_FAILED, "触发报警距离异常");
}
ruleParam.setDuration(-1);
ruleParam.setTimeAndUser(new ArrayList<>());
ruleParam.setTimeAndNumber(new ArrayList<>());
return Result.ok();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.alarm;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Where;
import org.hibernate.snowflake.SnowflakeId;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 11:20
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Entity
@Where(clause = "deleted = false")
@Table(name = "BS_Alarm_Type")
@Comment("报警类型信息")
@EntityListeners(AuditingEntityListener.class)
public class AlarmType implements Serializable {
@Serial
private static final long serialVersionUID = -735021155587741700L;
@Id
@Comment("主键id")
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
private Long id;
@Comment("报警类型名称")
private String name;
@Comment("围栏类型")
private Integer fenceType;
@Comment("关联参数类型")
private Integer relevanceParam;
@Comment("备注")
private String comment;
@Comment("创建时间")
@CreatedDate
@Column(nullable = false)
private LocalDateTime createTime;
@Comment("最后修改时间")
@LastModifiedDate
@Column(nullable = false)
private LocalDateTime lastUpdateTime;
@Comment(value = "是否删除")
@Column(nullable = false)
private Boolean deleted;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.alarm;
import java.io.Serializable;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 14:41
*/
@Repository
public interface AlarmTypeRepository
extends JpaRepository<AlarmType, Serializable>, JpaSpecificationExecutor<AlarmType> {
/**
* 查询名称是否存在
* @param name 名称
* @return true:存在 false:不存在
*/
Boolean existsByName(String name);
/**
* 根据名称查询
* @param name 名称
* @return 是否存在
*/
List<AlarmType> findAllByName(String name);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.broadcast;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.UpdateTimestamp;
import org.hibernate.snowflake.SnowflakeId;
import org.locationtech.jts.geom.Point;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:06
*/
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Comment("播报设备表")
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_BROADCAST")
public class Broadcast implements Serializable {
@Serial
private static final long serialVersionUID = 2856845594409003209L;
@Comment("编号")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("播报设备编号")
String broadcastNum;
@Comment("播报设备名称")
String broadcastName;
@Comment("坐标点信息")
Point point;
@Comment("播报设备地址")
String broadcastAdd;
@Comment("备注")
String remark;
@Comment("是否启用")
String status;
@Comment("创建时间")
@CreationTimestamp
LocalDateTime createTime;
@Comment("修改时间")
@UpdateTimestamp
LocalDateTime updateTime;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.broadcast;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.CreationTimestamp;
/**
* 播报音频
*
* @author LJ-2204
* @date 2022/5/7
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_BROADCAST_AUDIO")
@Comment("播报语音")
public class BroadcastAudio extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -7232247536987652847L;
@Comment("语音名称")
String name;
@Comment("语音地址")
String uri;
@Comment("上传时间")
@CreationTimestamp
LocalDateTime uploadTime;
@Comment("备注")
String describe;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.broadcast;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* 播报音频
*
* @author LJ-2204
* @date 2022/5/7
*/
@Repository
public interface BroadcastAudioRepository
extends JpaRepository<BroadcastAudio, Serializable>, JpaSpecificationExecutor<BroadcastAudio> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.broadcast;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tzl
* 2022/5/5 17:13
*/
@Repository
public interface BroadcastRepository
extends JpaRepository<Broadcast, Serializable>, JpaSpecificationExecutor<Broadcast> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.car;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tzl
* 2022/4/11 13:42
*/
@Repository
public interface CarRepository extends JpaRepository<Car, Serializable>, JpaSpecificationExecutor<Car> {
// /**
// * 检查是否存在相同车牌号登记
// *
// * @param param String 车牌号码
// * @return 是否存在
// */
// @Query("SELECT COUNT(c.id) FROM bs_car c where car_num=?1 and label_card_status <>'已收卡'")
// boolean hasCarInfoByCarNum(String param);
//
// /**
// * 检查是否存在相同手机号码登记
// *
// * @param param String 手机号码
// * @return 是否存在
// */
// @Query("SELECT COUNT(c.id) FROM bs_car c where driver_mobile=?1 and label_card_status <>'已收卡'")
// boolean hasCarInfoByMobile(String param);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.district;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.Where;
import org.hibernate.snowflake.SnowflakeId;
import org.locationtech.jts.geom.Geometry;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
/**
* @author tml
* @version 1.0
* @date 2022/4/26 11:44
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Entity
@Where(clause = "deleted = false")
@Table(name = "BS_District")
@Comment("区域信息")
@EntityListeners(AuditingEntityListener.class)
public class District implements Serializable {
@Serial
private static final long serialVersionUID = -1469002957843445743L;
@Id
@Comment("主键id")
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
private Long id;
@Comment("区域信息名称")
private String name;
@Comment("风险等级")
private String riskGrade;
@Comment("消抖时间(秒)")
private Integer debouncingDuration;
@Comment("超时时间(秒)")
private Integer timeoutDuration;
@Comment("区域信息")
@Type(type = "jts_geometry")
@Column(columnDefinition = "geometry")
private Geometry geometry;
@Comment("创建时间")
@CreatedDate
@Column(nullable = false)
private LocalDateTime createTime;
@Comment("最后修改时间")
@LastModifiedDate
@Column(nullable = false)
private LocalDateTime lastUpdateTime;
@Comment(value = "是否删除")
@Column(nullable = false)
Boolean deleted;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.district;
import java.io.Serializable;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
/**
* @author tml
* @version 1.0
* @date 2022/4/26 13:59
*/
@Repository
public interface DistrictRepository extends JpaRepository<District, Serializable>, JpaSpecificationExecutor<District> {
/**
* 查询名称是否存在
* @param name 区域名称
* @return true:存在 false:不存在
*/
Boolean existsByName(String name);
/**
* 根据名称查询区域信息列表
* @param name 区域名称
* @return 区域列表
*/
List<District> findAllByName(String name);
/**
* 根据名称模糊查询区域信息
* @param name 名称
* @return 区域列表
*/
@Query("SELECT d FROM District d WHERE d.name like %?1%")
List<District> findLikeName(String name);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.icon;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
/**
*
* @author tzl
* @version 1.0
* @description: 图标
* @date 2022/4/29 11:08
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_ICON")
@Comment("图标")
public class Icon implements Serializable {
@Serial
private static final long serialVersionUID = 7848846860889883431L;
@Comment("编号")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("图标名称")
String iconName;
@Comment("图标类型")
String iconType;
@Comment("图标分类")
String iconSort;
@Comment("在线图标")
String iconOnline;
@Comment("离线图标")
String iconOffline;
@Comment("创建时间")
LocalDateTime createTime;
@Comment("修改时间")
LocalDateTime updateTime;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.icon;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tzl
* 2022/4/29 13:49
*/
@Repository
public interface IconRepository extends JpaRepository<Icon, Serializable>, JpaSpecificationExecutor<Icon> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.key;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yiring.auth.domain.user.User;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
/**
*
*
* @author LJ-2204
* @date 2022/5/6
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_KEY_ALARM")
@Comment("按键报警规则")
public class KeyAlarm extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -6050505164664867107L;
@Comment("地图 ID")
Long areaId;
@ManyToOne
@JoinColumn(name = "leader_id")
@JsonIgnore
@Comment("负责人")
User leader;
@Comment("报警状态")
Boolean enable;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.key;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
*
* @author LJ-2204
* @date 2022/5/6
*/
@Repository
public interface KeyAlarmRepository extends JpaRepository<KeyAlarm, Serializable>, JpaSpecificationExecutor<KeyAlarm> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.key;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yiring.auth.domain.dept.Department;
import com.yiring.auth.domain.user.User;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
/**
* 按键报警规则
*
* @author LJ-2204
* @date 2022/5/6
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_KEY_ALARM_RULES")
@Comment("按键报警规则")
public class KeyAlarmRules extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -302167871277966250L;
@Comment("所属部门")
@ManyToOne
@JsonIgnore
@JoinColumn(name = "department_id")
Department department;
@JsonIgnore
@Builder.Default
@Comment("用户集合")
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "BS_KEY_ALARM_RULES_USERS",
joinColumns = { @JoinColumn(name = "key_id") },
inverseJoinColumns = { @JoinColumn(name = "user_id") }
)
Set<User> users = new HashSet<>(0);
@Comment("推送类型")
String types;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.key;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
*
* @author LJ-2204
* @date 2022/5/6
*/
@Repository
public interface KeyAlarmRulesRepository
extends JpaRepository<KeyAlarmRules, Serializable>, JpaSpecificationExecutor<KeyAlarmRules> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.auth.domain.user.User;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Where;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 14:25
*/
@Getter
@Setter
@ToString
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Where(clause = "deleted = false")
@Entity
@Table(name = "BS_LOCATION_ALARM_RULE")
@Comment("电子围栏的报警规则")
public class LocationAlarmRule extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -2268859882881201793L;
@Comment("地图ID")
private Long mapId;
@Comment("地图名称")
private String mapName;
@Comment("电子围栏")
@ManyToOne
@JoinColumn(name = "fence_id")
private LocationFence locationFence;
@Comment("接收人集合")
@ManyToMany
@ToString.Exclude
private Set<User> users;
@Comment("通知方式")
private String informManner;
@Comment("报警类型")
@ManyToOne
@JoinColumn(name = "alarm_type_id")
private AlarmType alarmType;
@Comment(value = "是否删除")
@Column(nullable = false)
Boolean deleted;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 15:13
*/
@Repository
public interface LocationAlarmRuleRepository
extends JpaRepository<LocationAlarmRule, Serializable>, JpaSpecificationExecutor<LocationAlarmRule> {}
...@@ -6,17 +6,15 @@ import com.yiring.common.domain.BasicEntity; ...@@ -6,17 +6,15 @@ import com.yiring.common.domain.BasicEntity;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashSet; import java.util.HashSet;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import javax.persistence.*; import javax.persistence.*;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.hibernate.Hibernate;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Type;
import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.Point;
/** /**
...@@ -82,8 +80,6 @@ public class LocationBeacon extends BasicEntity implements Serializable { ...@@ -82,8 +80,6 @@ public class LocationBeacon extends BasicEntity implements Serializable {
Double distance; Double distance;
@Comment("坐标点信息") @Comment("坐标点信息")
@Type(type = "jts_geometry")
@Column(columnDefinition = "point")
Point point; Point point;
@FieldMapping @FieldMapping
...@@ -94,22 +90,12 @@ public class LocationBeacon extends BasicEntity implements Serializable { ...@@ -94,22 +90,12 @@ public class LocationBeacon extends BasicEntity implements Serializable {
@Comment("电量单位") @Comment("电量单位")
String voltUnit; String voltUnit;
@Comment("状态更新时间")
LocalDateTime time;
@Comment("围栏集合") @Comment("围栏集合")
@Builder.Default @Builder.Default
@ManyToMany @ManyToMany
@ToString.Exclude @ToString.Exclude
Set<LocationFence> fences = new HashSet<>(0); Set<LocationFence> fences = new HashSet<>(0);
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
LocationBeacon that = (LocationBeacon) o;
return getId() != null && Objects.equals(getId(), that.getId());
}
@Override
public int hashCode() {
return getClass().hashCode();
}
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location; package com.yiring.app.domain.location;
import com.yiring.common.annotation.FieldMapping; import com.yiring.app.domain.video.Video;
import com.yiring.common.domain.BasicEntity; import com.yiring.common.domain.BasicEntity;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
...@@ -9,11 +9,11 @@ import java.util.HashSet; ...@@ -9,11 +9,11 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import javax.persistence.*; import javax.persistence.*;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import org.hibernate.annotations.Where;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
/** /**
...@@ -32,47 +32,62 @@ import org.locationtech.jts.geom.Geometry; ...@@ -32,47 +32,62 @@ import org.locationtech.jts.geom.Geometry;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@FieldNameConstants @FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE) @Where(clause = "deleted = false")
@Entity @Entity
@Table(name = "BS_LOCATION_FENCE", indexes = { @Index(columnList = "mode") }) @Table(name = "BS_LOCATION_FENCE")
@Comment("围栏") @Comment("围栏")
public class LocationFence extends BasicEntity implements Serializable { public class LocationFence extends BasicEntity implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 4155868702188991300L; private static final long serialVersionUID = 4155868702188991300L;
@Comment("地图 ID") @Comment("围栏名称")
Long areaId; private String name;
@FieldMapping("entityTypes") @Comment("地图ID")
@Comment("围栏模型") private Long mapId;
@Enumerated(EnumType.STRING)
Mode mode; @Comment("地图名称")
private String mapName;
@Comment("摄像头")
@ManyToOne
@JoinColumn(name = "video_id")
private Video video;
@Comment("围栏类别")
private Integer fenceType;
@Comment("空间信息") @Comment("空间信息")
@Type(type = "jts_geometry") @Type(type = "jts_geometry")
@Column(columnDefinition = "geometry") @Column(columnDefinition = "geometry")
Geometry geometry; private Geometry geometry;
@Comment("超时时间(秒)") @Comment("滞留时间(秒)")
Integer overtime; private Integer residenceTime;
@Comment("消抖时间(秒)") @Comment("消抖时间(秒)")
Integer threshold; private Integer threshold;
@Comment("是否启用")
private Boolean enable;
@Comment(value = "是否删除")
@Column(nullable = false)
Boolean deleted;
@Comment("信标集合") @Comment("信标集合")
@Builder.Default @Builder.Default
@ManyToMany @ManyToMany
@ToString.Exclude @ToString.Exclude
Set<LocationBeacon> beacons = new HashSet<>(0); private Set<LocationBeacon> beacons = new HashSet<>(0);
@Comment("围栏规则集合") @Comment("围栏规则集合")
@Builder.Default @Builder.Default
@OneToMany(mappedBy = "fence") @OneToMany(mappedBy = "fence")
@ToString.Exclude @ToString.Exclude
Set<LocationFenceRule> rules = new HashSet<>(0); private Set<LocationFenceRule> rules = new HashSet<>(0);
/*@SuppressWarnings({ "unused" })
@SuppressWarnings({ "unused" })
public enum Mode { public enum Mode {
NORMAL("常规区域"), NORMAL("常规区域"),
DANGER("危险源区域"); DANGER("危险源区域");
...@@ -83,5 +98,5 @@ public class LocationFence extends BasicEntity implements Serializable { ...@@ -83,5 +98,5 @@ public class LocationFence extends BasicEntity implements Serializable {
Mode(String text) { Mode(String text) {
this.text = text; this.text = text;
} }
} }*/
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location;
import java.io.Serializable;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 13:48
*/
@Repository
public interface LocationFenceRepository
extends JpaRepository<LocationFence, Serializable>, JpaSpecificationExecutor<LocationFence> {
/**
* 查询名称是否存在
* @param name 围栏名称
* @return true:存在 false:不存在
*/
Boolean existsByName(String name);
/**
* 根据名称查询围栏信息
* @param name 围栏名称
* @return 围栏信息
*/
List<LocationFence> findAllByName(String name);
/**
* 根据名称模糊查询围栏信息
* @param name 围栏名称
* @return 围栏信息
*/
@Query("SELECT f FROM LocationFence f WHERE name like %?1% AND deleted = false")
List<LocationFence> findLikeName(String name);
}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location; package com.yiring.app.domain.location;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.common.domain.BasicEntity; import com.yiring.common.domain.BasicEntity;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import javax.persistence.Entity; import java.util.Objects;
import javax.persistence.JoinColumn; import javax.persistence.*;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.Hibernate;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Where;
/** /**
* 围栏规则 * 围栏规则
...@@ -25,11 +26,11 @@ import org.hibernate.annotations.Comment; ...@@ -25,11 +26,11 @@ import org.hibernate.annotations.Comment;
@Getter @Getter
@Setter @Setter
@ToString @ToString
@Builder @SuperBuilder(toBuilder = true)
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@FieldNameConstants @FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE) @Where(clause = "deleted = false")
@Entity @Entity
@Table(name = "BS_LOCATION_FENCE_RULE") @Table(name = "BS_LOCATION_FENCE_RULE")
@Comment("围栏规则") @Comment("围栏规则")
...@@ -41,10 +42,33 @@ public class LocationFenceRule extends BasicEntity implements Serializable { ...@@ -41,10 +42,33 @@ public class LocationFenceRule extends BasicEntity implements Serializable {
@Comment("围栏") @Comment("围栏")
@ManyToOne @ManyToOne
@JoinColumn(name = "fence_id") @JoinColumn(name = "fence_id")
LocationFence fence; private LocationFence fence;
// TODO
// 字段补充
// 关联表补充(报警规则)
// 关联表配置值补充
@Comment("报警类别")
@ManyToOne
@JoinColumn(name = "alarm_id")
private AlarmType alarmType;
@Comment("关联参数类别")
private Integer relevanceParamType;
@Comment("规则,用json存入")
private String rule;
@Comment(value = "是否删除")
@Column(nullable = false)
Boolean deleted;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
LocationFenceRule that = (LocationFenceRule) o;
return getId() != null && Objects.equals(getId(), that.getId());
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), fence, alarmType, relevanceParamType, rule, deleted);
}
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:40
*/
@Repository
public interface LocationFenceRuleRepository
extends JpaRepository<LocationFenceRule, Serializable>, JpaSpecificationExecutor<LocationFenceRule> {}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location; package com.yiring.app.domain.location;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.vladmihalcea.hibernate.type.json.JsonType; import com.vladmihalcea.hibernate.type.json.JsonBinaryType;
import com.yiring.auth.domain.user.User; import com.yiring.auth.domain.user.User;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*; import javax.persistence.*;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDef;
import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.Point;
...@@ -40,19 +38,17 @@ import org.locationtech.jts.geom.Point; ...@@ -40,19 +38,17 @@ import org.locationtech.jts.geom.Point;
@FieldNameConstants @FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE) @FieldDefaults(level = AccessLevel.PRIVATE)
@Entity @Entity
@TypeDef(name = "json", typeClass = JsonType.class) @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
@Table(name = "BS_LOCATION_LOG") @Table(name = "BS_LOCATION_LOG", indexes = { @Index(name = "idx_time", columnList = "time") })
@Comment("定位数据") @Comment("定位数据")
public class LocationLog implements Serializable { public class LocationLog implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 3467455881020691989L; private static final long serialVersionUID = 3467455881020691989L;
@Id @Comment("定位标签时序复合主键")
@Comment("时间") @EmbeddedId
@Column(nullable = false, columnDefinition = "timestamp without time zone") TagTimeId id;
@CreationTimestamp
LocalDateTime time;
@Comment("地图 ID") @Comment("地图 ID")
Long areaId; Long areaId;
...@@ -64,7 +60,7 @@ public class LocationLog implements Serializable { ...@@ -64,7 +60,7 @@ public class LocationLog implements Serializable {
* 来源于定位数据产生时刻标签所属的人员 * 来源于定位数据产生时刻标签所属的人员
*/ */
@Comment("用户") @Comment("用户")
@ManyToOne @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id") @JoinColumn(name = "user_id")
User user; User user;
...@@ -72,29 +68,20 @@ public class LocationLog implements Serializable { ...@@ -72,29 +68,20 @@ public class LocationLog implements Serializable {
* 来源于定位标签定位时刻的人员状态 * 来源于定位标签定位时刻的人员状态
*/ */
@Comment("用户状态") @Comment("用户状态")
String status; User.Status status;
@Comment("标签")
@ManyToOne
@JoinColumn(name = "tag_id")
LocationTag tag;
@Comment("坐标点信息") @Comment("坐标点信息")
@Type(type = "jts_geometry")
@Column(columnDefinition = "point")
Point point; Point point;
@Comment("信标集合") @Comment("信标集合")
@Builder.Default @Type(type = "jsonb")
@OneToMany @Column(columnDefinition = "jsonb")
@ToString.Exclude JSONArray beacons;
Set<LocationBeacon> beacons = new HashSet<>(0);
@Comment("围栏集合") @Comment("围栏集合")
@Builder.Default @Type(type = "jsonb")
@OneToMany @Column(columnDefinition = "jsonb")
@ToString.Exclude JSONArray fences;
Set<LocationFence> fences = new HashSet<>(0);
@Comment("静止/运动") @Comment("静止/运动")
Boolean silent; Boolean silent;
...@@ -106,8 +93,8 @@ public class LocationLog implements Serializable { ...@@ -106,8 +93,8 @@ public class LocationLog implements Serializable {
String voltUnit; String voltUnit;
@Comment("原始数据") @Comment("原始数据")
@org.hibernate.annotations.Type(type = "json") @Type(type = "jsonb")
@Column(columnDefinition = "json") @Column(columnDefinition = "jsonb")
JSONObject raw; JSONObject raw;
@Comment("定位时间") @Comment("定位时间")
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location; package com.yiring.app.domain.location;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -14,4 +13,4 @@ import org.springframework.stereotype.Repository; ...@@ -14,4 +13,4 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface LocationLogRepository public interface LocationLogRepository
extends JpaRepository<LocationLog, Serializable>, JpaSpecificationExecutor<LocationLog> {} extends JpaRepository<LocationLog, TagTimeId>, JpaSpecificationExecutor<LocationLog> {}
...@@ -6,7 +6,6 @@ import com.yiring.common.annotation.FieldMapping; ...@@ -6,7 +6,6 @@ import com.yiring.common.annotation.FieldMapping;
import com.yiring.common.domain.BasicEntity; import com.yiring.common.domain.BasicEntity;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Objects; import java.util.Objects;
import javax.persistence.*; import javax.persistence.*;
import lombok.*; import lombok.*;
...@@ -15,6 +14,7 @@ import lombok.experimental.FieldNameConstants; ...@@ -15,6 +14,7 @@ import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.locationtech.jts.geom.Point;
/** /**
* 定位标签 * 定位标签
...@@ -82,8 +82,7 @@ public class LocationTag extends BasicEntity implements Serializable { ...@@ -82,8 +82,7 @@ public class LocationTag extends BasicEntity implements Serializable {
@Comment("静止/运动") @Comment("静止/运动")
Boolean silent; Boolean silent;
@OneToOne @ManyToOne
@JoinColumn(name = "user_id")
@Comment("绑定用户") @Comment("绑定用户")
User user; User user;
...@@ -99,12 +98,12 @@ public class LocationTag extends BasicEntity implements Serializable { ...@@ -99,12 +98,12 @@ public class LocationTag extends BasicEntity implements Serializable {
@Comment("电量单位") @Comment("电量单位")
String voltUnit; String voltUnit;
@FieldMapping(value = "raiseTimestamp", desc = "更新时间戳", type = Long.class) @FieldMapping
@Comment("更新时间") @Comment("类型(1:内部/2:访客)")
LocalDateTime updateTime; Integer category;
@Comment("创建时间") @Comment("最后定位坐标")
LocalDateTime createTime; Point point;
@SuppressWarnings({ "unused" }) @SuppressWarnings({ "unused" })
public enum Type { public enum Type {
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.FetchType;
import javax.persistence.OneToOne;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
/**
* 定位标签时序联合主键
* @author Jim
* @version 0.1
* 2022/5/10 10:24
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Embeddable
public class TagTimeId implements Serializable {
@Serial
private static final long serialVersionUID = -5254861902659471641L;
@Comment("定位标签")
@OneToOne(fetch = FetchType.LAZY)
LocationTag tag;
@Comment("定位时间")
@Column(nullable = false, columnDefinition = "timestamp without time zone")
LocalDateTime time;
public TagTimeId(LocationTag tag) {
this.tag = tag;
this.time = LocalDateTime.now();
}
}
...@@ -11,7 +11,8 @@ import lombok.*; ...@@ -11,7 +11,8 @@ import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDef;
/** /**
...@@ -45,10 +46,11 @@ public class ZyRealtimeLog implements Serializable { ...@@ -45,10 +46,11 @@ public class ZyRealtimeLog implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 5545864821082386L; private static final long serialVersionUID = 5545864821082386L;
@Id
@Comment("时间") @Comment("时间")
@Id
@GeneratedValue(generator = "time-id")
@GenericGenerator(name = "time-id", strategy = "com.yiring.app.util.TimeIdGenerator")
@Column(nullable = false, columnDefinition = "timestamp without time zone") @Column(nullable = false, columnDefinition = "timestamp without time zone")
@CreationTimestamp
LocalDateTime time; LocalDateTime time;
@Comment("类型") @Comment("类型")
...@@ -56,7 +58,7 @@ public class ZyRealtimeLog implements Serializable { ...@@ -56,7 +58,7 @@ public class ZyRealtimeLog implements Serializable {
String method; String method;
@Comment("内容") @Comment("内容")
@org.hibernate.annotations.Type(type = "jsonb") @Type(type = "jsonb")
@Column(nullable = false, columnDefinition = "jsonb") @Column(nullable = false, columnDefinition = "jsonb")
JSONObject raw; JSONObject raw;
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.rehearsal;
import com.yiring.app.domain.video.Video;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.Where;
import org.locationtech.jts.geom.Geometry;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
/**
* @author tml
* @version 1.0
* @date 2022/5/7 10:16
*/
@Getter
@Setter
@ToString
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Entity
@Where(clause = "deleted = false")
@Table(name = "BS_ACCIDENT_SPOT")
@Comment("事故点信息")
@EntityListeners(AuditingEntityListener.class)
public class AccidentSpot extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = 3599118033272730887L;
@Comment("事故点名称")
private String name;
@Comment("地图id")
private Long mapId;
@Comment("地图名称")
private String mapName;
@Comment("空间信息")
@Type(type = "jts_geometry")
@Column(columnDefinition = "geometry")
private Geometry geometry;
@Comment("摄像头")
@ManyToOne
@JoinColumn(name = "video_id")
private Video video;
@Comment("超时时间(秒)")
private Integer timeoutDuration;
@Comment("消抖时间(秒)")
private Integer threshold;
@Comment("是否启用")
private Boolean enable;
@Comment(value = "是否删除")
@Column(nullable = false)
private Boolean deleted;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.rehearsal;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
/**
* @author tml
* @version 1.0
* @date 2022/5/7 10:24
*/
@Repository
public interface AccidentSpotRepository
extends JpaRepository<AccidentSpot, Serializable>, JpaSpecificationExecutor<AccidentSpot> {
/**
* 查询名称是否存在
* @param name 事故点名称
* @return true:存在 false:不存在
*/
Boolean existsByName(String name);
/**
* 根据名称查询所有事故点
* @param name 事故点名称
* @return 事故点信息
*/
List<AccidentSpot> findAllByName(String name);
/**
* 根据名称全模糊查询
* @param name 名称
* @return 事故点信息
*/
@Query("SELECT a FROM AccidentSpot a WHERE a.name like %?1% AND a.deleted = false")
List<AccidentSpot> findLikeName(String name);
/**
* 批量删除
* @param ids id集
* @param now 当前时间
* @return 删除了几条数据
*/
@Query("UPDATE AccidentSpot SET deleted = true, updateTime = :now WHERE id IN (:ids)")
int batchRemove(@Param("ids") Set<Long> ids, @Param("now") LocalDateTime now);
/**
* 批量启用/停用
* @param ids 事故点id集
* @param now 当前时间
* @param enable true:启用 false:停用
* @return 启用/停用了多少条数据
*/
@Query("UPDATE AccidentSpot SET enable = :enable ,updateTime = :now WHERE id IN (:ids) AND deleted = false")
@Modifying
int batchEnable(@Param("ids") Set<Long> ids, @Param("enable") boolean enable, @Param("now") LocalDateTime now);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.rehearsal;
import com.yiring.app.domain.video.Video;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.Where;
import org.locationtech.jts.geom.Geometry;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
/**
* @author tml
* @version 1.0
* @date 2022/5/9 9:14
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@FieldNameConstants
@Entity
@SuperBuilder(toBuilder = true)
@Where(clause = "deleted = false")
@Table(name = "BS_EVACUATION_ZONE")
@Comment("撤离区信息")
@EntityListeners(AuditingEntityListener.class)
public class EvacuationZone extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = 2069438753104654297L;
@Comment("撤离区名称")
private String name;
@Comment("地图id")
private Long mapId;
@Comment("地图名称")
private String mapName;
@Comment("空间信息")
@Type(type = "jts_geometry")
@Column(columnDefinition = "geometry")
private Geometry geometry;
@Comment("摄像头")
@ManyToOne
@JoinColumn(name = "video_id")
private Video video;
@Comment("超时时间(秒)")
private Integer timeoutDuration;
@Comment("消抖时间(秒)")
private Integer threshold;
@Comment("是否启用")
private Boolean enable;
@Comment(value = "是否删除")
@Column(nullable = false)
private Boolean deleted;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.rehearsal;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
/**
* @author tml
* @version 1.0
* @date 2022/5/9 9:19
*/
@Repository
public interface EvacuationZoneRepository
extends JpaRepository<EvacuationZone, Serializable>, JpaSpecificationExecutor<EvacuationZone> {
/**
* 判断名称是否存在
* @param name 撤离区名称
* @return true:存在 false:不存在
*/
boolean existsByName(String name);
/**
* 根据名称查询
* @param name 撤离区名称
* @return 撤离区列表
*/
List<EvacuationZone> findAllByName(String name);
/**
* 批量删除
* @param ids id集
* @param now 当前时间
* @return 删除了多少条
*/
@Query("UPDATE EvacuationZone SET deleted = true, updateTime = :now WHERE id in (:ids)")
@Modifying
int removeMany(@Param("ids") Set<Long> ids, @Param("now") LocalDateTime now);
/**
* 名称模糊查询撤离区
* @param name 名称
* @return 撤离区列表
*/
@Query("SELECT e FROM EvacuationZone e WHERE e.deleted = false AND e.name like %?1%")
List<EvacuationZone> findLikeName(String name);
/**
* 批量启用或停用撤离区
* @param enable 启用或停用
* @param ids 撤离区id集
* @param now 当前时间
* @return 改变了几条
*/
@Query("UPDATE EvacuationZone SET enable = :enable, updateTime = :now WHERE id in (:ids) AND deleted = false")
@Modifying
int changeEnable(@Param("enable") boolean enable, @Param("ids") Set<Long> ids, @Param("now") LocalDateTime now);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.rehearsal;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Where;
/**
* @author tml
* @version 1.0
* @date 2022/5/9 17:07
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@FieldNameConstants
@SuperBuilder(toBuilder = true)
@Where(clause = "deleted = false")
@Table(name = "BS_REHEARSAL_PLAN")
@Comment("演练计划信息")
public class RehearsalPlan extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -5215681932640062553L;
@Comment("演练主题")
private String topical;
@Comment("事故点")
@ManyToOne
@JoinColumn(name = "accident_spot_id")
private AccidentSpot accidentSpot;
@Comment("周边范围(事故点周围多少米)")
private Integer scope;
@Comment("撤离区")
@ManyToOne
@JoinColumn(name = "evacuation_zone_id")
private EvacuationZone evacuationZone;
@Comment("风险程度(1:红色风险, 2:橙色风险, 3:黄色风险, 4:蓝色风险)")
private Integer riskLevel;
@Comment("事故信息")
private String accidentMsg;
@Comment("演练时间")
private LocalDateTime rehearsalTime;
@Comment("推送信息")
private String pushMsg;
@Comment("演练计划的状态(1:未启动, 2:进行中, 3:已结束)")
private Integer status;
@Comment("逻辑删除")
private boolean deleted;
}
...@@ -13,4 +13,13 @@ import org.springframework.stereotype.Repository; ...@@ -13,4 +13,13 @@ import org.springframework.stereotype.Repository;
*/ */
@Repository @Repository
public interface VideoRepository extends JpaRepository<Video, Serializable>, JpaSpecificationExecutor<Video> {} public interface VideoRepository extends JpaRepository<Video, Serializable>, JpaSpecificationExecutor<Video> {
/**
* 根据监控点位名称模糊查询
* @author tzl
* @date 2022/4/27 13:39
* @param VideoName 监控点位名称
* @return com.yiring.app.domain.video.Video
*/
Video findByVideoNameLike(String VideoName);
}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.car; package com.yiring.app.domain.visitor;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial; import java.io.Serial;
...@@ -48,24 +48,6 @@ public class Car implements Serializable { ...@@ -48,24 +48,6 @@ public class Car implements Serializable {
@Comment("车辆类型") @Comment("车辆类型")
String carType; String carType;
@Comment("司机名称")
String driverName;
@Comment("司机电话")
String driverMobile;
@Comment("标签卡")
String labelCard;
@Comment("所属单位id")
String orgId;
@Comment("被访人id")
String intervieweeId;
@Comment("来访原因")
String reason;
@Comment("收卡时间") @Comment("收卡时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime cardRecTime; LocalDateTime cardRecTime;
...@@ -77,6 +59,6 @@ public class Car implements Serializable { ...@@ -77,6 +59,6 @@ public class Car implements Serializable {
@Comment("发卡时间") @Comment("发卡时间")
LocalDateTime cardSendTime; LocalDateTime cardSendTime;
@Comment("备用字段") @Comment("标签卡")
String reserve4; String labelCard;
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.visitor;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
/**
* @author tzl
* 2022/4/11 13:42
*/
@Repository
public interface CarRepository extends JpaRepository<Car, Serializable>, JpaSpecificationExecutor<Car> {
/**
* 检查车牌号车辆是否已经在园内
*
* @param param String 车牌号码
* @return 是否存在
*/
@Query("SELECT COUNT(c.id) FROM Car c where carNum=?1 and cardRecTime is null")
int hasCarInfoByCarNum(String param);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yiring.auth.domain.user.User;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
/**
* 邀请管理
*
* @author Administrator
* @version 1.0
* @description: 邀请信息实体
* @date 2022/4/24 16:43
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@DynamicInsert
@DynamicUpdate
@Table(name = "BS_INVITATION")
@Comment("邀请信息")
public class Invitation implements Serializable {
@Serial
private static final long serialVersionUID = -1330887992216252468L;
@Id
@Comment("主键id")
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("邀请方式")
String InvitationMethod;
@Comment("状态")
String status;
// @Comment("邀请人id")
// Long inviterId;
@Comment("邀请人数")
Integer numOfVisitor;
@Comment("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime createTime;
@Comment("修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime updateTime;
// @Comment("访客id")
// Long visitorId;
@Comment("被邀请访客")
@JsonIgnore
@OneToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "visitor_id", referencedColumnName = "id")
Visitor visitor;
@Comment("邀请人")
@JsonIgnore
@OneToOne
@JoinColumn(name = "inviter_id", referencedColumnName = "id")
User user;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.visitor;
import java.io.Serializable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tzl
* 2022/4/24 16:53
*/
@Repository
public interface InvitationRepository
extends JpaRepository<Invitation, Serializable>, JpaSpecificationExecutor<Invitation> {
/**
* 小程序用户查看邀请信息
* @author tzl
* @date 2022/4/28 11:08
* @param mobile 手机
* @param deleted 是否删除
* @return java.util.List<com.yiring.app.domain.visitor.Invitation>
*/
Page<Invitation> findAllByVisitor_VisitorMobileAndVisitor_Deleted(String mobile, String deleted, Pageable pageable);
}
...@@ -2,15 +2,18 @@ ...@@ -2,15 +2,18 @@
package com.yiring.app.domain.visitor; package com.yiring.app.domain.visitor;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiring.auth.domain.user.User;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import javax.persistence.*; import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Table;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.*;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId; import org.hibernate.snowflake.SnowflakeId;
/** /**
...@@ -26,6 +29,8 @@ import org.hibernate.snowflake.SnowflakeId; ...@@ -26,6 +29,8 @@ import org.hibernate.snowflake.SnowflakeId;
@FieldNameConstants @FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE) @FieldDefaults(level = AccessLevel.PRIVATE)
@Entity @Entity
@DynamicInsert
@DynamicUpdate
@Table(name = "BS_VISITOR") @Table(name = "BS_VISITOR")
@Comment("访客信息") @Comment("访客信息")
public class Visitor implements Serializable { public class Visitor implements Serializable {
...@@ -49,10 +54,10 @@ public class Visitor implements Serializable { ...@@ -49,10 +54,10 @@ public class Visitor implements Serializable {
String visitorCarNum; String visitorCarNum;
@Comment("是否特殊作业") @Comment("是否特殊作业")
boolean taskType; String taskType;
@Comment("邀请人数") // @Comment("邀请人数")
Integer numOfVisitor; // Integer numOfVisitor;
@Comment("访客来源") @Comment("访客来源")
String visitorSource; String visitorSource;
...@@ -66,10 +71,10 @@ public class Visitor implements Serializable { ...@@ -66,10 +71,10 @@ public class Visitor implements Serializable {
@Comment("所属单位id") @Comment("所属单位id")
String orgId; String orgId;
@Comment("被访人id") // @Comment("被访人id")
String intervieweeId; // Long intervieweeId;
@Comment("来访原因") @Comment("来访原因/邀请原因")
String reason; String reason;
@Comment("收卡时间") @Comment("收卡时间")
...@@ -89,11 +94,32 @@ public class Visitor implements Serializable { ...@@ -89,11 +94,32 @@ public class Visitor implements Serializable {
LocalDateTime cardSendTime; LocalDateTime cardSendTime;
@Comment("备用字段") @Comment("备用字段")
String reserve1; Long reserve1;
@Comment("备用字段") @Comment("是否已删除:Y是 N否")
String reserve2; @Column(columnDefinition = "VARCHAR DEFAULT 'N'")
String deleted;
@Comment("主访人员id")
Long mainVisitorId;
@Comment("备用字段") @Comment("备用字段")
String reserve3; String reserve3;
@Comment("访客车辆")
@OneToOne(cascade = { CascadeType.ALL })
Car car;
@Comment("被访人信息")
@OneToOne
@JoinColumn(name = "interviewee_id", referencedColumnName = "id")
User user;
@Comment("修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime updateTime;
// @Comment("邀请人")
// @OneToOne(cascade = { CascadeType.ALL })
// @JoinColumn(name = "main_visitor_id", referencedColumnName = "id")
// Visitor visitor;
} }
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
package com.yiring.app.domain.visitor; package com.yiring.app.domain.visitor;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -11,4 +14,12 @@ import org.springframework.stereotype.Repository; ...@@ -11,4 +14,12 @@ import org.springframework.stereotype.Repository;
* 2022/4/19 14:06 * 2022/4/19 14:06
*/ */
@Repository @Repository
public interface VisitorRepository extends JpaRepository<Visitor, Serializable>, JpaSpecificationExecutor<Visitor> {} public interface VisitorRepository extends JpaRepository<Visitor, Serializable>, JpaSpecificationExecutor<Visitor> {
Visitor findByIdAndDeleted(Long id, String deleted);
List<Visitor> findAllByMainVisitorIdAndDeletedEquals(Long mainId, String deleted);
List<Visitor> findAllByMainVisitorIdAndDeletedEqualsAndIdIsNot(Long mainId, String deleted, Long id);
Page<Visitor> findAllByVisitorMobileAndDeletedEquals(String mobile, String deleted, Pageable pageable);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.alarm;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.domain.alarm.AlarmType;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 16:44
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AlarmTypeExcel implements Serializable {
@Serial
private static final long serialVersionUID = -2986256700153819605L;
@ExcelColumn(title = "名称")
private String name;
@ExcelColumn(title = "围栏类别")
private String fenceType;
@ExcelColumn(title = "关联参数")
private String relevanceParam;
@ExcelColumn(title = "备注", width = 15)
private String comment;
public static List<AlarmTypeExcel> transforms(List<AlarmType> alarmTypeList) {
return alarmTypeList.stream().map(AlarmTypeExcel::transform).collect(Collectors.toList());
}
public static AlarmTypeExcel transform(AlarmType alarmType) {
return AlarmTypeExcel
.builder()
.name(alarmType.getName())
.fenceType(FenceTypeEnum.getByCode(alarmType.getFenceType()))
.relevanceParam(RelevanceParamEnum.getByCode(alarmType.getRelevanceParam()))
.comment(alarmType.getComment())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.analysis.history;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.vo.analysis.history.HistoryRouteVo;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Builder;
import lombok.Data;
import org.locationtech.jts.geom.Point;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 15:23
*/
@ExcelModel
@Data
@Builder
public class HistoryRouteExcel implements Serializable {
@Serial
private static final long serialVersionUID = 3021760052313853701L;
@ExcelColumn(title = "姓名")
private String name;
@ExcelColumn(title = "工号")
private String uuid;
@ExcelColumn(title = "经度")
private Double x;
@ExcelColumn(title = "纬度")
private Double y;
@ExcelColumn(title = "地图名称")
private String mapName;
@ExcelColumn(title = "记录时间", width = 20)
private LocalDateTime writeTime;
public static HistoryRouteExcel transform(HistoryRouteVo historyRouteVo) {
HistoryRouteExcel routeExcel = HistoryRouteExcel
.builder()
.name(historyRouteVo.getName())
.uuid(historyRouteVo.getUuid())
.mapName(historyRouteVo.getMapName())
.writeTime(historyRouteVo.getWriteTime())
.build();
Point point = historyRouteVo.getPoint();
if (point != null) {
routeExcel.setX(point.getX());
routeExcel.setY(point.getY());
}
return routeExcel;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.broadcast;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/6 9:04
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 2342047029622668894L;
@ExcelColumn(title = "编号", width = 10)
String broadcastNum;
@ExcelColumn(title = "设备名称", width = 10)
String broadcastName;
@ExcelColumn(title = "经度")
double lon;
@ExcelColumn(title = "纬度")
double lat;
@ExcelColumn(title = "设备地址", width = 10)
String broadcastAdd;
@ExcelColumn(title = "备注", width = 15)
String remark;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.broadcast;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* 2022/5/6 09:12
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastImportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 5422685189135254189L;
@ExcelColumn(title = "编号")
String broadcastNum;
@ExcelColumn(title = "设备名称")
String broadcastName;
@ExcelColumn(title = "经度")
double lon;
@ExcelColumn(title = "纬度")
double lat;
@ExcelColumn(title = "设备地址")
String broadcastAdd;
@ExcelColumn(title = "备注")
String remark;
// String status;
}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.dept; package com.yiring.app.excel.dept;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn; import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel; import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.auth.domain.dept.Department; import com.yiring.auth.domain.dept.Department;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
/** /**
* 部门信息控制器 * 部门导出
* *
* @author LJ-2204 * @author LJ-2204
* @date 2022/4/22 * @date 2022/4/22
...@@ -33,19 +31,26 @@ public class DepartmentExportExcel implements Serializable { ...@@ -33,19 +31,26 @@ public class DepartmentExportExcel implements Serializable {
@ExcelColumn(title = "部门名称") @ExcelColumn(title = "部门名称")
String name; String name;
@ExcelColumn(title = "创建时间") @ExcelColumn(title = "负责人")
String createTime; String realName;
public static List<DepartmentExportExcel> transforms(List<Department> departments) { @ExcelColumn(title = "手机号码")
return departments String mobile;
.stream()
.map(department -> @ExcelColumn(title = "状态")
DepartmentExportExcel String enable;
.builder()
.name(department.getName()) public static DepartmentExportExcel transform(Department department) {
.createTime(LocalDateTimeUtil.format(department.getCreateTime(), "yyyy-MM-dd HH:mm:ss")) DepartmentExportExcel departmentExportExcel = DepartmentExportExcel
.build() .builder()
) .name(department.getName())
.collect(Collectors.toList()); .enable(ObjectUtil.equals(department.getEnable(), true) ? "启用" : "禁用")
.build();
if (ObjectUtil.isNotEmpty(department.getLeader())) {
departmentExportExcel.setRealName(department.getLeader().getRealName());
departmentExportExcel.setMobile(department.getLeader().getMobile());
}
return departmentExportExcel;
} }
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.dept;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.yiring.auth.domain.dept.Department;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 部门导入
*
* @author LJ-2204
* @date 2022/4/25
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class DepartmentImportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -1287875741111587840L;
@ExcelColumn(title = "部门名称")
@NotNull
String name;
@ExcelColumn(title = "负责人")
String realName;
@ExcelColumn(title = "手机号码")
String mobile;
@ExcelColumn(title = "状态")
String enable;
public static Department transform(DepartmentImportExcel departmentImportExcel) {
return Department
.builder()
.name(departmentImportExcel.getName())
.enable(StrUtil.equals(departmentImportExcel.getEnable(), "启用"))
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.key;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.domain.key.KeyAlarmRules;
import com.yiring.auth.domain.user.User;
import java.io.Serial;
import java.io.Serializable;
import java.util.Set;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 按键报警规则导出
*
* @author LJ-2204
* @date 2022/5/7
*/
@ExcelModel
@Data
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmRulesExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -800228727313291675L;
@ExcelColumn(title = "部门名称")
String deptName;
@ExcelColumn(title = "负责人")
String userNames;
@ExcelColumn(title = "通知类型")
String types;
public static KeyAlarmRulesExportExcel transform(KeyAlarmRules keyAlarmRules) {
Set<User> users = keyAlarmRules.getUsers();
StringBuilder userNames = new StringBuilder();
for (User user : users) {
userNames.append(user.getRealName());
userNames.append("、");
}
String substring = userNames.substring(0, userNames.length() - 1);
return KeyAlarmRulesExportExcel
.builder()
.deptName(keyAlarmRules.getDepartment().getName())
.userNames(substring)
.types(keyAlarmRules.getTypes())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.location;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.vo.location.rule.LocationAlarmRuleVo;
import java.io.Serial;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 11:11
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class LocationAlarmRuleExcel implements Serializable {
@Serial
private static final long serialVersionUID = -898420880457790036L;
@ExcelColumn(title = "地图名称")
private String mapName;
@ExcelColumn(title = "电子围栏名称")
private String fenceName;
@ExcelColumn(title = "接收人", width = 20)
private String users;
@ExcelColumn(title = "通知方式", width = 18)
private String informManner;
public static LocationAlarmRuleExcel transform(LocationAlarmRuleVo locationAlarmRuleVo) {
StringBuilder users = new StringBuilder();
StringBuilder informManner = new StringBuilder();
for (int i = 0; i < locationAlarmRuleVo.getUsers().size(); i++) {
if (i != 0) {
users.append(", ");
}
users.append(locationAlarmRuleVo.getUsers().get(i).getRealName());
}
for (int i = 0; i < locationAlarmRuleVo.getInformManner().size(); i++) {
if (i != 0) {
informManner.append(", ");
}
informManner.append(locationAlarmRuleVo.getInformManner().get(i).getName());
}
return LocationAlarmRuleExcel
.builder()
.mapName(locationAlarmRuleVo.getMapName())
.fenceName(locationAlarmRuleVo.getFenceName())
.users(users.toString())
.informManner(informManner.toString())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.location.beacon;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.domain.location.LocationBeacon;
import java.io.Serial;
import java.io.Serializable;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.FieldDefaults;
/**
* 信标导出
*
* @author LJ-2204
* @date 2022/4/29
*/
@ExcelModel
@Data
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class LocationBeaconExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -8548586352563859939L;
@ExcelColumn(title = "编号")
String code;
@ExcelColumn(title = "最后更新时间")
String time;
@ExcelColumn(title = "图层")
Long areaId;
public static LocationBeaconExportExcel transform(LocationBeacon locationBeacon) {
return LocationBeaconExportExcel
.builder()
.code(locationBeacon.getCode())
.time(LocalDateTimeUtil.format(locationBeacon.getTime(), "yyyy-MM-dd HH:mm:ss"))
.areaId(locationBeacon.getAreaId())
.build();
}
}
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.location; package com.yiring.app.excel.location.tag;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn; import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
...@@ -7,8 +7,6 @@ import com.github.liaochong.myexcel.core.annotation.ExcelModel; ...@@ -7,8 +7,6 @@ import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.domain.location.LocationTag; import com.yiring.app.domain.location.LocationTag;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
...@@ -51,20 +49,15 @@ public class LocationTagExportExcel implements Serializable { ...@@ -51,20 +49,15 @@ public class LocationTagExportExcel implements Serializable {
@ExcelColumn(title = "最近更新时间") @ExcelColumn(title = "最近更新时间")
String updateTime; String updateTime;
public static List<LocationTagExportExcel> transforms(List<LocationTag> locationTags) { public static LocationTagExportExcel transform(LocationTag locationTag) {
return locationTags return LocationTagExportExcel
.stream() .builder()
.map(locationTag -> .code(locationTag.getCode())
LocationTagExportExcel .type(locationTag.getType())
.builder() .silent(locationTag.getSilent())
.code(locationTag.getCode()) .imei(locationTag.getImei())
.type(locationTag.getType()) .volt(locationTag.getVolt())
.silent(locationTag.getSilent()) .updateTime(LocalDateTimeUtil.format(locationTag.getUpdateTime(), "yyyy-MM-dd HH:mm:ss"))
.imei(locationTag.getImei()) .build();
.volt(locationTag.getVolt())
.updateTime(LocalDateTimeUtil.format(locationTag.getUpdateTime(), "yyyy-MM-dd HH:mm:ss"))
.build()
)
.collect(Collectors.toList());
} }
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.location; package com.yiring.app.excel.location.tag;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn; import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.yiring.app.domain.location.LocationTag; import com.yiring.app.domain.location.LocationTag;
import java.io.Serial; import java.io.Serial;
...@@ -25,23 +26,23 @@ public class LocationTagImportExcel implements Serializable { ...@@ -25,23 +26,23 @@ public class LocationTagImportExcel implements Serializable {
private static final long serialVersionUID = -8817732062049005201L; private static final long serialVersionUID = -8817732062049005201L;
// 编号 // 编号
@ExcelColumn(index = 0) @ExcelColumn(title = "编号")
String code; String code;
// 标签型号 // 标签型号
@ExcelColumn(index = 1) @ExcelColumn(title = "标签类型")
String type; String type;
// 设备编码 // 设备编码
@ExcelColumn(index = 2) @ExcelColumn(title = "imei")
String imei; String imei;
public LocationTag transform() { public static LocationTag transform(LocationTagImportExcel locationTagImportExcel) {
return LocationTag return LocationTag
.builder() .builder()
.code(this.code) .code(locationTagImportExcel.code)
.type(LocationTag.Type.valueOf(this.type)) .type(LocationTag.Type.valueOf(locationTagImportExcel.type))
.imei(this.imei) .imei(StrUtil.isEmpty(locationTagImportExcel.imei) ? null : locationTagImportExcel.imei)
.createTime(LocalDateTime.now()) .createTime(LocalDateTime.now())
.build(); .build();
} }
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.excel.post; package com.yiring.app.excel.post;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn; import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel; import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.auth.domain.post.Post; import com.yiring.auth.domain.post.Post;
import java.util.List;
import java.util.stream.Collectors;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
...@@ -22,7 +20,7 @@ import lombok.experimental.FieldDefaults; ...@@ -22,7 +20,7 @@ import lombok.experimental.FieldDefaults;
@Data @Data
@Builder @Builder
@FieldDefaults(level = AccessLevel.PRIVATE) @FieldDefaults(level = AccessLevel.PRIVATE)
public class PostExcel { public class PostExportExcel {
/*@ExcelColumn(title = "编号") /*@ExcelColumn(title = "编号")
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
...@@ -40,19 +38,13 @@ public class PostExcel { ...@@ -40,19 +38,13 @@ public class PostExcel {
@ExcelColumn(title = "创建时间") @ExcelColumn(title = "创建时间")
String createTime; String createTime;
public static List<PostExcel> transforms(List<Post> posts) { public static PostExportExcel transform(Post post) {
return posts return PostExportExcel
.stream() .builder()
.map(post -> .name(post.getName())
PostExcel .describe(post.getDescribe())
.builder() .enable(post.getEnable() ? "启用" : "禁用")
// .id(post.getId()) .createTime(LocalDateTimeUtil.format(post.getCreateTime(), "yyyy-MM-dd HH:mm:ss"))
.name(post.getName()) .build();
.describe(post.getDescribe())
.enable(post.getEnable() ? "启用" : "禁用")
.createTime(LocalDateTimeUtil.format(post.getCreateTime(), "yyyy-MM-dd HH:mm:ss"))
.build()
)
.collect(Collectors.toList());
} }
} }
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.user; package com.yiring.app.excel.user;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn; import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.yiring.app.vo.user.UserVo; import com.yiring.app.vo.user.UserVo;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
/** /**
* 部门信息控制器 * 用户导出
* *
* @author LJ-2204 * @author LJ-2204
* @date 2022/4/24 * @date 2022/4/24
...@@ -28,22 +25,51 @@ public class UserExportExcel implements Serializable { ...@@ -28,22 +25,51 @@ public class UserExportExcel implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 7104402721241163991L; private static final long serialVersionUID = 7104402721241163991L;
@ExcelColumn(title = "真实姓名") @ExcelColumn(title = "姓名")
String realName; String realName;
@ExcelColumn(title = "创建时间") @ExcelColumn(title = "工号")
String createTime; String uuid;
public static List<UserExportExcel> transforms(List<UserVo> userVos) { @ExcelColumn(title = "图标类型")
return userVos String type;
.stream()
.map(userVo -> // 手机号
UserExportExcel @ExcelColumn(title = "手机号码")
.builder() String mobile;
.realName(userVo.getRealName())
.createTime(LocalDateTimeUtil.format(userVo.getCreateTime(), "yyyy-MM-dd HH:mm:ss")) // 部门id
.build() @ExcelColumn(title = "部门名称")
) String deptName;
.collect(Collectors.toList());
// 职位id
@ExcelColumn(title = "职位名称")
String postName;
// 标签号
@ExcelColumn(title = "标签编号")
String code;
// 性别
@ExcelColumn(title = "性别")
Boolean gender;
// 是否为特殊人员
@ExcelColumn(title = "特殊人员")
Boolean isSpecial;
public static UserExportExcel transform(UserVo userVo) {
return UserExportExcel
.builder()
.realName(userVo.getRealName())
.uuid(userVo.getUuid())
.type(userVo.getType().text())
.mobile(userVo.getMobile())
.deptName(userVo.getDepartment())
.postName(userVo.getPost())
.code(userVo.getCode())
.gender(userVo.getGender())
.isSpecial(userVo.getIsSpecial())
.build();
} }
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.user;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.yiring.auth.domain.user.User;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 用户导入
*
* @author LJ-2204
* @date 2022/4/25
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class UserImportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 3471291755743945051L;
// 姓名
@ExcelColumn(title = "姓名")
String realName;
// 工号
@ExcelColumn(title = "工号")
String uuid;
// 图标类型
@ExcelColumn(title = "图标类型")
String type;
// 手机号
@ExcelColumn(title = "手机号码")
String mobile;
// 部门id
@ExcelColumn(title = "部门名称")
String deptName;
// 职位id
@ExcelColumn(title = "职位名称")
String postName;
// 标签号
@ExcelColumn(title = "标签编号")
String code;
// 性别
@ExcelColumn(title = "性别")
Boolean gender;
// 是否为特殊人员
@ExcelColumn(title = "特殊人员")
Boolean isSpecial;
public static User transform(UserImportExcel userImportExcel) {
return User
.builder()
.realName(userImportExcel.getRealName())
.uuid(userImportExcel.getUuid())
.type(User.Type.valueOf(userImportExcel.getType()))
.mobile(userImportExcel.getMobile())
.gender(userImportExcel.getGender())
.isSpecial(userImportExcel.getIsSpecial())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.user;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 用户批量绑卡
*
* @author LJ-2204
* @date 2022/5/9
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class UserSendCardExcel implements Serializable {
@Serial
private static final long serialVersionUID = -6094419272413042366L;
// 姓名
@ExcelColumn(title = "姓名")
String realName;
// 工号
@ExcelColumn(title = "工号")
String uuid;
// 标签号
@ExcelColumn(title = "标签编号")
String code;
}
...@@ -7,7 +7,6 @@ import java.io.Serial; ...@@ -7,7 +7,6 @@ import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import org.locationtech.jts.geom.Point;
/** /**
* @author tzl * @author tzl
...@@ -30,8 +29,11 @@ public class VideoExportExcel implements Serializable { ...@@ -30,8 +29,11 @@ public class VideoExportExcel implements Serializable {
@ExcelColumn(title = "摄像头名称", width = 10) @ExcelColumn(title = "摄像头名称", width = 10)
String videoName; String videoName;
@ExcelColumn(title = "坐标点信息(经度,纬度)", width = 10) @ExcelColumn(title = "经度")
Point point; double lon;
@ExcelColumn(title = "纬度")
double lat;
@ExcelColumn(title = "m3u8 地址", width = 10) @ExcelColumn(title = "m3u8 地址", width = 10)
String m3u8; String m3u8;
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.car; package com.yiring.app.excel.visitor;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn; import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel; import com.github.liaochong.myexcel.core.annotation.ExcelModel;
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.visitor;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description: TODO
* @date 2022/4/25 11:53
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class InvitationExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -8861639917182472169L;
@ExcelColumn(title = "邀请原因")
String reason;
@ExcelColumn(title = "邀请方式", mapping = "1:个人,2:公司")
String InvitationMethod;
@ExcelColumn(title = "邀请人数")
Integer numOfVisitor;
@ExcelColumn(title = "所属单位")
String orgId;
@ExcelColumn(title = "到访人姓名")
String visitorName;
@ExcelColumn(title = "到访人电话")
String visitorMobile;
@ExcelColumn(title = "是否特殊任务", mapping = "false:否,true:是")
String taskType;
// Long inviterId;
@ExcelColumn(title = "邀请人姓名")
String inviterName;
@ExcelColumn(title = "邀请人部门")
String inviterDept;
@ExcelColumn(title = "预约到访时间", format = "yyyy-MM-dd HH:mm:ss", width = 15)
LocalDateTime appOfVisitTime;
@ExcelColumn(title = "状态")
String status;
}
...@@ -2,11 +2,10 @@ ...@@ -2,11 +2,10 @@
package com.yiring.app.feign; package com.yiring.app.feign;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(url = "api.weixin.qq.com", name = "wxclient") @FeignClient(url = "api.weixin.qq.com", name = "wxclient")
public interface WxClient { public interface WxClient {
...@@ -22,13 +21,10 @@ public interface WxClient { ...@@ -22,13 +21,10 @@ public interface WxClient {
* @date 15:20 * @date 15:20
*/ */
@RequestMapping(value = "/sns/jscode2session", method = RequestMethod.GET) @RequestMapping(value = "/sns/jscode2session", method = RequestMethod.GET)
@ApiImplicitParams( JSONObject getOpenid(
{ @RequestParam("appid") String appid,
@ApiImplicitParam(value = "appid", required = true, name = "appid"), @RequestParam("secret") String secret,
@ApiImplicitParam(value = "secret", required = true, name = "secret"), @RequestParam("js_code") String js_code,
@ApiImplicitParam(value = "js_code", required = true, name = "js_code"), @RequestParam("grant_type") String grant_type
@ApiImplicitParam(value = "grant_type", required = true, name = "grant_type"), );
}
)
JSONObject getOpenid(String appid, String secret, String js_code, String grant_type);
} }
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.feign.zy.dept;
import cn.hutool.json.JSONObject;
import com.yiring.app.param.zy.dept.ZyDepartmentFindParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;
/**
* zy部门接口
*
* @author LJ-2204
* @date 2022/5/5
*/
@FeignClient(url = "${zy-config.proxy.api}", name = "DepartmentClient")
public interface DepartmentClient {
@PostMapping(value = "/position/system/dept", headers = { "Content-Type=application/json;charset=UTF-8" })
JSONObject deptAdd(@RequestBody String json, @RequestHeader("Authorization") String token);
@GetMapping(value = "/position/system/dept/list")
JSONObject deptList(
@SpringQueryMap ZyDepartmentFindParam zyDepartmentFindParam,
@RequestHeader("Authorization") String token
);
@DeleteMapping(value = "/position/system/dept/{id}")
JSONObject deptDelete(@PathVariable("id") Long id, @RequestHeader("Authorization") String token);
@PutMapping(value = "/position/system/dept", headers = { "Content-Type=application/json;charset=UTF-8" })
JSONObject deptModify(@RequestBody String json, @RequestHeader("Authorization") String token);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.feign.zy.location.beacon;
import cn.hutool.json.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
/**
* zy信标
*
* @author LJ-2204
* @date 2022/4/28
*/
@FeignClient(url = "${zy-config.proxy.api}", name = "LocationTagBeaconClient")
public interface LocationBeaconClient {
@PostMapping(value = "/position/config/device/page", headers = { "Content-Type=application/json;charset=UTF-8" })
JSONObject page(@RequestBody String json, @RequestHeader("Authorization") String token);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.feign.zy.location.tag;
import cn.hutool.json.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* 定位标签
*
* @author LJ-2204
* @date 2022/4/28
*/
@FeignClient(url = "${zy-config.proxy.api}", name = "locationTagClient")
public interface LocationTagClient {
@PostMapping(value = "/position/config/tag/page", headers = { "Content-Type=application/json;charset=UTF-8" })
JSONObject tagPage(@RequestBody String json, @RequestHeader("Authorization") String token);
@PostMapping(value = "/position/config/tag/save", headers = { "Content-Type=application/json;charset=UTF-8" })
JSONObject tagSave(@RequestBody String json, @RequestHeader("Authorization") String token);
@RequestMapping(value = "/position/config/tag/delete/{ids}", method = RequestMethod.POST)
JSONObject tagDelete(
@PathVariable("ids") String ids,
@RequestBody String json,
@RequestHeader("Authorization") String token
);
@RequestMapping(value = "/position/config/tag/import", method = RequestMethod.POST)
JSONObject tagImport(
@RequestParam("file") MultipartFile file,
@RequestBody String json,
@RequestHeader("Authorization") String token
);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.feign.zy.location.tag;
import cn.hutool.json.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
/**
* 标签分配
*
* @author LJ-2204
* @date 2022/5/6
*/
@FeignClient(url = "${zy-config.proxy.api}", name = "LocationTagTypeClient")
public interface LocationTagTypeClient {
@PostMapping(
value = "/position/bizTag/updateEntityType",
headers = { "Content-Type=application/json;charset=UTF-8" }
)
JSONObject updateEntityType(@RequestBody String json, @RequestHeader("Authorization") String token);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.feign.zy.user;
import cn.hutool.json.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
/**
* zy用户
*
* @author LJ-2204
* @date 2022/5/5
*/
@FeignClient(url = "${zy-config.proxy.api}", name = "UserClient")
public interface UserClient {
@PostMapping(value = "/position/staff/save", headers = { "Content-Type=application/json;charset=UTF-8" })
JSONObject save(@RequestBody String json, @RequestHeader("Authorization") String token);
@PostMapping(value = "/position/staff/list", headers = { "Content-Type=application/json;charset=UTF-8" })
JSONObject list(@RequestBody String json, @RequestHeader("Authorization") String token);
@DeleteMapping(value = "/position/staff/delete/{id}")
JSONObject delete(@PathVariable("id") String id, @RequestHeader("Authorization") String token);
@GetMapping(value = "position/staff/unbind/{ids}")
JSONObject unbind(
@PathVariable("ids") String ids,
@RequestParam("orgId") Integer orgId,
@RequestHeader("Authorization") String token
);
@GetMapping(value = "position/staff/bindTag/{id}/{code}/1")
JSONObject bindTag(
@PathVariable("id") Long id,
@PathVariable("code") String code,
@RequestParam("orgId") Integer orgId,
@RequestHeader("Authorization") String token
);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.job;
import com.alibaba.fastjson.JSONObject;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yiring.app.domain.location.LocationLog;
import com.yiring.app.domain.location.LocationLogRepository;
import com.yiring.app.rabbit.config.ZyRabbitConfig;
import com.yiring.app.util.GeoUtils;
import com.yiring.common.constant.DateFormatter;
import java.time.LocalDateTime;
import java.util.List;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import lombok.extern.slf4j.Slf4j;
import org.locationtech.jts.geom.Point;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component;
/**
* 模拟真源消息日志推送
*
* @author Jim
* @version 0.1
* 2022/5/7 15:26
*/
@SuppressWarnings("unused")
@Slf4j
@Component
public class MockZyMessageJob {
@Resource
RabbitTemplate rabbitTemplate;
@Resource
LocationLogRepository locationLogRepository;
@XxlJob("MockZyMessageHandler")
public void mockMessageHandler() {
log.info("MockZyMessageHandler: {}", LocalDateTime.now().format(DateFormatter.DATE_TIME));
log.info("[Mock] Position: {}", mockPositionMessage());
log.info("[Mock] LowPower: {}", mockLowPowerMessage());
log.info("[Mock] DeviceStatus: {}", mockDeviceStatusMessage());
log.info("[Mock] KeyWarning: {}", mockKeyWarningMessage());
}
@XxlJob("QueryMessageHandler")
public void queryMessageHandler() {
log.info("QueryZyMessageHandler: {}", LocalDateTime.now().format(DateFormatter.DATE_TIME));
try {
Specification<LocationLog> spec = (root, query, cb) -> {
Predicate predicate = cb.conjunction();
predicate.getExpressions().add(cb.lessThanOrEqualTo(root.get("id").get("time"), LocalDateTime.now()));
return predicate;
};
List<LocationLog> logs = locationLogRepository.findAll(spec);
log.info("QueryZyMessageHandler: {}", logs.size());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
public JSONObject send(JSONObject body) {
rabbitTemplate.convertAndSend(ZyRabbitConfig.MESSAGE_QUEUES_NAME, body.toJSONString());
return body;
}
private String mockTag() {
return "BTT33333331";
}
private Long mockAreaId() {
return 10019L;
}
private JSONObject mockPositionMessage() {
// 随机生成一个坐标点
Point point = GeoUtils.randomPoint(GeoUtils.defaultBounds(), 0);
// 模拟定位数据
JSONObject params = new JSONObject();
params.put("tagId", mockTag());
params.put("areaId", mockAreaId());
params.put("silent", false);
params.put("beacons", "BTI22085237,BTI22085238");
params.put("longitude", point.getCoordinate().getX());
params.put("latitude", point.getCoordinate().getY());
params.put("altitude", point.getCoordinate().getZ());
params.put("locationTime", System.currentTimeMillis());
params.put("volt", 3650);
params.put("voltUnit", "mV");
params.put("floor", 1);
JSONObject body = new JSONObject();
body.put("method", "position");
body.put("params", params);
return send(body);
}
private JSONObject mockLowPowerMessage() {
JSONObject params = new JSONObject();
params.put("tagId", mockTag());
params.put("volt", 3650);
params.put("voltUnit", "mV");
JSONObject body = new JSONObject();
body.put("method", "lowPower");
body.put("params", params);
return send(body);
}
private JSONObject mockDeviceStatusMessage() {
JSONObject params = new JSONObject();
params.put("deviceId", mockTag());
params.put("areaId", mockAreaId());
params.put("deviceType", "BTI");
params.put("volt", 3650);
params.put("field_21", "mV");
params.put("updateTime", System.currentTimeMillis());
JSONObject body = new JSONObject();
body.put("method", "deviceStatus");
body.put("params", params);
return send(body);
}
private JSONObject mockKeyWarningMessage() {
JSONObject params = new JSONObject();
params.put("tagId", mockTag());
params.put("entityId", "1522770547178475520");
params.put("areaId", mockAreaId());
params.put("raiseTime", System.currentTimeMillis());
params.put("x", 100);
params.put("y", 100);
params.put("z", 0);
params.put("floor", 1);
JSONObject body = new JSONObject();
body.put("method", "keyWarning");
body.put("params", params);
return send(body);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.alarm;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 14:28
*/
@ApiModel("AlarmConditionParam(报警类型的条件param)")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AlarmConditionParam implements Serializable {
@Serial
private static final long serialVersionUID = 7543624294916003641L;
@ApiModelProperty(value = "围栏类别", example = "1")
@Range(min = FenceTypeEnum.MIN, max = FenceTypeEnum.MAX, message = "请选择正确的围栏类别")
private Integer fenceType;
@ApiModelProperty(value = "关联参数", example = "1")
@Range(min = RelevanceParamEnum.MIN, max = RelevanceParamEnum.MAX, message = "请选择正确的关联参数")
private Integer relevanceParam;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.alarm;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.domain.alarm.AlarmType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 11:28
*/
@ApiModel("AlarmTypeAddParam(报警类型的添加param)")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlarmTypeAddParam implements Serializable {
@Serial
private static final long serialVersionUID = 6124966765550463652L;
@ApiModelProperty(value = "报警类型名称", example = "超员报警", required = true)
@NotEmpty(message = "报警类型名称不能为空")
@Length(max = 10, message = "区域名称不能超过10个字符")
private String name;
@ApiModelProperty(value = "围栏类别", example = "1", required = true)
@NotNull(message = "围栏类别不能为空")
@Range(min = FenceTypeEnum.MIN, max = FenceTypeEnum.MAX, message = "请选择正确的围栏类别")
private Integer fenceType;
@ApiModelProperty(value = "关联参数", example = "1", required = true)
@NotNull(message = "关联参数不能为空")
@Range(min = RelevanceParamEnum.MIN, max = RelevanceParamEnum.MAX, message = "请选择正确的关联参数")
private Integer relevanceParam;
@ApiModelProperty(value = "备注", example = "超员报警备注")
@Length(max = 255, message = "区域名称不能超过10个字符")
private String comment;
public AlarmType transform() {
return AlarmType
.builder()
.name(name)
.fenceType(fenceType)
.relevanceParam(relevanceParam)
.comment(comment)
.deleted(false)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.alarm;
import com.yiring.app.domain.alarm.AlarmType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 11:28
*/
@ApiModel("AlarmTypeModifyParam(报警类型修改param)")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlarmTypeModifyParam implements Serializable {
@Serial
private static final long serialVersionUID = 6124966765550463652L;
@ApiModelProperty(value = "报警类型id", example = "1", required = true)
@NotNull(message = "报警类型id不能为空")
private Long id;
@ApiModelProperty(value = "报警类型名称", example = "超员报警", required = true)
@NotEmpty(message = "报警类型名称不能为空")
@Length(max = 10, message = "区域名称不能超过10个字符")
private String name;
@ApiModelProperty(value = "围栏类别", example = "1", required = true)
@NotNull(message = "围栏类别不能为空")
private Integer fenceType;
@ApiModelProperty(value = "关联参数", example = "1", required = true)
@NotNull(message = "关联参数不能为空")
private Integer relevanceParam;
@ApiModelProperty(value = "备注", example = "超员报警备注")
@Length(max = 255, message = "区域名称不能超过10个字符")
private String comment;
public AlarmType transform() {
return AlarmType
.builder()
.id(id)
.name(name)
.fenceType(fenceType)
.relevanceParam(relevanceParam)
.comment(comment)
.deleted(false)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.analysis.history;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 10:53
*/
@ApiModel("HistoryRoute(历史轨迹的条件param)")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class HistoryRouteConditionParam implements Serializable {
@Serial
private static final long serialVersionUID = 2386493816691457426L;
@ApiModelProperty(value = "地图id", example = "1", required = true)
@NotNull(message = "请选择地图")
private Long mapId;
@ApiModelProperty(value = "用户id", example = "1", required = true)
@NotNull(message = "请选择员工")
private Long userId;
@ApiModelProperty(value = "开始时间", example = "2022-05-06 14:00:00", required = true)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@NotNull(message = "请选择开始时间")
private LocalDateTime beginTime;
@ApiModelProperty(value = "结束时间", example = "2022-05-06 14:05:00", required = true)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@NotNull(message = "请选择结束时间")
private LocalDateTime endTime;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.appUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/4/28 13:40
*/
@ApiModel("AppletUserParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class AppletUserParam implements Serializable {
@Serial
private static final long serialVersionUID = 1684195733142347657L;
@ApiModelProperty(value = "手机号", example = "17674741309", required = true)
@NotEmpty(message = "手机号不能为空")
String mobile;
@ApiModelProperty(value = "微信唯一标识", example = "17674741309", required = true)
@NotEmpty(message = "微信唯一标识不能为空")
String openid;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.appUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/4/28 13:52
*/
@ApiModel("AppletUserQueryParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class AppletUserQueryParam implements Serializable {
@Serial
private static final long serialVersionUID = 1806727740548075365L;
@ApiModelProperty(value = "小程序 appId", example = "1", required = true)
String appid;
@ApiModelProperty(value = "小程序 appSecret", example = "1", required = true)
String secret;
@ApiModelProperty(value = "登录时获取的 code", example = "1", required = true)
String js_code;
@ApiModelProperty(value = "授权类型,此处只需填写 authorization_code", example = "1", required = true)
String grant_type;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.broadcast;
import com.yiring.app.domain.broadcast.BroadcastAudio;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 播报音频
*
* @author LJ-2204
* @date 2022/5/7
*/
@ApiModel("BroadcastAudioAddParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastAudioAddParam implements Serializable {
@Serial
private static final long serialVersionUID = 7174160141071642430L;
@ApiModelProperty(value = "语音名称", example = "警告张三", required = true)
@NotEmpty(message = "语音名称不能为空")
String name;
@ApiModelProperty(value = "语音地址", example = "uri", required = true)
@NotEmpty(message = "语音地址不能为空")
String uri;
@ApiModelProperty(value = "备注", example = "请输入备注信息")
String describe;
public static BroadcastAudio transform(BroadcastAudioAddParam param) {
return BroadcastAudio.builder().name(param.getName()).uri(param.getUri()).describe(param.getDescribe()).build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.broadcast;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 播报语音
*
* @author LJ-2204
* @date 2022/5/7
*/
@ApiModel("BroadcastAudioFindParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastAudioFindParam implements Serializable {
@Serial
private static final long serialVersionUID = -7396234032011169171L;
@ApiModelProperty(value = "音频名称", example = "张三爱唱歌")
String name;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.broadcast;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 播报语音
*
* @author LJ-2204
* @date 2022/5/7
*/
@ApiModel("BroadcastAudioModifyParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastAudioModifyParam implements Serializable {
@Serial
private static final long serialVersionUID = 6319295457926858655L;
@ApiModelProperty(value = "主键", example = "1", required = true)
@NotNull(message = "主键不能为空")
Long id;
@ApiModelProperty(value = "语音名称", example = "警告张三", required = true)
@NotEmpty(message = "语音名称不能为空")
String name;
@ApiModelProperty(value = "语音地址", example = "uri", required = true)
@NotEmpty(message = "语音地址不能为空")
String uri;
@ApiModelProperty(value = "备注", example = "请输入备注信息")
String describe;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.broadcast;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 播报设备入参
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:14
*/
@ApiModel("BroadcastParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastParam implements Serializable {
@Serial
private static final long serialVersionUID = -2629601722942495674L;
@ApiModelProperty(value = "编号", example = "1", required = true)
@NotNull(message = "编号")
String broadcastNum;
@ApiModelProperty(value = "经度", example = "1.00", required = true)
@NotNull(message = "经度")
Double lon;
@ApiModelProperty(value = "纬度", example = "1.00", required = true)
@NotNull(message = "纬度")
Double lat;
@ApiModelProperty(value = "备注", example = "厂区喇叭")
@Size(max = 100, message = "备注不能超过100字")
String remark;
@ApiModelProperty(value = "播报设备地址", example = "音柱地址", required = true)
@NotEmpty(message = "播报设备地址不能为空")
String broadcastAdd;
@ApiModelProperty(value = "播报设备地址名称", example = "喇叭1", required = true)
@NotEmpty(message = "播报设备地址名称不能为空")
String broadcastName;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.broadcast;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:22
*/
@ApiModel("BroadcastQueryParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastQueryParam implements Serializable {
@Serial
private static final long serialVersionUID = -7181714985511069309L;
@ApiModelProperty(value = "编号", example = "1")
String broadcastNum;
@ApiModelProperty(value = "播报设备地址名称", example = "喇叭1")
String broadcastName;
@ApiModelProperty(value = "状态", example = "1")
String status;
@ApiModelProperty(value = "分页条数", example = "10", required = true)
Integer pageSize;
@ApiModelProperty(value = "当前页数", example = "1", required = true)
Integer pageNo;
}
...@@ -2,12 +2,10 @@ ...@@ -2,12 +2,10 @@
package com.yiring.app.param.dept; package com.yiring.app.param.dept;
import com.yiring.auth.domain.dept.Department; import com.yiring.auth.domain.dept.Department;
import com.yiring.auth.domain.user.User;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
...@@ -31,7 +29,7 @@ public class DepartmentAddParam implements Serializable { ...@@ -31,7 +29,7 @@ public class DepartmentAddParam implements Serializable {
@ApiModelProperty(value = "上级部门", example = "1", required = true) @ApiModelProperty(value = "上级部门", example = "1", required = true)
@NotNull @NotNull
Long pid; Long id;
@ApiModelProperty(value = "名称", example = "Java", required = true) @ApiModelProperty(value = "名称", example = "Java", required = true)
@NotNull @NotNull
...@@ -43,15 +41,12 @@ public class DepartmentAddParam implements Serializable { ...@@ -43,15 +41,12 @@ public class DepartmentAddParam implements Serializable {
@ApiModelProperty(value = "部门状态", example = "1") @ApiModelProperty(value = "部门状态", example = "1")
Boolean enable; Boolean enable;
public Department transform() { public static Department transform(DepartmentAddParam departmentAddParam) {
return Department return Department
.builder() .builder()
.pid(this.pid) .pid(departmentAddParam.getId())
.name(this.name) .name(departmentAddParam.getName())
.leader(User.builder().id(this.leaderId).build()) .enable(departmentAddParam.getEnable())
.enable(this.enable)
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.build(); .build();
} }
} }
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论